Cleaned up the Spotlight code considerably and added the ability to do simple searches for artist, album and title using %a, %l and %t respectively. For example searching "%awaits" will return all tracks by Tom Waits, etc...

CQTexperiment
matthewleon 2008-02-14 14:07:10 +00:00
parent d795c59c10
commit d6e7efd2c1
13 changed files with 475 additions and 406 deletions

View File

@ -109,6 +109,7 @@
56462DDA0D61D71E000AB68C /* SpotlightPlaylistView.m in Sources */ = {isa = PBXBuildFile; fileRef = 56462DD90D61D71E000AB68C /* SpotlightPlaylistView.m */; };
56462EAF0D6341F6000AB68C /* SpotlightTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 56462EAE0D6341F6000AB68C /* SpotlightTransformers.m */; };
56462EB20D634206000AB68C /* SpotlightPlaylistController.m in Sources */ = {isa = PBXBuildFile; fileRef = 56462EB10D634206000AB68C /* SpotlightPlaylistController.m */; };
56C63D910D647DF300EAE25A /* NSComparisonPredicate+CogPredicate.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C63D900D647DF300EAE25A /* NSComparisonPredicate+CogPredicate.m */; };
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 */; };
@ -602,6 +603,8 @@
56462EB00D634206000AB68C /* SpotlightPlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightPlaylistController.h; path = Spotlight/SpotlightPlaylistController.h; sourceTree = "<group>"; };
56462EB10D634206000AB68C /* SpotlightPlaylistController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightPlaylistController.m; path = Spotlight/SpotlightPlaylistController.m; sourceTree = "<group>"; };
566D32160D538550004466A5 /* APL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = APL.xcodeproj; path = Plugins/APL/APL.xcodeproj; sourceTree = "<group>"; };
56C63D8F0D647DF300EAE25A /* NSComparisonPredicate+CogPredicate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSComparisonPredicate+CogPredicate.h"; path = "Spotlight/NSComparisonPredicate+CogPredicate.h"; sourceTree = "<group>"; };
56C63D900D647DF300EAE25A /* NSComparisonPredicate+CogPredicate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSComparisonPredicate+CogPredicate.m"; path = "Spotlight/NSComparisonPredicate+CogPredicate.m"; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8E07AAEE0AAC910500A4B32F /* SS_PreferencePaneProtocol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SS_PreferencePaneProtocol.h; path = Preferences/SS_PreferencePaneProtocol.h; sourceTree = "<group>"; };
8E07AAEF0AAC910500A4B32F /* SS_PrefsController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SS_PrefsController.h; path = Preferences/SS_PrefsController.h; sourceTree = "<group>"; };
@ -1099,6 +1102,8 @@
5604D4F50D60726E004F5C5D /* SpotlightPlaylistEntry.m */,
56462DD80D61D71E000AB68C /* SpotlightPlaylistView.h */,
56462DD90D61D71E000AB68C /* SpotlightPlaylistView.m */,
56C63D8F0D647DF300EAE25A /* NSComparisonPredicate+CogPredicate.h */,
56C63D900D647DF300EAE25A /* NSComparisonPredicate+CogPredicate.m */,
);
name = Spotlight;
sourceTree = "<group>";
@ -1638,6 +1643,7 @@
56462DDA0D61D71E000AB68C /* SpotlightPlaylistView.m in Sources */,
56462EAF0D6341F6000AB68C /* SpotlightTransformers.m in Sources */,
56462EB20D634206000AB68C /* SpotlightPlaylistController.m in Sources */,
56C63D910D647DF300EAE25A /* NSComparisonPredicate+CogPredicate.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -0,0 +1,16 @@
//
// NSComparisonPredicate+CogPredicate.h
// Cog
//
// Created by Matthew Grinshpun on 14/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface NSComparisonPredicate (CogPredicate)
+ (NSPredicate *)predicateForMdKey:(NSString *)key withString:(NSString *)aString;
@end

View File

@ -0,0 +1,28 @@
//
// NSComparisonPredicate+CogPredicate.m
// Cog
//
// Created by Matthew Grinshpun on 14/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import "NSComparisonPredicate+CogPredicate.h"
// Ignore case and diacritics
static const unsigned OPTIONS = (NSCaseInsensitivePredicateOption|
NSDiacriticInsensitivePredicateOption);
@implementation NSComparisonPredicate (CogPredicate)
+ (NSPredicate *)predicateForMdKey:(NSString *)key withString:(NSString *)aString
{
NSString * likeString = [NSString stringWithFormat:@"*%@*", aString];
return [NSComparisonPredicate
predicateWithLeftExpression:[NSExpression expressionForKeyPath:key]
rightExpression:[NSExpression expressionForConstantValue:likeString]
modifier:NSDirectPredicateModifier
type:NSLikePredicateOperatorType
options:OPTIONS];
}
@end

View File

@ -52,7 +52,7 @@
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Add to Playlist</string>
<object class="NSFont" key="NSSupport" id="723568032">
<string key="NSName" id="824195771">LucidaGrande</string>
<string key="NSName" id="936823292">LucidaGrande</string>
<double key="NSSize">1.300000e+01</double>
<int key="NSfFlags">1044</int>
</object>
@ -109,7 +109,7 @@
<int key="NSCellFlags2">0</int>
<string key="NSContents" id="490720579">Title</string>
<object class="NSFont" key="NSSupport" id="26">
<reference key="NSName" ref="824195771"/>
<reference key="NSName" ref="936823292"/>
<double key="NSSize">1.100000e+01</double>
<int key="NSfFlags">3100</int>
</object>
@ -119,7 +119,7 @@
</object>
<object class="NSColor" key="NSTextColor" id="24919857">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName" id="1043699508">System</string>
<string key="NSCatalogName" id="169189318">System</string>
<string key="NSColorName">headerTextColor</string>
<object class="NSColor" key="NSColor" id="807894922">
<int key="NSColorSpace">3</int>
@ -130,12 +130,12 @@
<object class="NSTextFieldCell" key="NSDataCell" id="756234421">
<int key="NSCellFlags">337772096</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents" id="687071126">Text Cell</string>
<string key="NSContents" id="79865742">Text Cell</string>
<reference key="NSSupport" ref="723568032"/>
<reference key="NSControlView" ref="1001643430"/>
<object class="NSColor" key="NSBackgroundColor" id="570822745">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="1043699508"/>
<reference key="NSCatalogName" ref="169189318"/>
<string key="NSColorName">controlBackgroundColor</string>
<object class="NSColor" key="NSColor" id="613247351">
<int key="NSColorSpace">3</int>
@ -144,7 +144,7 @@
</object>
<object class="NSColor" key="NSTextColor" id="472724546">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="1043699508"/>
<reference key="NSCatalogName" ref="169189318"/>
<string key="NSColorName">controlTextColor</string>
<reference key="NSColor" ref="807894922"/>
</object>
@ -165,7 +165,7 @@
<reference key="NSSupport" ref="26"/>
<object class="NSColor" key="NSBackgroundColor" id="142072741">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="1043699508"/>
<reference key="NSCatalogName" ref="169189318"/>
<string key="NSColorName">headerColor</string>
<object class="NSColor" key="NSColor" id="71117423">
<int key="NSColorSpace">3</int>
@ -177,7 +177,7 @@
<object class="NSTextFieldCell" key="NSDataCell" id="664713172">
<int key="NSCellFlags">337772096</int>
<int key="NSCellFlags2">2048</int>
<reference key="NSContents" ref="687071126"/>
<reference key="NSContents" ref="79865742"/>
<reference key="NSSupport" ref="723568032"/>
<reference key="NSControlView" ref="1001643430"/>
<reference key="NSBackgroundColor" ref="570822745"/>
@ -203,7 +203,7 @@
<object class="NSTextFieldCell" key="NSDataCell" id="594990735">
<int key="NSCellFlags">337772096</int>
<int key="NSCellFlags2">2048</int>
<reference key="NSContents" ref="687071126"/>
<reference key="NSContents" ref="79865742"/>
<reference key="NSSupport" ref="723568032"/>
<reference key="NSControlView" ref="1001643430"/>
<reference key="NSBackgroundColor" ref="570822745"/>
@ -310,7 +310,7 @@
<object class="NSTextFieldCell" key="NSDataCell" id="951203136">
<int key="NSCellFlags">337772096</int>
<int key="NSCellFlags2">67110912</int>
<reference key="NSContents" ref="687071126"/>
<reference key="NSContents" ref="79865742"/>
<reference key="NSSupport" ref="723568032"/>
<reference key="NSControlView" ref="1001643430"/>
<reference key="NSBackgroundColor" ref="570822745"/>
@ -326,7 +326,7 @@
<reference key="NSBackgroundColor" ref="570822745"/>
<object class="NSColor" key="NSGridColor">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="1043699508"/>
<reference key="NSCatalogName" ref="169189318"/>
<string key="NSColorName">gridColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
@ -417,7 +417,7 @@
<int key="NSTextBezelStyle">1</int>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="1043699508"/>
<reference key="NSCatalogName" ref="169189318"/>
<string key="NSColorName">textBackgroundColor</string>
<reference key="NSColor" ref="71117423"/>
</object>
@ -482,7 +482,7 @@
<reference key="NSControlView" ref="595225768"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="1043699508"/>
<reference key="NSCatalogName" ref="169189318"/>
<string key="NSColorName">controlColor</string>
<reference key="NSColor" ref="613247351"/>
</object>
@ -767,7 +767,7 @@
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label" id="47137979">spotlightWindowController</string>
<string key="label">spotlightWindowController</string>
<reference key="source" ref="498175063"/>
<reference key="destination" ref="1001"/>
</object>
@ -775,7 +775,7 @@
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label" id="152700087">playlistController</string>
<string key="label">playlistController</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="498175063"/>
</object>
@ -783,13 +783,13 @@
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label" id="887732185">contentArray: query.results</string>
<string key="label" id="789844923">contentArray: query.results</string>
<reference key="source" ref="498175063"/>
<reference key="destination" ref="1001"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="498175063"/>
<reference key="NSDestination" ref="1001"/>
<reference key="NSLabel" ref="887732185"/>
<reference key="NSLabel" ref="789844923"/>
<string key="NSBinding">contentArray</string>
<string key="NSKeyPath">query.results</string>
<int key="NSNibBindingConnectorVersion">2</int>
@ -797,6 +797,14 @@
</object>
<int key="connectionID">162</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label" id="308878383">addToPlaylist:</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="281142208"/>
</object>
<int key="connectionID">163</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@ -1201,7 +1209,7 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">162</int>
<int key="maxID">163</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -1228,7 +1236,7 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey" id="261590112">IBProjectSource</string>
<string key="majorKey" id="1023292355">IBProjectSource</string>
<string key="minorKey">ThirdParty/UKKQueue/UKFileWatcher.h</string>
</object>
</object>
@ -1254,7 +1262,7 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">ThirdParty/UKKQueue/UKMainThreadProxy.h</string>
</object>
</object>
@ -1280,7 +1288,7 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h</string>
</object>
</object>
@ -1306,7 +1314,7 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">ThirdParty/NDHotKeys/NDHotKeyEvent.h</string>
</object>
</object>
@ -1332,7 +1340,7 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">ThirdParty/AppleRemote/AppleRemote.h</string>
</object>
</object>
@ -1358,58 +1366,10 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">ThirdParty/UKKQueue/UKKQueue.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SpotlightPlaylistController</string>
<string key="superclassName">PlaylistController</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<reference key="NS.key.0" ref="47137979"/>
<string key="NS.object.0">SpotlightWindowController</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<string key="minorKey">Spotlight/SpotlightPlaylistController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SpotlightWindowController</string>
<string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">addToPlaylist:</string>
<string key="NS.object.0" id="695696504">id</string>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>pathControl</string>
<reference ref="152700087"/>
<string>playlistLoader</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSPathControl</string>
<string>NSArrayController</string>
<string>PlaylistLoader</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<string key="minorKey">Spotlight/SpotlightWindowController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">DNDArrayController</string>
<string key="superclassName">NSArrayController</string>
@ -1427,7 +1387,7 @@
<string key="NS.object.0">NSTableView</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Playlist/DNDArrayController.h</string>
</object>
</object>
@ -1445,10 +1405,10 @@
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<string id="830980271">id</string>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@ -1465,36 +1425,10 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Playlist/PlaylistView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SpotlightPlaylistView</string>
<string key="superclassName">PlaylistView</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<string key="minorKey">Spotlight/SpotlightPlaylistView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">TrackingSlider</string>
<string key="superclassName">NSSlider</string>
@ -1517,10 +1451,63 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Utils/TrackingSlider.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SpotlightWindowController</string>
<string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions">
<reference key="NS.key.0" ref="308878383"/>
<reference key="NS.object.0" ref="830980271"/>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>pathControl</string>
<string>playlistController</string>
<string>playlistLoader</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSPathControl</string>
<string>NSArrayController</string>
<string>PlaylistLoader</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Spotlight/SpotlightWindowController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SpotlightPlaylistView</string>
<string key="superclassName">PlaylistView</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Spotlight/SpotlightPlaylistView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PlaylistLoader</string>
<reference key="superclassName" ref="381641511"/>
@ -1538,7 +1525,7 @@
<string key="NS.object.0">PlaylistController</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Playlist/PlaylistLoader.h</string>
</object>
</object>
@ -1564,7 +1551,7 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Playlist/EntriesController.h</string>
</object>
</object>
@ -1583,11 +1570,11 @@
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@ -1604,10 +1591,31 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Playlist/PlaylistController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SpotlightPlaylistController</string>
<string key="superclassName">PlaylistController</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">spotlightWindowController</string>
<string key="NS.object.0">SpotlightWindowController</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Spotlight/SpotlightPlaylistController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PlaybackController</string>
<reference key="superclassName" ref="381641511"/>
@ -1634,22 +1642,22 @@
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="695696504"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
<reference ref="830980271"/>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@ -1676,7 +1684,7 @@
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<reference key="majorKey" ref="261590112"/>
<reference key="majorKey" ref="1023292355"/>
<string key="minorKey">Application/PlaybackController.h</string>
</object>
</object>
@ -1687,247 +1695,249 @@
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<object class="NSMutableData" key="IBDocument.RunnableNib">
<bytes key="NS.bytes">YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA
AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBQAALAAwAMQA1ADYAPAA9
AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBRAALAAwAMQA1ADYAPAA9
AEIAWgBbAFwAXQBeAAsAbAB0AIAAgQCZAJoAogCjAKYApwCrALEAyQDRAN8A4wEJAQoBCwEMARMBHgEf
ASIBKQEqAS0BNwFKAUsBUwFUAVkBXgFhAWkBagFrAW4BcgF7AXwBgQGCAYUBigGLAY0BkAGZAZoBoAGh
AaYBpwGqAbEBugG7AcEBwgHJAdQB1QHcAd0BewHlAe8B8AH2AfcB/gIHAggCDgIPAhYCHwIgAiYCJwIu
AjICNwI4AjsCPAI/AkACQwJPAlACUQJUAl0CXgEeAmICYwJmAm8CcAKCAocCiAKTApQClQKeAp8CowKs
Aq0CrgD8Aq8CswK0ArcCuwLEAsUCzgLPAtQC1QLXAuEC5gLnAugC7ALtAvgC+wL+AwEACwMCAwQDBQMG
AwkDHQMlAzsDPAM9A0gDSQNLA00DTgNSA1cDWANdA14DYwNkA2kDagNvA3ADdQN2A4ADgQOCA4MDhgON
A44DjwOQA5kDmgObA6EDogOkA6wDrQOuA7QDvAO9A74DxAPMA80DzgPUA9wD3QPeA+QD7APtA+4D9AP8
A/0D/gQEBAwEDQQOBBQEFQQWBDgEOwQ8BD4EYASDBKYEpwSoBKkEqgSrBKwErQSuBK8EsASxBLIEswS0
BLUEtgS3BLgEuQS6BLsEvAS9BL4EvwTABMEEwgTDBMQExQTGBMsE0AUEBTgFOQU6BTsFPAU9BT4BZgU/
BUAFQQVCBUMFRABXBUUFRgVHBUgFSQVKBUsAkAVMBU0FTgVPBVAFUQVSBVMAVgVUBVUFVgVXBVgFWQVa
BVsFXAVdBV4FXwVgBWEFYgVjBWQFZwVqBW1VJG51bGzfEBIADQAOAA8AEAARABIAEwAUABUAFgAXABgA
GQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADBWTlNSb290ViRjbGFz
c11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5T2lkc1ZhbHVl
c11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xhc3Nlc0tleXNaTlNPaWRz
S2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9yc11OU0ZvbnRNYW5hZ2Vy
XxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNjZXNzaWJpbGl0eU9pZHNL
ZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEBP4DhgQEJgQE+gJ2A5oAFgQEIgQEKgOeBATyAAIAG
gOWBAT0QpIEBC9IADgAyADMANFtOU0NsYXNzTmFtZYAEgANfEBlTcG90bGlnaHRXaW5kb3dDb250cm9s
bGVy0gA3ADgAOQA6WCRjbGFzc2VzWiRjbGFzc25hbWWiADoAO15OU0N1c3RvbU9iamVjdFhOU09iamVj
dF8QEElCQ29jb2FGcmFtZXdvcmvSAA4APgA/AEBaTlMub2JqZWN0c4CRoQBBgAfcAEMADgBEAEUARgBH
AEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWAArXE5TV2luZG93Vmlld1xOU1NjcmVlblJl
Y3RdTlNXaW5kb3dUaXRsZVlOU1dURmxhZ3NdTlNXaW5kb3dDbGFzc18QFk5TV2luZG93Q29udGVudE1p
blNpemVcTlNXaW5kb3dSZWN0XxAPTlNXaW5kb3dCYWNraW5nXxARTlNXaW5kb3dTdHlsZU1hc2tZTlNN
aW5TaXplW05TVmlld0NsYXNzgAyAnICagAkSIAAAAIAKgAuACBACEB+Am4AAXxAYe3sxOTYsIDE5Mn0s
IHs0ODAsIDMyMH19XxATT3BlbiBmcm9tIFNwb3RsaWdodFdOU1BhbmVsWns0MDAsIDI2MH3XAF8ADgBg
AGEAYgBjAGQAZQBmAGcAaABpAGUAa18QD05TTmV4dFJlc3BvbmRlclpOU1N1YnZpZXdzWE5TdkZsYWdz
W05TRnJhbWVTaXplWE5TV2luZG93W05TU3VwZXJ2aWV3gA2AmYAOEQEAgJeADYCY0gAOAD4AbQBugGCl
AG8AcABxAHIAc4APgBmAcoCGgI3YAF8ADgB1AHYAYQB3AGMAZABOAHkAegB7AHwAfQBlAE5XTlNGcmFt
ZVZOU0NlbGxZTlNFbmFibGVkgAyAGIAQgBERAQkJgA2ADF8QF3t7MzM1LCAyNzV9LCB7MTMxLCAzMn19
3ACCAA4AgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAjwCTAJQAbwCWAJcAmFtOU0NlbGxGbGFn
c18QE05TQWx0ZXJuYXRlQ29udGVudHNfEBJOU1BlcmlvZGljSW50ZXJ2YWxeTlNCdXR0b25GbGFnczJf
EA9OU0tleUVxdWl2YWxlbnRaTlNDb250ZW50c1lOU1N1cHBvcnRdTlNDb250cm9sVmlld18QD05TUGVy
aW9kaWNEZWxheVxOU0NlbGxGbGFnczJdTlNCdXR0b25GbGFncxIEAf4AgBeAFhAZEIGAFoASgBOADxDI
EggAAAAT/////4aCQP9fEA9BZGQgdG8gUGxheWxpc3TUAA4AmwCcAJ0AngCfAKAAoVZOU1NpemVWTlNO
YW1lWE5TZkZsYWdzgBUjQCoAAAAAAACAFBEEFFxMdWNpZGFHcmFuZGXSADcAOACkAKWiAKUAO1ZOU0Zv
bnRQ0gA3ADgAqACppACpAKoAdgA7XE5TQnV0dG9uQ2VsbFxOU0FjdGlvbkNlbGzSADcAOACsAK2lAK0A
rgCvALAAO1hOU0J1dHRvbllOU0NvbnRyb2xWTlNWaWV3W05TUmVzcG9uZGVy3xAPAF8AsgAOAHUAswC0
ALUAYAC2AGEAYwBkALcAuAC5AE4AuwC8AL0AvgC/AMAAwQDCAMMAZQBOAMYAxwDHW05TSFNjcm9sbGVy
WE5Tc0ZsYWdzXE5TQ29ybmVyVmlld18QEE5TSGVhZGVyQ2xpcFZpZXdcTlNTY3JvbGxBbXRzW05TVlNj
cm9sbGVyXU5TTmV4dEtleVZpZXddTlNDb250ZW50Vmlld4AMgGyAcYBwEQIwgCWAIoAaTxAQAAAAAAAA
AABBmAAAQZgAABEBEoANgAyAaIAbgBvSAA4APgBtAMuAYKUAxwDGALsAwAC/gBuAaIBsgCKAJdsAXwAO
AHUA0gBgAGEA0wBjANQAZAC4AHAA1gDXAFYA2ADZANoAZQDcAHAA2llOU2N2RmxhZ3NZTlNEb2NWaWV3
WU5TQkdDb2xvcoAZgGeAZoAcEQkAgB2ADYA3gBmAHdIADgA+AG0A4YBgoQDagB3fEBcAXwDkAA4A5QDm
AOcA6ADpALQA6gDrAOwAYQBiAHcA7QBjADIA7gDvAGQA8ADxAMcA8wD0APUA9gD3ANwAfQC/APsA/AD9
AP4A/wB9AQEAZQEDAQQBBQDHAQcBCF8QH05TRHJhZ2dpbmdTb3VyY2VNYXNrRm9yTm9uTG9jYWxZTlNU
dkZsYWdzXxATTlNPcmlnaW5hbENsYXNzTmFtZVxOU0hlYWRlclZpZXdfEBFOU0JhY2tncm91bmRDb2xv
cl8QEk5TQWxsb3dzVHlwZVNlbGVjdF8QF05TSW50ZXJjZWxsU3BhY2luZ1dpZHRoXxAZTlNDb2x1bW5B
dXRvcmVzaXppbmdTdHlsZV8QGE5TSW50ZXJjZWxsU3BhY2luZ0hlaWdodF5OU0F1dG9zYXZlTmFtZVtO
U0dyaWRDb2xvcl8QHE5TRHJhZ2dpbmdTb3VyY2VNYXNrRm9yTG9jYWxeTlNUYWJsZUNvbHVtbnNbTlNS
b3dIZWlnaHSAGxAAgGUT/////9vAgACAH4AhgDcJgCUjQAgAAAAAAAAQASNAAAAAAAAAABEREoAgCYBk
gA2AHoBhEA+AG4AoI0AxAAAAAAAAXxAVU3BvdGxpZ2h0UGxheWxpc3RWaWV3W05TVGFibGVWaWV3Wns0
NDAsIDIxMX3XAF8ADgBhAGIAYwBkAQoAwAEOAGgBDwBlAMAA2oAigCSAI4ANgCKAHdsAXwAOANIAYABh
AGIA0wBjANQAZAC4AHAA1gEWARcA2QEYAPcAZQDcAHAA94AZgGcQBIBugG+AIYANgDeAGYAhWXs0NDAs
IDE3fdIANwA4ASABIaQBIQCvALAAO18QEU5TVGFibGVIZWFkZXJWaWV31gBfAA4AdQBhAGMAZABwASQB
JQEmAGUAcIAZgCeAJhP/////gAABAIANgBlfEBR7ey0yNiwgMH0sIHsxNiwgMTd9fdIANwA4ASsBLKQB
LACvALAAO11fTlNDb3JuZXJWaWV30gAOAD4AbQEvgGCnATABMQEyATMBNAE1ATaAKYA+gEaAS4BRgFaA
W9oBOAAOATkBOgE7ATwBPQE+AT8BCgB9AUEBQgFDAUQBRQFGAUcBSADaXk5TSXNSZXNpemVhYmxlXE5T
SGVhZGVyQ2VsbFxOU0lkZW50aWZpZXJXTlNXaWR0aFpOU0RhdGFDZWxsXk5TUmVzaXppbmdNYXNrWk5T
TWluV2lkdGhaTlNNYXhXaWR0aAmAPYArgCojQGAAAAAAAACANRADI0BEgAAAAAAAI0CPQAAAAAAAgB1V
dGl0bGXXAIIADgDoAIcAiACLAUwBTQFOAU8BUAFRAPMBUltOU1RleHRDb2xvchIEgf4AgDSALoAsgC2A
MFVUaXRsZdQADgCbAJwAnQCeAVYAoAFYgBUjQCYAAAAAAACAFBEMHNMADgFaAVsBXAFGAV1cTlNDb2xv
clNwYWNlV05TV2hpdGWAL0swLjMzMzMzMjk5ANIANwA4AV8BYKIBYAA7V05TQ29sb3LVAA4BYAFaAWIB
YwFcAWUBZgFnAWhbTlNDb2xvck5hbWVdTlNDYXRhbG9nTmFtZYAvgDMQBoAygDFWU3lzdGVtXxAPaGVh
ZGVyVGV4dENvbG9y0wAOAVoBWwFcAUYBbYAvQjAA0gA3ADgBbwFwpQFwAXEAqgB2ADtfEBFOU1RhYmxl
SGVhZGVyQ2VsbF8QD05TVGV4dEZpZWxkQ2VsbNgAggAOAOgAhwCIAIkAiwFMAXMBdADcAXYAlADaAXkB
ehIUIf5AgDyAN4A2gBOAHREIAIA6WVRleHQgQ2VsbNUADgFgAVoBYgFjAVwBfgFmAX8BaIAvgDmAOIAx
XxAWY29udHJvbEJhY2tncm91bmRDb2xvctMADgFaAVsBXAFGAYSAL0swLjY2NjY2NjY5ANUADgFgAVoB
YgFjAVwBZQFmAYgBaIAvgDOAO4AxXxAQY29udHJvbFRleHRDb2xvctIANwA4AYwBcaQBcQCqAHYAO9IA
NwA4AY4Bj6IBjwA7XU5TVGFibGVDb2x1bW7aATgADgE5AToBOwE8AT0BPgE/AQoAfQFBAZMBlAGVAZYB
RgGXAUgA2gmAPYBAgD8jQF7AAAAAAACARSNAQgAAAAAAAIAdVmFydGlzdNcAggAOAOgAhwCIAIsBTACN
AU4BnAGdAVEA8wFSgDSAQoBBgC2AMFZBcnRpc3TVAA4BYAFaAWIBYwFcAaMBZgGkAWiAL4BEgEOAMVto
ZWFkZXJDb2xvctMADgFaAVsBXAFGAamAL0IxANgAggAOAOgAhwCIAIkAiwFMAXMBdADcAXYAlADaAXkB
eoA8gDeANoATgB2AOtoBOAAOATkBOgE7ATwBPQE+AT8BCgB9AUEBtAG1AbYBtwFGAbgBSADaCYA9gEiA
RyNAX0AAAAAAAIBKI0BDgAAAAAAAgB1VYWxidW3XAIIADgDoAIcAiACLAUwAjQFOAZwBvgFRAPMBUoA0
gEKASYAtgDBVQWxidW3YAIIADgDoAIcAiACJAIsBTAFzAXQA3AF2AJQA2gF5AXqAPIA3gDaAE4AdgDrb
ATgBygE5AToADgE7ATwBPQE+AT8BCgB9AH0BzQHOAUEB0AHRAUYB0gFIANpYTlNIaWRkZW4JCYBNgEyA
PSNASQAAAAAAAIBPI0BET2AgAAAAgB1WbGVuZ3Ro1wCCAA4A6ACHAIgAiwFMAI0BTgGcAdgBUQHaAVKA
NIBCgE6ALRIEAAAAgDBWTGVuZ3Ro2ACCAA4A6ACHAIgAiQCLAUwBcwF0ANwB4ACUANoB4wF6gDyAN4BQ
gBOAHRIEAAgAgDrbATgBygE5AToADgE7ATwBPQE+AT8BCgB9AH0B6AHpAUEB6wHsAUYB7QFIANoJCYBT
gFKAPSNAR4AAAAAAAIBVI0AkAAAAAAAAgB1UeWVhctcAggAOAOgAhwCIAIsBTACNAU4BnAHzAVEB2gFS
gDSAQoBUgC2AMFRZZWFy2ACCAA4A6ACHAIgAiQCLAUwBcwF0ANwB4ACUANoB4wF6gDyAN4BQgBOAHYA6
2wE4AcoBOQE6AA4BOwE8AT0BPgE/AQoAfQB9AgECAgFBAgQCBQFGAe0BSADaCQmAWIBXgD0jQEcAAAAA
AACAWoAdVWdlbnJl1wCCAA4A6ACHAIgAiwFMAI0BTgGcAgsBUQDzAVKANIBCgFmALYAwVUdlbnJl2ACC
AA4A6ACHAIgAiQCLAUwBcwF0ANwB4ACUANoBeQF6gDyAN4BQgBOAHYA62gE4AA4BOQE6ATsBPAE9AT4B
PwEKAH0BQQIZAhoCGwIcAUYCHQIbANoJgD2AXYBcI0BKAAAAAAAAgF8jQCAAAAAAAACAHVV0cmFja9cA
ggAOAOgAhwCIAIsBTACNAU4BnAIjAVEB2gFSgDSAQoBegC2AMFVUcmFja9gAggAOAOgAhwCIAIkAiwFM
AXMBdADcAXYAlADaAeMBeoA8gDeANoATgB2AOtIANwA4Ai8CMKMCMAIxADteTlNNdXRhYmxlQXJyYXlX
TlNBcnJhedUADgFgAVoBYgFjAVwCNAFmAjUBaIAvgGOAYoAxWWdyaWRDb2xvctMADgFaAVsBXAFGAjqA
L0QwLjUAXxAUQ29nU3BvdGxpZ2h0UGxheWxpc3TSADcAOAI9Aj6iAj4AO15OU0NsYXNzU3dhcHBlcl8Q
FXt7MCwgMTd9LCB7NDQwLCAyMTF9fdIANwA4AkECQqQCQgCvALAAO1pOU0NsaXBWaWV32QBfAkQADgB1
AGEAYwJFAGQCRgBwAHACSQJKASYAZQJMAHACTlhOU1RhcmdldFhOU0FjdGlvbllOU1BlcmNlbnSAGYAZ
gGuAaYANgGqAGSM/6jeEoAAAAF8QFHt7ODUsIDE3fSwgezE1LCA2OH19XF9kb1Njcm9sbGVyOtIANwA4
AlICU6UCUwCuAK8AsAA7Wk5TU2Nyb2xsZXLaAF8CRAAOAHUAswBhAGMCRQBkAkYAcABwAkkCWAD8ASYA
ZQJMAHACXIAZgBmAa4BtgA2AaoAZIz/tpGEAAAAAXxAVe3swLCAyMTN9LCB7NDQwLCAxNX190gAOAD4A
bQJggGChAPeAIV8QFnt7MjAsIDQ0fSwgezQ0MCwgMjI4fX3SADcAOAJkAmWkAmUArwCwADtcTlNTY3Jv
bGxWaWV32ABfAA4AdQB2AGEAdwBjAGQATgJoAmkCagJrAH0AZQBOgAyAhYBzgHQRAQoJgA2ADF8QFnt7
MjAsIDI4Mn0sIHszMTMsIDIyfX3dAIIADgJxAOgAhwCIAIkAiwJyAnMCdAJ1AUwCdgJ3AngCeQCPAJQA
cQJ9APwAfQJ/AoABel8QEk5TQ2FuY2VsQnV0dG9uQ2VsbF8QEE5TVGV4dEJlemVsU3R5bGVfEBFOU0Ry
YXdzQmFja2dyb3VuZF8QEk5TU2VhcmNoQnV0dG9uQ2VsbF8QEE5TTWF4aW11bVJlY2VudHMSFHH+QICE
gHqAdYAWgBOAchIQAAQACYB3EP+AOtUADgFgAVoBYgFjAVwBowFmAoUBaIAvgESAdoAxXxATdGV4dEJh
Y2tncm91bmRDb2xvctwCRACCAA4AhACFAIYAhwCJAIoAiwJFAIwCagKKAI4CjADzAI8CjgBxApAA8wKR
ApKAdBIAAf4AgBcQS4AWgHiAchEBkIB5EghEQP9Wc2VhcmNoXxATX3NlYXJjaEZpZWxkU2VhcmNoOt0C
RACCAA4AhACFAIYClgCHAIkAigCLAkUAjAJqAooAjgKMAPMAjwKaApsAcQKQAPMCnQKSXxAjTlNBY2Nl
c3NpYmlsaXR5T3ZlcnJpZGRlbkF0dHJpYnV0ZXOAdIAXgBaAfIB7gHKAg1VjbGVhctIADgA+AG0CoYBg
oQKigH3TAA4CpAA+AqUCpgKpV05TLmtleXOAgqICpwKogH6Af6ICqgKrgICAgV1BWERlc2NyaXB0aW9u
XxApTlNBY2Nlc3NpYmlsaXR5RW5jb2RlZEF0dHJpYnV0ZXNWYWx1ZVR5cGVWY2FuY2Vs0gA3ADgCsAKx
owKxArIAO18QE05TTXV0YWJsZURpY3Rpb25hcnlcTlNEaWN0aW9uYXJ5XxATX3NlYXJjaEZpZWxkQ2Fu
Y2VsOtIANwA4ArUCtqUCtgFxAKoAdgA7XxARTlNTZWFyY2hGaWVsZENlbGzSADcAOAK4ArmmArkCugCu
AK8AsAA7XU5TU2VhcmNoRmllbGRbTlNUZXh0RmllbGTYAF8ADgB1AHYAYQB3AGMAZABOAr0CvgK/AsAA
fQBlAE6ADICMgIeAiBEBIQmADYAMXxAUe3s4OCwgMTR9LCB7OTYsIDE3fX3YAIIADgDoAIcAiACJAIsB
TALGAXQCyALJAJQAcgLMAXoSBAH+QIA8gIqAiYATgIYSEEAEAIA6XFNlYXJjaCBQYXRoOtUADgFgAVoB
YgFjAVwBfgFmAtIBaIAvgDmAi4AxXGNvbnRyb2xDb2xvctIANwA4AtYCuqUCugCuAK8AsAA72QBfAA4A
dQB2AtgAYQB3AGMAZABOAtoC2wLcAt0CwAB9AGUATltOU0RyYWdUeXBlc4AMgJaAkoCTgI4JgA2ADNIA
DgA+AD8C44CRogLkAuWAj4CQXxAZQXBwbGUgVVJMIHBhc3RlYm9hcmQgdHlwZV8QFU5TRmlsZW5hbWVz
UGJvYXJkVHlwZdIANwA4AukC6qMC6gLrADtcTlNNdXRhYmxlU2V0VU5TU2V0XxAWe3sxODksIDEwfSwg
ezI3MSwgMjZ9fdgC7gCCAA4AiACJAIsC7wLwAFYC8QLyAJQAcwL1AvYAc1tOU1BhdGhTdHlsZV8QFE5T
UGF0aENvbXBvbmVudENlbGxzWk5TRGVsZWdhdGUSFCH+AYCVgBOAjRGAAICUgI3SAA4APgBtAvqAYKDS
ADcAOAL8Av2kAv0AqgB2ADtaTlNQYXRoQ2VsbNIANwA4Av8DAKUDAACuAK8AsAA7XU5TUGF0aENvbnRy
b2xaezQ4MCwgMzIwfdIANwA4AwMAr6MArwCwADtfEBV7ezAsIDB9LCB7MTI4MCwgNzc4fX1aezQwMCwg
Mjc2fdIANwA4AwcDCKIDCAA7XxAQTlNXaW5kb3dUZW1wbGF0ZdIADgA+AG0DC4BgrxARAwwDDQMOAw8D
EAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHICegKiAqoCsgK6AsICygLSAuYC9gMOAx4DLgM+A04DXgNvU
AA4DHgMfAyADIQMiANoDJF1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyAp4CfgB2AptwDJgAO
AycA5gMoAykDKgMrAywAMgMtAy4AfQD0AH0DMgB9AzQDNQM2AH0DOAB9AH1fEBpOU0ZpbHRlclJlc3Ry
aWN0c0luc2VydGlvbl8QFE5TUHJlc2VydmVzU2VsZWN0aW9uWk5TRWRpdGFibGVfEA9fTlNNYW5hZ2Vk
UHJveHlfEBFOU09iamVjdENsYXNzTmFtZV5OU0RlY2xhcmVkS2V5c18QIk5TQ2xlYXJzRmlsdGVyUHJl
ZGljYXRlT25JbnNlcnRpb25fEBhOU1NlbGVjdHNJbnNlcnRlZE9iamVjdHNfEBZOU0F2b2lkc0VtcHR5
U2VsZWN0aW9uCYBlCYChCYCkgKOAogmAoAkJXxAbU3BvdGxpZ2h0UGxheWxpc3RDb250cm9sbGVyXxAR
TlNBcnJheUNvbnRyb2xsZXLSAA4APgBtAz+AYKgBUAFDAekBlAG1AgIBzgIagCyAKoBSgD+AR4BXgEyA
XF1QbGF5bGlzdEVudHJ50QAOA0qApdIANwA4A0wDKaIDKQA7WmRhdGFTb3VyY2XSADcAOANPA1CjA1AD
UQA7XxAUTlNOaWJPdXRsZXRDb25uZWN0b3JeTlNOaWJDb25uZWN0b3LUAA4DHgMfAyADIQDaAyIDVoCn
gB2An4CpWXRhYmxlVmlld9QADgMeAx8DIAMhAyIAHwNcgKeAn4ACgKtfEBJwbGF5bGlzdENvbnRyb2xs
ZXLUAA4DHgMfAyADIQBxAEEDYoCngHKAB4CtXxAVaW5pdGlhbEZpcnN0UmVzcG9uZGVy1AAOAx4DHwMg
AyEAHwMiA2iAp4ACgJ+Ar18QGXNwb3RsaWdodFdpbmRvd0NvbnRyb2xsZXLUAA4DHgMfAyADIQBzAB8D
boCngI2AAoCxW3BhdGhDb250cm9s1AAOAx4DHwMgAyEAQQAfA3SAp4AHgAKAs1Z3aW5kb3fXAA4DHgN3
A3gDHwMgA3kDegAfA3wDfQBxA38AVllOU0tleVBhdGhZTlNCaW5kaW5nXxAcTlNOaWJCaW5kaW5nQ29u
bmVjdG9yVmVyc2lvboC4gAKAt4C2gHKAtV8QE3ZhbHVlOiBzZWFyY2hTdHJpbmdVdmFsdWVcc2VhcmNo
U3RyaW5n0gA3ADgDhAOFowOFA1EAO18QFU5TTmliQmluZGluZ0Nvbm5lY3RvctcADgMeA3cDeAMfAyAD
eQN6AB8DiQOKAyIDjABWgLiAAoC8gLuAn4C6XxAbY29udGVudEFycmF5OiBxdWVyeS5yZXN1bHRzXGNv
bnRlbnRBcnJheV1xdWVyeS5yZXN1bHRz2AAOAx4DdwN4Ax8DIAORA3kDegMiA5QDfQE2A5cDmABWWU5T
T3B0aW9uc4C4gJ+Av4C2gFuAvoDAXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50cmFja18QFWFycmFu
Z2VkT2JqZWN0cy50cmFja9MADgKkAD4DnAOdA5+AwqEDnoDBoQKrgIFfEBtOU0NvbmRpdGlvbmFsbHlT
ZXRzRWRpdGFibGXSADcAOAOjArKiArIAO9gADgMeA3cDeAMfAyADkQN5A3oDIgOnA30BMAOqA6sAVoC4
gJ+AxYC2gCmAxIDGXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50aXRsZV8QFWFycmFuZ2VkT2JqZWN0
cy50aXRsZdMADgKkAD4DnAOwA7KAwqEDnoDBoQKrgIHYAA4DHgN3A3gDHwMgA5EDeQN6AyIDtwN9ATMD
ugO7AFaAuICfgMmAtoBLgMiAyl8QHXZhbHVlOiBhcnJhbmdlZE9iamVjdHMubGVuZ3RoXxAWYXJyYW5n
ZWRPYmplY3RzLmxlbmd0aNMADgKkAD4DnAPAA8KAwqEDnoDBoQKrgIHYAA4DHgN3A3gDHwMgA5EDeQN6
AyIDxwN9ATEDygPLAFaAuICfgM2AtoA+gMyAzl8QHXZhbHVlOiBhcnJhbmdlZE9iamVjdHMuYXJ0aXN0
XxAWYXJyYW5nZWRPYmplY3RzLmFydGlzdNMADgKkAD4DnAPQA9KAwqEDnoDBoQKrgIHYAA4DHgN3A3gD
HwMgA5EDeQN6AyID1wN9ATQD2gPbAFaAuICfgNGAtoBRgNCA0l8QG3ZhbHVlOiBhcnJhbmdlZE9iamVj
dHMueWVhcl8QFGFycmFuZ2VkT2JqZWN0cy55ZWFy0wAOAqQAPgOcA+AD4oDCoQOegMGhAquAgdgADgMe
A3cDeAMfAyADkQN5A3oDIgPnA30BNQPqA+sAVoC4gJ+A1YC2gFaA1IDWXxAcdmFsdWU6IGFycmFuZ2Vk
T2JqZWN0cy5nZW5yZV8QFWFycmFuZ2VkT2JqZWN0cy5nZW5yZdMADgKkAD4DnAPwA/KAwqEDnoDBoQKr
gIHYAA4DHgN3A3gDHwMgA5EDeQN6AyID9wN9ATID+gP7AFaAuICfgNmAtoBGgNiA2l8QHHZhbHVlOiBh
cnJhbmdlZE9iamVjdHMuYWxidW1fEBVhcnJhbmdlZE9iamVjdHMuYWxidW3TAA4CpAA+A5wEAAQCgMKh
A56AwaECq4CB2AAOAx4DdwN4Ax8DIAORA3kDegAfBAcDfQBzBAoECwBWgLiAAoDdgLaAjYDcgN5fEBp2
YWx1ZTogc3BvdGxpZ2h0U2VhcmNoUGF0aF8QE3Nwb3RsaWdodFNlYXJjaFBhdGjTAA4CpAA+A5wEEAQS
gMKhBBGA36EEE4DgXxAWTlNWYWx1ZVRyYW5zZm9ybWVyTmFtZV8QFlN0cmluZ1RvVVJMVHJhbnNmb3Jt
ZXLSAA4APgQXBBiA5K8QHwLcAhwEGwBwAUUB0QEwATYAQQDaAHsCvwDGAE4CagGWATQAcQExAyIAbwC7
ATMBMgG3AewBNQBzAgUA9wBygJOAX4DigBmANYBPgCmAW4AHgB2AEYCIgGiADIB0gEWAUYBygD6An4AP
gGyAS4BGgEqAVYBWgI2AWoAhgIbSAA4AMgAzBDqABIDjXU5TQXBwbGljYXRpb27SADcAOAQ9AjGiAjEA
O9IADgA+BBcEQIDkrxAfAHMBNgAfAE4BMAEzANoA2gAfAHAAbwByAHAAQQBxATEA2gBOANoAHwBOAHAA
2gDaATIBNADaAE4BNQBwAE6AjYBbgAKADIApgEuAHYAdgAKAGYAPgIaAGYAHgHKAPoAdgAyAHYACgAyA
GYAdgB2ARoBRgB2ADIBWgBmADNIADgA+BBcEYoDkrxAgAtwCHAQbAHABRQHRATABNgBBANoAxgB7Ar8A
TgJqAZYDIgBxATQBMQBvALsBMwEyAB8A9wE1AHMB7AG3AgUAcoCTgF+A4oAZgDWAT4ApgFuAB4AdgGiA
EYCIgAyAdIBFgJ+AcoBRgD6AD4BsgEuARoACgCGAVoCNgFWASoBagIbSAA4APgQXBIWA5K8QIASGBIcE
iASJBIoEiwSMBI0EjgSPBJAEkQSSBJMElASVBJYElwSYBJkEmgSbBJwEnQSeBJ8EoAShBKIEowSkBKWA
6IDpgOqA64DsgO2A7oDvgPCA8YDygPOA9ID1gPaA94D4gPmA+oD7gPyA/YD+gP+BAQCBAQGBAQKBAQOB
AQSBAQWBAQaBAQdZUGF0aCBDZWxsXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTFbQXBwbGlj
YXRpb25bU2Nyb2xsIFZpZXdfEBtUZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbClfEB1UZXh0IEZpZWxk
IENlbGwgKFRleHQgQ2VsbCktNF8QFFRhYmxlIENvbHVtbiAodGl0bGUpXxAUVGFibGUgQ29sdW1uICh0
cmFjaylfEBtQYW5lbCAoT3BlbiBmcm9tIFNwb3RsaWdodClfEEpTcG90bGlnaHQgUGxheWxpc3QgVmll
dyAoVGl0bGUsIEFydGlzdCwgQWxidW0sIExlbmd0aCwgWWVhciwgR2VucmUsIFRyYWNrKV8QEVZlcnRp
Y2FsIFNjcm9sbGVyXxAdQnV0dG9uIENlbGwgKEFkZCB0byBQbGF5bGlzdClfEB5UZXh0IEZpZWxkIENl
bGwgKFNlYXJjaCBQYXRoOilcQ29udGVudCBWaWV3XxARU2VhcmNoIEZpZWxkIENlbGxfEB1UZXh0IEZp
ZWxkIENlbGwgKFRleHQgQ2VsbCktM18QHVNwb3RsaWdodCBQbGF5bGlzdCBDb250cm9sbGVyXFNlYXJj
aCBGaWVsZF8QE1RhYmxlIENvbHVtbiAoeWVhcilfEBVUYWJsZSBDb2x1bW4gKGFydGlzdClfEB1QdXNo
IEJ1dHRvbiAoQWRkIHRvIFBsYXlsaXN0KV8QE0hvcml6b250YWwgU2Nyb2xsZXJfEBVUYWJsZSBDb2x1
bW4gKGxlbmd0aClfEBRUYWJsZSBDb2x1bW4gKGFsYnVtKVxGaWxlJ3MgT3duZXJfEBFUYWJsZSBIZWFk
ZXIgVmlld18QFFRhYmxlIENvbHVtbiAoZ2VucmUpXxAaUG9wIFVwIFBhdGggQ29udHJvbCBXaWRnZXRf
EB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktMl8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxs
KS01XxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTZfEBpTdGF0aWMgVGV4dCAoU2VhcmNoIFBh
dGg6KdIADgA+BBcEyIDkogDaAyKAHYCf0gAOAD4EFwTNgOSiAQMDOIAegKDSAA4APgQXBNKA5K8QMQLc
AxAEGwBwAUUBNgBBAw0AewK/AxgDFAJqAZYDDwE0ATEDEgBvALsDGgIFAB8A9wIcAdEDEwEwAxwA2gDG
Aw4ATgMbAxkDFwMiAHEDEQMMATMBMgG3AewBNQBzAxUDFgBygJOAroDigBmANYBbgAeAqIARgIiAy4C5
gHSARYCsgFGAPoCygA+AbIDTgFqAAoAhgF+AT4C0gCmA24AdgGiAqoAMgNeAz4DHgJ+AcoCwgJ6AS4BG
gEqAVYBWgI2AvYDDgIbSAA4APgQXBQaA5K8QMQUHBQgFCQUKBQsFDAKrBQ4FDwUQBREFEgUTBRQFFQUW
BRcFGAUZBRoFGwUcBR0FHgUfBSAFIQUiBSMFJAUlBSYFJwUoBSkFKgUrBSwFLQUuBS8FMAUxBTIFMwU0
BTUFNgU3gQEMgQENgQEOgQEPgQEQgQERgIGBARKBAROBARSBARWBARaBAReBARiBARmBARqBARuBARyB
AR2BAR6BAR+BASCBASGBASKBASOBASSBASWBASaBASeBASiBASmBASqBASuBASyBAS2BAS6BAS+BATCB
ATGBATKBATOBATSBATWBATaBATeBATiBATmBATqBATsQWRCgE//////////9EBgQJRAdEJUQUBBoEKIQ
OBAnED0QIhBIEAUQGhBmECsQoxAsECkQmhAkEJ0QHBAbEKEQZRBeEGkQEBA3EJ8QlxAgECEQKBAqEB4Q
WBBrEF0QT9IADgA+AG0FZoBgoNIADgA+BBcFaYDkoNIADgA+BBcFbIDkoNIANwA4BW4Fb6IFbwA7Xk5T
SUJPYmplY3REYXRhAAgAGQAiACcAMQA6AD8ARABSAFQAZgLqAvADOwNCA0kDVwNpA4UDkwOfA6sDuQPE
A9ID7gP8BA8EIQQ7BEUEUgRUBFcEWQRcBF8EYQRjBGUEaARrBG0EcARyBHQEdgR5BHsEfgSHBJMElQSX
BLMEvATFBNAE1QTkBO0FAAUJBRQFFgUZBRsFTAVZBWYFdAV+BYwFpQWyBcQF2AXiBe4F8AXyBfQF9gX7
Bf0F/wYBBgMGBQYHBgkGJAY6BkIGTQZqBnwGhwaQBpwGpQaxBrMGtQa3BroGvAa+BsAGyQbLBtYG2Aba
BtwG3gbgBwEHCQcQBxoHHAceByAHIgclByYHKAcqB0QHdQeBB5cHrAe7B80H2AfiB/AIAggPCB0IIggk
CCYIKAgqCCwILggwCDIINAg5CEIIVAhlCGwIcwh8CH4IhwiJCIwImQiiCKcIrgivCLgIwQjOCNsI5Ajv
CPgJAgkJCRUJVAlgCWkJdgmJCZYJogmwCb4JwAnCCcQJxgnJCcsJzQnPCeIJ5QnnCekJ6wntCe8J+An6
CgUKBwoJCgsKDQoPCjwKRgpQCloKXApeCmAKYgplCmcKaQprCm0Kbwp4CnoKfQp/Ct4LAAsKCyALLQtB
C1YLcAuMC6cLtgvCC+EL8Av8C/4MAAwCDAsMDQwPDBEMEgwUDB0MHwwoDCsMLQwuDDAMMgw0DDYMOAw6
DDwMRQxdDGkMdAyRDJMMlQyXDJkMmwydDMoMzAzODNAM0gzUDNYM2AzaDNwM3gzoDPEM+g0ODScNKQ0r
DS0NNg04DToNUQ1aDWMNcQ16DXwNiw2NDY8NkQ2TDZUNlw2ZDcIN0Q3eDesN8w3+Dg0OGA4jDiQOJg4o
DioOMw41DjcOQA5JDksOUQ5uDnoOfw6BDoMOhQ6HDokOjw6gDqIOqw6tDrAOvQ7KDtIO1A7gDukO7g72
DwsPFw8lDycPKQ8rDy0PLw82D0gPVQ9XD1oPYw9uD4IPlA+1D7oPvA++D8APwg/ED8cPyQ/TD+gP6g/s
D+4P8BAJEBYQGBAkEDkQOxA9ED8QQRBUEF0QZhBvEHQQghCrEKwQrhCwELIQuxC9EMYQyBDPEOwQ7hDw
EPIQ9BD2EP0REhEUERYRGBEaESYRMxE1ETgRWRFbEV0RXxFhEWMRZRGOEY8RkRGTEZURnhGgEakRqxGx
Ec4R0BHSEdQR1hHYEd4R/xIBEgMSBRIHEgkSCxI4EkESQhJDEkUSRxJJElISVBJdEl8SZhKDEoUShxKJ
EosSkBKSEpkSuhK8Er4SwBLCEsQSyRLLEvgS+RL6EvwS/hMAEwkTCxMUExYTGxM4EzoTPBM+E0ATQhNH
E2gTahNsE24TcBNyE3QToROiE6MTpROnE6kTshO0E7YTvBPZE9sT3RPfE+ET4xPpFAoUDBQOFBAUEhQU
FBYUPxRAFEIURBRGFE8UURRaFFwUYhR/FIEUgxSFFIcUiRSPFLAUshS0FLYUuBS6FLwUxRTMFNsU4xT4
FPoU/BT+FQAVChUXFRkVHhU1FT4VQxVSFWoVcxV8FYcVrBW1Fb4VyBXKFcwVzhXQFdIV1BXWFd8V9hYD
FgwWFxYiFksWTRZPFlEWUxZVFlcWWRZiFnoWgxaFFogWihajFqwWtRbCFuMW5RbnFukW6xbuFu8W8Rbz
FwwXQRdWF2kXfReSF6UXqhesF64XsBeyF7QXthe7F7wXvhfAF8IX1xfZF9sX3RffF/UYJhgoGC0YLxgx
GDMYNRg3GDoYPBhBGEgYXhiTGLkYuxi9GL8YwRjDGMUYxxjNGNYY2BjbGN0Y6hjyGPQY+Rj7GP0ZAhkE
GQYZFBlAGUcZUBlXGW0ZehmQGZkZpBm4GcEZzhncGegaCRoLGg0aDxoRGhQaFRoXGhkaMBpRGlYaWBpa
GlwaXhpgGmUaZxp0GokaixqNGo8akRqeGqcashrXGuMa5RrnGuka6xrtGu4a8BryGvsa/RsCGwQbBhsi
GzobQxtKG1cbXRt2G5cboxu6G8UbyhvMG84b0BvTG9Ub1xvgG+Ib4xvsG/UcABwJHBQcIhwtHDYcPRxV
HGAcaRxuHIEcihyMHLEcsxy1HLccuRy7HL0cvxzBHMMcxRzHHMkcyxzNHM8c0RzTHOQc8hz7HQMdBR0H
HQkdCx08HVkdcB17HY0doR2wHdUd8B4JHgoeDB4NHg8eEB4SHhQeFh4XHhkeGh4bHjkeTR5WHlgeaR5r
Hm0ebx5xHnMedR53Hnkehx6MHo4elx6cHqcesB63Hs4e3R7uHvAe8h70HvYfAB8RHxMfFR8XHxkfLh8/
H0EfQx9FH0cfXx9wH3IfdB92H3gflB+lH6cfqR+rH60fuR/KH8wfzh/QH9If2R/2IAAgCiApICsgLSAv
IDEgMyA1IEsgUSBeIGcgbiCGIKMgpSCnIKkgqyCtIK8gzSDaIOghCSETIRUhFyEZIRshHSEfISEhQCFY
IWUhZyFqIWwhbyFxIY8hmCGdIb4hwCHCIcQhxiHIIcohzCHrIgMiECISIhUiFyIaIhwiPSI/IkEiQyJF
IkciSSJLImsihCKRIpMiliKYIpsinSK+IsAiwiLEIsYiyCLKIswi7CMFIxIjFCMXIxkjHCMeIz8jQSND
I0UjRyNJI0sjTSNrI4IjjyORI5QjliOZI5sjvCO+I8AjwiPEI8YjyCPKI+kkASQOJBAkEyQVJBgkGiQ7
JD0kPyRBJEMkRSRHJEkkaCSAJI0kjySSJJQklySZJLokvCS+JMAkwiTEJMYkyCTlJPslCCUKJQ0lDyUS
JRQlLSVGJU8lUSWSJZQlliWYJZolnCWeJaAloiWkJaYlqCWqJawlriWwJbIltCW2JbgluiW8Jb4lwCXC
JcQlxiXIJcolzCXOJdAl2SXbJd0l6yX0JfkmAiYEJkUmRyZJJksmTSZPJlEmUyZVJlcmWSZbJl0mXyZh
JmMmZSZnJmkmayZtJm8mcSZzJnUmdyZ5JnsmfSZ/JoEmgyaMJo4m0SbTJtUm1ybZJtsm3SbfJuEm4ybl
Jucm6SbrJu0m7ybxJvMm9Sb3Jvkm+yb9Jv8nAScDJwUnBycJJwsnDScPJxEnGiccJ18nYSdjJ2UnZydp
J2snbSdvJ3Encyd1J3cneSd7J30nfyeBJ4MnhSeHJ4kniyeNJ48nkieVJ5gnmyeeJ6EnpCenJ7En0Sfd
J+koBygnKD4oVShzKMAo1Cj0KRUpIik2KVYpdimDKZkpsSnRKecp/yoWKiMqNypOKmsqiyqrKssq6Crx
KvMq+Cr6KvwrBSsHKwwrDisQKxkrGyuAK4IrhCuGK4griiuMK44rkCuSK5QrliuYK5ornCueK6Aroiuk
K6YrqCuqK6wrriuwK7IrtCu2K7gruiu8K74rwCvCK8QrxivIK8orzCvOK9Ar0ivUK9Yr2CvaK9wr3ivg
K+Ir6yvtLFIsVSxYLFssXixhLGQsZixpLGwsbyxyLHUseCx7LH4sgSyELIcsiiyNLJAskyyWLJksnCyf
LKIspSyoLKssriyxLLQstyy6LL0swCzDLMYsySzMLM8s0izVLNgs2yzeLOEs5CzmLOgs8SzzLPUs9yz5
LPss/Sz/LQEtAy0FLQctCS0LLQ0tDy0RLRMtFS0XLRktGy0dLR8tIS0jLSUtJy0pLSstLS0vLTEtMy01
LTctOS07LT0tPy1BLUMtTC1OLU8tWC1aLVstZC1mLWctcC11AAAAAAAAAgIAAAAAAAAFcAAAAAAAAAAA
AAAAAAAALYQ</bytes>
AwkDHgMmAzwDPQM+A0kDSgNMA04DTwNTA1gDWQNeA18DZANlA2oDawNuA3MDdAN5A3oDfwOAA4oDiwOM
A40DkAOXA5gDmQOaA6MDpAOlA6sDrAOuA7YDtwO4A74DxgPHA8gDzgPWA9cD2APeA+YD5wPoA+4D9gP3
A/gD/gQGBAcECAQOBBYEFwQYBB4EHwQgBEIERQRGBEgEagSNBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7
BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNUE2gUPBUQFRQVGBUcFSAFm
BUkFSgVLBUwFTQBXBU4FTwVQBVEFUgVTAJAFVAVVBVYFVwVYBVkFWgVbBVwFXQVeBV8AVgVgBWEFYgVj
BWQFZQVmBWcFaAVpBWoFawVsBW0FbgVvBXAFcQV0BXcFelUkbnVsbN8QEgANAA4ADwAQABEAEgATABQA
FQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMFZOU1Jv
b3RWJGNsYXNzXU5TT2JqZWN0c0tleXNfEA9OU0NsYXNzZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlP
aWRzVmFsdWVzXU5TQ29ubmVjdGlvbnNbTlNOYW1lc0tleXNbTlNGcmFtZXdvcmtdTlNDbGFzc2VzS2V5
c1pOU09pZHNLZXlzXU5TTmFtZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlDb25uZWN0b3JzXU5TRm9u
dE1hbmFnZXJfEBBOU1Zpc2libGVXaW5kb3dzXxAPTlNPYmplY3RzVmFsdWVzXxAXTlNBY2Nlc3NpYmls
aXR5T2lkc0tleXNZTlNOZXh0T2lkXE5TT2lkc1ZhbHVlc4ACgQFDgOSBAQyBAUKAnYDpgAWBAQuBAQ2A
6oEBQIAAgAaA6IEBQRClgQEO0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA18QGVNwb3RsaWdodFdpbmRv
d0NvbnRyb2xsZXLSADcAOAA5ADpYJGNsYXNzZXNaJGNsYXNzbmFtZaIAOgA7Xk5TQ3VzdG9tT2JqZWN0
WE5TT2JqZWN0XxAQSUJDb2NvYUZyYW1ld29ya9IADgA+AD8AQFpOUy5vYmplY3RzgJGhAEGAB9wAQwAO
AEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYACtcTlNXaW5kb3dWaWV3XE5T
U2NyZWVuUmVjdF1OU1dpbmRvd1RpdGxlWU5TV1RGbGFnc11OU1dpbmRvd0NsYXNzXxAWTlNXaW5kb3dD
b250ZW50TWluU2l6ZVxOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tpbmdfEBFOU1dpbmRvd1N0eWxl
TWFza1lOU01pblNpemVbTlNWaWV3Q2xhc3OADICcgJqACRIgAAAAgAqAC4AIEAIQH4CbgABfEBh7ezE5
NiwgMTkyfSwgezQ4MCwgMzIwfX1fEBNPcGVuIGZyb20gU3BvdGxpZ2h0V05TUGFuZWxaezQwMCwgMjYw
fdcAXwAOAGAAYQBiAGMAZABlAGYAZwBoAGkAZQBrXxAPTlNOZXh0UmVzcG9uZGVyWk5TU3Vidmlld3NY
TlN2RmxhZ3NbTlNGcmFtZVNpemVYTlNXaW5kb3dbTlNTdXBlcnZpZXeADYCZgA4RAQCAl4ANgJjSAA4A
PgBtAG6AYKUAbwBwAHEAcgBzgA+AGYBygIaAjdgAXwAOAHUAdgBhAHcAYwBkAE4AeQB6AHsAfAB9AGUA
TldOU0ZyYW1lVk5TQ2VsbFlOU0VuYWJsZWSADIAYgBCAEREBCQmADYAMXxAXe3szMzUsIDI3NX0sIHsx
MzEsIDMyfX3cAIIADgCDAIQAhQCGAIcAiACJAIoAiwCMAI0AjgCPAJAAkQCPAJMAlABvAJYAlwCYW05T
Q2VsbEZsYWdzXxATTlNBbHRlcm5hdGVDb250ZW50c18QEk5TUGVyaW9kaWNJbnRlcnZhbF5OU0J1dHRv
bkZsYWdzMl8QD05TS2V5RXF1aXZhbGVudFpOU0NvbnRlbnRzWU5TU3VwcG9ydF1OU0NvbnRyb2xWaWV3
XxAPTlNQZXJpb2RpY0RlbGF5XE5TQ2VsbEZsYWdzMl1OU0J1dHRvbkZsYWdzEgQB/gCAF4AWEBkQgYAW
gBKAE4APEMgSCAAAABP/////hoJA/18QD0FkZCB0byBQbGF5bGlzdNQADgCbAJwAnQCeAJ8AoAChVk5T
U2l6ZVZOU05hbWVYTlNmRmxhZ3OAFSNAKgAAAAAAAIAUEQQUXEx1Y2lkYUdyYW5kZdIANwA4AKQApaIA
pQA7Vk5TRm9udFDSADcAOACoAKmkAKkAqgB2ADtcTlNCdXR0b25DZWxsXE5TQWN0aW9uQ2VsbNIANwA4
AKwAraUArQCuAK8AsAA7WE5TQnV0dG9uWU5TQ29udHJvbFZOU1ZpZXdbTlNSZXNwb25kZXLfEA8AXwCy
AA4AdQCzALQAtQBgALYAYQBjAGQAtwC4ALkATgC7ALwAvQC+AL8AwADBAMIAwwBlAE4AxgDHAMdbTlNI
U2Nyb2xsZXJYTlNzRmxhZ3NcTlNDb3JuZXJWaWV3XxAQTlNIZWFkZXJDbGlwVmlld1xOU1Njcm9sbEFt
dHNbTlNWU2Nyb2xsZXJdTlNOZXh0S2V5Vmlld11OU0NvbnRlbnRWaWV3gAyAbIBxgHARAjCAJYAigBpP
EBAAAAAAAAAAAEGYAABBmAAAEQESgA2ADIBogBuAG9IADgA+AG0Ay4BgpQDHAMYAuwDAAL+AG4BogGyA
IoAl2wBfAA4AdQDSAGAAYQDTAGMA1ABkALgAcADWANcAVgDYANkA2gBlANwAcADaWU5TY3ZGbGFnc1lO
U0RvY1ZpZXdZTlNCR0NvbG9ygBmAZ4BmgBwRCQCAHYANgDeAGYAd0gAOAD4AbQDhgGChANqAHd8QFwBf
AOQADgDlAOYA5wDoAOkAtADqAOsA7ABhAGIAdwDtAGMAMgDuAO8AZADwAPEAxwDzAPQA9QD2APcA3AB9
AL8A+wD8AP0A/gD/AH0BAQBlAQMBBAEFAMcBBwEIXxAfTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25M
b2NhbFlOU1R2RmxhZ3NfEBNOU09yaWdpbmFsQ2xhc3NOYW1lXE5TSGVhZGVyVmlld18QEU5TQmFja2dy
b3VuZENvbG9yXxASTlNBbGxvd3NUeXBlU2VsZWN0XxAXTlNJbnRlcmNlbGxTcGFjaW5nV2lkdGhfEBlO
U0NvbHVtbkF1dG9yZXNpemluZ1N0eWxlXxAYTlNJbnRlcmNlbGxTcGFjaW5nSGVpZ2h0Xk5TQXV0b3Nh
dmVOYW1lW05TR3JpZENvbG9yXxAcTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JMb2NhbF5OU1RhYmxlQ29s
dW1uc1tOU1Jvd0hlaWdodIAbEACAZRP/////28CAAIAfgCGANwmAJSNACAAAAAAAABABI0AAAAAAAAAA
ERESgCAJgGSADYAegGEQD4AbgCgjQDEAAAAAAABfEBVTcG90bGlnaHRQbGF5bGlzdFZpZXdbTlNUYWJs
ZVZpZXdaezQ0MCwgMjExfdcAXwAOAGEAYgBjAGQBCgDAAQ4AaAEPAGUAwADagCKAJIAjgA2AIoAd2wBf
AA4A0gBgAGEAYgDTAGMA1ABkALgAcADWARYBFwDZARgA9wBlANwAcAD3gBmAZxAEgG6Ab4AhgA2AN4AZ
gCFZezQ0MCwgMTd90gA3ADgBIAEhpAEhAK8AsAA7XxARTlNUYWJsZUhlYWRlclZpZXfWAF8ADgB1AGEA
YwBkAHABJAElASYAZQBwgBmAJ4AmE/////+AAAEAgA2AGV8QFHt7LTI2LCAwfSwgezE2LCAxN3190gA3
ADgBKwEspAEsAK8AsAA7XV9OU0Nvcm5lclZpZXfSAA4APgBtAS+AYKcBMAExATIBMwE0ATUBNoApgD6A
RoBLgFGAVoBb2gE4AA4BOQE6ATsBPAE9AT4BPwEKAH0BQQFCAUMBRAFFAUYBRwFIANpeTlNJc1Jlc2l6
ZWFibGVcTlNIZWFkZXJDZWxsXE5TSWRlbnRpZmllcldOU1dpZHRoWk5TRGF0YUNlbGxeTlNSZXNpemlu
Z01hc2taTlNNaW5XaWR0aFpOU01heFdpZHRoCYA9gCuAKiNAYAAAAAAAAIA1EAMjQESAAAAAAAAjQI9A
AAAAAACAHVV0aXRsZdcAggAOAOgAhwCIAIsBTAFNAU4BTwFQAVEA8wFSW05TVGV4dENvbG9yEgSB/gCA
NIAugCyALYAwVVRpdGxl1AAOAJsAnACdAJ4BVgCgAViAFSNAJgAAAAAAAIAUEQwc0wAOAVoBWwFcAUYB
XVxOU0NvbG9yU3BhY2VXTlNXaGl0ZYAvSzAuMzMzMzMyOTkA0gA3ADgBXwFgogFgADtXTlNDb2xvctUA
DgFgAVoBYgFjAVwBZQFmAWcBaFtOU0NvbG9yTmFtZV1OU0NhdGFsb2dOYW1lgC+AMxAGgDKAMVZTeXN0
ZW1fEA9oZWFkZXJUZXh0Q29sb3LTAA4BWgFbAVwBRgFtgC9CMADSADcAOAFvAXClAXABcQCqAHYAO18Q
EU5TVGFibGVIZWFkZXJDZWxsXxAPTlNUZXh0RmllbGRDZWxs2ACCAA4A6ACHAIgAiQCLAUwBcwF0ANwB
dgCUANoBeQF6EhQh/kCAPIA3gDaAE4AdEQgAgDpZVGV4dCBDZWxs1QAOAWABWgFiAWMBXAF+AWYBfwFo
gC+AOYA4gDFfEBZjb250cm9sQmFja2dyb3VuZENvbG9y0wAOAVoBWwFcAUYBhIAvSzAuNjY2NjY2NjkA
1QAOAWABWgFiAWMBXAFlAWYBiAFogC+AM4A7gDFfEBBjb250cm9sVGV4dENvbG9y0gA3ADgBjAFxpAFx
AKoAdgA70gA3ADgBjgGPogGPADtdTlNUYWJsZUNvbHVtbtoBOAAOATkBOgE7ATwBPQE+AT8BCgB9AUEB
kwGUAZUBlgFGAZcBSADaCYA9gECAPyNAXsAAAAAAAIBFI0BCAAAAAAAAgB1WYXJ0aXN01wCCAA4A6ACH
AIgAiwFMAI0BTgGcAZ0BUQDzAVKANIBCgEGALYAwVkFydGlzdNUADgFgAVoBYgFjAVwBowFmAaQBaIAv
gESAQ4AxW2hlYWRlckNvbG9y0wAOAVoBWwFcAUYBqYAvQjEA2ACCAA4A6ACHAIgAiQCLAUwBcwF0ANwB
dgCUANoBeQF6gDyAN4A2gBOAHYA62gE4AA4BOQE6ATsBPAE9AT4BPwEKAH0BQQG0AbUBtgG3AUYBuAFI
ANoJgD2ASIBHI0BfQAAAAAAAgEojQEOAAAAAAACAHVVhbGJ1bdcAggAOAOgAhwCIAIsBTACNAU4BnAG+
AVEA8wFSgDSAQoBJgC2AMFVBbGJ1bdgAggAOAOgAhwCIAIkAiwFMAXMBdADcAXYAlADaAXkBeoA8gDeA
NoATgB2AOtsBOAHKATkBOgAOATsBPAE9AT4BPwEKAH0AfQHNAc4BQQHQAdEBRgHSAUgA2lhOU0hpZGRl
bgkJgE2ATIA9I0BJAAAAAAAAgE8jQERPYCAAAACAHVZsZW5ndGjXAIIADgDoAIcAiACLAUwAjQFOAZwB
2AFRAdoBUoA0gEKAToAtEgQAAACAMFZMZW5ndGjYAIIADgDoAIcAiACJAIsBTAFzAXQA3AHgAJQA2gHj
AXqAPIA3gFCAE4AdEgQACACAOtsBOAHKATkBOgAOATsBPAE9AT4BPwEKAH0AfQHoAekBQQHrAewBRgHt
AUgA2gkJgFOAUoA9I0BHgAAAAAAAgFUjQCQAAAAAAACAHVR5ZWFy1wCCAA4A6ACHAIgAiwFMAI0BTgGc
AfMBUQHaAVKANIBCgFSALYAwVFllYXLYAIIADgDoAIcAiACJAIsBTAFzAXQA3AHgAJQA2gHjAXqAPIA3
gFCAE4AdgDrbATgBygE5AToADgE7ATwBPQE+AT8BCgB9AH0CAQICAUECBAIFAUYB7QFIANoJCYBYgFeA
PSNARwAAAAAAAIBagB1VZ2VucmXXAIIADgDoAIcAiACLAUwAjQFOAZwCCwFRAPMBUoA0gEKAWYAtgDBV
R2VucmXYAIIADgDoAIcAiACJAIsBTAFzAXQA3AHgAJQA2gF5AXqAPIA3gFCAE4AdgDraATgADgE5AToB
OwE8AT0BPgE/AQoAfQFBAhkCGgIbAhwBRgIdAhsA2gmAPYBdgFwjQEoAAAAAAACAXyNAIAAAAAAAAIAd
VXRyYWNr1wCCAA4A6ACHAIgAiwFMAI0BTgGcAiMBUQHaAVKANIBCgF6ALYAwVVRyYWNr2ACCAA4A6ACH
AIgAiQCLAUwBcwF0ANwBdgCUANoB4wF6gDyAN4A2gBOAHYA60gA3ADgCLwIwowIwAjEAO15OU011dGFi
bGVBcnJheVdOU0FycmF51QAOAWABWgFiAWMBXAI0AWYCNQFogC+AY4BigDFZZ3JpZENvbG9y0wAOAVoB
WwFcAUYCOoAvRDAuNQBfEBRDb2dTcG90bGlnaHRQbGF5bGlzdNIANwA4Aj0CPqICPgA7Xk5TQ2xhc3NT
d2FwcGVyXxAVe3swLCAxN30sIHs0NDAsIDIxMX190gA3ADgCQQJCpAJCAK8AsAA7Wk5TQ2xpcFZpZXfZ
AF8CRAAOAHUAYQBjAkUAZAJGAHAAcAJJAkoBJgBlAkwAcAJOWE5TVGFyZ2V0WE5TQWN0aW9uWU5TUGVy
Y2VudIAZgBmAa4BpgA2AaoAZIz/qN4SgAAAAXxAUe3s4NSwgMTd9LCB7MTUsIDY4fX1cX2RvU2Nyb2xs
ZXI60gA3ADgCUgJTpQJTAK4ArwCwADtaTlNTY3JvbGxlctoAXwJEAA4AdQCzAGEAYwJFAGQCRgBwAHAC
SQJYAPwBJgBlAkwAcAJcgBmAGYBrgG2ADYBqgBkjP+2kYQAAAABfEBV7ezAsIDIxM30sIHs0NDAsIDE1
fX3SAA4APgBtAmCAYKEA94AhXxAWe3syMCwgNDR9LCB7NDQwLCAyMjh9fdIANwA4AmQCZaQCZQCvALAA
O1xOU1Njcm9sbFZpZXfYAF8ADgB1AHYAYQB3AGMAZABOAmgCaQJqAmsAfQBlAE6ADICFgHOAdBEBCgmA
DYAMXxAWe3syMCwgMjgyfSwgezMxMywgMjJ9fd0AggAOAnEA6ACHAIgAiQCLAnICcwJ0AnUBTAJ2AncC
eAJ5AI8AlABxAn0A/AB9An8CgAF6XxASTlNDYW5jZWxCdXR0b25DZWxsXxAQTlNUZXh0QmV6ZWxTdHls
ZV8QEU5TRHJhd3NCYWNrZ3JvdW5kXxASTlNTZWFyY2hCdXR0b25DZWxsXxAQTlNNYXhpbXVtUmVjZW50
cxIUcf5AgISAeoB1gBaAE4ByEhAABAAJgHcQ/4A61QAOAWABWgFiAWMBXAGjAWYChQFogC+ARIB2gDFf
EBN0ZXh0QmFja2dyb3VuZENvbG9y3AJEAIIADgCEAIUAhgCHAIkAigCLAkUAjAJqAooAjgKMAPMAjwKO
AHECkADzApECkoB0EgAB/gCAFxBLgBaAeIByEQGQgHkSCERA/1ZzZWFyY2hfEBNfc2VhcmNoRmllbGRT
ZWFyY2g63QJEAIIADgCEAIUAhgKWAIcAiQCKAIsCRQCMAmoCigCOAowA8wCPApoCmwBxApAA8wKdApJf
ECNOU0FjY2Vzc2liaWxpdHlPdmVycmlkZGVuQXR0cmlidXRlc4B0gBeAFoB8gHuAcoCDVWNsZWFy0gAO
AD4AbQKhgGChAqKAfdMADgKkAD4CpQKmAqlXTlMua2V5c4CCogKnAqiAfoB/ogKqAquAgICBXUFYRGVz
Y3JpcHRpb25fEClOU0FjY2Vzc2liaWxpdHlFbmNvZGVkQXR0cmlidXRlc1ZhbHVlVHlwZVZjYW5jZWzS
ADcAOAKwArGjArECsgA7XxATTlNNdXRhYmxlRGljdGlvbmFyeVxOU0RpY3Rpb25hcnlfEBNfc2VhcmNo
RmllbGRDYW5jZWw60gA3ADgCtQK2pQK2AXEAqgB2ADtfEBFOU1NlYXJjaEZpZWxkQ2VsbNIANwA4ArgC
uaYCuQK6AK4ArwCwADtdTlNTZWFyY2hGaWVsZFtOU1RleHRGaWVsZNgAXwAOAHUAdgBhAHcAYwBkAE4C
vQK+Ar8CwAB9AGUAToAMgIyAh4CIEQEhCYANgAxfEBR7ezg4LCAxNH0sIHs5NiwgMTd9fdgAggAOAOgA
hwCIAIkAiwFMAsYBdALIAskAlAByAswBehIEAf5AgDyAioCJgBOAhhIQQAQAgDpcU2VhcmNoIFBhdGg6
1QAOAWABWgFiAWMBXAF+AWYC0gFogC+AOYCLgDFcY29udHJvbENvbG9y0gA3ADgC1gK6pQK6AK4ArwCw
ADvZAF8ADgB1AHYC2ABhAHcAYwBkAE4C2gLbAtwC3QLAAH0AZQBOW05TRHJhZ1R5cGVzgAyAloCSgJOA
jgmADYAM0gAOAD4APwLjgJGiAuQC5YCPgJBfEBlBcHBsZSBVUkwgcGFzdGVib2FyZCB0eXBlXxAVTlNG
aWxlbmFtZXNQYm9hcmRUeXBl0gA3ADgC6QLqowLqAusAO1xOU011dGFibGVTZXRVTlNTZXRfEBZ7ezE4
OSwgMTB9LCB7MjcxLCAyNn192ALuAIIADgCIAIkAiwLvAvAAVgLxAvIAlABzAvUC9gBzW05TUGF0aFN0
eWxlXxAUTlNQYXRoQ29tcG9uZW50Q2VsbHNaTlNEZWxlZ2F0ZRIUIf4BgJWAE4CNEYAAgJSAjdIADgA+
AG0C+oBgoNIANwA4AvwC/aQC/QCqAHYAO1pOU1BhdGhDZWxs0gA3ADgC/wMApQMAAK4ArwCwADtdTlNQ
YXRoQ29udHJvbFp7NDgwLCAzMjB90gA3ADgDAwCvowCvALAAO18QFXt7MCwgMH0sIHsxMjgwLCA3Nzh9
fVp7NDAwLCAyNzZ90gA3ADgDBwMIogMIADtfEBBOU1dpbmRvd1RlbXBsYXRl0gAOAD4AbQMLgGCvEBID
DAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx2AnoCogKqArICugLGAs4C1gLeAvIDAgMaA
yoDOgNKA1oDagN7UAA4DHwMgAyEDIgMjANoDJV1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyA
p4CfgB2AptwDJwAOAygA5gMpAyoDKwMsAy0AMgMuAy8AfQD0AH0DMwB9AzUDNgM3AH0DOQB9AH1fEBpO
U0ZpbHRlclJlc3RyaWN0c0luc2VydGlvbl8QFE5TUHJlc2VydmVzU2VsZWN0aW9uWk5TRWRpdGFibGVf
EA9fTlNNYW5hZ2VkUHJveHlfEBFOU09iamVjdENsYXNzTmFtZV5OU0RlY2xhcmVkS2V5c18QIk5TQ2xl
YXJzRmlsdGVyUHJlZGljYXRlT25JbnNlcnRpb25fEBhOU1NlbGVjdHNJbnNlcnRlZE9iamVjdHNfEBZO
U0F2b2lkc0VtcHR5U2VsZWN0aW9uCYBlCYChCYCkgKOAogmAoAkJXxAbU3BvdGxpZ2h0UGxheWxpc3RD
b250cm9sbGVyXxARTlNBcnJheUNvbnRyb2xsZXLSAA4APgBtA0CAYKgBUAFDAekBlAG1AgIBzgIagCyA
KoBSgD+AR4BXgEyAXF1QbGF5bGlzdEVudHJ50QAOA0uApdIANwA4A00DKqIDKgA7WmRhdGFTb3VyY2XS
ADcAOANQA1GjA1EDUgA7XxAUTlNOaWJPdXRsZXRDb25uZWN0b3JeTlNOaWJDb25uZWN0b3LUAA4DHwMg
AyEDIgDaAyMDV4CngB2An4CpWXRhYmxlVmlld9QADgMfAyADIQMiAyMAHwNdgKeAn4ACgKtfEBJwbGF5
bGlzdENvbnRyb2xsZXLUAA4DHwMgAyEDIgBxAEEDY4CngHKAB4CtXxAVaW5pdGlhbEZpcnN0UmVzcG9u
ZGVy1AAOAx8DIAMhA2YAHwBvA2mAsIACgA+Ar15hZGRUb1BsYXlsaXN0OtIANwA4A2wDbaMDbQNSADtf
EBVOU05pYkNvbnRyb2xDb25uZWN0b3LUAA4DHwMgAyEDIgAfAyMDcoCngAKAn4CyXxAZc3BvdGxpZ2h0
V2luZG93Q29udHJvbGxlctQADgMfAyADIQMiAHMAHwN4gKeAjYACgLRbcGF0aENvbnRyb2zUAA4DHwMg
AyEDIgBBAB8DfoCngAeAAoC2VndpbmRvd9cADgMfA4EDggMgAyEDgwOEAB8DhgOHAHEDiQBWWU5TS2V5
UGF0aFlOU0JpbmRpbmdfEBxOU05pYkJpbmRpbmdDb25uZWN0b3JWZXJzaW9ugLuAAoC6gLmAcoC4XxAT
dmFsdWU6IHNlYXJjaFN0cmluZ1V2YWx1ZVxzZWFyY2hTdHJpbmfSADcAOAOOA4+jA48DUgA7XxAVTlNO
aWJCaW5kaW5nQ29ubmVjdG9y1wAOAx8DgQOCAyADIQODA4QAHwOTA5QDIwOWAFaAu4ACgL+AvoCfgL1f
EBtjb250ZW50QXJyYXk6IHF1ZXJ5LnJlc3VsdHNcY29udGVudEFycmF5XXF1ZXJ5LnJlc3VsdHPYAA4D
HwOBA4IDIAMhA5sDgwOEAyMDngOHATYDoQOiAFZZTlNPcHRpb25zgLuAn4DCgLmAW4DBgMNfEBx2YWx1
ZTogYXJyYW5nZWRPYmplY3RzLnRyYWNrXxAVYXJyYW5nZWRPYmplY3RzLnRyYWNr0wAOAqQAPgOmA6cD
qYDFoQOogMShAquAgV8QG05TQ29uZGl0aW9uYWxseVNldHNFZGl0YWJsZdIANwA4A60CsqICsgA72AAO
Ax8DgQOCAyADIQObA4MDhAMjA7EDhwEwA7QDtQBWgLuAn4DIgLmAKYDHgMlfEBx2YWx1ZTogYXJyYW5n
ZWRPYmplY3RzLnRpdGxlXxAVYXJyYW5nZWRPYmplY3RzLnRpdGxl0wAOAqQAPgOmA7oDvIDFoQOogMSh
AquAgdgADgMfA4EDggMgAyEDmwODA4QDIwPBA4cBMwPEA8UAVoC7gJ+AzIC5gEuAy4DNXxAddmFsdWU6
IGFycmFuZ2VkT2JqZWN0cy5sZW5ndGhfEBZhcnJhbmdlZE9iamVjdHMubGVuZ3Ro0wAOAqQAPgOmA8oD
zIDFoQOogMShAquAgdgADgMfA4EDggMgAyEDmwODA4QDIwPRA4cBMQPUA9UAVoC7gJ+A0IC5gD6Az4DR
XxAddmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5hcnRpc3RfEBZhcnJhbmdlZE9iamVjdHMuYXJ0aXN00wAO
AqQAPgOmA9oD3IDFoQOogMShAquAgdgADgMfA4EDggMgAyEDmwODA4QDIwPhA4cBNAPkA+UAVoC7gJ+A
1IC5gFGA04DVXxAbdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy55ZWFyXxAUYXJyYW5nZWRPYmplY3RzLnll
YXLTAA4CpAA+A6YD6gPsgMWhA6iAxKECq4CB2AAOAx8DgQOCAyADIQObA4MDhAMjA/EDhwE1A/QD9QBW
gLuAn4DYgLmAVoDXgNlfEBx2YWx1ZTogYXJyYW5nZWRPYmplY3RzLmdlbnJlXxAVYXJyYW5nZWRPYmpl
Y3RzLmdlbnJl0wAOAqQAPgOmA/oD/IDFoQOogMShAquAgdgADgMfA4EDggMgAyEDmwODA4QDIwQBA4cB
MgQEBAUAVoC7gJ+A3IC5gEaA24DdXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5hbGJ1bV8QFWFycmFu
Z2VkT2JqZWN0cy5hbGJ1bdMADgKkAD4DpgQKBAyAxaEDqIDEoQKrgIHYAA4DHwOBA4IDIAMhA5sDgwOE
AB8EEQOHAHMEFAQVAFaAu4ACgOCAuYCNgN+A4V8QGnZhbHVlOiBzcG90bGlnaHRTZWFyY2hQYXRoXxAT
c3BvdGxpZ2h0U2VhcmNoUGF0aNMADgKkAD4DpgQaBByAxaEEG4DioQQdgONfEBZOU1ZhbHVlVHJhbnNm
b3JtZXJOYW1lXxAWU3RyaW5nVG9VUkxUcmFuc2Zvcm1lctIADgA+BCEEIoDnrxAfAtwCHAQlAHABRQHR
ATABNgBBANoAewK/AMYATgJqAZYBNABxATEDIwBvALsBMwEyAbcB7AE1AHMCBQD3AHKAk4BfgOWAGYA1
gE+AKYBbgAeAHYARgIiAaIAMgHSARYBRgHKAPoCfgA+AbIBLgEaASoBVgFaAjYBagCGAhtIADgAyADME
RIAEgOZdTlNBcHBsaWNhdGlvbtIANwA4BEcCMaICMQA70gAOAD4EIQRKgOevEB8AcwE2AB8ATgEwATMA
2gDaAB8AcABvAHIAcABBAHEBMQDaAE4A2gAfAE4AcADaANoBMgE0ANoATgE1AHAAToCNgFuAAoAMgCmA
S4AdgB2AAoAZgA+AhoAZgAeAcoA+gB2ADIAdgAKADIAZgB2AHYBGgFGAHYAMgFaAGYAM0gAOAD4EIQRs
gOevECAC3AIcBCUAcAFFAdEBMAE2AEEA2gDGAHsCvwBOAmoBlgMjAHEBNAExAG8AuwEzATIAHwD3ATUA
cwHsAbcCBQBygJOAX4DlgBmANYBPgCmAW4AHgB2AaIARgIiADIB0gEWAn4BygFGAPoAPgGyAS4BGgAKA
IYBWgI2AVYBKgFqAhtIADgA+BCEEj4DnrxAgBJAEkQSSBJMElASVBJYElwSYBJkEmgSbBJwEnQSeBJ8E
oAShBKIEowSkBKUEpgSnBKgEqQSqBKsErAStBK4Er4DrgOyA7YDugO+A8IDxgPKA84D0gPWA9oD3gPiA
+YD6gPuA/ID9gP6A/4EBAIEBAYEBAoEBA4EBBIEBBYEBBoEBB4EBCIEBCYEBCllQYXRoIENlbGxfEB1U
ZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktMVtBcHBsaWNhdGlvbltTY3JvbGwgVmlld18QG1RleHQg
RmllbGQgQ2VsbCAoVGV4dCBDZWxsKV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS00XxAUVGFi
bGUgQ29sdW1uICh0aXRsZSlfEBRUYWJsZSBDb2x1bW4gKHRyYWNrKV8QG1BhbmVsIChPcGVuIGZyb20g
U3BvdGxpZ2h0KV8QSlNwb3RsaWdodCBQbGF5bGlzdCBWaWV3IChUaXRsZSwgQXJ0aXN0LCBBbGJ1bSwg
TGVuZ3RoLCBZZWFyLCBHZW5yZSwgVHJhY2spXxARVmVydGljYWwgU2Nyb2xsZXJfEB1CdXR0b24gQ2Vs
bCAoQWRkIHRvIFBsYXlsaXN0KV8QHlRleHQgRmllbGQgQ2VsbCAoU2VhcmNoIFBhdGg6KVxDb250ZW50
IFZpZXdfEBFTZWFyY2ggRmllbGQgQ2VsbF8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS0zXxAd
U3BvdGxpZ2h0IFBsYXlsaXN0IENvbnRyb2xsZXJcU2VhcmNoIEZpZWxkXxATVGFibGUgQ29sdW1uICh5
ZWFyKV8QFVRhYmxlIENvbHVtbiAoYXJ0aXN0KV8QHVB1c2ggQnV0dG9uIChBZGQgdG8gUGxheWxpc3Qp
XxATSG9yaXpvbnRhbCBTY3JvbGxlcl8QFVRhYmxlIENvbHVtbiAobGVuZ3RoKV8QFFRhYmxlIENvbHVt
biAoYWxidW0pXEZpbGUncyBPd25lcl8QEVRhYmxlIEhlYWRlciBWaWV3XxAUVGFibGUgQ29sdW1uIChn
ZW5yZSlfEBpQb3AgVXAgUGF0aCBDb250cm9sIFdpZGdldF8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBD
ZWxsKS0yXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTVfEB1UZXh0IEZpZWxkIENlbGwgKFRl
eHQgQ2VsbCktNl8QGlN0YXRpYyBUZXh0IChTZWFyY2ggUGF0aDop0gAOAD4EIQTSgOeiANoDI4AdgJ/S
AA4APgQhBNeA56IBAwM5gB6AoNIADgA+BCEE3IDnrxAyAtwEJQBwAUUBNgBBAHsCvwMZAxUCagGWATQB
MQBvALsDGwIFAB8A9wMSAhwDDQHRAxQDEQEwAx0A2gDGAw8DEwBOAxADHAMaAxgDIwBxAw4BMwEyAbcB
7AMXAHMBNQMWAwwAcoCTgOWAGYA1gFuAB4ARgIiAzoC8gHSARYBRgD6AD4BsgNaAWoACgCGAs4BfgKiA
T4C3gLGAKYDegB2AaICsgLWADICugNqA0oDKgJ+AcoCqgEuARoBKgFWAxoCNgFaAwICegIbSAA4APgQh
BRGA568QMgUSBRMFFAUVBRYCqwUYBRkFGgUbBRwFHQUeBR8FIAUhBSIFIwUkBSUFJgUnBSgFKQUqBSsF
LAUtBS4FLwUwBTEFMgUzBTQFNQU2BTcFOAU5BToFOwU8BT0FPgU/BUAFQQVCBUOBAQ+BARCBARGBARKB
AROAgYEBFIEBFYEBFoEBF4EBGIEBGYEBGoEBG4EBHIEBHYEBHoEBH4EBIIEBIYEBIoEBI4EBJIEBJYEB
JoEBJ4EBKIEBKYEBKoEBK4EBLIEBLYEBLoEBL4EBMIEBMYEBMoEBM4EBNIEBNYEBNoEBN4EBOIEBOYEB
OoEBO4EBPIEBPYEBPoEBPxBZE//////////9EBgQJRAdEFAQaBCiEDgQJxAiEAUQGhBmECsQpBCfECwQ
lRApEJoQoBAkEJ0QHBAbED0QSBCjEGUQXhBpEBAQNxChECAQIRAoECoQXRBYEB4QaxCXEE/SAA4APgBt
BXOAYKDSAA4APgQhBXaA56DSAA4APgQhBXmA56DSADcAOAV7BXyiBXwAO15OU0lCT2JqZWN0RGF0YQAI
ABkAIgAnADEAOgA/AEQAUgBUAGYC8gL4A0MDSgNRA18DcQONA5sDpwOzA8EDzAPaA/YEBAQXBCkEQwRN
BFoEXARfBGEEZARnBGkEawRtBHAEcwR1BHgEegR8BH4EgQSDBIYEjwSbBJ0EnwS7BMQEzQTYBN0E7AT1
BQgFEQUcBR4FIQUjBVQFYQVuBXwFhgWUBa0FugXMBeAF6gX2BfgF+gX8Bf4GAwYFBgcGCQYLBg0GDwYR
BiwGQgZKBlUGcgaEBo8GmAakBq0GuQa7Br0GvwbCBsQGxgbIBtEG0wbeBuAG4gbkBuYG6AcJBxEHGAci
ByQHJgcoByoHLQcuBzAHMgdMB30HiQefB7QHwwfVB+AH6gf4CAoIFwglCCoILAguCDAIMgg0CDYIOAg6
CDwIQQhKCFwIbQh0CHsIhAiGCI8IkQiUCKEIqgivCLYItwjACMkI1gjjCOwI9wkACQoJEQkdCVwJaAlx
CX4JkQmeCaoJuAnGCcgJygnMCc4J0QnTCdUJ1wnqCe0J7wnxCfMJ9Qn3CgAKAgoNCg8KEQoTChUKFwpE
Ck4KWApiCmQKZgpoCmoKbQpvCnEKcwp1CncKgAqCCoUKhwrmCwgLEgsoCzULSQteC3gLlAuvC74Lygvp
C/gMBAwGDAgMCgwTDBUMFwwZDBoMHAwlDCcMMAwzDDUMNgw4DDoMPAw+DEAMQgxEDE0MZQxxDHwMmQyb
DJ0MnwyhDKMMpQzSDNQM1gzYDNoM3AzeDOAM4gzkDOYM8Az5DQINFg0vDTENMw01DT4NQA1CDVkNYg1r
DXkNgg2EDZMNlQ2XDZkNmw2dDZ8NoQ3KDdkN5g3zDfsOBg4VDiAOKw4sDi4OMA4yDjsOPQ4/DkgOUQ5T
DlkOdg6CDocOiQ6LDo0Ojw6RDpcOqA6qDrMOtQ64DsUO0g7aDtwO6A7xDvYO/g8TDx8PLQ8vDzEPMw81
DzcPPg9QD10PXw9iD2sPdg+KD5wPvQ/CD8QPxg/ID8oPzA/PD9EP2w/wD/IP9A/2D/gQERAeECAQLBBB
EEMQRRBHEEkQXBBlEG4QdxB8EIoQsxC0ELYQuBC6EMMQxRDOENAQ1xD0EPYQ+BD6EPwQ/hEFERoRHBEe
ESARIhEuETsRPRFAEWERYxFlEWcRaRFrEW0RlhGXEZkRmxGdEaYRqBGxEbMRuRHWEdgR2hHcEd4R4BHm
EgcSCRILEg0SDxIREhMSQBJJEkoSSxJNEk8SURJaElwSZRJnEm4SixKNEo8SkRKTEpgSmhKhEsISxBLG
EsgSyhLMEtES0xMAEwETAhMEEwYTCBMRExMTHBMeEyMTQBNCE0QTRhNIE0oTTxNwE3ITdBN2E3gTehN8
E6kTqhOrE60TrxOxE7oTvBO+E8QT4RPjE+UT5xPpE+sT8RQSFBQUFhQYFBoUHBQeFEcUSBRKFEwUThRX
FFkUYhRkFGoUhxSJFIsUjRSPFJEUlxS4FLoUvBS+FMAUwhTEFM0U1BTjFOsVABUCFQQVBhUIFRIVHxUh
FSYVPRVGFUsVWhVyFXsVhBWPFbQVvRXGFdAV0hXUFdYV2BXaFdwV3hXnFf4WCxYUFh8WKhZTFlUWVxZZ
FlsWXRZfFmEWahaCFosWjRaQFpIWqxa0Fr0WyhbrFu0W7xbxFvMW9hb3FvkW+xcUF0kXXhdxF4UXmhet
F7IXtBe2F7gXuhe8F74XwxfEF8YXyBfKF98X4RfjF+UX5xf9GC4YMBg1GDcYORg7GD0YPxhCGEQYSRhQ
GGYYmxjBGMMYxRjHGMkYyxjNGM8Y1RjeGOAY4xjlGPIY+hj8GQEZAxkFGQoZDBkOGRwZSBlPGVgZXxl1
GYIZmBmhGawZwBnJGdYZ5BnwGhEaExoVGhcaGRocGh0aHxohGjgaWRpeGmAaYhpkGmYaaBptGm8afBqR
GpMalRqXGpkaphqvGroa3xrrGu0a7xrxGvMa9Rr2Gvga+hsDGwUbChsMGw4bKhtCG0sbUhtfG2Ubfhuf
G6sbwhvNG9Ib1BvWG9gb2xvdG98b6BvqG+sb9Bv9HAgcERwcHCocNRw+HEUcXRxoHHEcdhyJHJIclBy7
HL0cvxzBHMMcxRzHHMkcyxzNHM8c0RzTHNUc1xzZHNsc3RzfHPAc/h0HHQ8dER0THRUdFx1IHWUdfB2H
HZkdrR28HeEd/B4VHhYeGB4ZHhseHB4eHiAeIh4jHiUeJh4nHkUeWR5iHmQedR53Hnkeex59Hn8egR6D
HoUekx6YHpoeox6oHrMevB7DHtoe6R76Hvwe/h8AHwIfDB8dHx8fIR8jHyUfOh9LH00fTx9RH1Mfax98
H34fgB+CH4Qfkx+cH6Mfux/MH84f0B/SH9Qf8CABIAMgBSAHIAkgFSAmICggKiAsIC4gNSBSIFwgZiCF
IIcgiSCLII0gjyCRIKcgrSC6IMMgyiDiIP8hASEDIQUhByEJIQshKSE2IUQhZSFvIXEhcyF1IXcheSF7
IX0hnCG0IcEhwyHGIcghyyHNIesh9CH5IhoiHCIeIiAiIiIkIiYiKCJHIl8ibCJuInEicyJ2IngimSKb
Ip0inyKhIqMipSKnIsci4CLtIu8i8iL0Ivci+SMaIxwjHiMgIyIjJCMmIygjSCNhI24jcCNzI3UjeCN6
I5sjnSOfI6EjoyOlI6cjqSPHI94j6yPtI/Aj8iP1I/ckGCQaJBwkHiQgJCIkJCQmJEUkXSRqJGwkbyRx
JHQkdiSXJJkkmySdJJ8koSSjJKUkxCTcJOkk6yTuJPAk8yT1JRYlGCUaJRwlHiUgJSIlJCVBJVclZCVm
JWklayVuJXAliSWiJaslrSXuJfAl8iX0JfYl+CX6Jfwl/iYAJgImBCYGJggmCiYMJg4mECYSJhQmFiYY
JhomHCYeJiAmIiYkJiYmKCYqJiwmNSY3JjkmRyZQJlUmXiZgJqEmoyalJqcmqSarJq0mryaxJrMmtSa3
Jrkmuya9Jr8mwSbDJsUmxybJJssmzSbPJtEm0ybVJtcm2SbbJt0m3yboJuonLScvJzEnMyc1JzcnOSc7
Jz0nPydBJ0MnRSdHJ0knSydNJ08nUSdTJ1UnVydZJ1snXSdfJ2EnYydlJ2cnaSdrJ20ndid4J7snvSe/
J8EnwyfFJ8cnySfLJ80nzyfRJ9Mn1SfXJ9kn2yfdJ98n4SfjJ+Un6CfrJ+4n8Sf0J/cn+if9KAAoAygG
KBAoMCg8KEgoZiiGKJ0otCjSKR8pMylTKXQpgSmVKbUp1SniKfgqECowKkYqXip1KoIqliqtKsoq6isK
KyorRytQK1IrVytZK1srZCtmK2srbStvK3greivhK+Mr5SvnK+kr6yvtK+8r8SvzK/Ur9yv5K/sr/Sv/
LAEsAywFLAcsCSwLLA0sDywRLBMsFSwXLBksGywdLB8sISwjLCUsJywpLCssLSwvLDEsMyw1LDcsOSw7
LD0sPyxBLEMsRSxOLFAstyy6LL0swCzDLMYsyCzLLM4s0SzULNcs2izdLOAs4yzmLOks7CzvLPIs9Sz4
LPss/i0BLQQtBy0KLQ0tEC0TLRYtGS0cLR8tIi0lLSgtKy0uLTEtNC03LTotPS1ALUMtRi1JLUwtTi1X
LVktWy1dLV8tYS1jLWUtZy1pLWstbS1vLXEtcy11LXcteS17LX0tfy2BLYMthS2HLYktiy2NLY8tkS2T
LZUtly2ZLZstnS2fLaEtoy2lLactqS2rLa0tti24Lbktwi3ELcUtzi3QLdEt2i3fAAAAAAAAAgIAAAAA
AAAFfQAAAAAAAAAAAAAAAAAALe4</bytes>
</object>
</data>
</archive>

View File

@ -3,7 +3,7 @@
// Cog
//
// Created by Matthew Grinshpun on 13/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#import <Cocoa/Cocoa.h>

View File

@ -3,7 +3,7 @@
// Cog
//
// Created by Matthew Grinshpun on 13/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#import "SpotlightPlaylistController.h"

View File

@ -3,7 +3,7 @@
// Cog
//
// Created by Matthew Grinshpun on 11/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#import <Cocoa/Cocoa.h>

View File

@ -3,7 +3,7 @@
// Cog
//
// Created by Matthew Grinshpun on 11/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#import "SpotlightPlaylistEntry.h"

View File

@ -3,7 +3,7 @@
// Cog
//
// Created by Matthew Grinshpun on 12/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#import <Cocoa/Cocoa.h>

View File

@ -3,7 +3,7 @@
// Cog
//
// Created by Matthew Grinshpun on 12/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#import "SpotlightPlaylistView.h"

View File

@ -3,7 +3,7 @@
// Cog
//
// Created by Matthew Grinshpun on 11/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#include <Cocoa/Cocoa.h>

View File

@ -3,7 +3,7 @@
// Cog
//
// Created by Matthew Grinshpun on 10/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#import <Cocoa/Cocoa.h>

View File

@ -3,12 +3,13 @@
// Cog
//
// Created by Matthew Grinshpun on 10/02/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
// Copyright 2008 Matthew Leon Grinshpun. All rights reserved.
//
#import "SpotlightWindowController.h"
#import "PlaylistLoader.h"
#import "SpotlightPlaylistEntry.h"
#import "NSComparisonPredicate+CogPredicate.h"
// Minimum length of a search string (searching for very small strings gets ugly)
#define MINIMUM_SEARCH_STRING_LENGTH 3
@ -77,7 +78,7 @@ static NSPredicate * musicOnlyPredicate = nil;
- (NSPredicate *)processSearchString
{
NSMutableArray *searchComponents = [NSMutableArray arrayWithCapacity:10];
NSMutableArray *subpredicates = [NSMutableArray arrayWithCapacity:10];
NSScanner *scanner = [NSScanner scannerWithString:self.searchString];
@ -86,39 +87,47 @@ static NSPredicate * musicOnlyPredicate = nil;
NSString *scannedString;
if ([scanner scanUpToString:@" " intoString:&scannedString])
{
// don't add tiny strings in... They're make the system go nuts
// TODO: Maybe consider a better solution to the issue?
if ([scannedString length] >= MINIMUM_SEARCH_STRING_LENGTH)
if ([scannedString length] < MINIMUM_SEARCH_STRING_LENGTH)
continue;
if ([scannedString characterAtIndex:0] == '%')
{
[searchComponents addObject:scannedString];
if ([scannedString length] < (MINIMUM_SEARCH_STRING_LENGTH + 2))
continue;
// Search for artist
if([scannedString characterAtIndex:1] == 'a')
{
[subpredicates addObject:
[NSComparisonPredicate predicateForMdKey:@"kMDItemAuthors"
withString:[scannedString substringFromIndex:2]]];
}
// Search for album
if([scannedString characterAtIndex:1] == 'l')
{
[subpredicates addObject:
[NSComparisonPredicate predicateForMdKey:@"kMDItemAlbum"
withString:[scannedString substringFromIndex:2]]];
}
// Search for title
if([scannedString characterAtIndex:1] == 't')
{
[subpredicates addObject:
[NSComparisonPredicate predicateForMdKey:@"kMDItemTitle"
withString:[scannedString substringFromIndex:2]]];
}
}
else
{
[subpredicates addObject:
[NSComparisonPredicate predicateForMdKey:@"*"
withString:scannedString]];
}
}
}
// create an array of all the predicates to join together
NSMutableArray * subpredicates = [NSMutableArray
arrayWithCapacity:[searchComponents count]];
// we will ignore case and diacritics
unsigned options = (NSCaseInsensitivePredicateOption|
NSDiacriticInsensitivePredicateOption);
for(NSString *s in searchComponents)
{
// convert each "word" into "*word*"
NSString *processedKey = [NSString stringWithFormat: @"*%@*", s];
// Search all tags for something like word
NSPredicate *predicate = [NSComparisonPredicate
predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"*"]
rightExpression:[NSExpression expressionForConstantValue:processedKey]
modifier:NSDirectPredicateModifier
type:NSLikePredicateOperatorType
options:options];
//TODO: Ability to search only artist, albums, etc.
[subpredicates addObject: predicate];
}
if ([subpredicates count] == 0)
return Nil;
else if ([subpredicates count] == 1)
@ -178,9 +187,9 @@ replacementObjectForResultObject:(NSMetadataItem*)result
return [[[NSUserDefaults standardUserDefaults]
stringForKey:@"spotlightSearchPath"]copy];
}
// Normally, our nspathcontrol would just bind to the user defaults
// Normally, our NSPathcontrol would just bind to the user defaults
// However, this does not allow us to perform a new search when
// the path changes. This getter/setter combo wraps around the user
// the path changes. This getter/setter combo wraps the user
// defaults while performing a new search when the value changes.
- (void)setSpotlightSearchPath:(NSString *)aString
{