//===-- main.m ------------------------------------------------*- ObjC -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#import <Foundation/Foundation.h>
#include <Carbon/Carbon.h>

@interface MyClass : NSObject
{
    int i;
    char c;
    float f; 
}

- (id)initWithInt: (int)x andFloat:(float)y andChar:(char)z;
- (int)doIncrementByInt: (int)x;

@end

@interface MyOtherClass : MyClass
{
    int i2;
    MyClass *backup;
}
- (id)initWithInt: (int)x andFloat:(float)y andChar:(char)z andOtherInt:(int)q;

@end

@implementation MyClass

- (id)initWithInt: (int)x andFloat:(float)y andChar:(char)z
{
    self = [super init];
    if (self) {
        self->i = x;
        self->f = y;
        self->c = z;
    }    
    return self;
}

- (int)doIncrementByInt: (int)x
{
    self->i += x;
    return self->i;
}

@end

@implementation MyOtherClass

- (id)initWithInt: (int)x andFloat:(float)y andChar:(char)z andOtherInt:(int)q
{
    self = [super initWithInt:x andFloat:y andChar:z];
    if (self) {
        self->i2 = q;
        self->backup = [[MyClass alloc] initWithInt:x andFloat:y andChar:z];
    }    
    return self;
}

@end

@interface Atom : NSObject {
    float mass;
}
-(void)setMass:(float)newMass;
-(float)mass;
@end

@interface Molecule : NSObject {
    NSArray *atoms;
}
-(void)setAtoms:(NSArray *)newAtoms;
-(NSArray *)atoms;
@end

@implementation  Atom

-(void)setMass:(float)newMass
{
    mass = newMass;
}
-(float)mass
{
    return mass;
}

@end

@implementation Molecule

-(void)setAtoms:(NSArray *)newAtoms
{
    atoms = newAtoms;
}
-(NSArray *)atoms
{
    return atoms;
}
@end

@interface My_KVO_Observer : NSObject
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change 
	context:(void *)context;
- (id) init;
- (void) dealloc;
@end

@implementation My_KVO_Observer
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change 
                      context:(void *)context {
	// we do not really care about KVO'ing - do nothing
	return;
}
- (id) init
{
    self = [super init]; 
    return self;
}

- (void) dealloc
{
    [super dealloc];
}
@end

int main (int argc, const char * argv[])
{
    
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    MyClass *object = [[MyClass alloc] initWithInt:1 andFloat:3.14 andChar: 'E'];
    
    [object doIncrementByInt:3];
    
    MyOtherClass *object2 = [[MyOtherClass alloc] initWithInt:2 andFloat:6.28 andChar: 'G' andOtherInt:-1];
    
    [object2 doIncrementByInt:3];
    
	    NSNumber* num1 = [NSNumber numberWithInt:5];
	    NSNumber* num2 = [NSNumber numberWithFloat:3.14];
	    NSNumber* num3 = [NSNumber numberWithDouble:3.14];
	    NSNumber* num4 = [NSNumber numberWithUnsignedLongLong:0xFFFFFFFFFFFFFFFE];
	    NSNumber* num5 = [NSNumber numberWithChar:'A'];
	    NSNumber* num6 = [NSNumber numberWithUnsignedLongLong:0xFF];
	    NSNumber* num7 = [NSNumber numberWithLong:0x1E8480];
	    NSNumber* num8_Y = [NSNumber numberWithBool:YES];
	    NSNumber* num8_N = [NSNumber numberWithBool:NO];
	    NSNumber* num9 = [NSNumber numberWithShort:0x1E8480];
	    NSNumber* num_at1 = @12;
	    NSNumber* num_at2 = @-12;
	    NSNumber* num_at3 = @12.5;
	    NSNumber* num_at4 = @-12.5;

		NSDecimalNumber* decimal_one = [NSDecimalNumber one];

	    NSString *str0 = [num6 stringValue];

	    NSString *str1 = [NSString stringWithCString:"A rather short ASCII NSString object is here" encoding:NSASCIIStringEncoding];

	    NSString *str2 = [NSString stringWithUTF8String:"A rather short UTF8 NSString object is here"];

	    NSString *str3 = @"A string made with the at sign is here";

	    NSString *str4 = [NSString stringWithFormat:@"This is string number %ld right here", (long)4];

	    NSRect ns_rect_4str = {{1,1},{5,5}};

	    NSString* str5 = NSStringFromRect(ns_rect_4str);

	    NSString* str6 = [@"/usr/doc/README.1ST" pathExtension];

	    const unichar myCharacters[] = {0x03C3,'x','x'};
	    NSString *str7 = [NSString stringWithCharacters: myCharacters
	                                             length: sizeof myCharacters / sizeof *myCharacters];

	    NSString* str8 = [@"/usr/doc/file.hasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTime" pathExtension];

	    const unichar myOtherCharacters[] = {'a',' ', 'v','e','r','y',' ',
	        'm','u','c','h',' ','b','o','r','i','n','g',' ','t','a','s','k',
	        ' ','t','o',' ','w','r','i','t','e', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', ' ',
	        't','h','i','s',' ','w','a','y','!','!',0x03C3, 0};
	    NSString *str9 = [NSString stringWithCharacters: myOtherCharacters
	                                             length: sizeof myOtherCharacters / sizeof *myOtherCharacters];

	    const unichar myNextCharacters[] = {0x03C3, 0x0000};

	    NSString *str10 = [NSString stringWithFormat:@"This is a Unicode string %S number %ld right here", myNextCharacters, (long)4];

	    NSString *str11 = [str10 className];

	    NSString *label1 = @"Process Name: ";
	    NSString *label2 = @"Process Id: ";
	    NSString *processName = [[NSProcessInfo processInfo] processName];
	    NSString *processID = [NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]];
	    NSString *str12 = [NSString stringWithFormat:@"%@ %@ %@ %@", label1, processName, label2, processID];

	    NSString *strA1 = [NSString stringWithCString:"A rather short ASCII NSString object is here" encoding:NSASCIIStringEncoding];

	    NSString *strA2 = [NSString stringWithUTF8String:"A rather short UTF8 NSString object is here"];

	    NSString *strA3 = @"A string made with the at sign is here";

	    NSString *strA4 = [NSString stringWithFormat:@"This is string number %ld right here", (long)4];

	    NSString* strA5 = NSStringFromRect(ns_rect_4str);

	    NSString* strA6 = [@"/usr/doc/README.1ST" pathExtension];

	    NSString *strA7 = [NSString stringWithCharacters: myCharacters
	                                             length: sizeof myCharacters / sizeof *myCharacters];

	    NSString* strA8 = [@"/usr/doc/file.hasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTime" pathExtension];

	    NSString *strA9 = [NSString stringWithCharacters: myOtherCharacters
	                                             length: sizeof myOtherCharacters / sizeof *myOtherCharacters];

	    NSString *strA10 = [NSString stringWithFormat:@"This is a Unicode string %S number %ld right here", myNextCharacters, (long)4];

	    NSString *strA11 = [str10 className];

	    NSString *strA12 = [NSString stringWithFormat:@"%@ %@ %@ %@", label1, processName, label2, processID];

	    NSString *strB1 = [NSString stringWithCString:"A rather short ASCII NSString object is here" encoding:NSASCIIStringEncoding];

	    NSString *strB2 = [NSString stringWithUTF8String:"A rather short UTF8 NSString object is here"];

	    NSString *strB3 = @"A string made with the at sign is here";

	    NSString *strB4 = [NSString stringWithFormat:@"This is string number %ld right here", (long)4];

	    NSString* strB5 = NSStringFromRect(ns_rect_4str);

	    NSString* strB6 = [@"/usr/doc/README.1ST" pathExtension];

	    NSString *strB7 = [NSString stringWithCharacters: myCharacters
	                                              length: sizeof myCharacters / sizeof *myCharacters];

	    NSString* strB8 = [@"/usr/doc/file.hasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTime" pathExtension];

	    NSString *strB9 = [NSString stringWithCharacters: myOtherCharacters
	                                              length: sizeof myOtherCharacters / sizeof *myOtherCharacters];

	    NSString *strB10 = [NSString stringWithFormat:@"This is a Unicode string %S number %ld right here", myNextCharacters, (long)4];

	    NSString *strB11 = [str10 className];

	    NSString *strB12 = [NSString stringWithFormat:@"%@ %@ %@ %@", label1, processName, label2, processID];

	    NSString *strC11 = [str10 className];

	    NSString *strC12 = [NSString stringWithFormat:@"%@ %@ %@ %@", label1, processName, label2, processID];

	    NSString *strC1 = [NSString stringWithCString:"A rather short ASCII NSString object is here" encoding:NSASCIIStringEncoding];

	    NSString *strC2 = [NSString stringWithUTF8String:"A rather short UTF8 NSString object is here"];

	    NSString *strC3 = @"A string made with the at sign is here";

	    NSString *strC4 = [NSString stringWithFormat:@"This is string number %ld right here", (long)4];

	    NSString* strC5 = NSStringFromRect(ns_rect_4str);

	    NSString* strC6 = [@"/usr/doc/README.1ST" pathExtension];

	    NSString *strC7 = [NSString stringWithCharacters: myCharacters
	                                              length: sizeof myCharacters / sizeof *myCharacters];

	    NSString* strC8 = [@"/usr/doc/file.hasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTimehasVeryLongExtensionThisTime" pathExtension];

	    NSString *strC9 = [NSString stringWithCharacters: myOtherCharacters
	                                              length: sizeof myOtherCharacters / sizeof *myOtherCharacters];

	    NSString *strC10 = [NSString stringWithFormat:@"This is a Unicode string %S number %ld right here", myNextCharacters, (long)4];

	    NSString *strD11 = [str10 className];

	    NSString *strD12 = [NSString stringWithFormat:@"%@ %@ %@ %@", label1, processName, label2, processID];

	    NSString *eAcute = [NSString stringWithFormat: @"%C", 0x00E9];
	    NSString *randomHaziChar = [NSString stringWithFormat: @"%C", 0x9DC5];
	    NSString *japanese = @"色は匂へど散りぬるを";
	    NSString *italian = @"L'Italia è una Repubblica democratica, fondata sul lavoro. La sovranità appartiene al popolo, che la esercita nelle forme e nei limiti della Costituzione.";
	    NSString* french = @"Que veut cette horde d'esclaves, De traîtres, de rois conjurés?";
	    NSString* german = @"Über-Ich und aus den Ansprüchen der sozialen Umwelt";

	    void* data_set[3] = {str1,str2,str3};
	
		NSString *hebrew = [NSString stringWithString:@"לילה טוב"];

	    NSArray* newArray = [[NSMutableArray alloc] init];
	    [newArray addObject:str1];
	    [newArray addObject:str2];
	    [newArray addObject:str3];
	    [newArray addObject:str4];
	    [newArray addObject:str5];
	    [newArray addObject:str6];
	    [newArray addObject:str7];
	    [newArray addObject:str8];
	    [newArray addObject:str9];
	    [newArray addObject:str10];
	    [newArray addObject:str11];
	    [newArray addObject:str12];
	    [newArray addObject:strA1];
	    [newArray addObject:strA2];
	    [newArray addObject:strA3];
	    [newArray addObject:strA4];
	    [newArray addObject:strA5];
	    [newArray addObject:strA6];
	    [newArray addObject:strA7];
	    [newArray addObject:strA8];
	    [newArray addObject:strA9];
	    [newArray addObject:strA10];
	    [newArray addObject:strA11];
	    [newArray addObject:strA12];
	    [newArray addObject:strB1];
	    [newArray addObject:strB2];
	    [newArray addObject:strB3];
	    [newArray addObject:strB4];
	    [newArray addObject:strB5];
	    [newArray addObject:strB6];
	    [newArray addObject:strB7];
	    [newArray addObject:strB8];
	    [newArray addObject:strB9];
	    [newArray addObject:strB10];
	    [newArray addObject:strB11];
	    [newArray addObject:strB12];
	    [newArray addObject:strC1];
	    [newArray addObject:strC2];
	    [newArray addObject:strC3];
	    [newArray addObject:strC4];
	    [newArray addObject:strC5];
	    [newArray addObject:strC6];
	    [newArray addObject:strC7];
	    [newArray addObject:strC8];
	    [newArray addObject:strC9];
	    [newArray addObject:strC10];
	    [newArray addObject:strC11];
	    [newArray addObject:strC12];
	    [newArray addObject:strD11];
	    [newArray addObject:strD12];

	    NSDictionary* newDictionary = [[NSDictionary alloc] initWithObjects:newArray forKeys:newArray];
	    NSDictionary *newMutableDictionary = [[NSMutableDictionary alloc] init];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar0"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar1"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar2"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar3"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar4"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar5"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar6"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar7"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar8"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar9"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar10"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar11"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar12"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar13"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar14"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar15"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar16"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar17"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar18"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar19"];
	    [newMutableDictionary setObject:@"foo" forKey:@"bar20"];

	    NSAttributedString* attrString = [[NSAttributedString alloc] initWithString:@"hello world from foo" attributes:newDictionary];
	    [attrString isEqual:nil];
	    NSAttributedString* mutableAttrString = [[NSMutableAttributedString alloc] initWithString:@"hello world from foo" attributes:newDictionary];
	    [mutableAttrString isEqual:nil];

	    NSString* mutableString = [[NSMutableString alloc] initWithString:@"foo"];
	    [mutableString insertString:@"foo said this string needs to be very long so much longer than whatever other string has been seen ever before by anyone of the mankind that of course this is still not long enough given what foo our friend foo our lovely dearly friend foo desired of us so i am adding more stuff here for the sake of it and for the joy of our friend who is named guess what just foo. hence, dear friend foo, stay safe, your string is now  long enough to accommodate your testing need and I will make sure that if not we extend it with even more fuzzy random meaningless words pasted one after the other from a long tiresome friday evening spent working in my office. my office mate went home but I am still randomly typing just for the fun of seeing what happens of the length of a Mutable String in Cocoa if it goes beyond one byte.. so be it, dear " atIndex:0];

	    NSString* mutableGetConst = [NSString stringWithCString:[mutableString cString]];

	    [mutableGetConst length];

	    NSData *immutableData = [[NSData alloc] initWithBytes:"HELLO" length:4];
	    NSData *mutableData = [[NSMutableData alloc] initWithBytes:"NODATA" length:6];

	    [mutableData appendBytes:"MOREDATA" length:8];

	    [immutableData length];
	    [mutableData length];

	    NSSet* nsset = [[NSSet alloc] initWithObjects:str1,str2,str3,nil];
	    NSSet *nsmutableset = [[NSMutableSet alloc] initWithObjects:str1,str2,str3,nil];
	    [nsmutableset addObject:str4];

	    CFDataRef data_ref = CFDataCreate(kCFAllocatorDefault, [immutableData bytes], 5);

	    CFMutableDataRef mutable_data_ref = CFDataCreateMutable(kCFAllocatorDefault, 8);
	    CFDataAppendBytes(mutable_data_ref, [mutableData bytes], 5);

	    CFMutableStringRef mutable_string_ref = CFStringCreateMutable(NULL,100);
	    CFStringAppend(mutable_string_ref, CFSTR("Wish ya knew"));

	    CFStringRef cfstring_ref = CFSTR("HELLO WORLD");


	    CFSetRef set_ref = CFSetCreate(NULL, data_set, 3, NULL);

	    CFMutableSetRef mutable_set_ref = CFSetCreateMutable(NULL, 5, NULL);

	    CFSetAddValue(mutable_set_ref, str1);
	    CFSetAddValue(mutable_set_ref, str2);
	    CFSetAddValue(mutable_set_ref, str3);
	    CFSetAddValue(mutable_set_ref, str4);
	    CFSetAddValue(mutable_set_ref, str5);
	    CFSetAddValue(mutable_set_ref, str6);
	    CFSetAddValue(mutable_set_ref, str7);
	    CFSetAddValue(mutable_set_ref, str8);
	    CFSetAddValue(mutable_set_ref, str9);
	    CFSetAddValue(mutable_set_ref, str10);
	    CFSetAddValue(mutable_set_ref, str11);
	    CFSetAddValue(mutable_set_ref, str12);


	    CFDictionaryRef cfdict_ref = CFDictionaryCreate(NULL, data_set, data_set, 3, NULL, NULL);
	    CFMutableDictionaryRef mutable_dict_ref = CFDictionaryCreateMutable(NULL, 16, NULL, NULL);

	    CFDictionarySetValue(mutable_dict_ref, str1, str1);
	    CFDictionarySetValue(mutable_dict_ref, str2, str2);
	    CFDictionarySetValue(mutable_dict_ref, str3, str3);
	    CFDictionarySetValue(mutable_dict_ref, str4, str1);
	    CFDictionarySetValue(mutable_dict_ref, str5, str2);
	    CFDictionarySetValue(mutable_dict_ref, str6, str3);
	    CFDictionarySetValue(mutable_dict_ref, str7, str1);
	    CFDictionarySetValue(mutable_dict_ref, str8, str2);
	    CFDictionarySetValue(mutable_dict_ref, str9, str3);
	    CFDictionarySetValue(mutable_dict_ref, str10, str1);
	    CFDictionarySetValue(mutable_dict_ref, str11, str2);
	    CFDictionarySetValue(mutable_dict_ref, str12, str3);

	    CFArrayRef cfarray_ref = CFArrayCreate(NULL, data_set, 3, NULL);
	    CFMutableArrayRef mutable_array_ref = CFArrayCreateMutable(NULL, 16, NULL);

	    CFArraySetValueAtIndex(mutable_array_ref, 0, str1);
	    CFArraySetValueAtIndex(mutable_array_ref, 1, str2);
	    CFArraySetValueAtIndex(mutable_array_ref, 2, str3);
	    CFArraySetValueAtIndex(mutable_array_ref, 3, str4);
	    CFArraySetValueAtIndex(mutable_array_ref, 0, str5); // replacing value at 0!!
	    CFArraySetValueAtIndex(mutable_array_ref, 4, str6);
	    CFArraySetValueAtIndex(mutable_array_ref, 5, str7);
	    CFArraySetValueAtIndex(mutable_array_ref, 6, str8);
	    CFArraySetValueAtIndex(mutable_array_ref, 7, str9);
	    CFArraySetValueAtIndex(mutable_array_ref, 8, str10);
	    CFArraySetValueAtIndex(mutable_array_ref, 9, str11);
	    CFArraySetValueAtIndex(mutable_array_ref, 10, str12);

	    CFMutableBagRef mutable_bag_ref = CFBagCreateMutable(NULL, 15, NULL);

	    CFBagSetValue(mutable_bag_ref, strB10);
	    CFBagSetValue(mutable_bag_ref, str1);
	    CFBagSetValue(mutable_bag_ref, str2);
	    CFBagSetValue(mutable_bag_ref, str3);
	    CFBagSetValue(mutable_bag_ref, str4);
	    CFBagSetValue(mutable_bag_ref, str5);
	    CFBagSetValue(mutable_bag_ref, str6);
	    CFBagSetValue(mutable_bag_ref, str7);
	    CFBagSetValue(mutable_bag_ref, str8);
	    CFBagSetValue(mutable_bag_ref, str9);
	    CFBagSetValue(mutable_bag_ref, str10);
	    CFBagSetValue(mutable_bag_ref, str11);
	    CFBagSetValue(mutable_bag_ref, str12);
	    CFBagSetValue(mutable_bag_ref, strA1);
	    CFBagSetValue(mutable_bag_ref, strA2);
	    CFBagSetValue(mutable_bag_ref, strA3);

	    CFBagRef cfbag_ref = CFBagCreateCopy(NULL, mutable_bag_ref);

	    CFBagSetValue(mutable_bag_ref, strB8);
	    CFBagSetValue(mutable_bag_ref, strC4);


	    CFBinaryHeapRef binheap_ref = CFBinaryHeapCreate(NULL, 15, &kCFStringBinaryHeapCallBacks, NULL);
	    CFBinaryHeapAddValue(binheap_ref, str1);
	    CFBinaryHeapAddValue(binheap_ref, str2);
	    CFBinaryHeapAddValue(binheap_ref, str3);
	    CFBinaryHeapAddValue(binheap_ref, str4);
	    CFBinaryHeapAddValue(binheap_ref, str5);
	    CFBinaryHeapAddValue(binheap_ref, str6);
	    CFBinaryHeapAddValue(binheap_ref, str7);
	    CFBinaryHeapAddValue(binheap_ref, str8);
	    CFBinaryHeapAddValue(binheap_ref, str9);
	    CFBinaryHeapAddValue(binheap_ref, str10);
	    CFBinaryHeapAddValue(binheap_ref, str11);
	    CFBinaryHeapAddValue(binheap_ref, str12);
	    CFBinaryHeapAddValue(binheap_ref, strA1);
	    CFBinaryHeapAddValue(binheap_ref, strB1);
	    CFBinaryHeapAddValue(binheap_ref, strC1);
	    CFBinaryHeapAddValue(binheap_ref, strA11);
	    CFBinaryHeapAddValue(binheap_ref, strB11);
	    CFBinaryHeapAddValue(binheap_ref, strC11);
	    CFBinaryHeapAddValue(binheap_ref, strB12);
	    CFBinaryHeapAddValue(binheap_ref, strC12);
	    CFBinaryHeapAddValue(binheap_ref, strA12);

	    CFURLRef cfurl_ref = CFURLCreateWithString(NULL, CFSTR("http://www.foo.bar/"), NULL);
	    CFURLRef cfchildurl_ref = CFURLCreateWithString(NULL, CFSTR("page.html"), cfurl_ref);
	    CFURLRef cfgchildurl_ref = CFURLCreateWithString(NULL, CFSTR("?whatever"), cfchildurl_ref);

	    NSDictionary *error_userInfo = @{@"a": @1, @"b" : @2};
	    NSError *nserror = [[NSError alloc] initWithDomain:@"Foobar" code:12 userInfo:error_userInfo];

	    NSBundle* bundle_string = [[NSBundle alloc] initWithPath:@"/System/Library/Frameworks/Accelerate.framework"];
	    NSBundle* bundle_url = [[NSBundle alloc] initWithURL:[[NSURL alloc] initWithString:@"file://localhost/System/Library/Frameworks/Cocoa.framework"]];

	    NSBundle* main_bundle = [NSBundle mainBundle];

	    NSArray* bundles = [NSBundle allBundles];

	    NSURL *nsurl0;

	    for (NSBundle* bundle in bundles)
	    {
	        nsurl0 = [bundle bundleURL];
	    }

	    NSException* except0 = [[NSException alloc] initWithName:@"TheGuyWhoHasNoName" reason:@"cuz it's funny" userInfo:nil];
	    NSException* except1 = [[NSException alloc] initWithName:@"TheGuyWhoHasNoName~1" reason:@"cuz it's funny" userInfo:nil];
	    NSException* except2 = [[NSException alloc] initWithName:@"TheGuyWhoHasNoName`2" reason:@"cuz it's funny" userInfo:nil];
	    NSException* except3 = [[NSException alloc] initWithName:@"TheGuyWhoHasNoName/3" reason:@"cuz it's funny" userInfo:nil];

	    NSMachPort *port = [NSMachPort port];

	    NSURL *nsurl = [[NSURL alloc] initWithString:@"http://www.foo.bar"];
	    NSURL *nsurl2 = [NSURL URLWithString:@"page.html" relativeToURL:nsurl];
	    NSURL *nsurl3 = [NSURL URLWithString:@"?whatever" relativeToURL:nsurl2];
    
		NSDate *date1 = [NSDate dateWithNaturalLanguageString:@"6pm April 10, 1985"];
		NSDate *date2 = [NSDate dateWithNaturalLanguageString:@"12am January 1, 2011"];
		NSDate *date3 = [NSDate date];
		NSDate *date4 = [NSDate dateWithTimeIntervalSince1970:24*60*60];

		CFAbsoluteTime date1_abs = CFDateGetAbsoluteTime(date1);
		CFAbsoluteTime date2_abs = CFDateGetAbsoluteTime(date2);
		CFAbsoluteTime date3_abs = CFDateGetAbsoluteTime(date3);
		CFAbsoluteTime date4_abs = CFDateGetAbsoluteTime(date4);

	    NSCountedSet *nscounted_set = [[NSCountedSet alloc] initWithCapacity:5];

	    [nscounted_set addObject:str0];
	    [nscounted_set addObject:str1];
	    [nscounted_set addObject:str0];
	    [nscounted_set addObject:str0];
	    [nscounted_set addObject:@"foo1"];
	    [nscounted_set addObject:@"foo2"];
	    [nscounted_set addObject:@"foo3"];
	
	    NSIndexSet *iset1 = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 4)];
	    NSIndexSet *iset2 = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 512)];

	    NSMutableIndexSet *imset = [[NSMutableIndexSet alloc] init];
	    [imset addIndex:1936];
	    [imset addIndex:7];
	    [imset addIndex:9];
	    [imset addIndex:11];
	    [imset addIndex:24];
	    [imset addIndex:41];
	    [imset addIndex:58];
	    [imset addIndex:61];
	    [imset addIndex:62];
	    [imset addIndex:63];

	    CFTimeZoneRef cupertino = CFTimeZoneCreateWithName (
	                                            NULL,
	                                            CFSTR("PST"),
	                                            YES);
	    CFTimeZoneRef home = CFTimeZoneCreateWithName (
	                                            NULL,
	                                            CFSTR("Europe/Rome"),
	                                            YES);
	    CFTimeZoneRef europe = CFTimeZoneCreateWithName (
	                                            NULL,
	                                            CFSTR("CET"),
	                                            YES);

		NSTimeZone *cupertino_ns = [NSTimeZone timeZoneWithAbbreviation:@"PST"];
		NSTimeZone *home_ns = [NSTimeZone timeZoneWithName:@"Europe/Rome"];
		NSTimeZone *europe_ns = [NSTimeZone timeZoneWithAbbreviation:@"CET"];

		NSHost *localhost = [NSHost hostWithAddress:@"127.0.0.1"];

		NSTask *my_task = [[NSTask alloc] init];


	CFGregorianUnits cf_greg_units = {1,3,5,12,5,7};
	CFGregorianDate cf_greg_date = CFAbsoluteTimeGetGregorianDate(CFDateGetAbsoluteTime(date1), NULL);
	CFRange cf_range = {4,4};
	NSPoint ns_point = {4,4};
	NSRange ns_range = {4,4};
	
	NSValue *range_value = [NSValue valueWithRange:ns_range];
	
	NSRect ns_rect = {{1,1},{5,5}};
	NSRect* ns_rect_ptr = &ns_rect;
	NSRectArray ns_rect_arr = &ns_rect;
	NSSize ns_size = {5,7};
	NSSize* ns_size_ptr = &ns_size;
	
	CGSize cg_size = {1,6};
	CGPoint cg_point = {2,7};
	CGRect cg_rect = {{1,2}, {7,7}};
	
	RGBColor rgb_color = {3,56,35};
	RGBColor* rgb_color_ptr = &rgb_color;
	
	Rect rect = {4,8,4,7};
	Rect* rect_ptr = &rect;
	
	Point point = {7,12};
	Point* point_ptr = &point;
	
	HIPoint hi_point = {7,12};
	HIRect hi_rect = {{3,5},{4,6}};
	
	SEL foo_selector = @selector(foo_selector_impl);
	
	CFMutableBitVectorRef mut_bv = CFBitVectorCreateMutable(NULL, 64);
	CFBitVectorSetCount(mut_bv, 50);
    CFBitVectorSetBitAtIndex(mut_bv, 0, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 1, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 2, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 5, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 6, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 8, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 10, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 11, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 16, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 17, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 19, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 20, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 22, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 24, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 28, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 29, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 30, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 30, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 31, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 34, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 35, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 37, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 39, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 40, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 41, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 43, 1);
    CFBitVectorSetBitAtIndex(mut_bv, 47, 1);

	Molecule *molecule = [Molecule new];

	Class myclass = NSClassFromString(@"NSValue");
	Class myclass2 = [str0 class];
	Class myclass3 = [molecule class];
	Class myclass4 = NSClassFromString(@"NSMutableArray");
	Class myclass5 = [nil class];

	NSArray *components = @[@"usr", @"blah", @"stuff"];
	NSString *path = [NSString pathWithComponents: components];

    [molecule addObserver:[My_KVO_Observer new] forKeyPath:@"atoms" options:0 context:NULL];     // Set break point at this line.
    [newMutableDictionary addObserver:[My_KVO_Observer new] forKeyPath:@"weirdKeyToKVO" options:NSKeyValueObservingOptionNew context:NULL];

    [molecule setAtoms:nil];
    [molecule setAtoms:[NSMutableArray new]];

    [pool drain];
    return 0;
}

