diff --git a/Application/PlaybackController.m b/Application/PlaybackController.m index 9cdf26df0..512812e18 100644 --- a/Application/PlaybackController.m +++ b/Application/PlaybackController.m @@ -198,7 +198,7 @@ double linearToLogarithmic(double linear) - (IBAction)prev:(id)sender { - if ([playlistController prev] == nil) + if ([playlistController prev] == NO) return; [self stop:self]; diff --git a/Playlist/PlaylistController.h b/Playlist/PlaylistController.h index fc2601041..3a49098fc 100644 --- a/Playlist/PlaylistController.h +++ b/Playlist/PlaylistController.h @@ -41,6 +41,9 @@ - (void)setRepeat:(BOOL)r; - (BOOL)repeat; +- (PlaylistEntry *)getNextEntry:(PlaylistEntry *)pe; +- (PlaylistEntry *)getPrevEntry:(PlaylistEntry *)pe; + /* Methods for undoing various actions */ - (NSUndoManager *)undoManager; diff --git a/Spotlight/SpotlightPanel.xib b/Spotlight/SpotlightPanel.xib index 53d77ce98..8ff071e14 100644 --- a/Spotlight/SpotlightPanel.xib +++ b/Spotlight/SpotlightPanel.xib @@ -8,7 +8,7 @@ 352.00 YES - + YES @@ -52,7 +52,7 @@ 134217728 Add to Playlist - LucidaGrande + LucidaGrande 1.300000e+01 1044 @@ -109,7 +109,7 @@ 0 Title - + 1.100000e+01 3100 @@ -119,7 +119,7 @@ 6 - System + System headerTextColor 3 @@ -130,12 +130,12 @@ 337772096 2048 - Text Cell + Text Cell 6 - + controlBackgroundColor 3 @@ -144,7 +144,7 @@ 6 - + controlTextColor @@ -165,7 +165,7 @@ 6 - + headerColor 3 @@ -177,7 +177,7 @@ 337772096 2048 - + @@ -203,7 +203,7 @@ 337772096 2048 - + @@ -310,7 +310,7 @@ 337772096 67110912 - + @@ -326,7 +326,7 @@ 6 - + gridColor 3 @@ -363,7 +363,7 @@ -2147483392 - {{0, 213}, {440, 15}} + {{-100, -100}, {440, 15}} 1 @@ -392,7 +392,7 @@ - 560 + 528 @@ -417,7 +417,7 @@ 1 6 - + textBackgroundColor @@ -482,7 +482,7 @@ 6 - + controlColor @@ -781,29 +781,29 @@ 161 + + + addToPlaylist: + + + + 163 + - contentArray: query.results + contentArray: query.results - + contentArray query.results 2 - 162 - - - - addToPlaylist: - - - - 163 + 166 @@ -1209,14 +1209,35 @@ - 163 + 166 YES - NSObject - + PlaylistLoader + NSObject + + YES + + YES + + + YES + + + + playlistController + PlaylistController + + + IBProjectSource + Playlist/PlaylistLoader.h + + + + SpotlightPlaylistView + PlaylistView YES @@ -1236,8 +1257,160 @@ - IBProjectSource - ThirdParty/UKKQueue/UKFileWatcher.h + + Spotlight/SpotlightPlaylistView.h + + + + PlaylistController + DNDArrayController + + YES + + YES + clear: + clearFilterPredicate: + showEntryInFinder: + takeRepeatFromObject: + takeShuffleFromObject: + + + YES + id + + + + + + + + YES + + YES + entriesController + playlistLoader + + + YES + EntriesController + PlaylistLoader + + + + + Playlist/PlaylistController.h + + + + TrackingSlider + NSSlider + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + Utils/TrackingSlider.h + + + + SpotlightPlaylistController + PlaylistController + + YES + + YES + + + YES + + + + spotlightWindowController + SpotlightWindowController + + + + Spotlight/SpotlightPlaylistController.h + + + + SpotlightWindowController + NSWindowController + + addToPlaylist: + + + + YES + + YES + pathControl + playlistController + playlistLoader + + + YES + NSPathControl + NSArrayController + PlaylistLoader + + + + + Spotlight/SpotlightWindowController.h + + + + PlaylistView + NSTableView + + YES + + YES + scrollToCurrentEntry: + shufflePlaylist: + sortByPath: + toggleColumn: + + + YES + + + + + + + + YES + + YES + playbackController + playlistController + + + YES + PlaybackController + PlaylistController + + + + + Playlist/PlaylistView.h @@ -1262,85 +1435,7 @@ - - ThirdParty/UKKQueue/UKMainThreadProxy.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/NDHotKeys/NDHotKeyEvent.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - + ThirdParty/AppleRemote/AppleRemote.h @@ -1366,256 +1461,114 @@ - + + ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/UKKQueue/UKMainThreadProxy.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/NDHotKeys/NDHotKeyEvent.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/UKKQueue/UKFileWatcher.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + ThirdParty/UKKQueue/UKKQueue.h - - DNDArrayController - NSArrayController - - YES - - YES - - - YES - - - - tableView - NSTableView - - - - Playlist/DNDArrayController.h - - - - PlaylistView - NSTableView - - YES - - YES - scrollToCurrentEntry: - shufflePlaylist: - sortByPath: - toggleColumn: - - - YES - id - - - - - - - YES - - YES - playbackController - playlistController - - - YES - PlaybackController - PlaylistController - - - - - Playlist/PlaylistView.h - - - - TrackingSlider - NSSlider - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - Utils/TrackingSlider.h - - - - SpotlightWindowController - NSWindowController - - - - - - YES - - YES - pathControl - playlistController - playlistLoader - - - YES - NSPathControl - NSArrayController - PlaylistLoader - - - - - Spotlight/SpotlightWindowController.h - - - - SpotlightPlaylistView - PlaylistView - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - Spotlight/SpotlightPlaylistView.h - - - - PlaylistLoader - - - YES - - YES - - - YES - - - - playlistController - PlaylistController - - - - Playlist/PlaylistLoader.h - - - - EntriesController - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - Playlist/EntriesController.h - - - - PlaylistController - DNDArrayController - - YES - - YES - clear: - clearFilterPredicate: - showEntryInFinder: - takeRepeatFromObject: - takeShuffleFromObject: - - - YES - - - - - - - - - YES - - YES - entriesController - playlistLoader - - - YES - EntriesController - PlaylistLoader - - - - - Playlist/PlaylistController.h - - - - SpotlightPlaylistController - PlaylistController - - YES - - YES - - - YES - - - - spotlightWindowController - SpotlightWindowController - - - - Spotlight/SpotlightPlaylistController.h - - PlaybackController @@ -1637,27 +1590,31 @@ prev: resume: seek: + skipToNextAlbum: + skipToPreviousAlbum: stop: toggleShowTimeRemaining: YES - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -1684,10 +1641,57 @@ - + Application/PlaybackController.h + + DNDArrayController + NSArrayController + + YES + + YES + + + YES + + + + tableView + NSTableView + + + + Playlist/DNDArrayController.h + + + + EntriesController + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + Playlist/EntriesController.h + + 0 @@ -1701,19 +1705,19 @@ ASIBKQEqAS0BNwFKAUsBUwFUAVkBXgFhAWkBagFrAW4BcgF7AXwBgQGCAYUBigGLAY0BkAGZAZoBoAGh AaYBpwGqAbEBugG7AcEBwgHJAdQB1QHcAd0BewHlAe8B8AH2AfcB/gIHAggCDgIPAhYCHwIgAiYCJwIu AjICNwI4AjsCPAI/AkACQwJPAlACUQJUAl0CXgEeAmICYwJmAm8CcAKCAocCiAKTApQClQKeAp8CowKs Aq0CrgD8Aq8CswK0ArcCuwLEAsUCzgLPAtQC1QLXAuEC5gLnAugC7ALtAvgC+wL+AwEACwMCAwQDBQMG -AwkDHgMmAzwDPQM+A0kDSgNMA04DTwNTA1gDWQNeA18DZANlA2oDawNuA3MDdAN5A3oDfwOAA4oDiwOM -A40DkAOXA5gDmQOaA6MDpAOlA6sDrAOuA7YDtwO4A74DxgPHA8gDzgPWA9cD2APeA+YD5wPoA+4D9gP3 -A/gD/gQGBAcECAQOBBYEFwQYBB4EHwQgBEIERQRGBEgEagSNBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7 -BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNUE2gUPBUQFRQVGBUcFSAFm -BUkFSgVLBUwFTQBXBU4FTwVQBVEFUgVTAJAFVAVVBVYFVwVYBVkFWgVbBVwFXQVeBV8AVgVgBWEFYgVj -BWQFZQVmBWcFaAVpBWoFawVsBW0FbgVvBXAFcQV0BXcFelUkbnVsbN8QEgANAA4ADwAQABEAEgATABQA +AwkDHgMmAycDKwMwAzEDNAM5A08DUANRA1wDXQNfA2EDYgNnA2gDbQNuA3MDdAN5A3oDfwOAA4wDjQOO +A48DlQOWA5gDmwOjA6QDpQOrA7MDtAO1A7sDwwPEA8UDywPTA9QD1QPbA+ID4wPkA+wD7QPuA/QD+wP8 +A/0D/gQGBAcECAQOBA8EEAQYBBkEGgQgBEIERQRGBEgEagSNBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7 +BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNUE2gUPBUQFRQVGBUcFSAVJ +BUoFSwVMBU0AVgVOAWYFTwVQBVEFUgVTBVQAkAVVBVYFVwVYBVkFWgVbBVwFXQVeBV8FYAVhBWIFYwVk +BWUFZgVnBWgFaQVqAFcFawVsBW0FbgVvBXAFcQV0BXcFelUkbnVsbN8QEgANAA4ADwAQABEAEgATABQA FQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMFZOU1Jv b3RWJGNsYXNzXU5TT2JqZWN0c0tleXNfEA9OU0NsYXNzZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlP aWRzVmFsdWVzXU5TQ29ubmVjdGlvbnNbTlNOYW1lc0tleXNbTlNGcmFtZXdvcmtdTlNDbGFzc2VzS2V5 c1pOU09pZHNLZXlzXU5TTmFtZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlDb25uZWN0b3JzXU5TRm9u dE1hbmFnZXJfEBBOU1Zpc2libGVXaW5kb3dzXxAPTlNPYmplY3RzVmFsdWVzXxAXTlNBY2Nlc3NpYmls aXR5T2lkc0tleXNZTlNOZXh0T2lkXE5TT2lkc1ZhbHVlc4ACgQFDgOSBAQyBAUKAnYDpgAWBAQuBAQ2A -6oEBQIAAgAaA6IEBQRClgQEO0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA18QGVNwb3RsaWdodFdpbmRv +6oEBQIAAgAaA6IEBQRCogQEO0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA18QGVNwb3RsaWdodFdpbmRv d0NvbnRyb2xsZXLSADcAOAA5ADpYJGNsYXNzZXNaJGNsYXNzbmFtZaIAOgA7Xk5TQ3VzdG9tT2JqZWN0 WE5TT2JqZWN0XxAQSUJDb2NvYUZyYW1ld29ya9IADgA+AD8AQFpOUy5vYmplY3RzgJGhAEGAB9wAQwAO AEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYACtcTlNXaW5kb3dWaWV3XE5T @@ -1735,7 +1739,7 @@ pQA7Vk5TRm9udFDSADcAOACoAKmkAKkAqgB2ADtcTlNCdXR0b25DZWxsXE5TQWN0aW9uQ2VsbNIANwA4 AKwAraUArQCuAK8AsAA7WE5TQnV0dG9uWU5TQ29udHJvbFZOU1ZpZXdbTlNSZXNwb25kZXLfEA8AXwCy AA4AdQCzALQAtQBgALYAYQBjAGQAtwC4ALkATgC7ALwAvQC+AL8AwADBAMIAwwBlAE4AxgDHAMdbTlNI U2Nyb2xsZXJYTlNzRmxhZ3NcTlNDb3JuZXJWaWV3XxAQTlNIZWFkZXJDbGlwVmlld1xOU1Njcm9sbEFt -dHNbTlNWU2Nyb2xsZXJdTlNOZXh0S2V5Vmlld11OU0NvbnRlbnRWaWV3gAyAbIBxgHARAjCAJYAigBpP +dHNbTlNWU2Nyb2xsZXJdTlNOZXh0S2V5Vmlld11OU0NvbnRlbnRWaWV3gAyAbIBxgHARAhCAJYAigBpP EBAAAAAAAAAAAEGYAABBmAAAEQESgA2ADIBogBuAG9IADgA+AG0Ay4BgpQDHAMYAuwDAAL+AG4BogGyA IoAl2wBfAA4AdQDSAGAAYQDTAGMA1ABkALgAcADWANcAVgDYANkA2gBlANwAcADaWU5TY3ZGbGFnc1lO U0RvY1ZpZXdZTlNCR0NvbG9ygBmAZ4BmgBwRCQCAHYANgDeAGYAd0gAOAD4AbQDhgGChANqAHd8QFwBf @@ -1789,155 +1793,155 @@ 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/ +SQJYAPwBJgBlAkwAcAJcgBmAGYBrgG2ADYBqgBkjP+2kYQAAAABfEBl7ey0xMDAsIC0xMDB9LCB7NDQw +LCAxNX190gAOAD4AbQJggGChAPeAIV8QFnt7MjAsIDQ0fSwgezQ0MCwgMjI4fX3SADcAOAJkAmWkAmUA +rwCwADtcTlNTY3JvbGxWaWV32ABfAA4AdQB2AGEAdwBjAGQATgJoAmkCagJrAH0AZQBOgAyAhYBzgHQR +AQoJgA2ADF8QFnt7MjAsIDI4Mn0sIHszMTMsIDIyfX3dAIIADgJxAOgAhwCIAIkAiwJyAnMCdAJ1AUwC +dgJ3AngCeQCPAJQAcQJ9APwAfQJ/AoABel8QEk5TQ2FuY2VsQnV0dG9uQ2VsbF8QEE5TVGV4dEJlemVs +U3R5bGVfEBFOU0RyYXdzQmFja2dyb3VuZF8QEk5TU2VhcmNoQnV0dG9uQ2VsbF8QEE5TTWF4aW11bVJl +Y2VudHMSFHH+QICEgHqAdYAWgBOAchIQAAQACYB3EP+AOtUADgFgAVoBYgFjAVwBowFmAoUBaIAvgESA +doAxXxATdGV4dEJhY2tncm91bmRDb2xvctwCRACCAA4AhACFAIYAhwCJAIoAiwJFAIwCagKKAI4CjADz +AI8CjgBxApAA8wKRApKAdBIAAf4AgBcQS4AWgHiAchEBkIB5EghEQP9Wc2VhcmNoXxATX3NlYXJjaEZp +ZWxkU2VhcmNoOt0CRACCAA4AhACFAIYClgCHAIkAigCLAkUAjAJqAooAjgKMAPMAjwKaApsAcQKQAPMC +nQKSXxAjTlNBY2Nlc3NpYmlsaXR5T3ZlcnJpZGRlbkF0dHJpYnV0ZXOAdIAXgBaAfIB7gHKAg1VjbGVh +ctIADgA+AG0CoYBgoQKigH3TAA4CpAA+AqUCpgKpV05TLmtleXOAgqICpwKogH6Af6ICqgKrgICAgV1B +WERlc2NyaXB0aW9uXxApTlNBY2Nlc3NpYmlsaXR5RW5jb2RlZEF0dHJpYnV0ZXNWYWx1ZVR5cGVWY2Fu +Y2Vs0gA3ADgCsAKxowKxArIAO18QE05TTXV0YWJsZURpY3Rpb25hcnlcTlNEaWN0aW9uYXJ5XxATX3Nl +YXJjaEZpZWxkQ2FuY2VsOtIANwA4ArUCtqUCtgFxAKoAdgA7XxARTlNTZWFyY2hGaWVsZENlbGzSADcA +OAK4ArmmArkCugCuAK8AsAA7XU5TU2VhcmNoRmllbGRbTlNUZXh0RmllbGTYAF8ADgB1AHYAYQB3AGMA +ZABOAr0CvgK/AsAAfQBlAE6ADICMgIeAiBEBIQmADYAMXxAUe3s4OCwgMTR9LCB7OTYsIDE3fX3YAIIA +DgDoAIcAiACJAIsBTALGAXQCyALJAJQAcgLMAXoSBAH+QIA8gIqAiYATgIYSEEAEAIA6XFNlYXJjaCBQ +YXRoOtUADgFgAVoBYgFjAVwBfgFmAtIBaIAvgDmAi4AxXGNvbnRyb2xDb2xvctIANwA4AtYCuqUCugCu +AK8AsAA72QBfAA4AdQB2AtgAYQB3AGMAZABOAtoC2wLcAt0CwAB9AGUATltOU0RyYWdUeXBlc4AMgJaA +koCTgI4JgA2ADNIADgA+AD8C44CRogLkAuWAj4CQXxAZQXBwbGUgVVJMIHBhc3RlYm9hcmQgdHlwZV8Q +FU5TRmlsZW5hbWVzUGJvYXJkVHlwZdIANwA4AukC6qMC6gLrADtcTlNNdXRhYmxlU2V0VU5TU2V0XxAW +e3sxODksIDEwfSwgezI3MSwgMjZ9fdgC7gCCAA4AiACJAIsC7wLwAFYC8QLyAJQAcwL1AvYAc1tOU1Bh +dGhTdHlsZV8QFE5TUGF0aENvbXBvbmVudENlbGxzWk5TRGVsZWdhdGUSFCH+AYCVgBOAjRGAAICUgI3S +AA4APgBtAvqAYKDSADcAOAL8Av2kAv0AqgB2ADtaTlNQYXRoQ2VsbNIANwA4Av8DAKUDAACuAK8AsAA7 +XU5TUGF0aENvbnRyb2xaezQ4MCwgMzIwfdIANwA4AwMAr6MArwCwADtfEBV7ezAsIDB9LCB7MTI4MCwg +Nzc4fX1aezQwMCwgMjc2fdIANwA4AwcDCKIDCAA7XxAQTlNXaW5kb3dUZW1wbGF0ZdIADgA+AG0DC4Bg +rxASAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdgJ6AoYCkgK2Ar4CxgLOAtYC3gL+A +w4DHgMuAz4DSgNaA2oDg1AAOAx8DIAMhAyIAQQAfAyVdTlNEZXN0aW5hdGlvblhOU1NvdXJjZVdOU0xh +YmVsgKCAB4ACgJ9Wd2luZG930gA3ADgDKAMpowMpAyoAO18QFE5TTmliT3V0bGV0Q29ubmVjdG9yXk5T +TmliQ29ubmVjdG9y1AAOAx8DIAMhAywAHwBvAy+Ao4ACgA+Aol5hZGRUb1BsYXlsaXN0OtIANwA4AzID +M6MDMwMqADtfEBVOU05pYkNvbnRyb2xDb25uZWN0b3LUAA4DHwMgAyEDIgM2AB8DOICggKWAAoCs3AM6 +AA4DOwDmAzwDPQM+Az8DQAAyA0EDQgB9APQAfQNGAH0DSANJA0oAfQNMAH0AfV8QGk5TRmlsdGVyUmVz +dHJpY3RzSW5zZXJ0aW9uXxAUTlNQcmVzZXJ2ZXNTZWxlY3Rpb25aTlNFZGl0YWJsZV8QD19OU01hbmFn +ZWRQcm94eV8QEU5TT2JqZWN0Q2xhc3NOYW1lXk5TRGVjbGFyZWRLZXlzXxAiTlNDbGVhcnNGaWx0ZXJQ +cmVkaWNhdGVPbkluc2VydGlvbl8QGE5TU2VsZWN0c0luc2VydGVkT2JqZWN0c18QFk5TQXZvaWRzRW1w +dHlTZWxlY3Rpb24JgGUJgKcJgKqAqYCoCYCmCQlfEBtTcG90bGlnaHRQbGF5bGlzdENvbnRyb2xsZXJf +EBFOU0FycmF5Q29udHJvbGxlctIADgA+AG0DU4BgqAFQAUMB6QGUAbUCAgHOAhqALIAqgFKAP4BHgFeA +TIBcXVBsYXlsaXN0RW50cnnRAA4DXoCr0gA3ADgDYAM9ogM9ADtfEBJwbGF5bGlzdENvbnRyb2xsZXLU +AA4DHwMgAyEDIgM2ANoDZoCggKWAHYCuWmRhdGFTb3VyY2XUAA4DHwMgAyEDIgDaAzYDbICggB2ApYCw +WXRhYmxlVmlld9QADgMfAyADIQMiAHEAQQNygKCAcoAHgLJfEBVpbml0aWFsRmlyc3RSZXNwb25kZXLU +AA4DHwMgAyEDIgAfAzYDeICggAKApYC0XxAZc3BvdGxpZ2h0V2luZG93Q29udHJvbGxlctQADgMfAyAD +IQMiAHMAHwN+gKCAjYACgLZbcGF0aENvbnRyb2zYAA4DHwOBA4IDIAMhA4MDhAOFAzYDhwOIATMDigOL +AFZZTlNLZXlQYXRoWU5TQmluZGluZ1lOU09wdGlvbnNfEBxOU05pYkJpbmRpbmdDb25uZWN0b3JWZXJz +aW9ugL6ApYC6gLmAS4C4gLtfEB12YWx1ZTogYXJyYW5nZWRPYmplY3RzLmxlbmd0aFV2YWx1ZV8QFmFy +cmFuZ2VkT2JqZWN0cy5sZW5ndGjTAA4CpAA+A5ADkQOTgL2hA5KAvKECq4CBXxAbTlNDb25kaXRpb25h +bGx5U2V0c0VkaXRhYmxl0gA3ADgDlwKyogKyADvSADcAOAOZA5qjA5oDKgA7XxAVTlNOaWJCaW5kaW5n +Q29ubmVjdG9y2AAOAx8DgQOCAyADIQODA4QDhQM2A54DiAEyA6EDogBWgL6ApYDBgLmARoDAgMJfEBx2 +YWx1ZTogYXJyYW5nZWRPYmplY3RzLmFsYnVtXxAVYXJyYW5nZWRPYmplY3RzLmFsYnVt0wAOAqQAPgOQ +A6cDqYC9oQOSgLyhAquAgdgADgMfA4EDggMgAyEDgwOEA4UDNgOuA4gBNgOxA7IAVoC+gKWAxYC5gFuA +xIDGXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50cmFja18QFWFycmFuZ2VkT2JqZWN0cy50cmFja9MA +DgKkAD4DkAO3A7mAvaEDkoC8oQKrgIHYAA4DHwOBA4IDIAMhA4MDhAOFAzYDvgOIATUDwQPCAFaAvoCl +gMmAuYBWgMiAyl8QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMuZ2VucmVfEBVhcnJhbmdlZE9iamVjdHMu +Z2VucmXTAA4CpAA+A5ADxwPJgL2hA5KAvKECq4CB2AAOAx8DgQOCAyADIQODA4QDhQM2A84DiAE0A9ED +0gBWgL6ApYDNgLmAUYDMgM5fEBt2YWx1ZTogYXJyYW5nZWRPYmplY3RzLnllYXJfEBRhcnJhbmdlZE9i +amVjdHMueWVhctMADgKkAD4DkAPXA9mAvaEDkoC8oQKrgIHXAA4DHwOBA4IDIAMhA4QDhQAfA94DiABx +A+EAVoC+gAKA0YC5gHKA0F8QE3ZhbHVlOiBzZWFyY2hTdHJpbmdcc2VhcmNoU3RyaW5n2AAOAx8DgQOC +AyADIQODA4QDhQM2A+cDiAExA+oD6wBWgL6ApYDUgLmAPoDTgNVfEB12YWx1ZTogYXJyYW5nZWRPYmpl +Y3RzLmFydGlzdF8QFmFycmFuZ2VkT2JqZWN0cy5hcnRpc3TTAA4CpAA+A5AD8APygL2hA5KAvKECq4CB +1wAOAx8DgQOCAyADIQOEA4UAHwP3A/gDNgP6AFaAvoACgNmA2IClgNdfEBtjb250ZW50QXJyYXk6IHF1 +ZXJ5LnJlc3VsdHNcY29udGVudEFycmF5XXF1ZXJ5LnJlc3VsdHPYAA4DHwOBA4IDIAMhA4MDhAOFAB8E +AQOIAHMEBAQFAFaAvoACgNyAuYCNgNuA3V8QGnZhbHVlOiBzcG90bGlnaHRTZWFyY2hQYXRoXxATc3Bv +dGxpZ2h0U2VhcmNoUGF0aNMADgKkAD4DkAQKBAyAvaEEC4DeoQQNgN9fEBZOU1ZhbHVlVHJhbnNmb3Jt +ZXJOYW1lXxAWU3RyaW5nVG9VUkxUcmFuc2Zvcm1lctgADgMfA4EDggMgAyEDgwOEA4UDNgQTA4gBMAQW +BBcAVoC+gKWA4oC5gCmA4YDjXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50aXRsZV8QFWFycmFuZ2Vk +T2JqZWN0cy50aXRsZdMADgKkAD4DkAQcBB6AvaEDkoC8oQKrgIHSAA4APgQhBCKA568QHwE1AtwEJQIF +Ar8B0QBxATMBMQBBALsDNgBvAbcATgE2AHsAcAE0AmoA2gFFAMYA9wByAHMBMAIcATIB7AGWgFaAk4Dl +gFqAiIBPgHKAS4A+gAeAbIClgA+ASoAMgFuAEYAZgFGAdIAdgDWAaIAhgIaAjYApgF+ARoBVgEXSAA4A +MgAzBESABIDmXU5TQXBwbGljYXRpb27SADcAOARHAjGiAjEAO9IADgA+BCEESoDnrxAfANoAcwAfATUA +cgEzAE4A2gDaAB8AcAAfAE4BMgBBANoAbwBOANoAcQBwATAAcABwAE4ATgDaATYA2gE0ATGAHYCNgAKA +VoCGgEuADIAdgB2AAoAZgAKADIBGgAeAHYAPgAyAHYBygBmAKYAZgBmADIAMgB2AW4AdgFGAPtIADgA+ +BCEEbIDnrxAgATUC3AQlAgUCvwHRAHEBMwExAEEAuwM2AG8BtwBOATYAcAB7ATQCagDaAMYA9wFFAHIA +cwEwAhwAHwEyAZYB7IBWgJOA5YBagIiAT4BygEuAPoAHgGyApYAPgEqADIBbgBmAEYBRgHSAHYBogCGA +NYCGgI2AKYBfgAKARoBFgFXSAA4APgQhBI+A568QIASQBJEEkgSTBJQElQSWBJcEmASZBJoEmwScBJ0E +ngSfBKAEoQSiBKMEpASlBKYEpwSoBKkEqgSrBKwErQSuBK+A64DsgO2A7oDvgPCA8YDygPOA9ID1gPaA +94D4gPmA+oD7gPyA/YD+gP+BAQCBAQGBAQKBAQOBAQSBAQWBAQaBAQeBAQiBAQmBAQpfEBRUYWJsZSBD +b2x1bW4gKGdlbnJlKVlQYXRoIENlbGxbQXBwbGljYXRpb25fEBtUZXh0IEZpZWxkIENlbGwgKFRleHQg +Q2VsbClfEB5UZXh0IEZpZWxkIENlbGwgKFNlYXJjaCBQYXRoOilfEB1UZXh0IEZpZWxkIENlbGwgKFRl +eHQgQ2VsbCktMVxTZWFyY2ggRmllbGRfEBVUYWJsZSBDb2x1bW4gKGxlbmd0aClfEBVUYWJsZSBDb2x1 +bW4gKGFydGlzdClfEBtQYW5lbCAoT3BlbiBmcm9tIFNwb3RsaWdodClfEBNIb3Jpem9udGFsIFNjcm9s +bGVyXxAdU3BvdGxpZ2h0IFBsYXlsaXN0IENvbnRyb2xsZXJfEB1QdXNoIEJ1dHRvbiAoQWRkIHRvIFBs +YXlsaXN0KV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS02XENvbnRlbnQgVmlld18QFFRhYmxl +IENvbHVtbiAodHJhY2spW1Njcm9sbCBWaWV3XxAdQnV0dG9uIENlbGwgKEFkZCB0byBQbGF5bGlzdClf +EBNUYWJsZSBDb2x1bW4gKHllYXIpXxARU2VhcmNoIEZpZWxkIENlbGxfEEpTcG90bGlnaHQgUGxheWxp +c3QgVmlldyAoVGl0bGUsIEFydGlzdCwgQWxidW0sIExlbmd0aCwgWWVhciwgR2VucmUsIFRyYWNrKV8Q +EVZlcnRpY2FsIFNjcm9sbGVyXxARVGFibGUgSGVhZGVyIFZpZXdfEB1UZXh0IEZpZWxkIENlbGwgKFRl +eHQgQ2VsbCktNV8QGlN0YXRpYyBUZXh0IChTZWFyY2ggUGF0aDopXxAaUG9wIFVwIFBhdGggQ29udHJv +bCBXaWRnZXRfEBRUYWJsZSBDb2x1bW4gKHRpdGxlKV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxs +KS0zXEZpbGUncyBPd25lcl8QFFRhYmxlIENvbHVtbiAoYWxidW0pXxAdVGV4dCBGaWVsZCBDZWxsIChU +ZXh0IENlbGwpLTJfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktNNIADgA+BCEE0oDnogDaAzaA +HYCl0gAOAD4EIQTXgOeiAQMDTIAegKbSAA4APgQhBNyA568QMgQlAr8DHQMcATMBMQC7AG8DFwMTAE4B +NgB7AHADFQJqANoBRQDGAPcDDQIcAxgDFgMRATIBlgMUAxIBNQLcAwwDEAIFAdEDDwBxAEEDGgM2Aw4B +twMbATQAcgBzATAAHwMZAeyA5YCIgOCA2oBLgD6AbIAPgMeAtYAMgFuAEYAZgL+AdIAdgDWAaIAhgKGA +X4DLgMOAsYBGgEWAt4CzgFaAk4CegK+AWoBPgK2AcoAHgNKApYCkgEqA1oBRgIaAjYApgAKAz4BV0gAO +AD4EIQURgOevEDIFEgUTBRQFFQUWBRcFGAUZBRoFGwUcBR0FHgUfBSAFIQUiBSMFJAUlBSYFJwUoBSkF +KgUrBSwFLQUuBS8FMAUxBTIFMwU0BTUFNgKrBTgFOQU6BTsFPAU9BT4FPwVABUEFQgVDgQEPgQEQgQER +gQESgQETgQEUgQEVgQEWgQEXgQEYgQEZgQEagQEbgQEcgQEdgQEegQEfgQEggQEhgQEigQEjgQEkgQEl +gQEmgQEngQEogQEpgQEqgQErgQEsgQEtgQEugQEvgQEwgQExgQEygQEzgIGBATSBATWBATaBATeBATiB +ATmBATqBATuBATyBAT2BAT6BAT8T//////////0QUBBdEJ0QIBAiEBoQBRBmEJ8QHRAYEGUQOBAcECUQ +GxCjECwQXhBrED0QIRAnEGkQoBAeEFkQSBCVECsQKRCXEDcQaBAQEKEQKBCmEE8QWBAkEKcQmhAq0gAO +AD4AbQVzgGCg0gAOAD4EIQV2gOeg0gAOAD4EIQV5gOeg0gA3ADgFewV8ogV8ADteTlNJQk9iamVjdERh +dGEACAAZACIAJwAxADoAPwBEAFIAVABmAvIC+ANDA0oDUQNfA3EDjQObA6cDswPBA8wD2gP2BAQEFwQp +BEMETQRaBFwEXwRhBGQEZwRpBGsEbQRwBHMEdQR4BHoEfAR+BIEEgwSGBI8EmwSdBJ8EuwTEBM0E2ATd +BOwE9QUIBREFHAUeBSEFIwVUBWEFbgV8BYYFlAWtBboFzAXgBeoF9gX4BfoF/AX+BgMGBQYHBgkGCwYN +Bg8GEQYsBkIGSgZVBnIGhAaPBpgGpAatBrkGuwa9Br8GwgbEBsYGyAbRBtMG3gbgBuIG5AbmBugHCQcR +BxgHIgckByYHKAcqBy0HLgcwBzIHTAd9B4kHnwe0B8MH1QfgB+oH+AgKCBcIJQgqCCwILggwCDIINAg2 +CDgIOgg8CEEISghcCG0IdAh7CIQIhgiPCJEIlAihCKoIrwi2CLcIwAjJCNYI4wjsCPcJAAkKCREJHQlc +CWgJcQl+CZEJngmqCbgJxgnICcoJzAnOCdEJ0wnVCdcJ6gntCe8J8QnzCfUJ9woACgIKDQoPChEKEwoV +ChcKRApOClgKYgpkCmYKaApqCm0KbwpxCnMKdQp3CoAKggqFCocK5gsICxILKAs1C0kLXgt4C5QLrwu+ +C8oL6Qv4DAQMBgwIDAoMEwwVDBcMGQwaDBwMJQwnDDAMMww1DDYMOAw6DDwMPgxADEIMRAxNDGUMcQx8 +DJkMmwydDJ8MoQyjDKUM0gzUDNYM2AzaDNwM3gzgDOIM5AzmDPAM+Q0CDRYNLw0xDTMNNQ0+DUANQg1Z +DWINaw15DYINhA2TDZUNlw2ZDZsNnQ2fDaENyg3ZDeYN8w37DgYOFQ4gDisOLA4uDjAOMg47Dj0OPw5I +DlEOUw5ZDnYOgg6HDokOiw6NDo8OkQ6XDqgOqg6zDrUOuA7FDtIO2g7cDugO8Q72Dv4PEw8fDy0PLw8x +DzMPNQ83Dz4PUA9dD18PYg9rD3YPig+cD70Pwg/ED8YPyA/KD8wPzw/RD9sP8A/yD/QP9g/4EBEQHhAg +ECwQQRBDEEUQRxBJEFwQZRBuEHcQfBCKELMQtBC2ELgQuhDDEMUQzhDQENcQ9BD2EPgQ+hD8EP4RBREa +ERwRHhEgESIRLhE7ET0RQBFhEWMRZRFnEWkRaxFtEZYRlxGZEZsRnRGmEagRsRGzEbkR1hHYEdoR3BHe +EeAR5hIHEgkSCxINEg8SERITEkASSRJKEksSTRJPElESWhJcEmUSZxJuEosSjRKPEpESkxKYEpoSoRLC +EsQSxhLIEsoSzBLREtMTABMBEwITBBMGEwgTERMTExwTHhMjE0ATQhNEE0YTSBNKE08TcBNyE3QTdhN4 +E3oTfBOpE6oTqxOtE68TsRO6E7wTvhPEE+ET4xPlE+cT6RPrE/EUEhQUFBYUGBQaFBwUHhRHFEgUShRM +FE4UVxRZFGIUZBRqFIcUiRSLFI0UjxSRFJcUuBS6FLwUvhTAFMIUxBTNFNQU4xTrFQAVAhUEFQYVCBUS +FR8VIRUmFT0VRhVLFVoVchV7FYQVjxW0Fb0VxhXQFdIV1BXWFdgV2hXcFd4V5xX+FgsWFBYfFioWUxZV +FlcWWRZbFl0WXxZhFmoWhhaPFpEWlBaWFq8WuBbBFs4W7xbxFvMW9Rb3FvoW+xb9Fv8XGBdNF2IXdReJ +F54XsRe2F7gXuhe8F74XwBfCF8cXyBfKF8wXzhfjF+UX5xfpF+sYARgyGDQYORg7GD0YPxhBGEMYRhhI +GE0YVBhqGJ8YxRjHGMkYyxjNGM8Y0RjTGNkY4hjkGOcY6Rj2GP4ZABkFGQcZCRkOGRAZEhkgGUwZUxlc +GWMZeRmGGZwZpRmwGcQZzRnaGegZ9BoVGhcaGRobGh0aIBohGiMaJRo8Gl0aYhpkGmYaaBpqGmwacRpz +GoAalRqXGpkamxqdGqoasxq+GuMa7xrxGvMa9Rr3Gvka+hr8Gv4bBxsJGw4bEBsSGy4bRhtPG1YbYxtp +G4IboxuvG8Yb0RvWG9gb2hvcG98b4RvjG+wb7hvvG/gcARwMHBUcIBwuHDkcQhxJHGEcbBx1HHocjRyW +HJgcvxzBHMMcxRzHHMkcyxzNHM8c0RzTHNUc1xzZHNsc3RzfHOEc4xz0HQIdCx0THRUdFx0ZHRsdIh0r +HTIdSR1YHWkdax1tHW8dcR2AHYkdkB2oHbkdux29Hb8dwR3yHg8eJh4xHkMeVx5mHoseph6/HsAewh7D +HsUexh7IHsoezB7NHs8e0B7RHu8fAx8MHw4fHx8hHyMfJR8nHykfKx8tHy8fPR9CH0QfTR9SH2cfeB96 +H3wffh+AH4sfnB+eH6Afoh+kH64fvx/BH8MfxR/HH98f8B/yH/Qf9h/4IBQgJSAnICkgKyAtIDkgWiBk +IG4geCCXIJkgmyCdIJ8goSCjIKUgxSDLIOQg8SDzIPYg+CD7IP0hGyEkISkhMiE5IVEhciF0IXYheCF6 +IXwhfiGAIZ8htyHEIcYhySHLIc4h0CHxIfMh9SH3Ifkh+yH9If8iHiI2IkMiRSJIIkoiTSJPInAiciJ0 +InYieCJ6InwifiKdIrUiwiLEIsciySLMIs4i7yLxIvMi9SL3Ivki+yL9IxsjMiM/I0EjRCNGI0kjSyNo +I2ojbCNuI3AjciN0I4ojlyO4I7ojvCO+I8AjwiPEI8Yj5iP/JAwkDiQRJBMkFiQYJDUkNyQ5JDskPSQ/ +JEEkXyRsJHokmySdJJ8koSSjJKUkpySpJMYk3CTpJOsk7iTwJPMk9SUOJSclSCVKJUwlTiVQJVIlVCVW +JXUljSWaJZwlnyWhJaQlpiWvJbEl8iX0JfYl+CX6Jfwl/iYAJgImBCYGJggmCiYMJg4mECYSJhQmFiYY +JhomHCYeJiAmIiYkJiYmKCYqJiwmLiYwJjkmOyY9JksmVCZZJmImZCalJqcmqSarJq0mryaxJrMmtSa3 +Jrkmuya9Jr8mwSbDJsUmxybJJssmzSbPJtEm0ybVJtcm2SbbJt0m3ybhJuMm7CbuJzEnMyc1JzcnOSc7 +Jz0nPydBJ0MnRSdHJ0knSydNJ08nUSdTJ1UnVydZJ1snXSdfJ2EnYydlJ2cnaSdrJ20nbydxJ3onfCe/ +J8EnwyfFJ8cnySfLJ80nzyfRJ9Mn1SfXJ9kn2yfdJ98n4SfjJ+Un5yfpJ+wn7yfyJ/Un+Cf7J/4oASgE +KAcoCighKCsoNyhVKHYoliijKLso0yjxKQcpJylHKWcpdCmLKZcptynNKeEqLipCKlYqdiqTKrAqxyrn +KvQrCysrK0srVCtWK1srXStfK2graitvK3Ercyt8K34r5SvnK+kr6yvtK+8r8SvzK/Ur9yv5K/sr/Sv/ LAEsAywFLAcsCSwLLA0sDywRLBMsFSwXLBksGywdLB8sISwjLCUsJywpLCssLSwvLDEsMyw1LDcsOSw7 -LD0sPyxBLEMsRSxOLFAstyy6LL0swCzDLMYsyCzLLM4s0SzULNcs2izdLOAs4yzmLOks7CzvLPIs9Sz4 -LPss/i0BLQQtBy0KLQ0tEC0TLRYtGS0cLR8tIi0lLSgtKy0uLTEtNC03LTotPS1ALUMtRi1JLUwtTi1X +LD0sPyxBLEMsRSxHLEksUixULLssvizBLMQsxyzKLM0s0CzTLNYs2SzcLN8s4izlLOgs6yzuLPEs9Cz3 +LPos/S0ALQMtBi0JLQwtDy0SLRUtGC0bLR4tIS0kLSctKi0sLS8tMi01LTgtOy0+LUEtRC1HLUotTS1Q LVktWy1dLV8tYS1jLWUtZy1pLWstbS1vLXEtcy11LXcteS17LX0tfy2BLYMthS2HLYktiy2NLY8tkS2T -LZUtly2ZLZstnS2fLaEtoy2lLactqS2rLa0tti24Lbktwi3ELcUtzi3QLdEt2i3fAAAAAAAAAgIAAAAA -AAAFfQAAAAAAAAAAAAAAAAAALe4 +LZUtly2ZLZstnS2fLaEtoy2lLactqS2rLa0try2xLbotvC29LcYtyC3JLdIt1C3VLd4t4wAAAAAAAAIC +AAAAAAAABX0AAAAAAAAAAAAAAAAAAC3yA diff --git a/Spotlight/SpotlightTransformers.m b/Spotlight/SpotlightTransformers.m index 6ead43643..1bedbbe2f 100644 --- a/Spotlight/SpotlightTransformers.m +++ b/Spotlight/SpotlightTransformers.m @@ -10,6 +10,7 @@ @interface StringToURLTransformer: NSValueTransformer {} @end + @implementation StringToURLTransformer + (Class)transformedValueClass { return [NSURL class]; } + (BOOL)allowsReverseTransformation { return YES; } @@ -27,4 +28,6 @@ return [value absoluteString]; } +@end + @end \ No newline at end of file diff --git a/Spotlight/SpotlightWindowController.h b/Spotlight/SpotlightWindowController.h index f0b5f2e40..e9c56b8d8 100644 --- a/Spotlight/SpotlightWindowController.h +++ b/Spotlight/SpotlightWindowController.h @@ -17,6 +17,7 @@ NSMetadataQuery *query; NSString *searchString; NSString *spotlightSearchPath; + NSArray *oldResults; } - (IBAction)addToPlaylist:(id)sender; @@ -27,5 +28,6 @@ @property(retain) NSMetadataQuery *query; @property(copy) NSString *searchString; @property(copy) NSString *spotlightSearchPath; +@property(retain) NSArray *oldResults; @end diff --git a/Spotlight/SpotlightWindowController.m b/Spotlight/SpotlightWindowController.m index d05acea0f..3a9962777 100644 --- a/Spotlight/SpotlightWindowController.m +++ b/Spotlight/SpotlightWindowController.m @@ -189,6 +189,7 @@ static NSPredicate * musicOnlyPredicate = nil; [self.query release]; [self.searchString release]; [musicOnlyPredicate release]; + [self.oldResults release]; [super dealloc]; } @@ -202,6 +203,19 @@ static NSPredicate * musicOnlyPredicate = nil; [self.query enableUpdates]; } +// Don't update the track list until some results have been gathered +- (id)valueForKeyPath:(NSString *)keyPath +{ + if([keyPath isEqualToString:@"query.results"]) + { + if(([self.query.results count] == 0) && [self.query isGathering]) + return self.oldResults; + self.oldResults = [NSArray arrayWithArray:self.query.results]; + return self.oldResults; + } + return [super valueForKeyPath:keyPath]; +} + #pragma mark NSMetadataQuery delegate methods // replace the NSMetadataItem with a PlaylistEntry @@ -249,4 +263,6 @@ replacementObjectForResultObject:(NSMetadataItem*)result } } +@synthesize oldResults; + @end