Changeset 3505

Show
Ignore:
Timestamp:
12/30/06 01:00:55 (2 years ago)
Author:
timothy
Message:

Adding NAT traversal support using either UPnP or NAT-PMP. There is new setting in the file transfer preferences to disable this feature. The library we used is a stripped down version of libtransmission (http://transmission.m0k.org). #949

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Chat Core.xcodeproj/project.pbxproj

    r3319 r3505  
    88 
    99/* Begin PBXBuildFile section */ 
     10                1C11689A0B45F98700F57D2C /* libtransmission.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C1168990B45F98700F57D2C /* libtransmission.a */; }; 
    1011                1C11B7A109C27AC800789814 /* BSD License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1C11B7A009C27AC800789814 /* BSD License.txt */; }; 
    1112                1C3D55BC05A4CBBE00F25F5E /* NSNumberAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C3D55BA05A4CBBE00F25F5E /* NSNumberAdditions.m */; }; 
     
    6869                089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; 
    6970                1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; 
     71                1C1168990B45F98700F57D2C /* libtransmission.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtransmission.a; path = Frameworks/libtransmission.a; sourceTree = "<group>"; }; 
     72                1C1168CC0B45FA4700F57D2C /* Transmission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Transmission.h; path = "Chat Core/Transmission.h"; sourceTree = "<group>"; }; 
    7073                1C11B7A009C27AC800789814 /* BSD License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "BSD License.txt"; path = "Resources/BSD License.txt"; sourceTree = "<group>"; }; 
    7174                1C2EF7EB0427A40B00000102 /* MVChatPluginManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MVChatPluginManager.h; path = "Chat Core/MVChatPluginManager.h"; sourceTree = "<group>"; }; 
     
    149152                                1CEEB173095BE3A000166A54 /* CoreServices.framework in Frameworks */, 
    150153                                1C8AAF2B09D6A0A100CF29EB /* AGRegex.framework in Frameworks */, 
     154                                1C11689A0B45F98700F57D2C /* libtransmission.a in Frameworks */, 
    151155                        ); 
    152156                        runOnlyForDeploymentPostprocessing = 0; 
     
    186190                                1C5A233E06FA4FEE00A51F10 /* libsilcclient.framework */, 
    187191                                1C8AAF2609D6A0A100CF29EB /* AGRegex.framework */, 
     192                                1C1168990B45F98700F57D2C /* libtransmission.a */, 
    188193                        ); 
    189194                        name = "Linked Frameworks"; 
     
    272277                                1CD6290D096118B900BD1DD2 /* InterThreadMessaging.m */, 
    273278                                1CD6290C096118B900BD1DD2 /* InterThreadMessaging.h */, 
     279                                1C1168CC0B45FA4700F57D2C /* Transmission.h */, 
    274280                        ); 
    275281                        name = "Sources & Headers"; 
  • trunk/Chat Core/MVFileTransfer.h

    r3455 r3505  
    4242+ (void) setFileTransferPortRange:(NSRange) range; 
    4343+ (NSRange) fileTransferPortRange; 
     44 
     45+ (void) setAutoPortMappingEnabled:(BOOL) enable; 
     46+ (BOOL) isAutoPortMappingEnabled; 
    4447 
    4548#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 
  • trunk/Chat Core/MVFileTransfer.m

    r3457 r3505  
    1515 
    1616static NSRange portRange = { 1024, 24 }; 
     17static BOOL autoPortMapping = YES; 
    1718 
    1819@implementation MVFileTransfer 
     
    2324+ (NSRange) fileTransferPortRange { 
    2425        return portRange; 
     26} 
     27 
     28+ (void) setAutoPortMappingEnabled:(BOOL) enable { 
     29        autoPortMapping = enable; 
     30} 
     31 
     32+ (BOOL) isAutoPortMappingEnabled { 
     33        return autoPortMapping; 
    2534} 
    2635 
  • trunk/Chat Core/MVIRCFileTransfer.h

    r3455 r3505  
    11#import "MVFileTransfer.h" 
    22#import "MVFileTransferPrivate.h" 
     3#import "Transmission.h" 
    34 
    45@class AsyncSocket; 
     
    78        AsyncSocket *_connection; 
    89        AsyncSocket *_acceptConnection; 
     10        tr_natpmp_t *_natpmp; 
     11        tr_upnp_t *_upnp; 
    912        NSThread *_connectionThread; 
    1013        NSFileHandle *_fileHandle; 
     
    2124- (void) _finish; 
    2225- (unsigned int) _passiveIdentifier; 
     26- (void) _setUPnP:(tr_upnp_t *) upnp; 
     27- (void) _setNATPMP:(tr_natpmp_t *) natpmp; 
    2328@end 
    2429 
     
    2833        AsyncSocket *_connection; 
    2934        AsyncSocket *_acceptConnection; 
     35        tr_natpmp_t *_natpmp; 
     36        tr_upnp_t *_upnp; 
    3037        NSThread *_connectionThread; 
    3138        NSFileHandle *_fileHandle; 
     
    4350- (unsigned int) _passiveIdentifier; 
    4451- (void) _setFileNameQuoted:(unsigned int) quoted; 
     52- (void) _setUPnP:(tr_upnp_t *) upnp; 
     53- (void) _setNATPMP:(tr_natpmp_t *) natpmp; 
    4554@end 
  • trunk/Chat Core/MVIRCFileTransfer.m

    r3443 r3505  
    77#import "AsyncSocket.h" 
    88#import "InterThreadMessaging.h" 
     9#import "Transmission.h" 
    910 
    1011#define DCCPacketSize 4096 
    1112 
    12 static BOOL acceptConnectionOnFirstPortInRange( AsyncSocket *connection, NSRange ports ) { 
     13static int natTraversalStatus( tr_upnp_t *upnp, tr_natpmp_t *natpmp ) { 
     14        int statuses[] = { 
     15                TR_NAT_TRAVERSAL_MAPPED, 
     16                TR_NAT_TRAVERSAL_MAPPING, 
     17                TR_NAT_TRAVERSAL_UNMAPPING, 
     18                TR_NAT_TRAVERSAL_ERROR, 
     19                TR_NAT_TRAVERSAL_NOTFOUND, 
     20                TR_NAT_TRAVERSAL_DISABLED, 
     21                -1 
     22        }; 
     23 
     24        int upnpStatus = TR_NAT_TRAVERSAL_DISABLED; 
     25        int natpmpStatus = TR_NAT_TRAVERSAL_DISABLED; 
     26 
     27        if( upnp ) upnpStatus = tr_upnpStatus( upnp ); 
     28        if( natpmp ) natpmpStatus = tr_natpmpStatus( natpmp ); 
     29 
     30        for( unsigned i = 0; statuses[i] >= 0; i++ ) 
     31                if( statuses[i] == upnpStatus || statuses[i] == natpmpStatus ) 
     32                        return statuses[i]; 
     33 
     34        return TR_NAT_TRAVERSAL_ERROR; 
     35
     36 
     37static BOOL acceptConnectionOnFirstPortInRange( id transfer, AsyncSocket *connection, NSRange ports ) { 
    1338        unsigned int port = ports.location; 
    1439        BOOL success = NO; 
     
    1843                        break; 
    1944                } else { 
     45                        [connection disconnect]; 
    2046                        if( port == 0 ) break; 
    21                         [connection disconnect]; 
    2247                        if( ++port > NSMaxRange( ports ) ) 
    2348                                port = 0; // just use a random port since the user defined range is in use 
     49                } 
     50        } 
     51 
     52        if( success && [[transfer class] isAutoPortMappingEnabled] ) { 
     53                tr_msgInit(); 
     54                tr_setMessageLevel( 3 ); 
     55 
     56                static tr_fd_t *fd = NULL; 
     57                if( ! fd ) fd = tr_fdInit(); 
     58                if( fd ) { 
     59                        tr_upnp_t *upnp = tr_upnpInit( fd ); 
     60                        tr_upnpStart( upnp ); 
     61                        tr_upnpForwardPort( upnp, port ); 
     62                        [transfer _setUPnP:upnp]; 
     63 
     64                        tr_natpmp_t *natpmp = tr_natpmpInit( fd ); 
     65                        tr_natpmpStart( natpmp ); 
     66                        tr_natpmpForwardPort( natpmp, port ); 
     67                        [transfer _setNATPMP:natpmp]; 
     68 
     69                        NSDate *mappingStart = [NSDate date]; 
     70                        int status = 0; 
     71                        do { 
     72                                tr_upnpPulse( upnp ); 
     73                                tr_natpmpPulse( natpmp ); 
     74                                status = natTraversalStatus( upnp, natpmp ); 
     75                        } while( ( status == TR_NAT_TRAVERSAL_MAPPING || status == TR_NAT_TRAVERSAL_NOTFOUND ) 
     76                                           && ABS( [mappingStart timeIntervalSinceNow] ) < 5. );  
    2477                } 
    2578        } 
     
    75128        [_connection disconnect]; 
    76129        [_fileHandle closeFile]; 
     130 
     131        if( _upnp ) tr_upnpClose( _upnp ); 
     132        _upnp = NULL; 
     133 
     134        if( _natpmp ) tr_natpmpClose( _natpmp ); 
     135        _natpmp = NULL; 
     136 
    77137        [super finalize]; 
    78138} 
     
    95155        [old closeFile]; 
    96156        [old release]; 
     157 
     158        if( _upnp ) tr_upnpClose( _upnp ); 
     159        _upnp = NULL; 
     160 
     161        if( _natpmp ) tr_natpmpClose( _natpmp ); 
     162        _natpmp = NULL; 
    97163 
    98164        _connectionThread = nil; 
     
    212278        _acceptConnection = [[AsyncSocket allocWithZone:nil] initWithDelegate:self]; 
    213279 
    214         BOOL success = acceptConnectionOnFirstPortInRange( _acceptConnection, [[self class] fileTransferPortRange] ); 
     280        BOOL success = acceptConnectionOnFirstPortInRange( self, _acceptConnection, [[self class] fileTransferPortRange] ); 
    215281 
    216282        if( success ) { 
     
    242308        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector( _finish ) object:nil];        
    243309 
     310        if( _upnp ) tr_upnpClose( _upnp ); 
     311        if( _natpmp ) tr_natpmpClose( _natpmp ); 
     312 
    244313        id old = _acceptConnection; 
    245314        _acceptConnection = nil; 
     
    271340        BOOL active = YES; 
    272341        while( active && ! _done ) { 
     342                if( _upnp ) tr_upnpPulse( _upnp ); 
     343                if( _natpmp ) tr_natpmpPulse( _natpmp ); 
     344 
    273345                NSDate *timeout = [[NSDate allocWithZone:nil] initWithTimeIntervalSinceNow:5.]; 
    274346                active = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:timeout]; 
     
    295367        [super _setStartOffset:newStartOffset]; 
    296368} 
     369 
     370- (void) _setUPnP:(tr_upnp_t *) upnp { 
     371        _upnp = upnp; 
     372} 
     373 
     374- (void) _setNATPMP:(tr_natpmp_t *) natpmp { 
     375        _natpmp = natpmp; 
     376} 
    297377@end 
    298378 
     
    305385        [_fileHandle closeFile]; 
    306386        [_fileHandle synchronizeFile]; 
     387 
     388        if( _upnp ) tr_upnpClose( _upnp ); 
     389        _upnp = NULL; 
     390 
     391        if( _natpmp ) tr_natpmpClose( _natpmp ); 
     392        _natpmp = NULL; 
    307393 
    308394        [super finalize]; 
     
    327413        [old closeFile]; 
    328414        [old release]; 
     415 
     416        if( _upnp ) tr_upnpClose( _upnp ); 
     417        _upnp = NULL; 
     418 
     419        if( _natpmp ) tr_natpmpClose( _natpmp ); 
     420        _natpmp = NULL; 
    329421 
    330422        _connectionThread = nil; 
     
    476568        _acceptConnection = [[AsyncSocket allocWithZone:nil] initWithDelegate:self]; 
    477569 
    478         BOOL success = acceptConnectionOnFirstPortInRange( _acceptConnection, [[self class] fileTransferPortRange] ); 
     570        BOOL success = acceptConnectionOnFirstPortInRange( self, _acceptConnection, [[self class] fileTransferPortRange] ); 
    479571 
    480572        if( success ) { 
     
    489581- (void) _finish { 
    490582        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector( _finish ) object:nil];        
     583 
     584        if( _upnp ) tr_upnpClose( _upnp ); 
     585        if( _natpmp ) tr_natpmpClose( _natpmp ); 
    491586 
    492587        id old = _connection; 
     
    519614        BOOL active = YES; 
    520615        while( active && ! _done ) { 
     616                if( _upnp ) tr_upnpPulse( _upnp ); 
     617                if( _natpmp ) tr_natpmpPulse( _natpmp ); 
     618 
    521619                NSDate *timeout = [[NSDate allocWithZone:nil] initWithTimeIntervalSinceNow:5.]; 
    522620                active = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:timeout]; 
     
    550648        _fileNameQuoted = quoted; 
    551649} 
     650 
     651- (void) _setUPnP:(tr_upnp_t *) upnp { 
     652        _upnp = upnp; 
     653} 
     654 
     655- (void) _setNATPMP:(tr_natpmp_t *) natpmp { 
     656        _natpmp = natpmp; 
     657} 
    552658@end 
  • trunk/Controllers/MVFileTransferController.m

    r3460 r3505  
    140140} 
    141141 
    142 + (void) _setFileTransferPortRange { 
    143         NSRange range = NSRangeFromString( [[NSUserDefaults standardUserDefaults] stringForKey:@"JVFileTransferPortRange"] ); 
    144         [MVFileTransfer setFileTransferPortRange:range]; 
    145 } 
    146  
    147142#pragma mark - 
    148143 
     
    157152                [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector( _fileTransferError: ) name:MVFileTransferErrorOccurredNotification object:nil]; 
    158153 
    159                 [[self class] performSelector:@selector( _setFileTransferPortRange ) withObject:nil afterDelay:2.]; 
     154                NSRange range = NSRangeFromString( [[NSUserDefaults standardUserDefaults] stringForKey:@"JVFileTransferPortRange"] ); 
     155                [MVFileTransfer setFileTransferPortRange:range]; 
     156 
     157                BOOL autoOpen = [[NSUserDefaults standardUserDefaults] boolForKey:@"JVAutoOpenTransferPorts"]; 
     158                [MVFileTransfer setAutoPortMappingEnabled:autoOpen]; 
    160159 
    161160                _safeFileExtentions = [[NSSet allocWithZone:nil] initWithObjects:@"jpg",@"jpeg",@"gif",@"png",@"tif",@"tiff",@"psd",@"pdf",@"txt",@"rtf",@"html",@"htm",@"swf",@"mp3",@"wma",@"wmv",@"ogg",@"ogm",@"mov",@"mpg",@"mpeg",@"m1v",@"m2v",@"mp4",@"avi",@"vob",@"avi",@"asx",@"asf",@"pls",@"m3u",@"rmp",@"aif",@"aiff",@"aifc",@"wav",@"wave",@"m4a",@"m4p",@"m4b",@"dmg",@"udif",@"ndif",@"dart",@"sparseimage",@"cdr",@"dvdr",@"iso",@"img",@"toast",@"rar",@"sit",@"sitx",@"bin",@"hqx",@"zip",@"gz",@"tgz",@"tar",@"bz",@"bz2",@"tbz",@"z",@"taz",@"uu",@"uue",@"colloquytranscript",@"torrent",nil]; 
  • trunk/Languages/Dutch.lproj/Credits.rtf

    r3150 r3505  
    1 {\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf350 
    2 {\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fnil\fcharset77 LucidaGrande; 
    3 \f3\fswiss\fcharset77 Helvetica-Oblique;\f4\fnil\fcharset77 LucidaGrande-Bold;} 
     1{\rtf1\mac\ansicpg10000\cocoartf885 
     2{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fnil\fcharset77 LucidaGrande;} 
    43{\colortbl;\red255\green255\blue255;\red19\green16\blue255;} 
    5 \vieww9000\viewh8400\viewkind0 
    64\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    75 
    86\f0\b\fs24 \cf0 Ontwikkeling & Ontwerp 
    9 \f1\b0 \ 
     7\b0 \ 
    108\pard\li359\fi-359\ql\qnatural 
    119 
    12 \f2\fs20 \cf0 Timothy Hatcher ({\field{\*\fldinst{HYPERLINK "mailto:timothy@colloquy.info"}}{\fldrslt \cf2 timothy@colloquy.info}}) 
    13 \f1\fs24 \ 
    14 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    15  
    16 \f2\fs20 \cf0 Patrik Weiskircher ({\field{\*\fldinst{HYPERLINK "mailto:pat@colloquy.info"}}{\fldrslt \cf2 \ul \ulc2 pat@colloquy.info}})\ 
     10\f1\fs20 \cf0 Timothy Hatcher ({\field{\*\fldinst{HYPERLINK "mailto:timothy@colloquy.info"}}{\fldrslt \cf2 timothy@colloquy.info}}) 
     11\f0\fs24 \ 
     12\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     13 
     14\f1\fs20 \cf0 Patrik Weiskircher ({\field{\*\fldinst{HYPERLINK "mailto:pat@colloquy.info"}}{\fldrslt \cf2 \ul \ulc2 pat@colloquy.info}})\ 
    1715\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    1816 
     
    2119 
    2220\fs24 \cf0 IRC chatmotor 
    23 \f1\b0 \ 
    24 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    25  
    26 \f3\i\fs20 \cf0 Chat Core IRC gedeelten 
    27 \f2\i0 \ 
     21\b0 \ 
     22\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     23 
     24\i\fs20 \cf0 Chat Core IRC gedeelten 
     25\f1\i0 \ 
    2826\'a9 2003-2005 Timothy Hatcher onder de GPL v. 2\ 
    2927\'a9 2006 Timothy Hatcher onder de BSD License\ 
     
    3533 
    3634\fs24 \cf0 SILC chatmotor 
    37 \f1\b0 \ 
    38 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    39  
    40 \f3\i\fs20 \cf0 SILC Toolkit 
    41 \f2\i0 \ 
     35\b0 \ 
     36\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     37 
     38\i\fs20 \cf0 SILC Toolkit 
     39\f1\i0 \ 
    4240\'a9 1997-2004 SILC Project onder de GPL v. 2\ 
    4341\'a9 2005-2006 SILC Project onder de GPL & BSD License\ 
     
    5149 
    5250\fs24 \cf0 XML & XSLT motor 
    53 \f1\b0 \ 
    54 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    55  
    56 \f3\i\fs20 \cf0 XML & XSLT C libraries for GNOME 
    57 \f2\i0 \ 
    58 \'a9 1998-2006 Daniel Veillard onder de MIT-licentie.
     51\b0 \ 
     52\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     53 
     54\i\fs20 \cf0 XML & XSLT C libraries for GNOME 
     55\f1\i0 \ 
     56\'a9 1998-2006 Daniel Veillard onder de MIT-licentie
    5957Zie de MIT-licentie voor meer details.\cf2 \ul \ 
    6058\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    6159{\field{\*\fldinst{HYPERLINK "http://xmlsoft.org"}}{\fldrslt \cf2 \ulnone http://xmlsoft.org}} 
    62 \f4\b\fs28 \cf0 \ulnone \ 
     60\b\fs28 \cf0 \ulnone \ 
     61\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     62 
     63\f0\fs20 \cf0 \ 
     64\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     65 
     66\fs24 \cf0 NAT Traversal Library 
     67\b0 \ 
     68\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     69 
     70\i\fs20 \cf0 Transmission library 
     71\f1\i0 \ 
     72\'a9 2005-2006 Transmission project onder de MIT-licentie\ 
     73Zie de MIT-licentie voor meer details.\cf2 \ul \ulc2 \ 
     74\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     75{\field{\*\fldinst{HYPERLINK "http://transmission.m0k.org"}}{\fldrslt \cf2 \ulnone http://transmission.m0k.org}} 
     76\b\fs28 \cf0 \ulnone \ 
    6377\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    6478 
     
    6781 
    6882\fs24 \cf0 Reguliere-expressiekader 
    69 \f1\b0 \ 
    70 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    71  
    72 \f3\i\fs20 \cf0 AGRegex Framework wrapping the PCRE library 
    73 \f2\i0 \ 
     83\b0 \ 
     84\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     85 
     86\i\fs20 \cf0 AGRegex Framework wrapping the PCRE library 
     87\f1\i0 \ 
    7488\'a9 2002-2003 Aram Greenman onder de BSD-licentie\ 
    7589Zie de BSD-licentie voor meer details.\cf2 \ul \ 
    7690\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    7791{\field{\*\fldinst{HYPERLINK "http://sf.net/projects/agkit"}}{\fldrslt \cf2 \ulnone http://sf.net/projects/agkit}} 
    78 \f4\b\fs28 \cf0 \ulnone \ 
    79 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    80  
    81 \f3\i\b0\fs10 \cf0 \ 
     92\b\fs28 \cf0 \ulnone \ 
     93\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     94 
     95\f0\i\b0\fs10 \cf0 \ 
    8296\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    8397 
    8498\fs20 \cf0 Perl Compatible Regular Expressions library 
    85 \f2\i0 \ 
     99\f1\i0 \ 
    86100\'a9 1997-2006 Philip Hazel, University of Cambridge\ 
    87101Zie de PCRE-licentie voor meer details.\cf2 \ul \ 
    88102\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    89103{\field{\*\fldinst{HYPERLINK "http://pcre.org"}}{\fldrslt \cf2 \ulnone http://pcre.org}} 
    90 \f4\b\fs28 \cf0 \ulnone \ 
     104\b\fs28 \cf0 \ulnone \ 
    91105\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    92106 
     
    95109 
    96110\fs24 \cf0 Vensters met tabbladen 
    97 \f1\b0 \ 
    98 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    99  
    100 \f3\i\fs20 \cf0 Adium Tab View 
    101 \f2\i0 \ 
     111\b0 \ 
     112\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     113 
     114\i\fs20 \cf0 Adium Tab View 
     115\f1\i0 \ 
    102116\'a9 2001-2006 Adam Iser onder de GPL\ 
    103117Zie de GNU Public License versie 2 voor meer details.\cf2 \ul \ 
    104118\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    105119{\field{\*\fldinst{HYPERLINK "http://adiumx.com"}}{\fldrslt \cf2 \ulnone http://adiumx.com}} 
    106 \f4\b\fs28 \cf0 \ulnone \ 
     120\b\fs28 \cf0 \ulnone \ 
    107121\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    108122 
     
    113127\pard\pardeftab720\ql\qnatural 
    114128 
    115 \f2\b0\fs20 \cf0 Stephen Butler\ 
     129\f1\b0\fs20 \cf0 Stephen Butler\ 
    116130\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    117131\cf0 Phil Larson\ 
     
    135149 
    136150\fs24 \cf0 Colloquy.info hosting 
    137 \f1\b0 \ 
    138 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    139  
    140 \f2\fs20 \cf0 James Cox ({\field{\*\fldinst{HYPERLINK "http://imajes.info"}}{\fldrslt \cf2 imajes.info}}) 
    141 \f1\fs24 \ 
    142 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    143  
    144 \f0\b\fs20 \cf0 \ 
     151\b0 \ 
     152\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     153 
     154\f1\fs20 \cf0 James Cox ({\field{\*\fldinst{HYPERLINK "http://imajes.info"}}{\fldrslt \cf2 imajes.info}}) 
     155\f0\fs24 \ 
     156\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     157 
     158\b\fs20 \cf0 \ 
    145159\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    146160 
    147161\fs24 \cf0 Colloquy.info domeinnaam 
    148 \f1\b0 \ 
     162\b0 \ 
    149163\pard\li359\fi-359\ql\qnatural 
    150164 
    151 \f2\fs20 \cf0 Chris Marks ({\field{\*\fldinst{HYPERLINK "http://www.domainlauncher.com"}}{\fldrslt \cf2 domainlauncher.com}}) 
    152 \f1\fs24 \ 
    153 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    154  
    155 \f0\b\fs20 \cf0 \ 
     165\f1\fs20 \cf0 Chris Marks ({\field{\*\fldinst{HYPERLINK "http://www.domainlauncher.com"}}{\fldrslt \cf2 domainlauncher.com}}) 
     166\f0\fs24 \ 
     167\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     168 
     169\b\fs20 \cf0 \ 
    156170\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    157171 
     
    159173\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    160174 
    161 \f2\b0\fs20 \cf0 English: Timothy Hatcher\ 
     175\f1\b0\fs20 \cf0 English: Timothy Hatcher\ 
    162176Duits: Alexander Kempgen\ 
    163177Nederlands: Wouter Goossens\ 
     
    176190\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    177191 
    178 \f2\b0\fs20 \cf0 Matt Anton\ 
     192\f1\b0\fs20 \cf0 Matt Anton\ 
    179193Jorge Salvador Caffarena\ 
    180194James Cox\ 
     
    182196Adam Downes\ 
    183197Josh Gibbs 
    184 \f1\fs24 \ 
     198\f0\fs24 \ 
    185199\pard\tx0\tx1120\tx2240\tx3360\tx4480\tx5600\tx6720\tx7840\tx8960\tx10080\tx11200\tx12320\tx13440\tx14560\tx15680\tx16800\tx17920\tx19040\tx20160\tx21280\tx22400\tx23520\tx24640\tx25760\tx26880\tx28000\tx29120\tx30240\tx31360\tx32480\tx33600\tx34720\ql\qnatural 
    186200 
    187 \f2\fs20 \cf0 Hans Gerwitz\ 
     201\f1\fs20 \cf0 Hans Gerwitz\ 
    188202Charles Hartman\ 
    189203Steve Klingsporn\ 
  • trunk/Languages/Dutch.lproj/JVFileTransferPreferences.nib/classes.nib

    r2997 r3505  
    33        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },  
    44        { 
    5             ACTIONS = {changePortRange = id; changeSaveDownloads = id; };  
     5            ACTIONS = {changeAutoOpenPorts = id; changePortRange = id; changeSaveDownloads = id; };  
    66            CLASS = JVFileTransferPreferences;  
    77            LANGUAGE = ObjC;  
    8             OUTLETS = {maxRate = NSTextField; minRate = NSTextField; saveDownloads = NSPopUpButton; };  
     8            OUTLETS = { 
     9                autoOpenPorts = NSButton;  
     10                maxRate = NSTextField;  
     11                minRate = NSTextField;  
     12                saveDownloads = NSPopUpButton;  
     13            };  
    914            SUPERCLASS = NSPreferencesModule;  
    1015        },  
  • trunk/Languages/Dutch.lproj/JVFileTransferPreferences.nib/info.nib

    r2997 r3505  
    44<dict> 
    55        <key>IBDocumentLocation</key> 
    6         <string>37 113 356 240 0 0 1024 746 </string> 
     6        <string>104 383 356 240 0 0 1440 878 </string> 
    77        <key>IBEditorPositions</key> 
    88        <dict> 
    99                <key>5</key> 
    10                 <string>66 330 545 367 0 0 1024 746 </string> 
     10                <string>447 398 545 403 0 0 1440 878 </string> 
    1111        </dict> 
    1212        <key>IBFramework Version</key> 
    13         <string>439.0</string> 
    14         <key>IBGroupedObjects</key> 
    15         <dict> 
    16                 <key>0</key> 
    17                 <array> 
    18                         <string>85</string> 
    19                         <string>86</string> 
    20                         <string>88</string> 
    21                         <string>89</string> 
    22                 </array> 
    23                 <key>2</key> 
    24                 <array> 
    25                         <string>133</string> 
    26                         <string>132</string> 
    27                 </array> 
    28         </dict> 
    29         <key>IBLastGroupID</key> 
    30         <string>3</string> 
    31         <key>IBOpenObjects</key> 
    32         <array> 
    33                 <integer>5</integer> 
    34         </array> 
     13        <string>454.0</string> 
    3514        <key>IBSystem Version</key> 
    36         <string>8C46</string> 
     15        <string>9A321</string> 
    3716</dict> 
    3817</plist> 
  • trunk/Languages/English.lproj/Credits.rtf

    r3150 r3505  
    1 {\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf350 
    2 {\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fnil\fcharset77 LucidaGrande; 
    3 \f3\fswiss\fcharset77 Helvetica-Oblique;\f4\fnil\fcharset77 LucidaGrande-Bold;} 
     1{\rtf1\mac\ansicpg10000\cocoartf885 
     2{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fnil\fcharset77 LucidaGrande;} 
    43{\colortbl;\red255\green255\blue255;\red19\green16\blue255;} 
    5 \vieww9000\viewh8400\viewkind0 
    64\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    75 
    86\f0\b\fs24 \cf0 Engineering & Design 
    9 \f1\b0 \ 
     7\b0 \ 
    108\pard\li359\fi-359\ql\qnatural 
    119 
    12 \f2\fs20 \cf0 Timothy Hatcher ({\field{\*\fldinst{HYPERLINK "mailto:timothy@colloquy.info"}}{\fldrslt \cf2 timothy@colloquy.info}}) 
    13 \f1\fs24 \ 
    14 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    15  
    16 \f2\fs20 \cf0 Patrik Weiskircher ({\field{\*\fldinst{HYPERLINK "mailto:pat@colloquy.info"}}{\fldrslt \cf2 \ul \ulc2 pat@colloquy.info}})\ 
     10\f1\fs20 \cf0 Timothy Hatcher ({\field{\*\fldinst{HYPERLINK "mailto:timothy@colloquy.info"}}{\fldrslt \cf2 timothy@colloquy.info}}) 
     11\f0\fs24 \ 
     12\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     13 
     14\f1\fs20 \cf0 Patrik Weiskircher ({\field{\*\fldinst{HYPERLINK "mailto:pat@colloquy.info"}}{\fldrslt \cf2 \ul \ulc2 pat@colloquy.info}})\ 
    1715\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    1816 
     
    2119 
    2220\fs24 \cf0 IRC Chat Engine 
    23 \f1\b0 \ 
    24 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    25  
    26 \f3\i\fs20 \cf0 Chat Core IRC portions 
    27 \f2\i0 \ 
     21\b0 \ 
     22\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     23 
     24\i\fs20 \cf0 Chat Core IRC portions 
     25\f1\i0 \ 
    2826\'a9 2003-2005 Timothy Hatcher under the GPL v. 2\ 
    2927\'a9 2006 Timothy Hatcher under the BSD License\ 
     
    3533 
    3634\fs24 \cf0 SILC Chat Engine 
    37 \f1\b0 \ 
    38 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    39  
    40 \f3\i\fs20 \cf0 SILC Toolkit 
    41 \f2\i0 \ 
     35\b0 \ 
     36\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     37 
     38\i\fs20 \cf0 SILC Toolkit 
     39\f1\i0 \ 
    4240\'a9 1997-2004 SILC Project under the GPL v. 2\ 
    43 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    44 \cf0 \'a9 2005-2006 SILC Project under the GPL & BSD License\ 
    45 See the BSD License for more details.\cf2 \ul \ulc2 \ 
     41\'a9 2005-2006 SILC Project under the GPL & BSD License\ 
     42See the BSD License for more details.\cf2 \ul \ 
    4643\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    4744{\field{\*\fldinst{HYPERLINK "http://silcnet.org"}}{\fldrslt \cf2 \ulnone http://silcnet.org}}\ulnone \ 
     
    5249 
    5350\fs24 \cf0 XML & XSLT Engine 
    54 \f1\b0 \ 
    55 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    56  
    57 \f3\i\fs20 \cf0 XML & XSLT C libraries for GNOME 
    58 \f2\i0 \ 
     51\b0 \ 
     52\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     53 
     54\i\fs20 \cf0 XML & XSLT C libraries for GNOME 
     55\f1\i0 \ 
    5956\'a9 1998-2006 Daniel Veillard under the MIT License\ 
    6057See the MIT License for more details.\cf2 \ul \ 
    6158\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    6259{\field{\*\fldinst{HYPERLINK "http://xmlsoft.org"}}{\fldrslt \cf2 \ulnone http://xmlsoft.org}} 
    63 \f4\b\fs28 \cf0 \ulnone \ 
     60\b\fs28 \cf0 \ulnone \ 
     61\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     62 
     63\f0\fs20 \cf0 \ 
     64\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     65 
     66\fs24 \cf0 NAT Traversal Library 
     67\b0 \ 
     68\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     69 
     70\i\fs20 \cf0 Transmission library 
     71\f1\i0 \ 
     72\'a9 2005-2006 Transmission project under the MIT License\ 
     73See the MIT License for more details.\cf2 \ul \ulc2 \ 
     74\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     75{\field{\*\fldinst{HYPERLINK "http://transmission.m0k.org"}}{\fldrslt \cf2 \ulnone http://transmission.m0k.org}} 
     76\b\fs28 \cf0 \ulnone \ 
    6477\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    6578 
     
    6881 
    6982\fs24 \cf0 Regular Expression Framework 
    70 \f1\b0 \ 
    71 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    72  
    73 \f3\i\fs20 \cf0 AGRegex Framework wrapping the PCRE library 
    74 \f2\i0 \ 
     83\b0 \ 
     84\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     85 
     86\i\fs20 \cf0 AGRegex Framework wrapping the PCRE library 
     87\f1\i0 \ 
    7588\'a9 2002-2003 Aram Greenman under the BSD License\ 
    7689See the BSD License for more details.\cf2 \ul \ 
    7790\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    7891{\field{\*\fldinst{HYPERLINK "http://sf.net/projects/agkit"}}{\fldrslt \cf2 \ulnone http://sf.net/projects/agkit}} 
    79 \f4\b\fs28 \cf0 \ulnone \ 
    80 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    81  
    82 \f3\i\b0\fs10 \cf0 \ 
     92\b\fs28 \cf0 \ulnone \ 
     93\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     94 
     95\f0\i\b0\fs10 \cf0 \ 
    8396\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    8497 
    8598\fs20 \cf0 Perl Compatible Regular Expressions library 
    86 \f2\i0 \ 
     99\f1\i0 \ 
    87100\'a9 1997-2006 Philip Hazel, University of Cambridge\ 
    88101See the PCRE License for more details.\cf2 \ul \ 
    89102\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    90103{\field{\*\fldinst{HYPERLINK "http://pcre.org"}}{\fldrslt \cf2 \ulnone http://pcre.org}} 
    91 \f4\b\fs28 \cf0 \ulnone \ 
     104\b\fs28 \cf0 \ulnone \ 
    92105\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    93106 
     
    96109 
    97110\fs24 \cf0 Tabbed Windows 
    98 \f1\b0 \ 
    99 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    100  
    101 \f3\i\fs20 \cf0 Adium Tab View 
    102 \f2\i0 \ 
     111\b0 \ 
     112\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     113 
     114\i\fs20 \cf0 Adium Tab View 
     115\f1\i0 \ 
    103116\'a9 2001-2006 Adam Iser under the GPL.\ 
    104117See the GNU Public License v. 2 for more details.\cf2 \ul \ 
    105118\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    106119{\field{\*\fldinst{HYPERLINK "http://adiumx.com"}}{\fldrslt \cf2 \ulnone http://adiumx.com}} 
    107 \f4\b\fs28 \cf0 \ulnone \ 
     120\b\fs28 \cf0 \ulnone \ 
    108121\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    109122 
     
    114127\pard\pardeftab720\ql\qnatural 
    115128 
    116 \f2\b0\fs20 \cf0 Stephen Butler\ 
     129\f1\b0\fs20 \cf0 Stephen Butler\ 
    117130\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    118131\cf0 Phil Larson\ 
     
    136149 
    137150\fs24 \cf0 Colloquy.info Hosting 
    138 \f1\b0 \ 
    139 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    140  
    141 \f2\fs20 \cf0 James Cox ({\field{\*\fldinst{HYPERLINK "http://imajes.info"}}{\fldrslt \cf2 imajes.info}}) 
    142 \f1\fs24 \ 
    143 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    144  
    145 \f0\b\fs20 \cf0 \ 
     151\b0 \ 
     152\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     153 
     154\f1\fs20 \cf0 James Cox ({\field{\*\fldinst{HYPERLINK "http://imajes.info"}}{\fldrslt \cf2 imajes.info}}) 
     155\f0\fs24 \ 
     156\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     157 
     158\b\fs20 \cf0 \ 
    146159\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    147160 
    148161\fs24 \cf0 Colloquy.info Domain Name 
    149 \f1\b0 \ 
     162\b0 \ 
    150163\pard\li359\fi-359\ql\qnatural 
    151164 
    152 \f2\fs20 \cf0 Chris Marks ({\field{\*\fldinst{HYPERLINK "http://www.domainlauncher.com"}}{\fldrslt \cf2 domainlauncher.com}}) 
    153 \f1\fs24 \ 
    154 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    155  
    156 \f0\b\fs20 \cf0 \ 
     165\f1\fs20 \cf0 Chris Marks ({\field{\*\fldinst{HYPERLINK "http://www.domainlauncher.com"}}{\fldrslt \cf2 domainlauncher.com}}) 
     166\f0\fs24 \ 
     167\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
     168 
     169\b\fs20 \cf0 \ 
    157170\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    158171 
     
    160173\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 
    161174 
    162 \f2\b0\fs20 \cf0 English: Timothy Hatcher\ 
     175\f1\b0\fs20 \cf0 English: Timothy Hatcher\ 
    163176German: Alexander Kempgen\ 
    164177Dutch: Wouter Goossens\ 
     
    177190\pard\tx560\tx1120\tx1680\tx224