Ben Copsey

Reuse authentiction information in the session, removing the need to start the r…

…equest twice for authenticating servers when the authentication info has already been accepted
Big code cleanup - more to come
Bug fixes
@@ -29,8 +29,11 @@ @@ -29,8 +29,11 @@
29 //Dictionary for custom request headers 29 //Dictionary for custom request headers
30 NSMutableDictionary *requestHeaders; 30 NSMutableDictionary *requestHeaders;
31 31
32 - //If usesKeychain is true, network requests will attempt to read credentials from the keychain, and will save them in the keychain when they are successfully presented 32 + //If useKeychainPersistance is true, network requests will attempt to read credentials from the keychain, and will save them in the keychain when they are successfully presented
33 - BOOL usesKeychain; 33 + BOOL useKeychainPersistance;
  34 +
  35 + //If useSessionPersistance is true, network requests will save credentials and reuse for the duration of the session (until clearSession is called)
  36 + BOOL useSessionPersistance;
34 37
35 //When downloadDestinationPath is set, the result of this request will be downloaded to the file at this location 38 //When downloadDestinationPath is set, the result of this request will be downloaded to the file at this location
36 //If downloadDestinationPath is not set, download data will be stored in memory 39 //If downloadDestinationPath is not set, download data will be stored in memory
@@ -72,7 +75,7 @@ @@ -72,7 +75,7 @@
72 CFHTTPAuthenticationRef authentication; 75 CFHTTPAuthenticationRef authentication;
73 76
74 // Credentials associated with the authentication (reused until server says no) 77 // Credentials associated with the authentication (reused until server says no)
75 - CFMutableDictionaryRef credentials; 78 + //CFMutableDictionaryRef credentials;
76 79
77 //Size of the response 80 //Size of the response
78 double contentLength; 81 double contentLength;
@@ -100,6 +103,9 @@ @@ -100,6 +103,9 @@
100 //Called on the delegate when the request fails 103 //Called on the delegate when the request fails
101 SEL didFailSelector; 104 SEL didFailSelector;
102 105
  106 + NSDictionary *responseHeaders;
  107 + NSMutableDictionary *requestCredentials;
  108 +
103 } 109 }
104 110
105 #pragma mark init / dealloc 111 #pragma mark init / dealloc
@@ -162,17 +168,14 @@ @@ -162,17 +168,14 @@
162 #pragma mark http authentication stuff 168 #pragma mark http authentication stuff
163 169
164 // Reads the response headers to find the content length, and returns true if the request needs a username and password (or if those supplied were incorrect) 170 // Reads the response headers to find the content length, and returns true if the request needs a username and password (or if those supplied were incorrect)
165 -- (BOOL)isAuthorizationFailure; 171 +- (BOOL)readResponseHeadersReturningAuthenticationFailure;
166 172
167 // Unlock (unpause) the request thread so it can resume the request 173 // Unlock (unpause) the request thread so it can resume the request
168 // Should be called by delegates when they have populated the authentication information after an authentication challenge 174 // Should be called by delegates when they have populated the authentication information after an authentication challenge
169 - (void)retryWithAuthentication; 175 - (void)retryWithAuthentication;
170 176
171 // Apply authentication information and resume the request after an authentication challenge 177 // Apply authentication information and resume the request after an authentication challenge
172 -- (void)applyCredentialsAndResume; 178 +- (void)attemptToApplyCredentialsAndResume;
173 -  
174 -// Look for somewhere we can get authentication information from  
175 -- (void)applyCredentialsLoad;  
176 179
177 // Customise or overidde this to have a generic error for authentication failure 180 // Customise or overidde this to have a generic error for authentication failure
178 - (NSError *)authenticationError; 181 - (NSError *)authenticationError;
@@ -202,13 +205,19 @@ @@ -202,13 +205,19 @@
202 @property (assign) id delegate; 205 @property (assign) id delegate;
203 @property (assign) NSObject *uploadProgressDelegate; 206 @property (assign) NSObject *uploadProgressDelegate;
204 @property (assign) NSObject *downloadProgressDelegate; 207 @property (assign) NSObject *downloadProgressDelegate;
205 -@property (assign) BOOL usesKeychain; 208 +@property (assign) BOOL useKeychainPersistance;
  209 +@property (assign) BOOL useSessionPersistance;
206 @property (retain) NSString *downloadDestinationPath; 210 @property (retain) NSString *downloadDestinationPath;
207 @property (assign) SEL didFinishSelector; 211 @property (assign) SEL didFinishSelector;
208 @property (assign) SEL didFailSelector; 212 @property (assign) SEL didFailSelector;
209 @property (retain,readonly) NSString *authenticationRealm; 213 @property (retain,readonly) NSString *authenticationRealm;
210 @property (retain) NSError *error; 214 @property (retain) NSError *error;
211 @property (assign,readonly) BOOL complete; 215 @property (assign,readonly) BOOL complete;
  216 +@property (retain) NSDictionary *responseHeaders;
  217 +@property (retain) NSDictionary *requestCredentials;
  218 +
  219 +- (void)saveCredentialsToKeychain:(NSMutableDictionary *)newCredentials;
  220 +- (BOOL)applyCredentials:(NSMutableDictionary *)newCredentials;
212 221
213 222
214 @end 223 @end
@@ -16,17 +16,15 @@ static const CFOptionFlags kNetworkEvents = kCFStreamEventOpenCompleted | @@ -16,17 +16,15 @@ static const CFOptionFlags kNetworkEvents = kCFStreamEventOpenCompleted |
16 kCFStreamEventEndEncountered | 16 kCFStreamEventEndEncountered |
17 kCFStreamEventErrorOccurred; 17 kCFStreamEventErrorOccurred;
18 18
  19 +static CFHTTPAuthenticationRef sessionAuthentication = NULL;
  20 +static NSMutableDictionary *sessionCredentials = nil;
19 21
20 -static CFMutableDictionaryRef sharedCredentials = NULL;  
21 -static CFHTTPAuthenticationRef sharedAuthentication = NULL;  
22 22
23 static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventType type, void *clientCallBackInfo) { 23 static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventType type, void *clientCallBackInfo) {
24 [((ASIHTTPRequest*)clientCallBackInfo) handleNetworkEvent: type]; 24 [((ASIHTTPRequest*)clientCallBackInfo) handleNetworkEvent: type];
25 } 25 }
26 26
27 27
28 -  
29 -  
30 @implementation ASIHTTPRequest 28 @implementation ASIHTTPRequest
31 29
32 30
@@ -35,13 +33,14 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -35,13 +33,14 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
35 33
36 - (id)initWithURL:(NSURL *)newURL 34 - (id)initWithURL:(NSURL *)newURL
37 { 35 {
38 - [super init]; 36 + [self init];
39 url = [newURL retain]; 37 url = [newURL retain];
40 return self; 38 return self;
41 } 39 }
42 40
43 - (id)init { 41 - (id)init {
44 [super init]; 42 [super init];
  43 + lastBytesSent = 0;
45 postData = nil; 44 postData = nil;
46 fileData = nil; 45 fileData = nil;
47 username = nil; 46 username = nil;
@@ -50,9 +49,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -50,9 +49,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
50 authenticationRealm = nil; 49 authenticationRealm = nil;
51 outputStream = nil; 50 outputStream = nil;
52 authentication = NULL; 51 authentication = NULL;
53 - credentials = NULL; 52 + //credentials = NULL;
54 request = NULL; 53 request = NULL;
55 - usesKeychain = NO; 54 + responseHeaders = nil;
  55 + [self setUseKeychainPersistance:YES];
  56 + [self setUseSessionPersistance:YES];
56 didFinishSelector = @selector(requestFinished:); 57 didFinishSelector = @selector(requestFinished:);
57 didFailSelector = @selector(requestFailed:); 58 didFailSelector = @selector(requestFailed:);
58 delegate = nil; 59 delegate = nil;
@@ -64,13 +65,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -64,13 +65,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
64 if (authentication) { 65 if (authentication) {
65 CFRelease(authentication); 66 CFRelease(authentication);
66 } 67 }
67 - if (credentials) {  
68 - CFRelease(credentials);  
69 - }  
70 if (request) { 68 if (request) {
71 CFRelease(request); 69 CFRelease(request);
72 } 70 }
73 [self cancelLoad]; 71 [self cancelLoad];
  72 + [requestCredentials release];
74 [error release]; 73 [error release];
75 [postData release]; 74 [postData release];
76 [fileData release]; 75 [fileData release];
@@ -147,6 +146,12 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -147,6 +146,12 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
147 146
148 #pragma mark request logic 147 #pragma mark request logic
149 148
  149 ++ (void)setSessionCredentials:(NSMutableDictionary *)newCredentials
  150 +{
  151 + [sessionCredentials release];
  152 + sessionCredentials = [newCredentials retain];
  153 +}
  154 +
150 // Create the request 155 // Create the request
151 - (void)main 156 - (void)main
152 { 157 {
@@ -164,9 +169,14 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -164,9 +169,14 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
164 [self failWithProblem:[NSString stringWithFormat:@"Unable to create request for: %@",url]]; 169 [self failWithProblem:[NSString stringWithFormat:@"Unable to create request for: %@",url]];
165 return; 170 return;
166 } 171 }
167 - 172 +
168 - if (sharedAuthentication && sharedCredentials) { 173 + //If we've already talked to this server and have valid credentials, let's apply them to the request
169 - CFHTTPMessageApplyCredentialDictionary(request, sharedAuthentication, sharedCredentials, NULL); 174 + if (useSessionPersistance && sessionCredentials && sessionAuthentication) {
  175 + if (!CFHTTPMessageApplyCredentialDictionary(request, sessionAuthentication, (CFMutableDictionaryRef)sessionCredentials, NULL)) {
  176 + CFRelease(sessionAuthentication);
  177 + sessionAuthentication = NULL;
  178 + [ASIHTTPRequest setSessionCredentials:nil];
  179 + }
170 } 180 }
171 181
172 //Set your own boundary string only if really obsessive. We don't bother to check if post data contains the boundary, since it's pretty unlikely that it does. 182 //Set your own boundary string only if really obsessive. We don't bother to check if post data contains the boundary, since it's pretty unlikely that it does.
@@ -222,15 +232,23 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -222,15 +232,23 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
222 // Start the request 232 // Start the request
223 - (void)loadRequest 233 - (void)loadRequest
224 { 234 {
  235 +
225 [authenticationLock release]; 236 [authenticationLock release];
226 authenticationLock = [[NSConditionLock alloc] initWithCondition:1]; 237 authenticationLock = [[NSConditionLock alloc] initWithCondition:1];
227 238
228 complete = NO; 239 complete = NO;
229 totalBytesRead = 0; 240 totalBytesRead = 0;
230 lastBytesRead = 0; 241 lastBytesRead = 0;
  242 +
  243 + //If we're retrying a request after an authentication failure, let's remove any progress we made
  244 + if (lastBytesSent > 0 && uploadProgressDelegate) {
  245 + [uploadProgressDelegate setDoubleValue:[uploadProgressDelegate doubleValue]-lastBytesSent];
  246 + [uploadProgressDelegate setMaxValue:[uploadProgressDelegate maxValue]-lastBytesSent];
  247 + }
  248 +
231 lastBytesSent = 0; 249 lastBytesSent = 0;
232 contentLength = 0; 250 contentLength = 0;
233 - haveExaminedHeaders = NO; 251 + [self setResponseHeaders:nil];
234 receivedData = CFDataCreateMutable(NULL, 0); 252 receivedData = CFDataCreateMutable(NULL, 0);
235 253
236 // Create the stream for the request. 254 // Create the stream for the request.
@@ -305,7 +323,7 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -305,7 +323,7 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
305 [[NSFileManager defaultManager] removeFileAtPath:downloadDestinationPath handler:nil]; 323 [[NSFileManager defaultManager] removeFileAtPath:downloadDestinationPath handler:nil];
306 } 324 }
307 325
308 - haveExaminedHeaders = NO; 326 + [self setResponseHeaders:nil];
309 } 327 }
310 328
311 329
@@ -330,11 +348,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -330,11 +348,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
330 348
331 - (void)updateUploadProgress 349 - (void)updateUploadProgress
332 { 350 {
  351 + double byteCount = [[(NSNumber *)CFReadStreamCopyProperty (readStream, kCFStreamPropertyHTTPRequestBytesWrittenCount) autorelease] doubleValue];
333 if (uploadProgressDelegate) { 352 if (uploadProgressDelegate) {
334 - double byteCount = [[(NSNumber *)CFReadStreamCopyProperty (readStream, kCFStreamPropertyHTTPRequestBytesWrittenCount) autorelease] doubleValue];  
335 [uploadProgressDelegate incrementBy:byteCount-lastBytesSent]; 353 [uploadProgressDelegate incrementBy:byteCount-lastBytesSent];
336 - lastBytesSent = byteCount; 354 + }
337 - } 355 + lastBytesSent = byteCount;
338 } 356 }
339 357
340 358
@@ -349,7 +367,8 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -349,7 +367,8 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
349 367
350 - (void)updateDownloadProgress 368 - (void)updateDownloadProgress
351 { 369 {
352 - if (downloadProgressDelegate) { 370 + //We won't update downlaod progress until we've examined the headers, since we might need to authenticate
  371 + if (downloadProgressDelegate && responseHeaders) {
353 [downloadProgressDelegate incrementBy:totalBytesRead-lastBytesRead]; 372 [downloadProgressDelegate incrementBy:totalBytesRead-lastBytesRead];
354 lastBytesRead = totalBytesRead; 373 lastBytesRead = totalBytesRead;
355 } 374 }
@@ -390,38 +409,35 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -390,38 +409,35 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
390 409
391 #pragma mark http authentication 410 #pragma mark http authentication
392 411
393 - 412 +- (BOOL)readResponseHeadersReturningAuthenticationFailure
394 -// Parse the response headers to get the content-length, and check to see if we need to authenticate 413 +{
395 -- (BOOL)isAuthorizationFailure  
396 - {  
397 - CFHTTPMessageRef responseHeaders = (CFHTTPMessageRef)CFReadStreamCopyProperty(readStream, kCFStreamPropertyHTTPResponseHeader);  
398 BOOL isAuthenticationChallenge = NO; 414 BOOL isAuthenticationChallenge = NO;
399 - if (responseHeaders) { 415 + CFHTTPMessageRef headers = (CFHTTPMessageRef)CFReadStreamCopyProperty(readStream, kCFStreamPropertyHTTPResponseHeader);
400 - if (CFHTTPMessageIsHeaderComplete(responseHeaders)) { 416 + if (CFHTTPMessageIsHeaderComplete(headers)) {
401 - 417 + responseHeaders = (NSDictionary *)CFHTTPMessageCopyAllHeaderFields(headers);
402 - // Is the server response a challenge for credentials? 418 +
403 - isAuthenticationChallenge = (CFHTTPMessageGetResponseStatusCode(responseHeaders) == 401); 419 + // Is the server response a challenge for credentials?
404 - 420 + isAuthenticationChallenge = (CFHTTPMessageGetResponseStatusCode(headers) == 401);
405 - if (!isAuthenticationChallenge) { 421 +
406 - 422 + //We won't reset the download progress delegate if we got an authentication challenge
407 - //See if we got a Content-length header 423 + if (!isAuthenticationChallenge) {
408 - CFStringRef cLength = CFHTTPMessageCopyHeaderFieldValue(responseHeaders,CFSTR("Content-Length")); 424 +
409 - if (cLength) { 425 + //See if we got a Content-length header
410 - contentLength = CFStringGetDoubleValue(cLength); 426 + NSString *cLength = [responseHeaders valueForKey:@"Content-Length"];
411 - if (downloadProgressDelegate) { 427 + if (cLength) {
412 - [self performSelectorOnMainThread:@selector(resetDownloadProgress:) withObject:[NSNumber numberWithDouble:contentLength] waitUntilDone:YES]; 428 + contentLength = CFStringGetDoubleValue((CFStringRef)cLength);
413 - } 429 + if (downloadProgressDelegate) {
414 - CFRelease(cLength); 430 + [self performSelectorOnMainThread:@selector(resetDownloadProgress:) withObject:[NSNumber numberWithDouble:contentLength] waitUntilDone:YES];
415 } 431 }
416 } 432 }
417 -  
418 } 433 }
419 - CFRelease(responseHeaders); 434 +
420 - 435 + }
421 - } 436 + CFRelease(headers);
422 return isAuthenticationChallenge; 437 return isAuthenticationChallenge;
423 } 438 }
424 439
  440 +
425 // Called by delegate to resume loading once authentication info has been populated 441 // Called by delegate to resume loading once authentication info has been populated
426 - (void)retryWithAuthentication 442 - (void)retryWithAuthentication
427 { 443 {
@@ -429,147 +445,164 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -429,147 +445,164 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
429 [authenticationLock unlockWithCondition:2]; 445 [authenticationLock unlockWithCondition:2];
430 } 446 }
431 447
  448 +- (void)saveCredentialsToKeychain:(NSMutableDictionary *)newCredentials
  449 +{
  450 + NSURLCredential *authenticationCredentials = [NSURLCredential credentialWithUser:[newCredentials objectForKey:(NSString *)kCFHTTPAuthenticationUsername]
  451 + password:[newCredentials objectForKey:(NSString *)kCFHTTPAuthenticationPassword] persistence:NSURLCredentialPersistencePermanent];
  452 +
  453 + if (authenticationCredentials) {
  454 + [ASIHTTPRequest saveCredentials:authenticationCredentials forHost:[url host] port:[[url port] intValue] protocol:[url scheme] realm:authenticationRealm];
  455 + }
  456 +}
432 457
433 - 458 +- (BOOL)applyCredentials:(NSMutableDictionary *)newCredentials
434 -- (void)applyCredentialsAndResume { 459 +{
435 - // Apply whatever credentials we've built up to the old request 460 +
436 - if (!CFHTTPMessageApplyCredentialDictionary(request, authentication, credentials, NULL)) { 461 + if (newCredentials && authentication && request) {
437 - [self failWithProblem:@"Failed to apply credentials to request"]; 462 + // Apply whatever credentials we've built up to the old request
438 - } else { 463 + if (CFHTTPMessageApplyCredentialDictionary(request, authentication, (CFMutableDictionaryRef)newCredentials, NULL)) {
439 - 464 + //If we have credentials and they're ok, let's save them to the keychain
440 - //If we have credentials and they're ok, let's save them to the keychain 465 + if (useKeychainPersistance) {
441 - if (usesKeychain) { 466 + [self saveCredentialsToKeychain:newCredentials];
442 - NSURLCredential *authenticationCredentials = [NSURLCredential credentialWithUser:(NSString *)CFDictionaryGetValue(credentials, kCFHTTPAuthenticationUsername) 467 + }
443 - password:(NSString *)CFDictionaryGetValue(credentials, kCFHTTPAuthenticationPassword) 468 + if (useSessionPersistance) {
444 - persistence:NSURLCredentialPersistencePermanent]; 469 + if (sessionAuthentication) {
445 - 470 + CFRelease(sessionAuthentication);
446 - if (authenticationCredentials) { 471 + }
447 - [ASIHTTPRequest saveCredentials:authenticationCredentials forHost:[url host] port:[[url port] intValue] protocol:[url scheme] realm:authenticationRealm]; 472 + sessionAuthentication = authentication;
  473 + CFRetain(sessionAuthentication);
  474 +
  475 + [ASIHTTPRequest setSessionCredentials:newCredentials];
448 } 476 }
  477 + [self setRequestCredentials:newCredentials];
  478 + return TRUE;
449 } 479 }
450 - 480 + }
451 - // Now that we've updated our request, retry the load 481 + return FALSE;
452 - [self loadRequest];  
453 - }  
454 } 482 }
455 483
  484 +- (NSMutableDictionary *)getCredentials
  485 +{
  486 + NSMutableDictionary *newCredentials = [[[NSMutableDictionary alloc] init] autorelease];
  487 +
  488 + // Get the authentication realm
  489 + [authenticationRealm release];
  490 + authenticationRealm = nil;
  491 + if (!CFHTTPAuthenticationRequiresAccountDomain(authentication)) {
  492 + authenticationRealm = (NSString *)CFHTTPAuthenticationCopyRealm(authentication);
  493 + }
  494 +
  495 + //First, let's look at the url to see if the username and password were included
  496 + NSString *user = [url user];
  497 + NSString *pass = [url password];
  498 +
  499 + //If the username and password weren't in the url, let's try to use the ones set in this object
  500 + if ((!user || !pass) && username && password) {
  501 + user = username;
  502 + pass = password;
  503 + }
  504 +
  505 + //Ok, that didn't work, let's try the keychain
  506 + if ((!user || !pass) && useKeychainPersistance) {
  507 + NSURLCredential *authenticationCredentials = [ASIHTTPRequest savedCredentialsForHost:[url host] port:443 protocol:[url scheme] realm:authenticationRealm];
  508 + if (authenticationCredentials) {
  509 + user = [authenticationCredentials user];
  510 + pass = [authenticationCredentials password];
  511 + }
  512 +
  513 + }
  514 +
  515 + //If we have a username and password, let's apply them to the request and continue
  516 + if (user && pass) {
  517 +
  518 + [newCredentials setObject:user forKey:(NSString *)kCFHTTPAuthenticationUsername];
  519 + [newCredentials setObject:pass forKey:(NSString *)kCFHTTPAuthenticationPassword];
  520 + return newCredentials;
  521 + }
  522 + return NULL;
  523 +}
456 524
457 -- (void)applyCredentialsLoad 525 +- (void)attemptToApplyCredentialsAndResume
458 { 526 {
459 - // Get the authentication information 527 +
  528 + //Read authentication data
460 if (!authentication) { 529 if (!authentication) {
461 CFHTTPMessageRef responseHeader = (CFHTTPMessageRef) CFReadStreamCopyProperty(readStream,kCFStreamPropertyHTTPResponseHeader); 530 CFHTTPMessageRef responseHeader = (CFHTTPMessageRef) CFReadStreamCopyProperty(readStream,kCFStreamPropertyHTTPResponseHeader);
462 authentication = CFHTTPAuthenticationCreateFromResponse(NULL, responseHeader); 531 authentication = CFHTTPAuthenticationCreateFromResponse(NULL, responseHeader);
463 CFRelease(responseHeader); 532 CFRelease(responseHeader);
464 } 533 }
465 - CFStreamError err; 534 +
466 if (!authentication) { 535 if (!authentication) {
467 - // the newly created authentication object is bad, must return  
468 [self failWithProblem:@"Failed to get authentication object from response headers"]; 536 [self failWithProblem:@"Failed to get authentication object from response headers"];
469 return; 537 return;
  538 + }
470 539
  540 + //See if authentication is valid
  541 + CFStreamError err;
  542 + if (!CFHTTPAuthenticationIsValid(authentication, &err)) {
471 543
472 - //Authentication is not valid, we need to get new ones  
473 - } else if (!CFHTTPAuthenticationIsValid(authentication, &err)) {  
474 -  
475 - // destroy authentication and credentials  
476 - if (credentials) {  
477 - CFRelease(credentials);  
478 - credentials = NULL;  
479 - }  
480 CFRelease(authentication); 544 CFRelease(authentication);
481 authentication = NULL; 545 authentication = NULL;
482 546
483 - // check for bad credentials (to be treated separately) 547 + // check for bad credentials, so we can give the delegate a chance to replace them
484 if (err.domain == kCFStreamErrorDomainHTTP && (err.error == kCFStreamErrorHTTPAuthenticationBadUserName || err.error == kCFStreamErrorHTTPAuthenticationBadPassword)) { 548 if (err.domain == kCFStreamErrorDomainHTTP && (err.error == kCFStreamErrorHTTPAuthenticationBadUserName || err.error == kCFStreamErrorHTTPAuthenticationBadPassword)) {
485 ignoreError = YES; 549 ignoreError = YES;
486 if ([delegate respondsToSelector:@selector(authorizationNeededForRequest:)]) { 550 if ([delegate respondsToSelector:@selector(authorizationNeededForRequest:)]) {
487 [delegate performSelectorOnMainThread:@selector(authorizationNeededForRequest:) withObject:self waitUntilDone:YES]; 551 [delegate performSelectorOnMainThread:@selector(authorizationNeededForRequest:) withObject:self waitUntilDone:YES];
488 [authenticationLock lockWhenCondition:2]; 552 [authenticationLock lockWhenCondition:2];
489 [authenticationLock unlock]; 553 [authenticationLock unlock];
490 - [self applyCredentialsLoad]; 554 +
  555 + //Hopefully, the delegate gave us some credentials, let's apply them and reload
  556 + [self attemptToApplyCredentialsAndResume];
491 return; 557 return;
492 } 558 }
493 } 559 }
494 [self setError:[self authenticationError]]; 560 [self setError:[self authenticationError]];
495 complete = YES; 561 complete = YES;
  562 + return;
  563 + }
496 564
497 - 565 + [self cancelLoad];
498 - } else { 566 +
499 - 567 + if (requestCredentials) {
500 - [self cancelLoad]; 568 + if ([self applyCredentials:requestCredentials]) {
501 - 569 + [self loadRequest];
502 - if (credentials) { 570 + } else {
503 - [self applyCredentialsAndResume]; 571 + [self failWithProblem:@"Failed to apply credentials to request"];
504 - 572 + }
505 - // are a user name & password needed? 573 +
506 - } else if (CFHTTPAuthenticationRequiresUserNameAndPassword(authentication)) { 574 + // are a user name & password needed?
507 - 575 + } else if (CFHTTPAuthenticationRequiresUserNameAndPassword(authentication)) {
508 576
509 - // Build the credentials dictionary 577 + NSMutableDictionary *newCredentials = [self getCredentials];
510 - credentials = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 578 +
511 - 579 + //If we have some credentials to use let's apply them to the request and continue
512 - 580 + if (newCredentials) {
513 - [authenticationRealm release];  
514 - authenticationRealm = nil;  
515 -  
516 - // Get the authentication realm  
517 - if (!CFHTTPAuthenticationRequiresAccountDomain(authentication)) {  
518 - authenticationRealm = (NSString *)CFHTTPAuthenticationCopyRealm(authentication);  
519 - }  
520 -  
521 - //First, let's look at the url to see if the username and password were included  
522 - CFStringRef user = (CFStringRef)[url user];  
523 - CFStringRef pass = (CFStringRef)[url password];  
524 -  
525 - //If the username and password weren't in the url, let's try to use the ones set in this object  
526 - if ((!user || !pass) && username && password) {  
527 - user = (CFStringRef)username;  
528 - pass = (CFStringRef)password;  
529 - }  
530 -  
531 - //Ok, that didn't work, let's try the keychain  
532 - if ((!user || !pass) && usesKeychain) {  
533 - NSURLCredential *authenticationCredentials = [ASIHTTPRequest savedCredentialsForHost:[url host] port:443 protocol:[url scheme] realm:authenticationRealm];  
534 - if (authenticationCredentials) {  
535 - user = (CFStringRef)[authenticationCredentials user];  
536 - pass = (CFStringRef)[authenticationCredentials password];  
537 - }  
538 -  
539 - }  
540 581
541 - //If we have a username and password, let's apply them to the request and continue 582 + if ([self applyCredentials:newCredentials]) {
542 - if (user && pass) { 583 + [self loadRequest];
543 - 584 + } else {
544 - CFDictionarySetValue(credentials, kCFHTTPAuthenticationUsername, user); 585 + [self failWithProblem:@"Failed to apply credentials to request"];
545 - CFDictionarySetValue(credentials, kCFHTTPAuthenticationPassword, pass);  
546 -  
547 - [self applyCredentialsAndResume];  
548 - return;  
549 - }  
550 - if (credentials) {  
551 - CFRelease(credentials);  
552 - credentials = NULL;  
553 } 586 }
554 - //We've got no credentials, let's ask the delegate to sort this out  
555 - ignoreError = YES;  
556 - if ([delegate respondsToSelector:@selector(authorizationNeededForRequest:)]) {  
557 - [delegate performSelectorOnMainThread:@selector(authorizationNeededForRequest:) withObject:self waitUntilDone:YES];  
558 - [authenticationLock lockWhenCondition:2];  
559 - [authenticationLock unlock];  
560 - [self applyCredentialsLoad];  
561 - return;  
562 - }  
563 - [self setError:[self authenticationError]];  
564 - complete = YES;  
565 return; 587 return;
566 - 588 + }
567 589
568 - //We don't need a username or password, let's carry on 590 + //We've got no credentials, let's ask the delegate to sort this out
569 - } else { 591 + ignoreError = YES;
570 - [self applyCredentialsAndResume]; 592 + if ([delegate respondsToSelector:@selector(authorizationNeededForRequest:)]) {
  593 + [delegate performSelectorOnMainThread:@selector(authorizationNeededForRequest:) withObject:self waitUntilDone:YES];
  594 + [authenticationLock lockWhenCondition:2];
  595 + [authenticationLock unlock];
  596 + [self attemptToApplyCredentialsAndResume];
  597 + return;
571 } 598 }
572 - } 599 +
  600 + //The delegate isn't interested, we'll have to give up
  601 + [self setError:[self authenticationError]];
  602 + complete = YES;
  603 + return;
  604 + }
  605 +
573 } 606 }
574 607
575 - (NSError *)authenticationError 608 - (NSError *)authenticationError
@@ -611,10 +644,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -611,10 +644,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
611 - (void)handleBytesAvailable 644 - (void)handleBytesAvailable
612 { 645 {
613 646
614 - if (!haveExaminedHeaders) { 647 + if (!responseHeaders) {
615 - haveExaminedHeaders = YES; 648 + if ([self readResponseHeadersReturningAuthenticationFailure]) {
616 - if ([self isAuthorizationFailure]) { 649 + [self attemptToApplyCredentialsAndResume];
617 - [self applyCredentialsLoad];  
618 return; 650 return;
619 } 651 }
620 } 652 }
@@ -725,16 +757,21 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -725,16 +757,21 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
725 757
726 } 758 }
727 759
  760 +
  761 +
  762 +
728 @synthesize url; 763 @synthesize url;
729 @synthesize delegate; 764 @synthesize delegate;
730 @synthesize uploadProgressDelegate; 765 @synthesize uploadProgressDelegate;
731 @synthesize downloadProgressDelegate; 766 @synthesize downloadProgressDelegate;
732 -@synthesize usesKeychain; 767 +@synthesize useKeychainPersistance;
  768 +@synthesize useSessionPersistance;
733 @synthesize downloadDestinationPath; 769 @synthesize downloadDestinationPath;
734 @synthesize didFinishSelector; 770 @synthesize didFinishSelector;
735 @synthesize didFailSelector; 771 @synthesize didFailSelector;
736 @synthesize authenticationRealm; 772 @synthesize authenticationRealm;
737 @synthesize error; 773 @synthesize error;
738 @synthesize complete; 774 @synthesize complete;
739 - 775 +@synthesize responseHeaders;
  776 +@synthesize requestCredentials;
740 @end 777 @end
@@ -9,8 +9,8 @@ @@ -9,8 +9,8 @@
9 9
10 @protocol ASIProgressDelegate 10 @protocol ASIProgressDelegate
11 11
12 -- (void)incrementProgress;  
13 - (void)setDoubleValue:(double)newValue; 12 - (void)setDoubleValue:(double)newValue;
  13 +- (double)doubleValue;
14 - (void)incrementBy:(double)amount; 14 - (void)incrementBy:(double)amount;
15 - (void)setMaxValue:(double)newMax; 15 - (void)setMaxValue:(double)newMax;
16 - (double)maxValue; 16 - (double)maxValue;
@@ -115,7 +115,7 @@ @@ -115,7 +115,7 @@
115 request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/top_secret/"]] autorelease]; 115 request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/top_secret/"]] autorelease];
116 [request setDelegate:self]; 116 [request setDelegate:self];
117 [request setDidFinishSelector:@selector(topSecretFetchComplete:)]; 117 [request setDidFinishSelector:@selector(topSecretFetchComplete:)];
118 - [request setUsesKeychain:[keychainCheckbox state]]; 118 + [request setUseKeychainPersistance:[keychainCheckbox state]];
119 [networkQueue addOperation:request]; 119 [networkQueue addOperation:request];
120 120
121 } 121 }
@@ -299,7 +299,7 @@ @@ -299,7 +299,7 @@
299 <real>186</real> 299 <real>186</real>
300 </array> 300 </array>
301 <key>RubberWindowFrame</key> 301 <key>RubberWindowFrame</key>
302 - <string>243 359 1342 819 0 0 1920 1178 </string> 302 + <string>353 264 1342 819 0 0 1920 1178 </string>
303 </dict> 303 </dict>
304 <key>Module</key> 304 <key>Module</key>
305 <string>PBXSmartGroupTreeModule</string> 305 <string>PBXSmartGroupTreeModule</string>
@@ -329,16 +329,16 @@ @@ -329,16 +329,16 @@
329 <key>_historyCapacity</key> 329 <key>_historyCapacity</key>
330 <integer>0</integer> 330 <integer>0</integer>
331 <key>bookmark</key> 331 <key>bookmark</key>
332 - <string>B5AACAC30E3F3DDC00064080</string> 332 + <string>B569CF4A0E41D94E00B57986</string>
333 <key>history</key> 333 <key>history</key>
334 <array> 334 <array>
335 <string>B513D3E90E2BD48A000A50C6</string> 335 <string>B513D3E90E2BD48A000A50C6</string>
336 <string>B513D3EA0E2BD48A000A50C6</string> 336 <string>B513D3EA0E2BD48A000A50C6</string>
337 - <string>B5AAC4CE0E3F1BEF00064080</string>  
338 - <string>B5AAC5460E3F1D8300064080</string>  
339 <string>B5AACA810E3F3D3400064080</string> 337 <string>B5AACA810E3F3D3400064080</string>
340 - <string>B5AACA820E3F3D3400064080</string> 338 + <string>B5127C400E41C09D00D266C2</string>
341 - <string>B5AACAC20E3F3DDC00064080</string> 339 + <string>B5127C540E41C0F300D266C2</string>
  340 + <string>B569CED90E41D71C00B57986</string>
  341 + <string>B569CEDA0E41D71C00B57986</string>
342 </array> 342 </array>
343 <key>prevStack</key> 343 <key>prevStack</key>
344 <array> 344 <array>
@@ -349,8 +349,41 @@ @@ -349,8 +349,41 @@
349 <string>B5ABC8300E24CDE70072F422</string> 349 <string>B5ABC8300E24CDE70072F422</string>
350 <string>B513D4020E2BD48A000A50C6</string> 350 <string>B513D4020E2BD48A000A50C6</string>
351 <string>B513D4030E2BD48A000A50C6</string> 351 <string>B513D4030E2BD48A000A50C6</string>
352 - <string>B5AACA830E3F3D3400064080</string> 352 + <string>B569CDCF0E41C1DC00B57986</string>
353 - <string>B5AACA840E3F3D3400064080</string> 353 + <string>B569CDD50E41C1EE00B57986</string>
  354 + <string>B569CE040E41C8E100B57986</string>
  355 + <string>B569CE050E41C8E100B57986</string>
  356 + <string>B569CE060E41C8E100B57986</string>
  357 + <string>B569CE070E41C8E100B57986</string>
  358 + <string>B569CE130E41CB6200B57986</string>
  359 + <string>B569CE140E41CB6200B57986</string>
  360 + <string>B569CE1C0E41CCC500B57986</string>
  361 + <string>B569CE1D0E41CCC500B57986</string>
  362 + <string>B569CE1E0E41CCC500B57986</string>
  363 + <string>B569CE1F0E41CCC500B57986</string>
  364 + <string>B569CE3A0E41D24C00B57986</string>
  365 + <string>B569CE3B0E41D24C00B57986</string>
  366 + <string>B569CE3C0E41D24C00B57986</string>
  367 + <string>B569CE3D0E41D24C00B57986</string>
  368 + <string>B569CE3E0E41D24C00B57986</string>
  369 + <string>B569CE3F0E41D24C00B57986</string>
  370 + <string>B569CE490E41D2D200B57986</string>
  371 + <string>B569CE4A0E41D2D200B57986</string>
  372 + <string>B569CE4B0E41D2D200B57986</string>
  373 + <string>B569CE510E41D30800B57986</string>
  374 + <string>B569CE5A0E41D3A800B57986</string>
  375 + <string>B569CE610E41D3E300B57986</string>
  376 + <string>B569CE6A0E41D41200B57986</string>
  377 + <string>B569CE730E41D5EB00B57986</string>
  378 + <string>B569CE740E41D5EB00B57986</string>
  379 + <string>B569CE750E41D5EB00B57986</string>
  380 + <string>B569CE760E41D5EB00B57986</string>
  381 + <string>B569CE770E41D5EB00B57986</string>
  382 + <string>B569CE780E41D5EB00B57986</string>
  383 + <string>B569CE790E41D5EB00B57986</string>
  384 + <string>B569CE7A0E41D5EB00B57986</string>
  385 + <string>B569CE800E41D63F00B57986</string>
  386 + <string>B569CEDB0E41D71C00B57986</string>
354 </array> 387 </array>
355 </dict> 388 </dict>
356 <key>SplitCount</key> 389 <key>SplitCount</key>
@@ -364,7 +397,7 @@ @@ -364,7 +397,7 @@
364 <key>Frame</key> 397 <key>Frame</key>
365 <string>{{0, 0}, {1134, 679}}</string> 398 <string>{{0, 0}, {1134, 679}}</string>
366 <key>RubberWindowFrame</key> 399 <key>RubberWindowFrame</key>
367 - <string>243 359 1342 819 0 0 1920 1178 </string> 400 + <string>353 264 1342 819 0 0 1920 1178 </string>
368 </dict> 401 </dict>
369 <key>Module</key> 402 <key>Module</key>
370 <string>PBXNavigatorGroup</string> 403 <string>PBXNavigatorGroup</string>
@@ -384,7 +417,7 @@ @@ -384,7 +417,7 @@
384 <key>Frame</key> 417 <key>Frame</key>
385 <string>{{0, 684}, {1134, 94}}</string> 418 <string>{{0, 684}, {1134, 94}}</string>
386 <key>RubberWindowFrame</key> 419 <key>RubberWindowFrame</key>
387 - <string>243 359 1342 819 0 0 1920 1178 </string> 420 + <string>353 264 1342 819 0 0 1920 1178 </string>
388 </dict> 421 </dict>
389 <key>Module</key> 422 <key>Module</key>
390 <string>XCDetailModule</string> 423 <string>XCDetailModule</string>
@@ -408,9 +441,9 @@ @@ -408,9 +441,9 @@
408 </array> 441 </array>
409 <key>TableOfContents</key> 442 <key>TableOfContents</key>
410 <array> 443 <array>
411 - <string>B5AACA860E3F3D3400064080</string> 444 + <string>B569CDBD0E41C18F00B57986</string>
412 <string>1CE0B1FE06471DED0097A5F4</string> 445 <string>1CE0B1FE06471DED0097A5F4</string>
413 - <string>B5AACA870E3F3D3400064080</string> 446 + <string>B569CDBE0E41C18F00B57986</string>
414 <string>1CE0B20306471E060097A5F4</string> 447 <string>1CE0B20306471E060097A5F4</string>
415 <string>1CE0B20506471E060097A5F4</string> 448 <string>1CE0B20506471E060097A5F4</string>
416 </array> 449 </array>
@@ -544,14 +577,15 @@ @@ -544,14 +577,15 @@
544 <integer>5</integer> 577 <integer>5</integer>
545 <key>WindowOrderList</key> 578 <key>WindowOrderList</key>
546 <array> 579 <array>
547 - <string>B5AACAC40E3F3DDC00064080</string> 580 + <string>B569CDC80E41C18F00B57986</string>
548 - <string>1C78EAAD065D492600B07095</string> 581 + <string>B569CDC90E41C18F00B57986</string>
549 <string>1CD10A99069EF8BA00B06720</string> 582 <string>1CD10A99069EF8BA00B06720</string>
550 <string>B5ABC8410E24CDE70072F422</string> 583 <string>B5ABC8410E24CDE70072F422</string>
  584 + <string>1C78EAAD065D492600B07095</string>
551 <string>/Users/ben/asi-http-request/asi-http-request.xcodeproj</string> 585 <string>/Users/ben/asi-http-request/asi-http-request.xcodeproj</string>
552 </array> 586 </array>
553 <key>WindowString</key> 587 <key>WindowString</key>
554 - <string>243 359 1342 819 0 0 1920 1178 </string> 588 + <string>353 264 1342 819 0 0 1920 1178 </string>
555 <key>WindowToolsV3</key> 589 <key>WindowToolsV3</key>
556 <array> 590 <array>
557 <dict> 591 <dict>
@@ -567,12 +601,14 @@ @@ -567,12 +601,14 @@
567 <key>Dock</key> 601 <key>Dock</key>
568 <array> 602 <array>
569 <dict> 603 <dict>
  604 + <key>BecomeActive</key>
  605 + <true/>
570 <key>ContentConfiguration</key> 606 <key>ContentConfiguration</key>
571 <dict> 607 <dict>
572 <key>PBXProjectModuleGUID</key> 608 <key>PBXProjectModuleGUID</key>
573 <string>1CD0528F0623707200166675</string> 609 <string>1CD0528F0623707200166675</string>
574 <key>PBXProjectModuleLabel</key> 610 <key>PBXProjectModuleLabel</key>
575 - <string></string> 611 + <string>ASIHTTPRequest.m</string>
576 <key>StatusBarVisibility</key> 612 <key>StatusBarVisibility</key>
577 <true/> 613 <true/>
578 </dict> 614 </dict>
@@ -581,7 +617,7 @@ @@ -581,7 +617,7 @@
581 <key>Frame</key> 617 <key>Frame</key>
582 <string>{{0, 0}, {1440, 536}}</string> 618 <string>{{0, 0}, {1440, 536}}</string>
583 <key>RubberWindowFrame</key> 619 <key>RubberWindowFrame</key>
584 - <string>793 360 1440 818 0 0 1920 1178 </string> 620 + <string>396 341 1440 818 0 0 1920 1178 </string>
585 </dict> 621 </dict>
586 <key>Module</key> 622 <key>Module</key>
587 <string>PBXNavigatorGroup</string> 623 <string>PBXNavigatorGroup</string>
@@ -605,7 +641,7 @@ @@ -605,7 +641,7 @@
605 <key>Frame</key> 641 <key>Frame</key>
606 <string>{{0, 541}, {1440, 236}}</string> 642 <string>{{0, 541}, {1440, 236}}</string>
607 <key>RubberWindowFrame</key> 643 <key>RubberWindowFrame</key>
608 - <string>793 360 1440 818 0 0 1920 1178 </string> 644 + <string>396 341 1440 818 0 0 1920 1178 </string>
609 </dict> 645 </dict>
610 <key>Module</key> 646 <key>Module</key>
611 <string>PBXBuildResultsModule</string> 647 <string>PBXBuildResultsModule</string>
@@ -628,14 +664,14 @@ @@ -628,14 +664,14 @@
628 <key>TableOfContents</key> 664 <key>TableOfContents</key>
629 <array> 665 <array>
630 <string>B5ABC8410E24CDE70072F422</string> 666 <string>B5ABC8410E24CDE70072F422</string>
631 - <string>B5AACA880E3F3D3400064080</string> 667 + <string>B569CDBF0E41C18F00B57986</string>
632 <string>1CD0528F0623707200166675</string> 668 <string>1CD0528F0623707200166675</string>
633 <string>XCMainBuildResultsModuleGUID</string> 669 <string>XCMainBuildResultsModuleGUID</string>
634 </array> 670 </array>
635 <key>ToolbarConfiguration</key> 671 <key>ToolbarConfiguration</key>
636 <string>xcode.toolbar.config.buildV3</string> 672 <string>xcode.toolbar.config.buildV3</string>
637 <key>WindowString</key> 673 <key>WindowString</key>
638 - <string>793 360 1440 818 0 0 1920 1178 </string> 674 + <string>396 341 1440 818 0 0 1920 1178 </string>
639 <key>WindowToolGUID</key> 675 <key>WindowToolGUID</key>
640 <string>B5ABC8410E24CDE70072F422</string> 676 <string>B5ABC8410E24CDE70072F422</string>
641 <key>WindowToolIsVisible</key> 677 <key>WindowToolIsVisible</key>
@@ -714,8 +750,6 @@ @@ -714,8 +750,6 @@
714 <array> 750 <array>
715 <string>Name</string> 751 <string>Name</string>
716 <real>277</real> 752 <real>277</real>
717 - <string>Type</string>  
718 - <real>84</real>  
719 <string>Value</string> 753 <string>Value</string>
720 <real>114</real> 754 <real>114</real>
721 <string>Summary</string> 755 <string>Summary</string>
@@ -750,13 +784,13 @@ @@ -750,13 +784,13 @@
750 <key>TableOfContents</key> 784 <key>TableOfContents</key>
751 <array> 785 <array>
752 <string>1CD10A99069EF8BA00B06720</string> 786 <string>1CD10A99069EF8BA00B06720</string>
753 - <string>B5AACA890E3F3D3400064080</string> 787 + <string>B569CDC00E41C18F00B57986</string>
754 <string>1C162984064C10D400B95A72</string> 788 <string>1C162984064C10D400B95A72</string>
755 - <string>B5AACA8A0E3F3D3400064080</string> 789 + <string>B569CDC10E41C18F00B57986</string>
756 - <string>B5AACA8B0E3F3D3400064080</string> 790 + <string>B569CDC20E41C18F00B57986</string>
757 - <string>B5AACA8C0E3F3D3400064080</string> 791 + <string>B569CDC30E41C18F00B57986</string>
758 - <string>B5AACA8D0E3F3D3400064080</string> 792 + <string>B569CDC40E41C18F00B57986</string>
759 - <string>B5AACA8E0E3F3D3400064080</string> 793 + <string>B569CDC50E41C18F00B57986</string>
760 </array> 794 </array>
761 <key>ToolbarConfiguration</key> 795 <key>ToolbarConfiguration</key>
762 <string>xcode.toolbar.config.debugV3</string> 796 <string>xcode.toolbar.config.debugV3</string>
@@ -875,6 +909,8 @@ @@ -875,6 +909,8 @@
875 <key>Dock</key> 909 <key>Dock</key>
876 <array> 910 <array>
877 <dict> 911 <dict>
  912 + <key>BecomeActive</key>
  913 + <true/>
878 <key>ContentConfiguration</key> 914 <key>ContentConfiguration</key>
879 <dict> 915 <dict>
880 <key>PBXProjectModuleGUID</key> 916 <key>PBXProjectModuleGUID</key>
@@ -887,7 +923,7 @@ @@ -887,7 +923,7 @@
887 <key>Frame</key> 923 <key>Frame</key>
888 <string>{{0, 0}, {629, 511}}</string> 924 <string>{{0, 0}, {629, 511}}</string>
889 <key>RubberWindowFrame</key> 925 <key>RubberWindowFrame</key>
890 - <string>281 151 629 552 0 0 1920 1178 </string> 926 + <string>385 95 629 552 0 0 1920 1178 </string>
891 </dict> 927 </dict>
892 <key>Module</key> 928 <key>Module</key>
893 <string>PBXDebugCLIModule</string> 929 <string>PBXDebugCLIModule</string>
@@ -910,17 +946,17 @@ @@ -910,17 +946,17 @@
910 <key>TableOfContents</key> 946 <key>TableOfContents</key>
911 <array> 947 <array>
912 <string>1C78EAAD065D492600B07095</string> 948 <string>1C78EAAD065D492600B07095</string>
913 - <string>B5AACA8F0E3F3D3400064080</string> 949 + <string>B569CDC60E41C18F00B57986</string>
914 <string>1C78EAAC065D492600B07095</string> 950 <string>1C78EAAC065D492600B07095</string>
915 </array> 951 </array>
916 <key>ToolbarConfiguration</key> 952 <key>ToolbarConfiguration</key>
917 <string>xcode.toolbar.config.consoleV3</string> 953 <string>xcode.toolbar.config.consoleV3</string>
918 <key>WindowString</key> 954 <key>WindowString</key>
919 - <string>281 151 629 552 0 0 1920 1178 </string> 955 + <string>385 95 629 552 0 0 1920 1178 </string>
920 <key>WindowToolGUID</key> 956 <key>WindowToolGUID</key>
921 <string>1C78EAAD065D492600B07095</string> 957 <string>1C78EAAD065D492600B07095</string>
922 <key>WindowToolIsVisible</key> 958 <key>WindowToolIsVisible</key>
923 - <false/> 959 + <true/>
924 </dict> 960 </dict>
925 <dict> 961 <dict>
926 <key>Identifier</key> 962 <key>Identifier</key>
@@ -128,42 +128,142 @@ @@ -128,42 +128,142 @@
128 PBXFileDataSource_Warnings_ColumnID, 128 PBXFileDataSource_Warnings_ColumnID,
129 ); 129 );
130 }; 130 };
131 - PBXPerProjectTemplateStateSaveDate = 239025449; 131 + PBXPerProjectTemplateStateSaveDate = 239190404;
132 - PBXWorkspaceStateSaveDate = 239025449; 132 + PBXWorkspaceStateSaveDate = 239190404;
133 }; 133 };
134 perUserProjectItems = { 134 perUserProjectItems = {
  135 + B5127C3E0E41C09D00D266C2 = B5127C3E0E41C09D00D266C2 /* PBXTextBookmark */;
  136 + B5127C3F0E41C09D00D266C2 = B5127C3F0E41C09D00D266C2 /* PBXTextBookmark */;
  137 + B5127C400E41C09D00D266C2 = B5127C400E41C09D00D266C2 /* PBXTextBookmark */;
  138 + B5127C410E41C09D00D266C2 = B5127C410E41C09D00D266C2 /* PBXTextBookmark */;
  139 + B5127C420E41C09D00D266C2 = B5127C420E41C09D00D266C2 /* PBXTextBookmark */;
  140 + B5127C430E41C09D00D266C2 = B5127C430E41C09D00D266C2 /* PBXTextBookmark */;
  141 + B5127C440E41C09D00D266C2 = B5127C440E41C09D00D266C2 /* PBXTextBookmark */;
  142 + B5127C450E41C09D00D266C2 = B5127C450E41C09D00D266C2 /* PBXTextBookmark */;
  143 + B5127C460E41C09D00D266C2 = B5127C460E41C09D00D266C2 /* PBXTextBookmark */;
  144 + B5127C470E41C09D00D266C2 = B5127C470E41C09D00D266C2 /* PBXTextBookmark */;
  145 + B5127C540E41C0F300D266C2 = B5127C540E41C0F300D266C2 /* PBXTextBookmark */;
  146 + B5127C550E41C0F300D266C2 = B5127C550E41C0F300D266C2 /* PBXTextBookmark */;
  147 + B5127C560E41C0F300D266C2 = B5127C560E41C0F300D266C2 /* PBXTextBookmark */;
  148 + B5127C570E41C0F300D266C2 = B5127C570E41C0F300D266C2 /* PBXTextBookmark */;
  149 + B5127C590E41C10C00D266C2 = B5127C590E41C10C00D266C2 /* PBXTextBookmark */;
  150 + B5127C5A0E41C10C00D266C2 = B5127C5A0E41C10C00D266C2 /* PBXTextBookmark */;
  151 + B5127C5B0E41C10C00D266C2 = B5127C5B0E41C10C00D266C2 /* PBXTextBookmark */;
  152 + B5127C5C0E41C10C00D266C2 = B5127C5C0E41C10C00D266C2 /* PBXTextBookmark */;
  153 + B5127C5D0E41C10C00D266C2 = B5127C5D0E41C10C00D266C2 /* PBXTextBookmark */;
  154 + B5127C600E41C11D00D266C2 = B5127C600E41C11D00D266C2 /* PBXTextBookmark */;
  155 + B5127C670E41C13D00D266C2 = B5127C670E41C13D00D266C2 /* PBXTextBookmark */;
  156 + B5127C6A0E41C16B00D266C2 = B5127C6A0E41C16B00D266C2 /* PBXTextBookmark */;
135 B513D3E90E2BD48A000A50C6 = B513D3E90E2BD48A000A50C6 /* PBXTextBookmark */; 157 B513D3E90E2BD48A000A50C6 = B513D3E90E2BD48A000A50C6 /* PBXTextBookmark */;
136 B513D3EA0E2BD48A000A50C6 = B513D3EA0E2BD48A000A50C6 /* PlistBookmark */; 158 B513D3EA0E2BD48A000A50C6 = B513D3EA0E2BD48A000A50C6 /* PlistBookmark */;
137 B513D4020E2BD48A000A50C6 = B513D4020E2BD48A000A50C6 /* PlistBookmark */; 159 B513D4020E2BD48A000A50C6 = B513D4020E2BD48A000A50C6 /* PlistBookmark */;
138 B513D4030E2BD48A000A50C6 = B513D4030E2BD48A000A50C6 /* PBXTextBookmark */; 160 B513D4030E2BD48A000A50C6 = B513D4030E2BD48A000A50C6 /* PBXTextBookmark */;
  161 + B569CDBC0E41C18F00B57986 /* PBXTextBookmark */ = B569CDBC0E41C18F00B57986 /* PBXTextBookmark */;
  162 + B569CDCE0E41C1DC00B57986 /* PBXTextBookmark */ = B569CDCE0E41C1DC00B57986 /* PBXTextBookmark */;
  163 + B569CDCF0E41C1DC00B57986 /* PBXTextBookmark */ = B569CDCF0E41C1DC00B57986 /* PBXTextBookmark */;
  164 + B569CDD00E41C1DC00B57986 /* PBXTextBookmark */ = B569CDD00E41C1DC00B57986 /* PBXTextBookmark */;
  165 + B569CDD30E41C1EE00B57986 /* PBXTextBookmark */ = B569CDD30E41C1EE00B57986 /* PBXTextBookmark */;
  166 + B569CDD40E41C1EE00B57986 /* PBXTextBookmark */ = B569CDD40E41C1EE00B57986 /* PBXTextBookmark */;
  167 + B569CDD50E41C1EE00B57986 /* PBXTextBookmark */ = B569CDD50E41C1EE00B57986 /* PBXTextBookmark */;
  168 + B569CDD60E41C1EE00B57986 /* PBXTextBookmark */ = B569CDD60E41C1EE00B57986 /* PBXTextBookmark */;
  169 + B569CDE20E41C3E900B57986 /* PBXTextBookmark */ = B569CDE20E41C3E900B57986 /* PBXTextBookmark */;
  170 + B569CE020E41C8E100B57986 /* PBXTextBookmark */ = B569CE020E41C8E100B57986 /* PBXTextBookmark */;
  171 + B569CE030E41C8E100B57986 /* PBXTextBookmark */ = B569CE030E41C8E100B57986 /* PBXTextBookmark */;
  172 + B569CE040E41C8E100B57986 /* PBXTextBookmark */ = B569CE040E41C8E100B57986 /* PBXTextBookmark */;
  173 + B569CE050E41C8E100B57986 /* PBXTextBookmark */ = B569CE050E41C8E100B57986 /* PBXTextBookmark */;
  174 + B569CE060E41C8E100B57986 /* PBXTextBookmark */ = B569CE060E41C8E100B57986 /* PBXTextBookmark */;
  175 + B569CE070E41C8E100B57986 /* PBXTextBookmark */ = B569CE070E41C8E100B57986 /* PBXTextBookmark */;
  176 + B569CE080E41C8E100B57986 /* PBXTextBookmark */ = B569CE080E41C8E100B57986 /* PBXTextBookmark */;
  177 + B569CE0B0E41C92000B57986 /* PBXTextBookmark */ = B569CE0B0E41C92000B57986 /* PBXTextBookmark */;
  178 + B569CE0D0E41C92500B57986 /* PBXTextBookmark */ = B569CE0D0E41C92500B57986 /* PBXTextBookmark */;
  179 + B569CE110E41CB6200B57986 /* PBXTextBookmark */ = B569CE110E41CB6200B57986 /* PBXTextBookmark */;
  180 + B569CE120E41CB6200B57986 /* PBXTextBookmark */ = B569CE120E41CB6200B57986 /* PBXTextBookmark */;
  181 + B569CE130E41CB6200B57986 /* PBXTextBookmark */ = B569CE130E41CB6200B57986 /* PBXTextBookmark */;
  182 + B569CE140E41CB6200B57986 /* PBXTextBookmark */ = B569CE140E41CB6200B57986 /* PBXTextBookmark */;
  183 + B569CE150E41CB6200B57986 /* PBXTextBookmark */ = B569CE150E41CB6200B57986 /* PBXTextBookmark */;
  184 + B569CE1A0E41CCC500B57986 /* PBXTextBookmark */ = B569CE1A0E41CCC500B57986 /* PBXTextBookmark */;
  185 + B569CE1B0E41CCC500B57986 /* PBXTextBookmark */ = B569CE1B0E41CCC500B57986 /* PBXTextBookmark */;
  186 + B569CE1C0E41CCC500B57986 /* PBXTextBookmark */ = B569CE1C0E41CCC500B57986 /* PBXTextBookmark */;
  187 + B569CE1D0E41CCC500B57986 /* PBXTextBookmark */ = B569CE1D0E41CCC500B57986 /* PBXTextBookmark */;
  188 + B569CE1E0E41CCC500B57986 /* PBXTextBookmark */ = B569CE1E0E41CCC500B57986 /* PBXTextBookmark */;
  189 + B569CE1F0E41CCC500B57986 /* PBXTextBookmark */ = B569CE1F0E41CCC500B57986 /* PBXTextBookmark */;
  190 + B569CE200E41CCC500B57986 /* PBXTextBookmark */ = B569CE200E41CCC500B57986 /* PBXTextBookmark */;
  191 + B569CE230E41CD9800B57986 /* PBXTextBookmark */ = B569CE230E41CD9800B57986 /* PBXTextBookmark */;
  192 + B569CE250E41CDA500B57986 /* PBXTextBookmark */ = B569CE250E41CDA500B57986 /* PBXTextBookmark */;
  193 + B569CE280E41CDAA00B57986 /* PBXTextBookmark */ = B569CE280E41CDAA00B57986 /* PBXTextBookmark */;
  194 + B569CE290E41CDAA00B57986 /* PBXTextBookmark */ = B569CE290E41CDAA00B57986 /* PBXTextBookmark */;
  195 + B569CE2A0E41CDE200B57986 /* PBXTextBookmark */ = B569CE2A0E41CDE200B57986 /* PBXTextBookmark */;
  196 + B569CE2D0E41CF5100B57986 /* PBXTextBookmark */ = B569CE2D0E41CF5100B57986 /* PBXTextBookmark */;
  197 + B569CE380E41D24C00B57986 /* PBXTextBookmark */ = B569CE380E41D24C00B57986 /* PBXTextBookmark */;
  198 + B569CE390E41D24C00B57986 /* PBXTextBookmark */ = B569CE390E41D24C00B57986 /* PBXTextBookmark */;
  199 + B569CE3A0E41D24C00B57986 /* PBXTextBookmark */ = B569CE3A0E41D24C00B57986 /* PBXTextBookmark */;
  200 + B569CE3B0E41D24C00B57986 /* PBXTextBookmark */ = B569CE3B0E41D24C00B57986 /* PBXTextBookmark */;
  201 + B569CE3C0E41D24C00B57986 /* PBXTextBookmark */ = B569CE3C0E41D24C00B57986 /* PBXTextBookmark */;
  202 + B569CE3D0E41D24C00B57986 /* PBXTextBookmark */ = B569CE3D0E41D24C00B57986 /* PBXTextBookmark */;
  203 + B569CE3E0E41D24C00B57986 /* PBXTextBookmark */ = B569CE3E0E41D24C00B57986 /* PBXTextBookmark */;
  204 + B569CE3F0E41D24C00B57986 /* PBXTextBookmark */ = B569CE3F0E41D24C00B57986 /* PBXTextBookmark */;
  205 + B569CE400E41D24C00B57986 /* PBXTextBookmark */ = B569CE400E41D24C00B57986 /* PBXTextBookmark */;
  206 + B569CE430E41D27B00B57986 /* PBXTextBookmark */ = B569CE430E41D27B00B57986 /* PBXTextBookmark */;
  207 + B569CE470E41D2D200B57986 /* PBXTextBookmark */ = B569CE470E41D2D200B57986 /* PBXTextBookmark */;
  208 + B569CE480E41D2D200B57986 /* PBXTextBookmark */ = B569CE480E41D2D200B57986 /* PBXTextBookmark */;
  209 + B569CE490E41D2D200B57986 /* PBXTextBookmark */ = B569CE490E41D2D200B57986 /* PBXTextBookmark */;
  210 + B569CE4A0E41D2D200B57986 /* PBXTextBookmark */ = B569CE4A0E41D2D200B57986 /* PBXTextBookmark */;
  211 + B569CE4B0E41D2D200B57986 /* PBXTextBookmark */ = B569CE4B0E41D2D200B57986 /* PBXTextBookmark */;
  212 + B569CE4C0E41D2D200B57986 /* PBXTextBookmark */ = B569CE4C0E41D2D200B57986 /* PBXTextBookmark */;
  213 + B569CE4F0E41D30800B57986 /* PBXTextBookmark */ = B569CE4F0E41D30800B57986 /* PBXTextBookmark */;
  214 + B569CE500E41D30800B57986 /* PBXTextBookmark */ = B569CE500E41D30800B57986 /* PBXTextBookmark */;
  215 + B569CE510E41D30800B57986 /* PBXTextBookmark */ = B569CE510E41D30800B57986 /* PBXTextBookmark */;
  216 + B569CE520E41D30800B57986 /* PBXTextBookmark */ = B569CE520E41D30800B57986 /* PBXTextBookmark */;
  217 + B569CE580E41D3A800B57986 /* PBXTextBookmark */ = B569CE580E41D3A800B57986 /* PBXTextBookmark */;
  218 + B569CE590E41D3A800B57986 /* PBXTextBookmark */ = B569CE590E41D3A800B57986 /* PBXTextBookmark */;
  219 + B569CE5A0E41D3A800B57986 /* PBXTextBookmark */ = B569CE5A0E41D3A800B57986 /* PBXTextBookmark */;
  220 + B569CE5B0E41D3A800B57986 /* PBXTextBookmark */ = B569CE5B0E41D3A800B57986 /* PBXTextBookmark */;
  221 + B569CE5F0E41D3E300B57986 /* PBXTextBookmark */ = B569CE5F0E41D3E300B57986 /* PBXTextBookmark */;
  222 + B569CE600E41D3E300B57986 /* PBXTextBookmark */ = B569CE600E41D3E300B57986 /* PBXTextBookmark */;
  223 + B569CE610E41D3E300B57986 /* PBXTextBookmark */ = B569CE610E41D3E300B57986 /* PBXTextBookmark */;
  224 + B569CE620E41D3E300B57986 /* PBXTextBookmark */ = B569CE620E41D3E300B57986 /* PBXTextBookmark */;
  225 + B569CE650E41D3FA00B57986 /* PBXTextBookmark */ = B569CE650E41D3FA00B57986 /* PBXTextBookmark */;
  226 + B569CE680E41D41200B57986 /* PBXTextBookmark */ = B569CE680E41D41200B57986 /* PBXTextBookmark */;
  227 + B569CE690E41D41200B57986 /* PBXTextBookmark */ = B569CE690E41D41200B57986 /* PBXTextBookmark */;
  228 + B569CE6A0E41D41200B57986 /* PBXTextBookmark */ = B569CE6A0E41D41200B57986 /* PBXTextBookmark */;
  229 + B569CE6B0E41D41200B57986 /* PBXTextBookmark */ = B569CE6B0E41D41200B57986 /* PBXTextBookmark */;
  230 + B569CE710E41D5EB00B57986 /* PBXTextBookmark */ = B569CE710E41D5EB00B57986 /* PBXTextBookmark */;
  231 + B569CE720E41D5EB00B57986 /* PBXTextBookmark */ = B569CE720E41D5EB00B57986 /* PBXTextBookmark */;
  232 + B569CE730E41D5EB00B57986 /* PBXTextBookmark */ = B569CE730E41D5EB00B57986 /* PBXTextBookmark */;
  233 + B569CE740E41D5EB00B57986 /* PBXTextBookmark */ = B569CE740E41D5EB00B57986 /* PBXTextBookmark */;
  234 + B569CE750E41D5EB00B57986 /* PBXTextBookmark */ = B569CE750E41D5EB00B57986 /* PBXTextBookmark */;
  235 + B569CE760E41D5EB00B57986 /* PBXTextBookmark */ = B569CE760E41D5EB00B57986 /* PBXTextBookmark */;
  236 + B569CE770E41D5EB00B57986 /* PBXTextBookmark */ = B569CE770E41D5EB00B57986 /* PBXTextBookmark */;
  237 + B569CE780E41D5EB00B57986 /* PBXTextBookmark */ = B569CE780E41D5EB00B57986 /* PBXTextBookmark */;
  238 + B569CE790E41D5EB00B57986 /* PBXTextBookmark */ = B569CE790E41D5EB00B57986 /* PBXTextBookmark */;
  239 + B569CE7A0E41D5EB00B57986 /* PBXTextBookmark */ = B569CE7A0E41D5EB00B57986 /* PBXTextBookmark */;
  240 + B569CE7B0E41D5EB00B57986 /* PBXTextBookmark */ = B569CE7B0E41D5EB00B57986 /* PBXTextBookmark */;
  241 + B569CE7E0E41D63F00B57986 /* PBXTextBookmark */ = B569CE7E0E41D63F00B57986 /* PBXTextBookmark */;
  242 + B569CE7F0E41D63F00B57986 /* PBXTextBookmark */ = B569CE7F0E41D63F00B57986 /* PBXTextBookmark */;
  243 + B569CE800E41D63F00B57986 /* PBXTextBookmark */ = B569CE800E41D63F00B57986 /* PBXTextBookmark */;
  244 + B569CE810E41D63F00B57986 /* PBXTextBookmark */ = B569CE810E41D63F00B57986 /* PBXTextBookmark */;
  245 + B569CE830E41D65300B57986 /* PBXTextBookmark */ = B569CE830E41D65300B57986 /* PBXTextBookmark */;
  246 + B569CE850E41D66D00B57986 /* PBXTextBookmark */ = B569CE850E41D66D00B57986 /* PBXTextBookmark */;
  247 + B569CE860E41D69100B57986 /* PBXTextBookmark */ = B569CE860E41D69100B57986 /* PBXTextBookmark */;
  248 + B569CE870E41D69100B57986 /* PBXTextBookmark */ = B569CE870E41D69100B57986 /* PBXTextBookmark */;
  249 + B569CE880E41D69100B57986 /* PBXTextBookmark */ = B569CE880E41D69100B57986 /* PBXTextBookmark */;
  250 + B569CE890E41D69100B57986 /* PBXTextBookmark */ = B569CE890E41D69100B57986 /* PBXTextBookmark */;
  251 + B569CE8A0E41D69100B57986 /* PBXTextBookmark */ = B569CE8A0E41D69100B57986 /* PBXTextBookmark */;
  252 + B569CED90E41D71C00B57986 /* PBXTextBookmark */ = B569CED90E41D71C00B57986 /* PBXTextBookmark */;
  253 + B569CEDA0E41D71C00B57986 /* PBXTextBookmark */ = B569CEDA0E41D71C00B57986 /* PBXTextBookmark */;
  254 + B569CEDB0E41D71C00B57986 /* PBXTextBookmark */ = B569CEDB0E41D71C00B57986 /* PBXTextBookmark */;
  255 + B569CEDC0E41D71C00B57986 /* PBXTextBookmark */ = B569CEDC0E41D71C00B57986 /* PBXTextBookmark */;
  256 + B569CEF30E41D73E00B57986 /* PBXTextBookmark */ = B569CEF30E41D73E00B57986 /* PBXTextBookmark */;
  257 + B569CF0C0E41D85000B57986 /* PBXTextBookmark */ = B569CF0C0E41D85000B57986 /* PBXTextBookmark */;
  258 + B569CF2A0E41D87800B57986 /* PBXTextBookmark */ = B569CF2A0E41D87800B57986 /* PBXTextBookmark */;
  259 + B569CF300E41D91D00B57986 /* PBXTextBookmark */ = B569CF300E41D91D00B57986 /* PBXTextBookmark */;
  260 + B569CF4A0E41D94E00B57986 /* PBXTextBookmark */ = B569CF4A0E41D94E00B57986 /* PBXTextBookmark */;
139 B5AAC4CE0E3F1BEF00064080 = B5AAC4CE0E3F1BEF00064080 /* PBXTextBookmark */; 261 B5AAC4CE0E3F1BEF00064080 = B5AAC4CE0E3F1BEF00064080 /* PBXTextBookmark */;
140 - B5AAC4D10E3F1BEF00064080 = B5AAC4D10E3F1BEF00064080 /* PBXTextBookmark */; 262 + B5AACA810E3F3D3400064080 = B5AACA810E3F3D3400064080 /* PBXTextBookmark */;
141 - B5AAC4D20E3F1BEF00064080 = B5AAC4D20E3F1BEF00064080 /* PBXTextBookmark */; 263 + B5AACACC0E3F413800064080 = B5AACACC0E3F413800064080 /* PBXTextBookmark */;
142 - B5AAC4D30E3F1BEF00064080 = B5AAC4D30E3F1BEF00064080 /* PBXTextBookmark */; 264 + B5AACACD0E3F413800064080 = B5AACACD0E3F413800064080 /* PBXTextBookmark */;
143 - B5AAC4D40E3F1BEF00064080 = B5AAC4D40E3F1BEF00064080 /* PBXTextBookmark */; 265 + B5AACAD90E3F413D00064080 = B5AACAD90E3F413D00064080 /* PBXTextBookmark */;
144 - B5AAC4D50E3F1BEF00064080 = B5AAC4D50E3F1BEF00064080 /* PBXTextBookmark */; 266 + B5AACADD0E3F427200064080 = B5AACADD0E3F427200064080 /* PBXTextBookmark */;
145 - B5AAC4D60E3F1BEF00064080 = B5AAC4D60E3F1BEF00064080 /* PBXTextBookmark */;  
146 - B5AAC4D70E3F1BEF00064080 = B5AAC4D70E3F1BEF00064080 /* PBXTextBookmark */;  
147 - B5AAC4F50E3F1C4100064080 = B5AAC4F50E3F1C4100064080 /* PBXTextBookmark */;  
148 - B5AAC4F70E3F1C4100064080 = B5AAC4F70E3F1C4100064080 /* PBXTextBookmark */;  
149 - B5AAC4F80E3F1C4100064080 = B5AAC4F80E3F1C4100064080 /* PBXTextBookmark */;  
150 - B5AAC5290E3F1D0A00064080 = B5AAC5290E3F1D0A00064080 /* PBXTextBookmark */;  
151 - B5AAC5370E3F1D5800064080 = B5AAC5370E3F1D5800064080 /* PBXTextBookmark */;  
152 - B5AAC5380E3F1D5800064080 = B5AAC5380E3F1D5800064080 /* PBXTextBookmark */;  
153 - B5AAC5460E3F1D8300064080 = B5AAC5460E3F1D8300064080 /* PBXTextBookmark */;  
154 - B5AAC5470E3F1D8300064080 = B5AAC5470E3F1D8300064080 /* PBXTextBookmark */;  
155 - B5AAC5C00E3F220500064080 = B5AAC5C00E3F220500064080 /* PBXTextBookmark */;  
156 - B5AAC5C10E3F220500064080 = B5AAC5C10E3F220500064080 /* PBXTextBookmark */;  
157 - B5AAC5C20E3F220500064080 = B5AAC5C20E3F220500064080 /* PBXTextBookmark */;  
158 - B5AAC6F80E3F275B00064080 = B5AAC6F80E3F275B00064080 /* PBXTextBookmark */;  
159 - B5AACA810E3F3D3400064080 /* PBXTextBookmark */ = B5AACA810E3F3D3400064080 /* PBXTextBookmark */;  
160 - B5AACA820E3F3D3400064080 /* PBXTextBookmark */ = B5AACA820E3F3D3400064080 /* PBXTextBookmark */;  
161 - B5AACA830E3F3D3400064080 /* PBXTextBookmark */ = B5AACA830E3F3D3400064080 /* PBXTextBookmark */;  
162 - B5AACA840E3F3D3400064080 /* PBXTextBookmark */ = B5AACA840E3F3D3400064080 /* PBXTextBookmark */;  
163 - B5AACA850E3F3D3400064080 /* PBXTextBookmark */ = B5AACA850E3F3D3400064080 /* PBXTextBookmark */;  
164 - B5AACA920E3F3D4800064080 /* PBXTextBookmark */ = B5AACA920E3F3D4800064080 /* PBXTextBookmark */;  
165 - B5AACAC20E3F3DDC00064080 /* PBXTextBookmark */ = B5AACAC20E3F3DDC00064080 /* PBXTextBookmark */;  
166 - B5AACAC30E3F3DDC00064080 /* PBXTextBookmark */ = B5AACAC30E3F3DDC00064080 /* PBXTextBookmark */;  
167 B5ABC8250E24CDE70072F422 = B5ABC8250E24CDE70072F422 /* PBXTextBookmark */; 267 B5ABC8250E24CDE70072F422 = B5ABC8250E24CDE70072F422 /* PBXTextBookmark */;
168 B5ABC8260E24CDE70072F422 = B5ABC8260E24CDE70072F422 /* PBXTextBookmark */; 268 B5ABC8260E24CDE70072F422 = B5ABC8260E24CDE70072F422 /* PBXTextBookmark */;
169 B5ABC8280E24CDE70072F422 = B5ABC8280E24CDE70072F422 /* PBXTextBookmark */; 269 B5ABC8280E24CDE70072F422 = B5ABC8280E24CDE70072F422 /* PBXTextBookmark */;
@@ -180,6 +280,226 @@ @@ -180,6 +280,226 @@
180 B5ABC7A70E24C5280072F422 /* asi-http-request */, 280 B5ABC7A70E24C5280072F422 /* asi-http-request */,
181 ); 281 );
182 }; 282 };
  283 + B5127C3E0E41C09D00D266C2 /* PBXTextBookmark */ = {
  284 + isa = PBXTextBookmark;
  285 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  286 + name = "ASIHTTPRequest.h: 103";
  287 + rLen = 0;
  288 + rLoc = 3519;
  289 + rType = 0;
  290 + vrLen = 1309;
  291 + vrLoc = 3361;
  292 + };
  293 + B5127C3F0E41C09D00D266C2 /* PBXTextBookmark */ = {
  294 + isa = PBXTextBookmark;
  295 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  296 + name = "ASIHTTPRequest.m: 264";
  297 + rLen = 94;
  298 + rLoc = 7090;
  299 + rType = 0;
  300 + vrLen = 1718;
  301 + vrLoc = 7150;
  302 + };
  303 + B5127C400E41C09D00D266C2 /* PBXTextBookmark */ = {
  304 + isa = PBXTextBookmark;
  305 + fRef = B5ABC80D0E24CB100072F422 /* AppDelegate.h */;
  306 + name = "AppDelegate.h: 4";
  307 + rLen = 0;
  308 + rLoc = 42;
  309 + rType = 0;
  310 + vrLen = 1083;
  311 + vrLoc = 0;
  312 + };
  313 + B5127C410E41C09D00D266C2 /* PBXTextBookmark */ = {
  314 + isa = PBXTextBookmark;
  315 + fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  316 + name = "AppDelegate.m: 22";
  317 + rLen = 0;
  318 + rLoc = 354;
  319 + rType = 0;
  320 + vrLen = 1599;
  321 + vrLoc = 4490;
  322 + };
  323 + B5127C420E41C09D00D266C2 /* PBXTextBookmark */ = {
  324 + isa = PBXTextBookmark;
  325 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  326 + name = "ASIHTTPRequest.h: 103";
  327 + rLen = 0;
  328 + rLoc = 3519;
  329 + rType = 0;
  330 + vrLen = 1309;
  331 + vrLoc = 3361;
  332 + };
  333 + B5127C430E41C09D00D266C2 /* PBXTextBookmark */ = {
  334 + isa = PBXTextBookmark;
  335 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  336 + name = "ASIHTTPRequest.m: 339";
  337 + rLen = 0;
  338 + rLoc = 9527;
  339 + rType = 0;
  340 + vrLen = 1601;
  341 + vrLoc = 18758;
  342 + };
  343 + B5127C440E41C09D00D266C2 /* PBXTextBookmark */ = {
  344 + isa = PBXTextBookmark;
  345 + fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  346 + name = "AppDelegate.m: 22";
  347 + rLen = 0;
  348 + rLoc = 354;
  349 + rType = 0;
  350 + vrLen = 1567;
  351 + vrLoc = 4522;
  352 + };
  353 + B5127C450E41C09D00D266C2 /* PBXTextBookmark */ = {
  354 + isa = PBXTextBookmark;
  355 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  356 + name = "ASIHTTPRequest.m: 264";
  357 + rLen = 94;
  358 + rLoc = 7090;
  359 + rType = 0;
  360 + vrLen = 1718;
  361 + vrLoc = 7150;
  362 + };
  363 + B5127C460E41C09D00D266C2 /* PBXTextBookmark */ = {
  364 + isa = PBXTextBookmark;
  365 + fRef = B5ABC80D0E24CB100072F422 /* AppDelegate.h */;
  366 + name = "AppDelegate.h: 4";
  367 + rLen = 0;
  368 + rLoc = 42;
  369 + rType = 0;
  370 + vrLen = 1083;
  371 + vrLoc = 0;
  372 + };
  373 + B5127C470E41C09D00D266C2 /* PBXTextBookmark */ = {
  374 + isa = PBXTextBookmark;
  375 + fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  376 + name = "AppDelegate.m: 118";
  377 + rLen = 25;
  378 + rLoc = 4029;
  379 + rType = 0;
  380 + vrLen = 1136;
  381 + vrLoc = 3421;
  382 + };
  383 + B5127C540E41C0F300D266C2 /* PBXTextBookmark */ = {
  384 + isa = PBXTextBookmark;
  385 + fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  386 + name = "AppDelegate.m: 118";
  387 + rLen = 0;
  388 + rLoc = 4020;
  389 + rType = 0;
  390 + vrLen = 1227;
  391 + vrLoc = 3421;
  392 + };
  393 + B5127C550E41C0F300D266C2 /* PBXTextBookmark */ = {
  394 + isa = PBXTextBookmark;
  395 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  396 + name = "ASIHTTPRequest.m: 264";
  397 + rLen = 94;
  398 + rLoc = 7090;
  399 + rType = 0;
  400 + vrLen = 1868;
  401 + vrLoc = 7022;
  402 + };
  403 + B5127C560E41C0F300D266C2 /* PBXTextBookmark */ = {
  404 + isa = PBXTextBookmark;
  405 + fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  406 + name = "AppDelegate.m: 118";
  407 + rLen = 0;
  408 + rLoc = 4020;
  409 + rType = 0;
  410 + vrLen = 1227;
  411 + vrLoc = 3421;
  412 + };
  413 + B5127C570E41C0F300D266C2 /* PBXTextBookmark */ = {
  414 + isa = PBXTextBookmark;
  415 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  416 + name = "ASIHTTPRequest.m: 17";
  417 + rLen = 0;
  418 + rLoc = 698;
  419 + rType = 0;
  420 + vrLen = 1493;
  421 + vrLoc = 0;
  422 + };
  423 + B5127C590E41C10C00D266C2 /* PBXTextBookmark */ = {
  424 + isa = PBXTextBookmark;
  425 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  426 + name = "ASIHTTPRequest.h: 103";
  427 + rLen = 0;
  428 + rLoc = 3519;
  429 + rType = 0;
  430 + vrLen = 1392;
  431 + vrLoc = 3277;
  432 + };
  433 + B5127C5A0E41C10C00D266C2 /* PBXTextBookmark */ = {
  434 + isa = PBXTextBookmark;
  435 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  436 + name = "ASIHTTPRequest.m: 17";
  437 + rLen = 0;
  438 + rLoc = 698;
  439 + rType = 0;
  440 + vrLen = 1998;
  441 + vrLoc = 6600;
  442 + };
  443 + B5127C5B0E41C10C00D266C2 /* PBXTextBookmark */ = {
  444 + isa = PBXTextBookmark;
  445 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  446 + name = "ASIHTTPRequest.m: 17";
  447 + rLen = 0;
  448 + rLoc = 698;
  449 + rType = 0;
  450 + vrLen = 1998;
  451 + vrLoc = 6600;
  452 + };
  453 + B5127C5C0E41C10C00D266C2 /* PBXTextBookmark */ = {
  454 + isa = PBXTextBookmark;
  455 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  456 + name = "ASIHTTPRequest.h: 103";
  457 + rLen = 0;
  458 + rLoc = 3519;
  459 + rType = 0;
  460 + vrLen = 1392;
  461 + vrLoc = 3277;
  462 + };
  463 + B5127C5D0E41C10C00D266C2 /* PBXTextBookmark */ = {
  464 + isa = PBXTextBookmark;
  465 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  466 + name = "ASIHTTPRequest.m: 1";
  467 + rLen = 0;
  468 + rLoc = 0;
  469 + rType = 0;
  470 + vrLen = 870;
  471 + vrLoc = 1438;
  472 + };
  473 + B5127C600E41C11D00D266C2 /* PBXTextBookmark */ = {
  474 + isa = PBXTextBookmark;
  475 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  476 + name = "ASIHTTPRequest.m: 1";
  477 + rLen = 0;
  478 + rLoc = 0;
  479 + rType = 0;
  480 + vrLen = 1516;
  481 + vrLoc = 6061;
  482 + };
  483 + B5127C670E41C13D00D266C2 /* PBXTextBookmark */ = {
  484 + isa = PBXTextBookmark;
  485 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  486 + name = "ASIHTTPRequest.m: 1";
  487 + rLen = 0;
  488 + rLoc = 0;
  489 + rType = 0;
  490 + vrLen = 1762;
  491 + vrLoc = 15103;
  492 + };
  493 + B5127C6A0E41C16B00D266C2 /* PBXTextBookmark */ = {
  494 + isa = PBXTextBookmark;
  495 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  496 + name = "ASIHTTPRequest.m: 61";
  497 + rLen = 0;
  498 + rLoc = 1514;
  499 + rType = 0;
  500 + vrLen = 787;
  501 + vrLoc = 1399;
  502 + };
183 B513D3E90E2BD48A000A50C6 /* PBXTextBookmark */ = { 503 B513D3E90E2BD48A000A50C6 /* PBXTextBookmark */ = {
184 isa = PBXTextBookmark; 504 isa = PBXTextBookmark;
185 fRef = 089C165DFE840E0CC02AAC07 /* English */; 505 fRef = 089C165DFE840E0CC02AAC07 /* English */;
@@ -223,301 +543,1072 @@ @@ -223,301 +543,1072 @@
223 vrLen = 100; 543 vrLen = 100;
224 vrLoc = 0; 544 vrLoc = 0;
225 }; 545 };
226 - B5AAC4CE0E3F1BEF00064080 /* PBXTextBookmark */ = { 546 + B569CDBC0E41C18F00B57986 /* PBXTextBookmark */ = {
227 isa = PBXTextBookmark; 547 isa = PBXTextBookmark;
228 - fRef = B5ABC80D0E24CB100072F422 /* AppDelegate.h */; 548 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
229 - name = "AppDelegate.h: 7"; 549 + name = "ASIHTTPRequest.m: 61";
230 rLen = 0; 550 rLen = 0;
231 - rLoc = 136; 551 + rLoc = 1514;
232 rType = 0; 552 rType = 0;
233 - vrLen = 1083; 553 + vrLen = 921;
234 - vrLoc = 0; 554 + vrLoc = 1265;
235 }; 555 };
236 - B5AAC4D10E3F1BEF00064080 /* PBXTextBookmark */ = { 556 + B569CDCE0E41C1DC00B57986 /* PBXTextBookmark */ = {
237 isa = PBXTextBookmark; 557 isa = PBXTextBookmark;
238 - fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 558 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
239 - name = "ASIHTTPRequest.h: 202"; 559 + name = "ASIHTTPRequest.m: 60";
240 rLen = 0; 560 rLen = 0;
241 - rLoc = 6697; 561 + rLoc = 1476;
242 rType = 0; 562 rType = 0;
243 - vrLen = 1602; 563 + vrLen = 1022;
244 - vrLoc = 5509; 564 + vrLoc = 946;
245 }; 565 };
246 - B5AAC4D20E3F1BEF00064080 /* PBXTextBookmark */ = { 566 + B569CDCF0E41C1DC00B57986 /* PBXTextBookmark */ = {
247 isa = PBXTextBookmark; 567 isa = PBXTextBookmark;
248 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 568 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
249 - name = "ASIHTTPRequest.m: 740"; 569 + name = "ASIHTTPRequest.m: 60";
250 rLen = 0; 570 rLen = 0;
251 - rLoc = 23054; 571 + rLoc = 1476;
252 rType = 0; 572 rType = 0;
253 - vrLen = 1614; 573 + vrLen = 1022;
254 - vrLoc = 21447; 574 + vrLoc = 946;
255 }; 575 };
256 - B5AAC4D30E3F1BEF00064080 /* PBXTextBookmark */ = { 576 + B569CDD00E41C1DC00B57986 /* PBXTextBookmark */ = {
257 isa = PBXTextBookmark; 577 isa = PBXTextBookmark;
258 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 578 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
259 - name = "ASIHTTPRequest.h: 201"; 579 + name = "ASIHTTPRequest.h: 103";
260 rLen = 0; 580 rLen = 0;
261 - rLoc = 6666; 581 + rLoc = 3519;
262 rType = 0; 582 rType = 0;
263 - vrLen = 1752; 583 + vrLen = 1669;
264 - vrLoc = 5386; 584 + vrLoc = 5968;
265 }; 585 };
266 - B5AAC4D40E3F1BEF00064080 /* PBXTextBookmark */ = { 586 + B569CDD30E41C1EE00B57986 /* PBXTextBookmark */ = {
267 isa = PBXTextBookmark; 587 isa = PBXTextBookmark;
268 - fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 588 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
269 - name = "ASIHTTPRequest.m: 39"; 589 + name = "ASIHTTPRequest.h: 103";
270 rLen = 0; 590 rLen = 0;
271 - rLoc = 1133; 591 + rLoc = 3519;
272 rType = 0; 592 rType = 0;
273 - vrLen = 903; 593 + vrLen = 1669;
274 - vrLoc = 626; 594 + vrLoc = 5968;
  595 + };
  596 + B569CDD40E41C1EE00B57986 /* PBXTextBookmark */ = {
  597 + isa = PBXTextBookmark;
  598 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  599 + rLen = 0;
  600 + rLoc = 236;
  601 + rType = 1;
275 }; 602 };
276 - B5AAC4D50E3F1BEF00064080 /* PBXTextBookmark */ = { 603 + B569CDD50E41C1EE00B57986 /* PBXTextBookmark */ = {
277 isa = PBXTextBookmark; 604 isa = PBXTextBookmark;
278 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 605 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
279 - name = "ASIHTTPRequest.h: 201"; 606 + name = "ASIHTTPRequest.h: 103";
280 - rLen = 8; 607 + rLen = 0;
281 - rLoc = 6658; 608 + rLoc = 3519;
282 rType = 0; 609 rType = 0;
283 - vrLen = 1815; 610 + vrLen = 1669;
284 - vrLoc = 5318; 611 + vrLoc = 5968;
285 }; 612 };
286 - B5AAC4D60E3F1BEF00064080 /* PBXTextBookmark */ = { 613 + B569CDD60E41C1EE00B57986 /* PBXTextBookmark */ = {
287 isa = PBXTextBookmark; 614 isa = PBXTextBookmark;
288 - fRef = B5ABC80D0E24CB100072F422 /* AppDelegate.h */; 615 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
289 - name = "AppDelegate.h: 7"; 616 + name = "ASIHTTPRequest.m: 42";
290 rLen = 0; 617 rLen = 0;
291 - rLoc = 136; 618 + rLoc = 1113;
292 rType = 0; 619 rType = 0;
293 - vrLen = 1083; 620 + vrLen = 1013;
294 - vrLoc = 0; 621 + vrLoc = 1101;
295 }; 622 };
296 - B5AAC4D70E3F1BEF00064080 /* PBXTextBookmark */ = { 623 + B569CDE20E41C3E900B57986 /* PBXTextBookmark */ = {
297 isa = PBXTextBookmark; 624 isa = PBXTextBookmark;
298 - fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */; 625 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
299 - name = "AppDelegate.m: 134"; 626 + name = "ASIHTTPRequest.m: 487";
  627 + rLen = 0;
  628 + rLoc = 15425;
  629 + rType = 0;
  630 + vrLen = 1766;
  631 + vrLoc = 15119;
  632 + };
  633 + B569CE020E41C8E100B57986 /* PBXTextBookmark */ = {
  634 + isa = PBXTextBookmark;
  635 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  636 + name = "ASIHTTPRequest.h: 75";
  637 + rLen = 23;
  638 + rLoc = 2688;
  639 + rType = 0;
  640 + vrLen = 1834;
  641 + vrLoc = 1042;
  642 + };
  643 + B569CE030E41C8E100B57986 /* PBXTextBookmark */ = {
  644 + isa = PBXTextBookmark;
  645 + comments = "error: 'sessionAuthenticationArray' undeclared (first use in this function)";
  646 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  647 + rLen = 0;
  648 + rLoc = 32;
  649 + rType = 1;
  650 + };
  651 + B569CE040E41C8E100B57986 /* PBXTextBookmark */ = {
  652 + isa = PBXTextBookmark;
  653 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  654 + name = "ASIHTTPRequest.m: 19";
300 rLen = 0; 655 rLen = 0;
301 - rLoc = 4486; 656 + rLoc = 752;
302 rType = 0; 657 rType = 0;
303 - vrLen = 1170; 658 + vrLen = 1501;
304 vrLoc = 0; 659 vrLoc = 0;
305 }; 660 };
306 - B5AAC4F50E3F1C4100064080 /* PBXTextBookmark */ = { 661 + B569CE050E41C8E100B57986 /* PBXTextBookmark */ = {
307 isa = PBXTextBookmark; 662 isa = PBXTextBookmark;
308 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 663 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
309 - name = "ASIHTTPRequest.h: 201"; 664 + name = "ASIHTTPRequest.h: 75";
310 - rLen = 8; 665 + rLen = 23;
311 - rLoc = 6658; 666 + rLoc = 2688;
312 rType = 0; 667 rType = 0;
313 - vrLen = 1321; 668 + vrLen = 1243;
314 - vrLoc = 3201; 669 + vrLoc = 2355;
315 }; 670 };
316 - B5AAC4F70E3F1C4100064080 /* PBXTextBookmark */ = { 671 + B569CE060E41C8E100B57986 /* PBXTextBookmark */ = {
317 isa = PBXTextBookmark; 672 isa = PBXTextBookmark;
318 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 673 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
319 - name = "ASIHTTPRequest.m: 39"; 674 + name = "ASIHTTPRequest.m: 240";
320 rLen = 0; 675 rLen = 0;
321 - rLoc = 1133; 676 + rLoc = 6880;
322 rType = 0; 677 rType = 0;
323 - vrLen = 1020; 678 + vrLen = 1512;
324 - vrLoc = 551; 679 + vrLoc = 6457;
325 }; 680 };
326 - B5AAC4F80E3F1C4100064080 /* PBXTextBookmark */ = { 681 + B569CE070E41C8E100B57986 /* PBXTextBookmark */ = {
327 isa = PBXTextBookmark; 682 isa = PBXTextBookmark;
328 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 683 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
329 - name = "ASIHTTPRequest.h: 201"; 684 + name = "ASIHTTPRequest.h: 75";
330 - rLen = 8; 685 + rLen = 23;
331 - rLoc = 6658; 686 + rLoc = 2688;
332 rType = 0; 687 rType = 0;
333 - vrLen = 1321; 688 + vrLen = 1834;
334 - vrLoc = 3201; 689 + vrLoc = 1042;
335 }; 690 };
336 - B5AAC50B0E3F1CC300064080 /* AppDelegate.m:22 */ = { 691 + B569CE080E41C8E100B57986 /* PBXTextBookmark */ = {
337 - isa = PBXFileBreakpoint; 692 + isa = PBXTextBookmark;
338 - actions = ( 693 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
339 - ); 694 + name = "ASIHTTPRequest.m: 32";
340 - breakpointStyle = 0; 695 + rLen = 0;
341 - continueAfterActions = 0; 696 + rLoc = 1070;
342 - countType = 0; 697 + rType = 0;
343 - delayBeforeContinue = 0; 698 + vrLen = 1206;
344 - fileReference = B5ABC80E0E24CB100072F422 /* AppDelegate.m */; 699 + vrLoc = 398;
345 - functionName = "-dealloc";  
346 - hitCount = 0;  
347 - ignoreCount = 0;  
348 - lineNumber = 22;  
349 - modificationTime = 239019839.524838;  
350 - state = 1;  
351 }; 700 };
352 - B5AAC5290E3F1D0A00064080 /* PBXTextBookmark */ = { 701 + B569CE0B0E41C92000B57986 /* PBXTextBookmark */ = {
353 isa = PBXTextBookmark; 702 isa = PBXTextBookmark;
354 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 703 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
355 - name = "ASIHTTPRequest.m: 58"; 704 + name = "ASIHTTPRequest.m: 175";
356 rLen = 0; 705 rLen = 0;
357 - rLoc = 1517; 706 + rLoc = 4457;
358 rType = 0; 707 rType = 0;
359 - vrLen = 803; 708 + vrLen = 1769;
360 - vrLoc = 817; 709 + vrLoc = 3330;
361 }; 710 };
362 - B5AAC5370E3F1D5800064080 /* PBXTextBookmark */ = { 711 + B569CE0D0E41C92500B57986 /* PBXTextBookmark */ = {
363 isa = PBXTextBookmark; 712 isa = PBXTextBookmark;
364 - fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */; 713 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
365 - name = "AppDelegate.m: 134"; 714 + name = "ASIHTTPRequest.m: 175";
  715 + rLen = 0;
  716 + rLoc = 4457;
  717 + rType = 0;
  718 + vrLen = 1302;
  719 + vrLoc = 6177;
  720 + };
  721 + B569CE110E41CB6200B57986 /* PBXTextBookmark */ = {
  722 + isa = PBXTextBookmark;
  723 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  724 + name = "ASIHTTPRequest.h: 219";
366 rLen = 0; 725 rLen = 0;
367 - rLoc = 4486; 726 + rLoc = 7455;
368 rType = 0; 727 rType = 0;
369 - vrLen = 2071; 728 + vrLen = 1823;
370 - vrLoc = 1338; 729 + vrLoc = 5906;
371 }; 730 };
372 - B5AAC5380E3F1D5800064080 /* PBXTextBookmark */ = { 731 + B569CE120E41CB6200B57986 /* PBXTextBookmark */ = {
373 isa = PBXTextBookmark; 732 isa = PBXTextBookmark;
374 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 733 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
375 - name = "ASIHTTPRequest.m: 643"; 734 + name = "ASIHTTPRequest.m: 422";
376 rLen = 0; 735 rLen = 0;
377 - rLoc = 19582; 736 + rLoc = 13895;
378 rType = 0; 737 rType = 0;
379 - vrLen = 960; 738 + vrLen = 1738;
380 - vrLoc = 18923; 739 + vrLoc = 12647;
381 }; 740 };
382 - B5AAC5460E3F1D8300064080 /* PBXTextBookmark */ = { 741 + B569CE130E41CB6200B57986 /* PBXTextBookmark */ = {
383 isa = PBXTextBookmark; 742 isa = PBXTextBookmark;
384 - fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */; 743 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
385 - name = "AppDelegate.m: 22"; 744 + name = "ASIHTTPRequest.m: 422";
386 rLen = 0; 745 rLen = 0;
387 - rLoc = 354; 746 + rLoc = 13895;
388 rType = 0; 747 rType = 0;
389 - vrLen = 1038; 748 + vrLen = 1738;
390 - vrLoc = 0; 749 + vrLoc = 12647;
391 }; 750 };
392 - B5AAC5470E3F1D8300064080 /* PBXTextBookmark */ = { 751 + B569CE140E41CB6200B57986 /* PBXTextBookmark */ = {
393 isa = PBXTextBookmark; 752 isa = PBXTextBookmark;
394 - fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */; 753 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
395 - name = "AppDelegate.m: 22"; 754 + name = "ASIHTTPRequest.h: 219";
396 rLen = 0; 755 rLen = 0;
397 - rLoc = 354; 756 + rLoc = 7455;
398 rType = 0; 757 rType = 0;
399 - vrLen = 1038; 758 + vrLen = 1823;
400 - vrLoc = 0; 759 + vrLoc = 5906;
401 }; 760 };
402 - B5AAC5C00E3F220500064080 /* PBXTextBookmark */ = { 761 + B569CE150E41CB6200B57986 /* PBXTextBookmark */ = {
403 isa = PBXTextBookmark; 762 isa = PBXTextBookmark;
404 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 763 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
405 - name = "ASIHTTPRequest.m: 349"; 764 + name = "ASIHTTPRequest.m: 411";
  765 + rLen = 15;
  766 + rLoc = 13086;
  767 + rType = 0;
  768 + vrLen = 1690;
  769 + vrLoc = 11902;
  770 + };
  771 + B569CE1A0E41CCC500B57986 /* PBXTextBookmark */ = {
  772 + isa = PBXTextBookmark;
  773 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  774 + name = "ASIHTTPRequest.h: 219";
406 rLen = 0; 775 rLen = 0;
407 - rLoc = 10451; 776 + rLoc = 7423;
408 rType = 0; 777 rType = 0;
409 - vrLen = 1783; 778 + vrLen = 1814;
410 - vrLoc = 10010; 779 + vrLoc = 5906;
411 }; 780 };
412 - B5AAC5C10E3F220500064080 /* PBXTextBookmark */ = { 781 + B569CE1B0E41CCC500B57986 /* PBXTextBookmark */ = {
413 isa = PBXTextBookmark; 782 isa = PBXTextBookmark;
414 - fRef = B5ABC7ED0E24C6670072F422 /* ASIProgressDelegate.h */; 783 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
415 - name = "ASIProgressDelegate.h: 17"; 784 + name = "ASIHTTPRequest.m: 53";
416 rLen = 0; 785 rLen = 0;
417 - rLoc = 360; 786 + rLoc = 1437;
418 rType = 0; 787 rType = 0;
419 - vrLen = 360; 788 + vrLen = 948;
420 - vrLoc = 0; 789 + vrLoc = 820;
421 }; 790 };
422 - B5AAC5C20E3F220500064080 /* PBXTextBookmark */ = { 791 + B569CE1C0E41CCC500B57986 /* PBXTextBookmark */ = {
423 isa = PBXTextBookmark; 792 isa = PBXTextBookmark;
424 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 793 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
425 - name = "ASIHTTPRequest.m: 349"; 794 + name = "ASIHTTPRequest.m: 420";
426 rLen = 0; 795 rLen = 0;
427 - rLoc = 10451; 796 + rLoc = 13895;
428 rType = 0; 797 rType = 0;
429 - vrLen = 1783; 798 + vrLen = 1690;
430 - vrLoc = 10010; 799 + vrLoc = 11910;
431 }; 800 };
432 - B5AAC6F80E3F275B00064080 /* PBXTextBookmark */ = { 801 + B569CE1D0E41CCC500B57986 /* PBXTextBookmark */ = {
433 isa = PBXTextBookmark; 802 isa = PBXTextBookmark;
434 - fRef = B5ABC7ED0E24C6670072F422 /* ASIProgressDelegate.h */; 803 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
435 - name = "ASIProgressDelegate.h: 17"; 804 + name = "ASIHTTPRequest.h: 219";
436 rLen = 0; 805 rLen = 0;
437 - rLoc = 360; 806 + rLoc = 7423;
438 rType = 0; 807 rType = 0;
439 - vrLen = 360; 808 + vrLen = 1814;
440 - vrLoc = 0; 809 + vrLoc = 5906;
441 }; 810 };
442 - B5AACA810E3F3D3400064080 /* PBXTextBookmark */ = { 811 + B569CE1E0E41CCC500B57986 /* PBXTextBookmark */ = {
443 isa = PBXTextBookmark; 812 isa = PBXTextBookmark;
444 - fRef = B5ABC7ED0E24C6670072F422 /* ASIProgressDelegate.h */; 813 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
445 - name = "ASIProgressDelegate.h: 17"; 814 + name = "ASIHTTPRequest.m: 53";
446 rLen = 0; 815 rLen = 0;
447 - rLoc = 360; 816 + rLoc = 1437;
448 rType = 0; 817 rType = 0;
449 - vrLen = 360; 818 + vrLen = 948;
450 - vrLoc = 0; 819 + vrLoc = 820;
  820 + };
  821 + B569CE1F0E41CCC500B57986 /* PBXTextBookmark */ = {
  822 + isa = PBXTextBookmark;
  823 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  824 + name = "ASIHTTPRequest.h: 219";
  825 + rLen = 0;
  826 + rLoc = 7423;
  827 + rType = 0;
  828 + vrLen = 1814;
  829 + vrLoc = 5906;
451 }; 830 };
452 - B5AACA820E3F3D3400064080 /* PBXTextBookmark */ = { 831 + B569CE200E41CCC500B57986 /* PBXTextBookmark */ = {
453 isa = PBXTextBookmark; 832 isa = PBXTextBookmark;
454 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 833 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
455 - name = "ASIHTTPRequest.m: 349"; 834 + name = "ASIHTTPRequest.m: 417";
456 rLen = 0; 835 rLen = 0;
457 - rLoc = 10451; 836 + rLoc = 13295;
458 rType = 0; 837 rType = 0;
459 - vrLen = 1689; 838 + vrLen = 1661;
460 - vrLoc = 21372; 839 + vrLoc = 12420;
461 }; 840 };
462 - B5AACA830E3F3D3400064080 /* PBXTextBookmark */ = { 841 + B569CE230E41CD9800B57986 /* PBXTextBookmark */ = {
463 isa = PBXTextBookmark; 842 isa = PBXTextBookmark;
464 - fRef = B5ABC7ED0E24C6670072F422 /* ASIProgressDelegate.h */; 843 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
465 - name = "ASIProgressDelegate.h: 17"; 844 + name = "ASIHTTPRequest.m: 417";
466 rLen = 0; 845 rLen = 0;
467 - rLoc = 360; 846 + rLoc = 13295;
468 rType = 0; 847 rType = 0;
469 - vrLen = 360; 848 + vrLen = 1597;
470 - vrLoc = 0; 849 + vrLoc = 12420;
471 }; 850 };
472 - B5AACA840E3F3D3400064080 /* PBXTextBookmark */ = { 851 + B569CE250E41CDA500B57986 /* PBXTextBookmark */ = {
473 isa = PBXTextBookmark; 852 isa = PBXTextBookmark;
474 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */; 853 fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
475 - name = "ASIHTTPRequest.m: 349"; 854 + name = "ASIHTTPRequest.m: 417";
476 rLen = 0; 855 rLen = 0;
477 - rLoc = 10451; 856 + rLoc = 13295;
478 rType = 0; 857 rType = 0;
479 - vrLen = 1689; 858 + vrLen = 1597;
480 - vrLoc = 21372; 859 + vrLoc = 12420;
481 }; 860 };
482 - B5AACA850E3F3D3400064080 /* PBXTextBookmark */ = { 861 + B569CE280E41CDAA00B57986 /* PBXTextBookmark */ = {
483 isa = PBXTextBookmark; 862 isa = PBXTextBookmark;
484 - fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 863 + comments = "warning: method definition for '+findAuthenticationForRequest:' not found";
485 - name = "ASIHTTPRequest.h: 201"; 864 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
486 - rLen = 8; 865 + rLen = 1;
487 - rLoc = 6658; 866 + rLoc = 776;
  867 + rType = 1;
  868 + };
  869 + B569CE290E41CDAA00B57986 /* PBXTextBookmark */ = {
  870 + isa = PBXTextBookmark;
  871 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  872 + name = "ASIHTTPRequest.m: 427";
  873 + rLen = 0;
  874 + rLoc = 13820;
488 rType = 0; 875 rType = 0;
489 - vrLen = 1206; 876 + vrLen = 1258;
490 - vrLoc = 2415; 877 + vrLoc = 12438;
491 }; 878 };
492 - B5AACA920E3F3D4800064080 /* PBXTextBookmark */ = { 879 + B569CE2A0E41CDE200B57986 /* PBXTextBookmark */ = {
493 isa = PBXTextBookmark; 880 isa = PBXTextBookmark;
494 - fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 881 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
495 - name = "ASIHTTPRequest.h: 201"; 882 + name = "ASIHTTPRequest.m: 436";
496 - rLen = 8; 883 + rLen = 0;
497 - rLoc = 6658; 884 + rLoc = 13895;
498 rType = 0; 885 rType = 0;
499 - vrLen = 1206; 886 + vrLen = 1103;
500 - vrLoc = 2415; 887 + vrLoc = 7820;
501 }; 888 };
502 - B5AACAC20E3F3DDC00064080 /* PBXTextBookmark */ = { 889 + B569CE2D0E41CF5100B57986 /* PBXTextBookmark */ = {
503 isa = PBXTextBookmark; 890 isa = PBXTextBookmark;
504 - fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 891 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
505 - name = "ASIHTTPRequest.h: 109"; 892 + name = "ASIHTTPRequest.m: 525";
506 rLen = 0; 893 rLen = 0;
507 - rLoc = 3517; 894 + rLoc = 16937;
508 rType = 0; 895 rType = 0;
509 - vrLen = 1314; 896 + vrLen = 1401;
510 - vrLoc = 3342; 897 + vrLoc = 16149;
511 }; 898 };
512 - B5AACAC30E3F3DDC00064080 /* PBXTextBookmark */ = { 899 + B569CE380E41D24C00B57986 /* PBXTextBookmark */ = {
513 isa = PBXTextBookmark; 900 isa = PBXTextBookmark;
514 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */; 901 fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
515 - name = "ASIHTTPRequest.h: 205"; 902 + name = "ASIHTTPRequest.h: 221";
  903 + rLen = 0;
  904 + rLoc = 7507;
  905 + rType = 0;
  906 + vrLen = 1839;
  907 + vrLoc = 6015;
  908 + };
  909 + B569CE390E41D24C00B57986 /* PBXTextBookmark */ = {
  910 + isa = PBXTextBookmark;
  911 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  912 + name = "ASIHTTPRequest.m: 467";
  913 + rLen = 25;
  914 + rLoc = 15123;
  915 + rType = 0;
  916 + vrLen = 1818;
  917 + vrLoc = 13572;
  918 + };
  919 + B569CE3A0E41D24C00B57986 /* PBXTextBookmark */ = {
  920 + isa = PBXTextBookmark;
  921 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  922 + name = "ASIHTTPRequest.m: 525";
  923 + rLen = 0;
  924 + rLoc = 16937;
  925 + rType = 0;
  926 + vrLen = 1523;
  927 + vrLoc = 15907;
  928 + };
  929 + B569CE3B0E41D24C00B57986 /* PBXTextBookmark */ = {
  930 + isa = PBXTextBookmark;
  931 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  932 + name = "ASIHTTPRequest.h: 78";
  933 + rLen = 0;
  934 + rLoc = 2816;
  935 + rType = 0;
  936 + vrLen = 1655;
  937 + vrLoc = 0;
  938 + };
  939 + B569CE3C0E41D24C00B57986 /* PBXTextBookmark */ = {
  940 + isa = PBXTextBookmark;
  941 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  942 + name = "ASIHTTPRequest.m: 175";
  943 + rLen = 18;
  944 + rLoc = 4156;
  945 + rType = 0;
  946 + vrLen = 1442;
  947 + vrLoc = 7757;
  948 + };
  949 + B569CE3D0E41D24C00B57986 /* PBXTextBookmark */ = {
  950 + isa = PBXTextBookmark;
  951 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  952 + name = "ASIHTTPRequest.h: 221";
  953 + rLen = 25;
  954 + rLoc = 7518;
  955 + rType = 0;
  956 + vrLen = 1786;
  957 + vrLoc = 5973;
  958 + };
  959 + B569CE3E0E41D24C00B57986 /* PBXTextBookmark */ = {
  960 + isa = PBXTextBookmark;
  961 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  962 + name = "ASIHTTPRequest.m: 467";
  963 + rLen = 25;
  964 + rLoc = 15123;
  965 + rType = 0;
  966 + vrLen = 1818;
  967 + vrLoc = 13572;
  968 + };
  969 + B569CE3F0E41D24C00B57986 /* PBXTextBookmark */ = {
  970 + isa = PBXTextBookmark;
  971 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  972 + name = "ASIHTTPRequest.h: 221";
  973 + rLen = 0;
  974 + rLoc = 7507;
  975 + rType = 0;
  976 + vrLen = 1839;
  977 + vrLoc = 6015;
  978 + };
  979 + B569CE400E41D24C00B57986 /* PBXTextBookmark */ = {
  980 + isa = PBXTextBookmark;
  981 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  982 + name = "ASIHTTPRequest.m: 785";
  983 + rLen = 0;
  984 + rLoc = 24543;
  985 + rType = 0;
  986 + vrLen = 1373;
  987 + vrLoc = 23335;
  988 + };
  989 + B569CE430E41D27B00B57986 /* PBXTextBookmark */ = {
  990 + isa = PBXTextBookmark;
  991 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  992 + name = "ASIHTTPRequest.m: 775";
  993 + rLen = 0;
  994 + rLoc = 24543;
  995 + rType = 0;
  996 + vrLen = 1373;
  997 + vrLoc = 23084;
  998 + };
  999 + B569CE470E41D2D200B57986 /* PBXTextBookmark */ = {
  1000 + isa = PBXTextBookmark;
  1001 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1002 + name = "ASIHTTPRequest.m: 413";
  1003 + rLen = 49;
  1004 + rLoc = 12826;
  1005 + rType = 0;
  1006 + vrLen = 1757;
  1007 + vrLoc = 12096;
  1008 + };
  1009 + B569CE480E41D2D200B57986 /* PBXTextBookmark */ = {
  1010 + isa = PBXTextBookmark;
  1011 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1012 + name = "ASIHTTPRequest.h: 205";
  1013 + rLen = 0;
  1014 + rLoc = 6856;
  1015 + rType = 0;
  1016 + vrLen = 1729;
  1017 + vrLoc = 5914;
  1018 + };
  1019 + B569CE490E41D2D200B57986 /* PBXTextBookmark */ = {
  1020 + isa = PBXTextBookmark;
  1021 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1022 + name = "ASIHTTPRequest.m: 775";
  1023 + rLen = 0;
  1024 + rLoc = 24543;
  1025 + rType = 0;
  1026 + vrLen = 1373;
  1027 + vrLoc = 23084;
  1028 + };
  1029 + B569CE4A0E41D2D200B57986 /* PBXTextBookmark */ = {
  1030 + isa = PBXTextBookmark;
  1031 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1032 + name = "ASIHTTPRequest.h: 205";
  1033 + rLen = 0;
  1034 + rLoc = 6856;
  1035 + rType = 0;
  1036 + vrLen = 1822;
  1037 + vrLoc = 5821;
  1038 + };
  1039 + B569CE4B0E41D2D200B57986 /* PBXTextBookmark */ = {
  1040 + isa = PBXTextBookmark;
  1041 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1042 + name = "ASIHTTPRequest.m: 413";
  1043 + rLen = 49;
  1044 + rLoc = 12826;
  1045 + rType = 0;
  1046 + vrLen = 1757;
  1047 + vrLoc = 12096;
  1048 + };
  1049 + B569CE4C0E41D2D200B57986 /* PBXTextBookmark */ = {
  1050 + isa = PBXTextBookmark;
  1051 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1052 + name = "ASIHTTPRequest.h: 171";
  1053 + rLen = 0;
  1054 + rLoc = 6305;
  1055 + rType = 0;
  1056 + vrLen = 1806;
  1057 + vrLoc = 5319;
  1058 + };
  1059 + B569CE4F0E41D30800B57986 /* PBXTextBookmark */ = {
  1060 + isa = PBXTextBookmark;
  1061 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1062 + name = "ASIHTTPRequest.h: 171";
  1063 + rLen = 0;
  1064 + rLoc = 6305;
  1065 + rType = 0;
  1066 + vrLen = 1806;
  1067 + vrLoc = 5319;
  1068 + };
  1069 + B569CE500E41D30800B57986 /* PBXTextBookmark */ = {
  1070 + isa = PBXTextBookmark;
  1071 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1072 + name = "ASIHTTPRequest.m: 413";
  1073 + rLen = 49;
  1074 + rLoc = 12826;
  1075 + rType = 0;
  1076 + vrLen = 1756;
  1077 + vrLoc = 12097;
  1078 + };
  1079 + B569CE510E41D30800B57986 /* PBXTextBookmark */ = {
  1080 + isa = PBXTextBookmark;
  1081 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1082 + name = "ASIHTTPRequest.h: 171";
  1083 + rLen = 0;
  1084 + rLoc = 6305;
  1085 + rType = 0;
  1086 + vrLen = 1806;
  1087 + vrLoc = 5319;
  1088 + };
  1089 + B569CE520E41D30800B57986 /* PBXTextBookmark */ = {
  1090 + isa = PBXTextBookmark;
  1091 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1092 + name = "ASIHTTPRequest.m: 71";
  1093 + rLen = 0;
  1094 + rLoc = 1810;
  1095 + rType = 0;
  1096 + vrLen = 894;
  1097 + vrLoc = 1514;
  1098 + };
  1099 + B569CE580E41D3A800B57986 /* PBXTextBookmark */ = {
  1100 + isa = PBXTextBookmark;
  1101 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1102 + name = "ASIHTTPRequest.m: 646";
  1103 + rLen = 0;
  1104 + rLoc = 20650;
  1105 + rType = 0;
  1106 + vrLen = 1041;
  1107 + vrLoc = 20293;
  1108 + };
  1109 + B569CE590E41D3A800B57986 /* PBXTextBookmark */ = {
  1110 + isa = PBXTextBookmark;
  1111 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1112 + name = "ASIHTTPRequest.h: 171";
  1113 + rLen = 0;
  1114 + rLoc = 6305;
  1115 + rType = 0;
  1116 + vrLen = 1925;
  1117 + vrLoc = 5248;
  1118 + };
  1119 + B569CE5A0E41D3A800B57986 /* PBXTextBookmark */ = {
  1120 + isa = PBXTextBookmark;
  1121 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1122 + name = "ASIHTTPRequest.m: 646";
  1123 + rLen = 0;
  1124 + rLoc = 20650;
  1125 + rType = 0;
  1126 + vrLen = 1041;
  1127 + vrLoc = 20293;
  1128 + };
  1129 + B569CE5B0E41D3A800B57986 /* PBXTextBookmark */ = {
  1130 + isa = PBXTextBookmark;
  1131 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1132 + name = "ASIHTTPRequest.h: 178";
  1133 + rLen = 0;
  1134 + rLoc = 6305;
  1135 + rType = 0;
  1136 + vrLen = 1831;
  1137 + vrLoc = 5248;
  1138 + };
  1139 + B569CE5F0E41D3E300B57986 /* PBXTextBookmark */ = {
  1140 + isa = PBXTextBookmark;
  1141 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1142 + name = "ASIHTTPRequest.h: 223";
  1143 + rLen = 9;
  1144 + rLoc = 7591;
  1145 + rType = 0;
  1146 + vrLen = 1668;
  1147 + vrLoc = 6082;
  1148 + };
  1149 + B569CE600E41D3E300B57986 /* PBXTextBookmark */ = {
  1150 + isa = PBXTextBookmark;
  1151 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1152 + name = "ASIHTTPRequest.m: 646";
  1153 + rLen = 0;
  1154 + rLoc = 20650;
  1155 + rType = 0;
  1156 + vrLen = 1038;
  1157 + vrLoc = 20293;
  1158 + };
  1159 + B569CE610E41D3E300B57986 /* PBXTextBookmark */ = {
  1160 + isa = PBXTextBookmark;
  1161 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1162 + name = "ASIHTTPRequest.h: 223";
  1163 + rLen = 9;
  1164 + rLoc = 7591;
  1165 + rType = 0;
  1166 + vrLen = 1668;
  1167 + vrLoc = 6082;
  1168 + };
  1169 + B569CE620E41D3E300B57986 /* PBXTextBookmark */ = {
  1170 + isa = PBXTextBookmark;
  1171 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1172 + name = "ASIHTTPRequest.m: 595";
  1173 + rLen = 0;
  1174 + rLoc = 19490;
  1175 + rType = 0;
  1176 + vrLen = 1275;
  1177 + vrLoc = 18313;
  1178 + };
  1179 + B569CE650E41D3FA00B57986 /* PBXTextBookmark */ = {
  1180 + isa = PBXTextBookmark;
  1181 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1182 + name = "ASIHTTPRequest.m: 599";
  1183 + rLen = 0;
  1184 + rLoc = 19567;
  1185 + rType = 0;
  1186 + vrLen = 1331;
  1187 + vrLoc = 18313;
  1188 + };
  1189 + B569CE680E41D41200B57986 /* PBXTextBookmark */ = {
  1190 + isa = PBXTextBookmark;
  1191 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1192 + name = "ASIHTTPRequest.m: 599";
  1193 + rLen = 0;
  1194 + rLoc = 19567;
  1195 + rType = 0;
  1196 + vrLen = 1373;
  1197 + vrLoc = 23176;
  1198 + };
  1199 + B569CE690E41D41200B57986 /* PBXTextBookmark */ = {
  1200 + isa = PBXTextBookmark;
  1201 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1202 + name = "ASIHTTPRequest.h: 223";
  1203 + rLen = 9;
  1204 + rLoc = 7591;
  1205 + rType = 0;
  1206 + vrLen = 1669;
  1207 + vrLoc = 6081;
  1208 + };
  1209 + B569CE6A0E41D41200B57986 /* PBXTextBookmark */ = {
  1210 + isa = PBXTextBookmark;
  1211 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1212 + name = "ASIHTTPRequest.m: 599";
  1213 + rLen = 0;
  1214 + rLoc = 19567;
  1215 + rType = 0;
  1216 + vrLen = 1373;
  1217 + vrLoc = 23176;
  1218 + };
  1219 + B569CE6B0E41D41200B57986 /* PBXTextBookmark */ = {
  1220 + isa = PBXTextBookmark;
  1221 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1222 + name = "ASIHTTPRequest.h: 178";
  1223 + rLen = 0;
  1224 + rLoc = 6305;
  1225 + rType = 0;
  1226 + vrLen = 1637;
  1227 + vrLoc = 0;
  1228 + };
  1229 + B569CE710E41D5EB00B57986 /* PBXTextBookmark */ = {
  1230 + isa = PBXTextBookmark;
  1231 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1232 + name = "ASIHTTPRequest.m: 32";
  1233 + rLen = 0;
  1234 + rLoc = 1006;
  1235 + rType = 0;
  1236 + vrLen = 1640;
  1237 + vrLoc = 305;
  1238 + };
  1239 + B569CE720E41D5EB00B57986 /* PBXTextBookmark */ = {
  1240 + isa = PBXTextBookmark;
  1241 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1242 + name = "ASIHTTPRequest.h: 141";
  1243 + rLen = 0;
  1244 + rLoc = 6305;
  1245 + rType = 0;
  1246 + vrLen = 1433;
  1247 + vrLoc = 3279;
  1248 + };
  1249 + B569CE730E41D5EB00B57986 /* PBXTextBookmark */ = {
  1250 + isa = PBXTextBookmark;
  1251 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1252 + name = "ASIHTTPRequest.h: 178";
  1253 + rLen = 0;
  1254 + rLoc = 6305;
  1255 + rType = 0;
  1256 + vrLen = 1208;
  1257 + vrLoc = 2853;
  1258 + };
  1259 + B569CE740E41D5EB00B57986 /* PBXTextBookmark */ = {
  1260 + isa = PBXTextBookmark;
  1261 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1262 + name = "ASIHTTPRequest.m: 29";
  1263 + rLen = 0;
  1264 + rLoc = 1006;
  1265 + rType = 0;
  1266 + vrLen = 1297;
  1267 + vrLoc = 0;
  1268 + };
  1269 + B569CE750E41D5EB00B57986 /* PBXTextBookmark */ = {
  1270 + isa = PBXTextBookmark;
  1271 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1272 + name = "ASIHTTPRequest.h: 181";
  1273 + rLen = 0;
  1274 + rLoc = 6305;
  1275 + rType = 0;
  1276 + vrLen = 1885;
  1277 + vrLoc = 4972;
  1278 + };
  1279 + B569CE760E41D5EB00B57986 /* PBXTextBookmark */ = {
  1280 + isa = PBXTextBookmark;
  1281 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1282 + name = "ASIHTTPRequest.m: 611";
  1283 + rLen = 19;
  1284 + rLoc = 19663;
  1285 + rType = 0;
  1286 + vrLen = 1284;
  1287 + vrLoc = 18857;
  1288 + };
  1289 + B569CE770E41D5EB00B57986 /* PBXTextBookmark */ = {
  1290 + isa = PBXTextBookmark;
  1291 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1292 + name = "ASIHTTPRequest.h: 115";
  1293 + rLen = 0;
  1294 + rLoc = 3833;
  1295 + rType = 0;
  1296 + vrLen = 1445;
  1297 + vrLoc = 3186;
  1298 + };
  1299 + B569CE780E41D5EB00B57986 /* PBXTextBookmark */ = {
  1300 + isa = PBXTextBookmark;
  1301 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1302 + name = "ASIHTTPRequest.m: 57";
  1303 + rLen = 0;
  1304 + rLoc = 1006;
  1305 + rType = 0;
  1306 + vrLen = 1419;
  1307 + vrLoc = 1043;
  1308 + };
  1309 + B569CE790E41D5EB00B57986 /* PBXTextBookmark */ = {
  1310 + isa = PBXTextBookmark;
  1311 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1312 + name = "ASIHTTPRequest.h: 141";
  1313 + rLen = 0;
  1314 + rLoc = 6305;
  1315 + rType = 0;
  1316 + vrLen = 1745;
  1317 + vrLoc = 3823;
  1318 + };
  1319 + B569CE7A0E41D5EB00B57986 /* PBXTextBookmark */ = {
  1320 + isa = PBXTextBookmark;
  1321 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1322 + name = "ASIHTTPRequest.m: 32";
  1323 + rLen = 0;
  1324 + rLoc = 1006;
  1325 + rType = 0;
  1326 + vrLen = 1640;
  1327 + vrLoc = 305;
  1328 + };
  1329 + B569CE7B0E41D5EB00B57986 /* PBXTextBookmark */ = {
  1330 + isa = PBXTextBookmark;
  1331 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1332 + name = "ASIHTTPRequest.h: 152";
  1333 + rLen = 0;
  1334 + rLoc = 6306;
  1335 + rType = 0;
  1336 + vrLen = 1705;
  1337 + vrLoc = 4232;
  1338 + };
  1339 + B569CE7E0E41D63F00B57986 /* PBXTextBookmark */ = {
  1340 + isa = PBXTextBookmark;
  1341 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1342 + name = "ASIHTTPRequest.h: 152";
  1343 + rLen = 0;
  1344 + rLoc = 6306;
  1345 + rType = 0;
  1346 + vrLen = 1637;
  1347 + vrLoc = 0;
  1348 + };
  1349 + B569CE7F0E41D63F00B57986 /* PBXTextBookmark */ = {
  1350 + isa = PBXTextBookmark;
  1351 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1352 + name = "ASIHTTPRequest.m: 34";
  1353 + rLen = 0;
  1354 + rLoc = 1006;
  1355 + rType = 0;
  1356 + vrLen = 1642;
  1357 + vrLoc = 305;
  1358 + };
  1359 + B569CE800E41D63F00B57986 /* PBXTextBookmark */ = {
  1360 + isa = PBXTextBookmark;
  1361 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1362 + name = "ASIHTTPRequest.h: 152";
  1363 + rLen = 0;
  1364 + rLoc = 6306;
  1365 + rType = 0;
  1366 + vrLen = 1637;
  1367 + vrLoc = 0;
  1368 + };
  1369 + B569CE810E41D63F00B57986 /* PBXTextBookmark */ = {
  1370 + isa = PBXTextBookmark;
  1371 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1372 + name = "ASIHTTPRequest.m: 572";
  1373 + rLen = 0;
  1374 + rLoc = 17379;
  1375 + rType = 0;
  1376 + vrLen = 1604;
  1377 + vrLoc = 18158;
  1378 + };
  1379 + B569CE830E41D65300B57986 /* PBXTextBookmark */ = {
  1380 + isa = PBXTextBookmark;
  1381 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1382 + name = "ASIHTTPRequest.m: 572";
  1383 + rLen = 0;
  1384 + rLoc = 17379;
  1385 + rType = 0;
  1386 + vrLen = 1604;
  1387 + vrLoc = 18158;
  1388 + };
  1389 + B569CE850E41D66D00B57986 /* PBXTextBookmark */ = {
  1390 + isa = PBXTextBookmark;
  1391 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1392 + name = "ASIHTTPRequest.m: 572";
  1393 + rLen = 0;
  1394 + rLoc = 17379;
  1395 + rType = 0;
  1396 + vrLen = 1604;
  1397 + vrLoc = 18158;
  1398 + };
  1399 + B569CE860E41D69100B57986 /* PBXTextBookmark */ = {
  1400 + isa = PBXTextBookmark;
  1401 + fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  1402 + name = "AppDelegate.m: 153";
  1403 + rLen = 24;
  1404 + rLoc = 5193;
  1405 + rType = 0;
  1406 + vrLen = 1453;
  1407 + vrLoc = 4454;
  1408 + };
  1409 + B569CE870E41D69100B57986 /* PBXTextBookmark */ = {
  1410 + isa = PBXTextBookmark;
  1411 + comments = "error: 'ReadStreamClientCallBack' undeclared (first use in this function)";
  1412 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1413 + rLen = 1;
  1414 + rLoc = 262;
  1415 + rType = 1;
  1416 + };
  1417 + B569CE880E41D69100B57986 /* PBXTextBookmark */ = {
  1418 + isa = PBXTextBookmark;
  1419 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1420 + name = "ASIHTTPRequest.m: 24";
  1421 + rLen = 0;
  1422 + rLoc = 1005;
  1423 + rType = 0;
  1424 + vrLen = 1074;
  1425 + vrLoc = 140;
  1426 + };
  1427 + B569CE890E41D69100B57986 /* PBXTextBookmark */ = {
  1428 + isa = PBXTextBookmark;
  1429 + fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  1430 + name = "AppDelegate.m: 153";
  1431 + rLen = 24;
  1432 + rLoc = 5193;
  1433 + rType = 0;
  1434 + vrLen = 1453;
  1435 + vrLoc = 4454;
  1436 + };
  1437 + B569CE8A0E41D69100B57986 /* PBXTextBookmark */ = {
  1438 + isa = PBXTextBookmark;
  1439 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1440 + name = "ASIHTTPRequest.m: 57";
  1441 + rLen = 0;
  1442 + rLoc = 1006;
  1443 + rType = 0;
  1444 + vrLen = 939;
  1445 + vrLoc = 1431;
  1446 + };
  1447 + B569CED90E41D71C00B57986 /* PBXTextBookmark */ = {
  1448 + isa = PBXTextBookmark;
  1449 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1450 + name = "ASIHTTPRequest.m: 26";
  1451 + rLen = 0;
  1452 + rLoc = 1006;
  1453 + rType = 0;
  1454 + vrLen = 1306;
  1455 + vrLoc = 68;
  1456 + };
  1457 + B569CEDA0E41D71C00B57986 /* PBXTextBookmark */ = {
  1458 + isa = PBXTextBookmark;
  1459 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1460 + name = "ASIHTTPRequest.h: 152";
  1461 + rLen = 0;
  1462 + rLoc = 6306;
  1463 + rType = 0;
  1464 + vrLen = 1655;
  1465 + vrLoc = 0;
  1466 + };
  1467 + B569CEDB0E41D71C00B57986 /* PBXTextBookmark */ = {
  1468 + isa = PBXTextBookmark;
  1469 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1470 + name = "ASIHTTPRequest.m: 26";
  1471 + rLen = 0;
  1472 + rLoc = 1006;
  1473 + rType = 0;
  1474 + vrLen = 1306;
  1475 + vrLoc = 68;
  1476 + };
  1477 + B569CEDC0E41D71C00B57986 /* PBXTextBookmark */ = {
  1478 + isa = PBXTextBookmark;
  1479 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1480 + name = "ASIHTTPRequest.h: 178";
  1481 + rLen = 0;
  1482 + rLoc = 5984;
  1483 + rType = 0;
  1484 + vrLen = 1637;
  1485 + vrLoc = 4669;
  1486 + };
  1487 + B569CEF30E41D73E00B57986 /* PBXTextBookmark */ = {
  1488 + isa = PBXTextBookmark;
  1489 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1490 + name = "ASIHTTPRequest.h: 178";
  1491 + rLen = 0;
  1492 + rLoc = 5984;
  1493 + rType = 0;
  1494 + vrLen = 1637;
  1495 + vrLoc = 4669;
  1496 + };
  1497 + B569CF0C0E41D85000B57986 /* PBXTextBookmark */ = {
  1498 + isa = PBXTextBookmark;
  1499 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1500 + name = "ASIHTTPRequest.h: 178";
  1501 + rLen = 0;
  1502 + rLoc = 5984;
  1503 + rType = 0;
  1504 + vrLen = 1637;
  1505 + vrLoc = 4669;
  1506 + };
  1507 + B569CF2A0E41D87800B57986 /* PBXTextBookmark */ = {
  1508 + isa = PBXTextBookmark;
  1509 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1510 + name = "ASIHTTPRequest.h: 178";
  1511 + rLen = 0;
  1512 + rLoc = 5984;
  1513 + rType = 0;
  1514 + vrLen = 1637;
  1515 + vrLoc = 4669;
  1516 + };
  1517 + B569CF300E41D91D00B57986 /* PBXTextBookmark */ = {
  1518 + isa = PBXTextBookmark;
  1519 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1520 + name = "ASIHTTPRequest.h: 178";
  1521 + rLen = 0;
  1522 + rLoc = 5984;
  1523 + rType = 0;
  1524 + vrLen = 1637;
  1525 + vrLoc = 4669;
  1526 + };
  1527 + B569CF4A0E41D94E00B57986 /* PBXTextBookmark */ = {
  1528 + isa = PBXTextBookmark;
  1529 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1530 + name = "ASIHTTPRequest.h: 178";
  1531 + rLen = 0;
  1532 + rLoc = 5984;
  1533 + rType = 0;
  1534 + vrLen = 1637;
  1535 + vrLoc = 4669;
  1536 + };
  1537 + B5AAC4CE0E3F1BEF00064080 /* PBXTextBookmark */ = {
  1538 + isa = PBXTextBookmark;
  1539 + fRef = B5ABC80D0E24CB100072F422 /* AppDelegate.h */;
  1540 + name = "AppDelegate.h: 7";
  1541 + rLen = 0;
  1542 + rLoc = 136;
  1543 + rType = 0;
  1544 + vrLen = 1083;
  1545 + vrLoc = 0;
  1546 + };
  1547 + B5AAC50B0E3F1CC300064080 /* AppDelegate.m:22 */ = {
  1548 + isa = PBXFileBreakpoint;
  1549 + actions = (
  1550 + );
  1551 + breakpointStyle = 0;
  1552 + continueAfterActions = 0;
  1553 + countType = 0;
  1554 + delayBeforeContinue = 0;
  1555 + fileReference = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  1556 + functionName = "-dealloc";
  1557 + hitCount = 0;
  1558 + ignoreCount = 0;
  1559 + lineNumber = 22;
  1560 + modificationTime = 239196491.354165;
  1561 + state = 0;
  1562 + };
  1563 + B5AACA810E3F3D3400064080 /* PBXTextBookmark */ = {
  1564 + isa = PBXTextBookmark;
  1565 + fRef = B5ABC7ED0E24C6670072F422 /* ASIProgressDelegate.h */;
  1566 + name = "ASIProgressDelegate.h: 17";
  1567 + rLen = 0;
  1568 + rLoc = 360;
  1569 + rType = 0;
  1570 + vrLen = 360;
  1571 + vrLoc = 0;
  1572 + };
  1573 + B5AACACC0E3F413800064080 /* PBXTextBookmark */ = {
  1574 + isa = PBXTextBookmark;
  1575 + fRef = B5ABC80E0E24CB100072F422 /* AppDelegate.m */;
  1576 + name = "AppDelegate.m: 22";
  1577 + rLen = 0;
  1578 + rLoc = 354;
  1579 + rType = 0;
  1580 + vrLen = 1567;
  1581 + vrLoc = 4522;
  1582 + };
  1583 + B5AACACD0E3F413800064080 /* PBXTextBookmark */ = {
  1584 + isa = PBXTextBookmark;
  1585 + fRef = B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */;
  1586 + name = "ASIHTTPRequest.m: 349";
  1587 + rLen = 0;
  1588 + rLoc = 9527;
  1589 + rType = 0;
  1590 + vrLen = 1689;
  1591 + vrLoc = 21372;
  1592 + };
  1593 + B5AACAD90E3F413D00064080 /* PBXTextBookmark */ = {
  1594 + isa = PBXTextBookmark;
  1595 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1596 + name = "ASIHTTPRequest.h: 109";
  1597 + rLen = 0;
  1598 + rLoc = 3519;
  1599 + rType = 0;
  1600 + vrLen = 1328;
  1601 + vrLoc = 3366;
  1602 + };
  1603 + B5AACADD0E3F427200064080 /* PBXTextBookmark */ = {
  1604 + isa = PBXTextBookmark;
  1605 + fRef = B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */;
  1606 + name = "ASIHTTPRequest.h: 109";
516 rLen = 0; 1607 rLen = 0;
517 - rLoc = 6948; 1608 + rLoc = 3519;
518 rType = 0; 1609 rType = 0;
519 - vrLen = 1629; 1610 + vrLen = 1328;
520 - vrLoc = 5471; 1611 + vrLoc = 3366;
521 }; 1612 };
522 B5ABC7A70E24C5280072F422 /* asi-http-request */ = { 1613 B5ABC7A70E24C5280072F422 /* asi-http-request */ = {
523 isa = PBXExecutable; 1614 isa = PBXExecutable;
@@ -526,7 +1617,7 @@ @@ -526,7 +1617,7 @@
526 argumentStrings = ( 1617 argumentStrings = (
527 ); 1618 );
528 autoAttachOnCrash = 1; 1619 autoAttachOnCrash = 1;
529 - breakpointsEnabled = 0; 1620 + breakpointsEnabled = 1;
530 configStateDict = { 1621 configStateDict = {
531 }; 1622 };
532 customDataFormattersEnabled = 1; 1623 customDataFormattersEnabled = 1;
@@ -570,17 +1661,17 @@ @@ -570,17 +1661,17 @@
570 }; 1661 };
571 B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */ = { 1662 B5ABC7B90E24C5620072F422 /* ASIHTTPRequest.m */ = {
572 uiCtxt = { 1663 uiCtxt = {
573 - sepNavIntBoundsRect = "{{0, 0}, {1416, 10374}}"; 1664 + sepNavIntBoundsRect = "{{0, 0}, {1680, 10626}}";
574 - sepNavSelRange = "{0, 0}"; 1665 + sepNavSelRange = "{6881, 0}";
575 - sepNavVisRange = "{20938, 2123}"; 1666 + sepNavVisRange = "{14697, 670}";
576 sepNavWindowFrame = "{{500, 55}, {1475, 874}}"; 1667 sepNavWindowFrame = "{{500, 55}, {1475, 874}}";
577 }; 1668 };
578 }; 1669 };
579 B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */ = { 1670 B5ABC7BA0E24C5620072F422 /* ASIHTTPRequest.h */ = {
580 uiCtxt = { 1671 uiCtxt = {
581 - sepNavIntBoundsRect = "{{0, 0}, {1073, 2968}}"; 1672 + sepNavIntBoundsRect = "{{0, 0}, {1073, 3346}}";
582 - sepNavSelRange = "{6948, 0}"; 1673 + sepNavSelRange = "{5984, 0}";
583 - sepNavVisRange = "{5471, 1629}"; 1674 + sepNavVisRange = "{4669, 1637}";
584 sepNavWindowFrame = "{{19, 304}, {1475, 874}}"; 1675 sepNavWindowFrame = "{{19, 304}, {1475, 874}}";
585 }; 1676 };
586 }; 1677 };
@@ -594,16 +1685,16 @@ @@ -594,16 +1685,16 @@
594 B5ABC80D0E24CB100072F422 /* AppDelegate.h */ = { 1685 B5ABC80D0E24CB100072F422 /* AppDelegate.h */ = {
595 uiCtxt = { 1686 uiCtxt = {
596 sepNavIntBoundsRect = "{{0, 0}, {1073, 647}}"; 1687 sepNavIntBoundsRect = "{{0, 0}, {1073, 647}}";
597 - sepNavSelRange = "{136, 0}"; 1688 + sepNavSelRange = "{42, 0}";
598 sepNavVisRange = "{0, 1083}"; 1689 sepNavVisRange = "{0, 1083}";
599 sepNavWindowFrame = "{{15, -1}, {1475, 874}}"; 1690 sepNavWindowFrame = "{{15, -1}, {1475, 874}}";
600 }; 1691 };
601 }; 1692 };
602 B5ABC80E0E24CB100072F422 /* AppDelegate.m */ = { 1693 B5ABC80E0E24CB100072F422 /* AppDelegate.m */ = {
603 uiCtxt = { 1694 uiCtxt = {
604 - sepNavIntBoundsRect = "{{0, 0}, {1073, 2548}}"; 1695 + sepNavIntBoundsRect = "{{0, 0}, {1379, 2464}}";
605 - sepNavSelRange = "{354, 0}"; 1696 + sepNavSelRange = "{5193, 24}";
606 - sepNavVisRange = "{0, 1038}"; 1697 + sepNavVisRange = "{4454, 1453}";
607 sepNavWindowFrame = "{{84, 60}, {1475, 1050}}"; 1698 sepNavWindowFrame = "{{84, 60}, {1475, 1050}}";
608 }; 1699 };
609 }; 1700 };