--- /dev/null
+//
+// AFSCommanderPref.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 10/05/07.
+// Copyright (c) 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <PreferencePanes/PreferencePanes.h>
+#import "AFSPropertyManager.h"
+#import "global.h"
+#import "ViewUtility.h"
+#import "LynkCreationController.h"
+
+// the way to load and unload the menuextra was inspired by MenuMeters developed by Alex Harper
+// Routines to handle adding and remove menu extras in HIServices (from ASM source)
+int CoreMenuExtraGetMenuExtra(CFStringRef identifier, void *menuExtra);
+int CoreMenuExtraAddMenuExtra(CFURLRef path, int position, int whoCares, int whoCares2, int whoCares3, int whoCares4);
+int CoreMenuExtraRemoveMenuExtra(void *menuExtra, int whoCares);
+
+
+
+@interface AFSCommanderPref : NSPreferencePane
+{
+ //for check system version
+ int prefStartUp;
+ // Main View
+ IBOutlet NSView *afsCommanderView;
+ IBOutlet NSSearchField *textSearchField;
+ IBOutlet NSTextField *afsDefaultCellLabel;
+ IBOutlet NSButton *tokensButton;
+ IBOutlet NSButton *unlogButton;
+ IBOutlet NSButton *aklogCredentialAtLoginTime;
+ IBOutlet NSButton *installKRB5AuthAtLoginButton;
+ IBOutlet NSButton *useAklogCheck;
+ IBOutlet NSTextField *afsVersionLabel;
+ BOOL startAFSAtLogin;
+ IBOutlet NSButton *checkButtonAfsAtBootTime;
+ IBOutlet NSTextField *textFieldDevInfoLabel;
+
+ //NSString *appID;
+ //id installationPathTextField;
+ id startStopButton;
+ id cellList;
+ //id cellNameTextEdit;
+ id cellIpButton;
+ id addCellButton;
+ id removeCellButton;
+ //id refreshConfigurationButton;
+ id saveConfigurationButton;
+ id labelSaveResult;
+ id tokensTable;
+ id afsMenucheckBox;
+
+ //cache manager IBOutlet
+ IBOutlet NSTextField *statCacheEntry;
+ IBOutlet NSTextField *dCacheDim;
+ IBOutlet NSTextField *cacheDimension;
+ IBOutlet NSTextField *daemonNumber;
+ IBOutlet NSTextField *afsRootMountPoint;
+ IBOutlet NSTextField *nVolEntry;
+ IBOutlet NSButton *dynRoot;
+ IBOutlet NSButton *afsDB;
+ IBOutlet NSButton *verbose;
+ IBOutlet NSBox *groupsBox;
+
+ //Configuration sheet
+ id ipConfigurationSheet;
+ id ipConfControllerCommander;
+
+ //Token sheet
+ id credentialSheet;
+ id credentialCommander;
+
+
+ //Info Sheet
+ id infoSheet;
+ id infoController;
+
+ //lynk creation
+ id lyncCreationSheet;
+ IBOutlet LynkCreationController *lynkCreationController;
+
+ //manage link
+ IBOutlet NSButton *checkEnableLink;
+ IBOutlet NSButton *buttonAddLink;
+ IBOutlet NSButton *buttonRemoveLink;
+ bool enableLink;
+
+ AFSPropertyManager *afsProperty; //AFS Property managment class
+ NSMutableArray *filteredCellDB; //Filtered CellServDB
+ NSArray *tokenList;
+ NSTimer *timerForCheckTokensList;
+ NSLock *tokensLock;
+}
+
+- (void) mainViewDidLoad;
+- (void) willUnselect;
+- (void) didSelect;
+- (id) initWithBundle:(NSBundle *)bundle;
+- (void)startTimer;
+- (void)stopTimer;
+//View Action
+- (IBAction) refreshConfiguration:(id) sender;
+- (void) fillCacheParamView;
+- (void) updateCacheParamFromView;
+- (IBAction) showCellIP:(id) sender;
+- (IBAction) addRemoveCell:(id) sender;
+- (IBAction) addLink:(id) sender;
+- (IBAction) removeLink:(id) sender;
+- (IBAction) enableLink:(id) sender;
+- (IBAction) saveConfiguration:(id) sender;
+- (IBAction) saveCacheManagerParam:(id) sender;
+- (IBAction) startStopAfs:(id) sender;
+- (IBAction) info:(id) sender;
+- (IBAction) tableDoubleAction:(id) sender;
+- (IBAction) getNewToken:(id) sender;
+- (IBAction) unlog:(id) sender;
+- (IBAction) afsMenuActivationEvent:(id) sender;
+- (IBAction) aklogSwitchEvent:(id) sender;
+- (IBAction) credentialAtLoginTimeEvent:(id) sender;
+- (IBAction) afsStartupSwitchEvent:(id) sender;
+- (void) credentialAtLoginTimeEventCreationLaunchAgentDir:(NSWindow*)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo;
+- (IBAction) krb5KredentialAtLoginTimeEvent:(id) sender;
+- (IBAction) searchCellTextEvent:(id) sender;
+- (void) clearCellServDBFiltering;
+- (void) filterCellServDB:(NSString*)textToFilter;
+- (DBCellElement*) getCurrentCellInDB;
+- (DBCellElement*) getCellByIDX:(int) idx;
+- (void) modifyCell:(DBCellElement*) cellElement;
+- (void) modifyCellByIDX:(int) idx;
+- (void) showMessage:(NSString*) message;
+- (void) manageButtonState:(int) rowSelected;
+- (void) setAfsStatus;
+- (void) refreshTokens:(NSTimer*)theTimer;
+- (BOOL) isAFSMenuExtraLoaded;
+- (void) addAFSMenuExtra;
+- (void) removeAFSMenuExtra;
+- (void) repairHelperTool;
+- (void) writePreferenceFile;
+- (void) readPreferenceFile;
+- (void) mextraChangeActivation:(NSNotification *)notification;
+- (void) refreshGui:(NSNotification *)notification;
+- (void) afsVolumeMountChange:(NSNotification *)notification;
+@end
\ No newline at end of file
--- /dev/null
+//
+// AFSCommanderPref.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 10/05/07.
+// Copyright (c) 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "AFSCommanderPref.h"
+#import "IpConfiguratorCommander.h"
+#import "TokenCredentialController.h"
+#import "InfoController.h"
+#import "TaskUtil.h"
+#import "PListManager.h"
+#import "DialogUtility.h"
+#import "NSString+search.h"
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/fcntl.h>
+#include <sys/errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#import <CoreServices/CoreServices.h>
+
+
+#define ADD_CELL_CONTROL_TAG 1
+#define REMOVE_CELL_CONTROL_TAG 2
+
+#define TABLE_TOKENS_LIST 1
+#define TABLE_CELL_LIST 2
+
+#define TAB_TOKENS 1
+#define TAB_CELL_SERV_DB 2
+#define TAB_CACHE 3
+#define TAB_GROUP 4
+
+//CellServDB table id
+#define CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN 0
+#define CELLSRVDB_TABLE_DFLT_CHECK_COLUMN 1
+#define CELLSRVDB_TABLE_NAME_COLUMN 2
+#define CELLSRVDB_TABLE_DESCRIPTION_COLUMN 3
+
+@implementation AFSCommanderPref
+
+// -------------------------------------------------------------------------------
+// initWithBundle:
+// -------------------------------------------------------------------------------
+- (id)initWithBundle:(NSBundle *)bundle
+{
+ if ( ( self = [super initWithBundle:bundle] ) != nil ) {
+ //appID = afsCommanderID;
+ prefStartUp = 1;
+ }
+ return self;
+}
+
+// -------------------------------------------------------------------------------
+// mainView:
+// -------------------------------------------------------------------------------
+- (NSView *) mainView {
+ if (prefStartUp == 1){
+ SInt32 osxMJVers = 0;
+ SInt32 osxMnVers = 0;
+ if (Gestalt(gestaltSystemVersionMajor, &osxMJVers) == noErr && Gestalt(gestaltSystemVersionMinor, &osxMnVers) == noErr) {
+ if (osxMJVers == 10 && osxMnVers>= 5) {
+ // we are working on leopard
+ NSLog(@"Leopard AFSCommander adapting");
+ [afsCommanderView setFrameSize:NSMakeSize(668, [afsCommanderView frame].size.height)];
+ prefStartUp = 0;
+ }
+ }
+ }
+
+ return afsCommanderView;
+}
+
+// -------------------------------------------------------------------------------
+// mainViewDidLoad:
+// -------------------------------------------------------------------------------
+- (void) mainViewDidLoad
+{
+ //CellServDB Table
+ [((NSTableView*)cellList) setDelegate:self];
+ [((NSTableView*)cellList) setTarget:self];
+ [((NSTableView*)cellList) setDoubleAction:@selector(tableDoubleAction:)];
+
+
+}
+
+// -------------------------------------------------------------------------------
+// didSelect:
+// -------------------------------------------------------------------------------
+- (void) didSelect
+{
+ // Set Developer info
+ [textFieldDevInfoLabel setStringValue:kDevelopInfo];
+ // creating the lock
+ tokensLock = [[NSLock alloc] init];
+
+ //Initialization cellservdb and token list
+ filteredCellDB = nil;
+ tokenList = nil;
+
+ [self readPreferenceFile];
+
+ // alloc the afs property mananger
+ afsProperty = [[AFSPropertyManager alloc] init];
+
+ // register preference pane to detect menuextra killed by user
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(mextraChangeActivation:)
+ name:afsCommanderID
+ object:kMExtraClosedNotification];
+
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(refreshGui:)
+ name:afsCommanderID
+ object:kMenuExtraEventOccured];
+
+ //Register for mount/unmount afs volume
+ [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
+ selector:@selector(afsVolumeMountChange:)
+ name:NSWorkspaceDidMountNotification object:nil];
+
+ [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
+ selector:@selector(afsVolumeMountChange:)
+ name:NSWorkspaceDidUnmountNotification object:nil];
+
+ // set self as table data source
+ [((NSTableView*)cellList) setDataSource:self];
+ [((NSTableView*)tokensTable) setDataSource:self];
+
+ //check the afs state
+ [self setAfsStatus];
+
+ // check the MenuExtra state
+ [self mextraChangeActivation:nil];
+
+ // let show the configuration after prefpane is open
+ [self refreshConfiguration:nil];
+
+ // refresh the token list
+ //[self refreshTokens:nil];
+
+ //refresh table to reflect the NSSearchField contained text
+ [self searchCellTextEvent:nil];
+}
+
+// -------------------------------------------------------------------------------
+// willUnselect:
+// -------------------------------------------------------------------------------
+- (void)willUnselect
+{
+ NSLog(@"willUnselect");
+ // remove self as datasource
+ [((NSTableView*)cellList) setDataSource:nil];
+ [((NSTableView*)tokensTable) setDataSource:nil];
+
+ //release the afs property manager
+ if(afsProperty) [afsProperty release];
+ //release tokens list
+ if(tokenList) [tokenList release];
+ //Remove the cell temp array
+ if(filteredCellDB) [filteredCellDB release];
+
+ [self writePreferenceFile];
+
+ // unregister preference pane to detect menuextra killed by user
+ [[NSDistributedNotificationCenter defaultCenter] removeObserver:self
+ name:afsCommanderID
+ object:kMExtraClosedNotification];
+ [[NSDistributedNotificationCenter defaultCenter] removeObserver:self
+ name:afsCommanderID
+ object:kMenuExtraEventOccured];
+ [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self
+ name:NSWorkspaceDidMountNotification object:nil];
+ [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self
+ name:NSWorkspaceDidUnmountNotification object:nil];
+
+ [self stopTimer];
+ [tokensLock release];
+}
+
+
+// -------------------------------------------------------------------------------
+// startTimer:
+// -------------------------------------------------------------------------------
+- (void)startTimer{
+ //start the time for check tokens validity
+ if(timerForCheckTokensList) return;
+ timerForCheckTokensList = [NSTimer scheduledTimerWithTimeInterval:TOKENS_REFRESH_TIME_IN_SEC
+ target:self
+ selector:@selector(refreshTokens:)
+ userInfo:nil
+ repeats:YES];
+ [timerForCheckTokensList fire];
+}
+
+// -------------------------------------------------------------------------------
+// stopTimer:
+// -------------------------------------------------------------------------------
+- (void)stopTimer{
+ if(!timerForCheckTokensList) return;
+ [timerForCheckTokensList invalidate];
+ timerForCheckTokensList = nil;
+}
+
+
+// -------------------------------------------------------------------------------
+// readPreferenceFile:
+// -------------------------------------------------------------------------------
+- (void) readPreferenceFile
+{
+
+ // read the preference for afs path
+ //NSString *afsSysPath = PREFERENCE_AFS_SYS_PAT_STATIC;/*(NSString*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_AFS_SYS_PAT, (CFStringRef)afsCommanderID,
+ // kCFPreferencesAnyUser, kCFPreferencesAnyHost);*/
+ /*if(afsSysPath){
+ [((NSTextField*) installationPathTextField ) setStringValue:afsSysPath];
+ }*/
+
+ // read the preference for aklog use
+ NSNumber *useAklogPrefValue = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_USE_AKLOG, (CFStringRef)afsCommanderID,
+ kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
+ if(useAklogPrefValue){
+ [useAklogCheck setState:[useAklogPrefValue intValue]];
+ [aklogCredentialAtLoginTime setEnabled:[useAklogPrefValue intValue]];
+ } else {
+ [useAklogCheck setState:NSOffState];
+ [aklogCredentialAtLoginTime setEnabled:NSOffState];
+ [aklogCredentialAtLoginTime setState:NSOffState];
+ [PListManager installLaunchdFile:NO
+ resourcePath:nil];
+ }
+
+ //check if krb5 at startup is enable at system level
+ [installKRB5AuthAtLoginButton setState:[PListManager checkKrb5AtLoginTimeLaunchdEnable]];
+
+ //check if the user has installed and enabled the afs agent
+ [aklogCredentialAtLoginTime setState:[PListManager checkAklogAtLoginTimeLaunchdEnable]];
+
+ //check for AFS enable at startup
+ NSNumber *afsEnableStartupTime = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_START_AFS_AT_STARTUP,
+ (CFStringRef)afsCommanderID, kCFPreferencesAnyUser, kCFPreferencesAnyHost);
+ if(afsEnableStartupTime)
+ startAFSAtLogin = [afsEnableStartupTime boolValue];
+ else
+ startAFSAtLogin = false;
+ //set the check button state
+ [checkButtonAfsAtBootTime setState:startAFSAtLogin];
+}
+
+// -------------------------------------------------------------------------------
+// willUnselect:
+// -------------------------------------------------------------------------------
+- (void) writePreferenceFile
+{
+ //Set the preference for afs path
+ /*CFPreferencesSetValue((CFStringRef)PREFERENCE_AFS_SYS_PAT,
+ (CFStringRef)[((NSTextField*) installationPathTextField ) stringValue],
+ (CFStringRef)afsCommanderID, kCFPreferencesAnyUser, kCFPreferencesAnyHost);*/
+
+ //Set the preference for aklog use
+ CFPreferencesSetValue((CFStringRef)PREFERENCE_USE_AKLOG,
+ (CFNumberRef)[NSNumber numberWithInt:[useAklogCheck state]],
+ (CFStringRef)afsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
+
+
+ // Notify
+ if ([self isAFSMenuExtraLoaded]) [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kPrefChangeNotification];
+
+ //set AFS enable state at startup
+ CFPreferencesSetValue((CFStringRef)PREFERENCE_START_AFS_AT_STARTUP,
+ (CFNumberRef)[NSNumber numberWithBool:startAFSAtLogin],
+ (CFStringRef)afsCommanderID, kCFPreferencesAnyUser, kCFPreferencesAnyHost);
+
+ CFPreferencesSynchronize((CFStringRef)afsCommanderID, kCFPreferencesAnyUser, kCFPreferencesAnyHost);
+ CFPreferencesSynchronize((CFStringRef)afsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
+}
+
+// -------------------------------------------------------------------------------
+// saveConfiguration:
+// -------------------------------------------------------------------------------
+- (IBAction) saveConfiguration:(id) sender
+{
+ @try{
+
+ //[afsProperty setCellName:[cellNameTextEdit stringValue]];
+ [afsProperty setCellName:[afsProperty getDefaultCellName]];
+
+ //save configurations
+ [afsProperty saveConfigurationFiles:YES];
+
+
+ //Reload all configuration
+ [self refreshConfiguration:nil];
+
+ //refresh table to reflect the NSSearchField contained text
+ [self searchCellTextEvent:nil];
+
+ //Show dialog for notifity al saving process ar gone ell
+ [self showMessage:kConfigurationSaved];
+ }@catch(NSException *e){
+ [self showMessage:[e reason]];
+ } @finally {
+ [((NSTableView*)cellList) reloadData];
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// saveCacheManagerParam:
+// -------------------------------------------------------------------------------
+- (IBAction) saveCacheManagerParam:(id) sender
+{
+ @try{
+ NSLog(@"Backing up the cache configuration file");
+ //Update the value form view to afs property manager class
+ [self updateCacheParamFromView];
+ [afsProperty saveCacheConfigurationFiles:YES];
+ NSLog(@"Cache configuration file backuped");
+ [self showMessage:kSavedCacheConfiguration];
+ }@catch(NSException *e){
+ [self showMessage:[e reason]];
+ } @finally {
+ [((NSTableView*)cellList) reloadData];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// refreshConfiguration:
+// -------------------------------------------------------------------------------
+- (IBAction) refreshConfiguration:(id) sender
+{
+ NSLog(@"refreshConfiguration");
+ NSString *afsBasePath = PREFERENCE_AFS_SYS_PAT_STATIC;
+
+ @try{
+ // set the afs path
+ [afsProperty setPath:afsBasePath];
+
+ // load configuration
+ [afsProperty loadConfiguration];
+
+ //set the afs version label
+ [afsVersionLabel setStringValue:[afsProperty getAfsVersion]];
+
+ //set the current default cell
+ [afsDefaultCellLabel setStringValue:[afsProperty getDefaultCellName]];
+
+ // Update cache view
+ [self fillCacheParamView];
+
+ //Filter the cellServDb and allocate filtered array
+ [self filterCellServDB:nil];
+
+ }@catch(NSException *e){
+ [self showMessage:[e reason]];
+ } @finally {
+ [((NSTableView*)cellList) reloadData];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// fillCacheParamView:
+// -------------------------------------------------------------------------------
+-(void) fillCacheParamView
+{
+ [dynRoot setState:[afsProperty dynRoot]?NSOnState:NSOffState];
+ [afsDB setState:[afsProperty afsDB]?NSOnState:NSOffState];
+ [statCacheEntry setIntValue:[afsProperty statCacheEntry]];
+ [dCacheDim setIntValue:[afsProperty dCacheDim]];
+ [cacheDimension setIntValue:[afsProperty cacheDimension]];
+ [daemonNumber setIntValue:[afsProperty daemonNumber]];
+ [afsRootMountPoint setStringValue:[afsProperty afsRootMountPoint]];
+ [nVolEntry setIntValue:[afsProperty nVolEntry]];
+
+ //new version property
+ //[verbose setEnabled:[afsProperty useAfsdConfConfigFile]];
+ [verbose setState:[afsProperty verbose]?NSOnState:NSOffState];
+
+}
+
+// -------------------------------------------------------------------------------
+// updateCacheParamFromView:
+// -------------------------------------------------------------------------------
+-(void) updateCacheParamFromView
+{
+ NSString *tmpAfsPath = [afsRootMountPoint stringValue];
+ if(!tmpAfsPath || ([tmpAfsPath length] == 0) || ([tmpAfsPath characterAtIndex:0] != '/'))
+ @throw [NSException exceptionWithName:@"updateCacheParamFromView"
+ reason:kBadAfsRootMountPoint
+ userInfo:nil];
+
+
+ [afsProperty setDynRoot:[dynRoot state]==NSOnState];
+ [afsProperty setAfsDB:[afsDB state]==NSOnState];
+ [afsProperty setStatCacheEntry:[statCacheEntry intValue]];
+ [afsProperty setDCacheDim:[dCacheDim intValue]];
+ [afsProperty setCacheDimension:[cacheDimension intValue]];
+ [afsProperty setDaemonNumber:[daemonNumber intValue]];
+ [afsProperty setAfsRootMountPoint:tmpAfsPath];
+ [afsProperty setNVolEntry:[nVolEntry intValue]];
+ [afsProperty setVerbose:[verbose state]==NSOnState];
+}
+
+
+// -------------------------------------------------------------------------------
+// showCellIP:
+// -------------------------------------------------------------------------------
+- (IBAction) showCellIP:(id) sender
+{
+ int rowSelected = [((NSTableView *) cellList) selectedRow];
+ [self modifyCellByIDX:rowSelected];
+}
+
+// -------------------------------------------------------------------------------
+// modifyCellByIDX:
+// -------------------------------------------------------------------------------
+-(void) modifyCellByIDX:(int) idx
+{
+ [self modifyCell:[self getCellByIDX:idx]];
+}
+
+// -------------------------------------------------------------------------------
+// modifyCellByIDX:
+// -------------------------------------------------------------------------------
+-(void) modifyCell:(DBCellElement*) cellElement
+{
+ [NSBundle loadNibNamed:@"IpPanel" owner:self];
+ [((IpConfiguratorCommander*) ipConfControllerCommander) setWorkCell:cellElement];
+ [NSApp beginSheet: ipConfigurationSheet
+ modalForWindow: [[self mainView] window]
+ modalDelegate: self
+ didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
+ contextInfo: nil];
+}
+
+// -------------------------------------------------------------------------------
+// addMoifyCell:
+// -------------------------------------------------------------------------------
+- (IBAction) addRemoveCell:(id) sender
+{
+ switch([((NSControl*) sender) tag]){
+ case ADD_CELL_CONTROL_TAG:
+ {
+ DBCellElement *newCell = [[DBCellElement alloc] init];
+ if(!newCell) break;
+
+ [newCell setCellName:kNewCellName];
+ [newCell setCellComment:kNewCellComment];
+ //cellArray = ;
+ [[afsProperty getCellList] addObject:newCell];
+ [newCell release];
+
+ //Modify new cell
+ [self modifyCell:newCell];
+ }
+ break;
+
+ case REMOVE_CELL_CONTROL_TAG:
+ {
+ int index = 0;
+ NSIndexSet *selectedIndex = [(NSTableView*)cellList selectedRowIndexes];
+ if( [selectedIndex count] > 0) {
+ index = [selectedIndex firstIndex];
+ do {
+ DBCellElement *cellElement = (DBCellElement*)[filteredCellDB objectAtIndex:index];
+ [[afsProperty getCellList] removeObject:cellElement];
+ } while ((index = [selectedIndex indexGreaterThanIndex: index]) != NSNotFound);
+ }
+ }
+ break;
+ }
+ //Filter the cellServDb and allocate filtered array
+ [self searchCellTextEvent:nil];
+ [(NSTableView*)cellList deselectAll:nil];
+ [(NSTableView*)cellList reloadData];
+}
+
+// -------------------------------------------------------------------------------
+// repairHelperTool:
+// -------------------------------------------------------------------------------
+- (void) repairHelperTool
+{
+ struct stat st;
+ int fdTool;
+ int status = 0;
+ NSLog(@"repairHelperTool");
+ NSString *afshlpPath = [[self bundle] pathForResource:@"afshlp" ofType:nil];
+
+
+
+ // Open tool exclusively, so nobody can change it while we bless it.
+ fdTool = open([afshlpPath UTF8String], O_NONBLOCK | O_RDONLY | O_EXLOCK, 0);
+
+ if(fdTool == -1)
+ {
+ NSLog(@"Exclusive open while repairing tool failed: %d.", errno);
+ exit(-1);
+ }
+
+ if(fstat(fdTool, &st))
+ {
+ NSLog(@"fstat failed.");
+ exit(-1);
+ }
+
+ if(st.st_uid != 0)
+ {
+ status = [[AuthUtil shared] autorize];
+ if(status == noErr){
+ fchown(fdTool, 0, st.st_gid);
+
+ // Disable group and world writability and make setuid root.
+ fchmod(fdTool, (st.st_mode & (~(S_IWGRP | S_IWOTH)))/* | S_ISUID*/);
+ const char *args[] = {"root", [afshlpPath UTF8String],0L};
+ [[AuthUtil shared] execUnixCommand:"/usr/sbin/chown"
+ args:args
+ output:nil];
+ [[AuthUtil shared] deautorize];
+ }
+ } else NSLog(@"st_uid = 0");
+
+
+
+ close(fdTool);
+
+ NSLog(@"Self-repair done.");
+
+}
+
+
+// -------------------------------------------------------------------------------
+// startStopAfs:
+// -------------------------------------------------------------------------------
+- (IBAction) startStopAfs:(id) sender
+{
+ OSStatus status = noErr;
+ NSString *afsdPath = [TaskUtil searchExecutablePath:@"afsd"];
+ //NSString *startStopScript = nil;
+ NSString *rootHelperApp = nil;
+ BOOL currentAfsState = NO;
+
+ @try {
+ if(afsdPath == nil) return;
+ currentAfsState = [afsProperty checkAfsStatus];
+ rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
+
+ //[startStopScript setString: resourcePath];
+ NSLog(@"Launch repair HelperTool");
+ //Check helper app
+ [self repairHelperTool];
+
+ // make the parameter to call the root helper app
+ status = [[AuthUtil shared] autorize];
+ if(status == noErr){
+ if(currentAfsState){
+ //shutdown afs
+ NSLog(@"Shutting down afs");
+ NSMutableString *afsKextPath = [[NSMutableString alloc] initWithCapacity:256];
+ [afsKextPath setString:[afsProperty path]];
+ [afsKextPath appendString:@"/etc/afs.kext"];
+
+ //Make the array for arguments
+ NSLog(@"executeTaskWithAuth");
+ const char *stopAfsArgs[] = {"stop_afs", [afsKextPath UTF8String], [afsdPath UTF8String], 0L};
+ [[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String]
+ args:stopAfsArgs
+ output:nil];
+
+ } else {
+ NSLog(@"Starting up afs");
+ const char *startAfsArgs[] = {[[[self bundle] pathForResource:@"start_afs" ofType:@"sh"] UTF8String], [[afsProperty path] UTF8String], [afsdPath UTF8String], 0L};
+ [[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String]
+ args:startAfsArgs
+ output:nil];
+ }
+ }
+ [self refreshGui:nil];
+ }
+ @catch (NSException * e) {
+ [self showMessage:[e reason]];
+ }
+ @finally {
+ [[AuthUtil shared] deautorize];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// info:
+// -------------------------------------------------------------------------------
+- (void) refreshGui:(NSNotification *)notification{
+ BOOL afsIsUp = [afsProperty checkAfsStatus];
+ [self setAfsStatus];
+ //[self refreshTokens:nil];
+ [tokensButton setEnabled:afsIsUp];
+ [unlogButton setEnabled:afsIsUp];
+}
+
+// -------------------------------------------------------------------------------
+// afsVolumeMountChange: Track the afs volume state change
+// -------------------------------------------------------------------------------
+- (void) afsVolumeMountChange:(NSNotification *)notification{
+ // Cehck if is mounted or unmounted afs
+ if([[[notification userInfo] objectForKey:@"NSDevicePath"] isEqualToString:@"/afs"]){
+ [self setAfsStatus];
+ [self refreshTokens:nil];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// info:
+// -------------------------------------------------------------------------------
+- (IBAction) info:(id) sender
+{
+ //NSLog(kDevelopInfo);
+ //[self showMessage:kDevelopInfo];
+ [((InfoController*) infoController) showHtmlResource:[[self bundle] pathForResource:@"licenza" ofType:@"rtf"]];
+
+ [NSApp beginSheet: infoSheet
+ modalForWindow: [[self mainView] window]
+ modalDelegate: self
+ didEndSelector: @selector(didEndInfoSheet:returnCode:contextInfo:)
+ contextInfo: nil];
+}
+
+// -------------------------------------------------------------------------------
+// tableDoubleAction:
+// -------------------------------------------------------------------------------
+- (IBAction) tableDoubleAction:(id) sender
+{
+ [self showCellIP:nil];
+}
+
+// -------------------------------------------------------------------------------
+// getNewToken:
+// -------------------------------------------------------------------------------
+- (IBAction) getNewToken:(id) sender
+{
+ BOOL useAklog = [useAklogCheck state] == NSOnState;
+ if(useAklog){
+ //[AFSPropertyManager aklog];
+ [afsProperty getTokens:false
+ usr:nil
+ pwd:nil];
+ [self refreshTokens:nil];
+ //Inform afs menuextra to updata afs status
+ if ([self isAFSMenuExtraLoaded]) [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
+
+ } else {
+ [NSBundle loadNibNamed:@"CredentialPanel" owner:self];
+ [NSApp beginSheet: credentialSheet
+ modalForWindow: [[self mainView] window]
+ modalDelegate: self
+ didEndSelector: @selector(didEndCredentialSheet:returnCode:contextInfo:)
+ contextInfo: nil];
+ }
+}
+
+
+// -------------------------------------------------------------------------------
+// getCurrentCellInDB:
+// -------------------------------------------------------------------------------
+- (IBAction) unlog:(id) sender
+{
+ int index = -1;
+ NSIndexSet *selectedIndex = [(NSTableView*)tokensTable selectedRowIndexes];
+ if( [selectedIndex count] > 0) {
+ index = [selectedIndex firstIndex];
+ do {
+ NSString *tokenDesc = [tokenList objectAtIndex:index];
+ NSString *cellToUnlog = [tokenDesc estractTokenByDelimiter:@"afs@"
+ endToken:@" "];
+ [afsProperty unlog:cellToUnlog];
+ } while ((index = [selectedIndex indexGreaterThanIndex: index]) != NSNotFound);
+ } else {
+ [afsProperty unlog:nil];
+ }
+ [self refreshTokens:nil];
+ //Inform afs menuextra to updata afs status
+ if ([self isAFSMenuExtraLoaded]) [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
+
+}
+
+
+// -------------------------------------------------------------------------------
+// aklogSwitchEvent:
+// -------------------------------------------------------------------------------
+- (IBAction) aklogSwitchEvent:(id) sender
+{
+ //afs menu extra is loaded inform it to read preference
+ @try {
+ if(![useAklogCheck state]) {
+ //Remove launchd ctrl file
+ [PListManager installLaunchdFile:NO resourcePath:[[self bundle] resourcePath]];
+
+ //deselect the checkbox
+ [aklogCredentialAtLoginTime setState:NO];
+ }
+
+ [self writePreferenceFile];
+
+ //Enable disable aklog at login time checkbox according the useAklog checkbox
+ [aklogCredentialAtLoginTime setEnabled:[useAklogCheck state]];
+
+ }
+ @catch (NSException * e) {
+ [self showMessage:[e reason]];
+ }
+
+
+}
+
+
+// -------------------------------------------------------------------------------
+// credentialAtLoginTimeEvent:
+// -------------------------------------------------------------------------------
+- (IBAction) credentialAtLoginTimeEvent:(id) sender {
+ @try {
+ [PListManager installLaunchdFile:[aklogCredentialAtLoginTime state]
+ resourcePath:[[self bundle] resourcePath]];
+
+
+
+ }
+ @catch (NSException * e) {
+ if([e userInfo] != nil && [[e userInfo] isKindOfClass:[NSNumber class]]) {
+ if([((NSNumber*)[e userInfo]) intValue] == 1) {
+ // the dir HOME_LAUNCHD_AGENT_FOLDER (PListManager.h) must be created
+ NSBeginAlertSheet([[NSString stringWithString:kDoYouWantCreateTheDirectory] stringByAppendingString:HOME_LAUNCHD_AGENT_FOLDER],
+ @"Create", @"Cancel", nil,
+ [[self mainView] window], self, @selector(credentialAtLoginTimeEventCreationLaunchAgentDir:returnCode:contextInfo:), NULL,
+ nil, @"", nil);
+ }
+ } else {
+ [self showMessage:[e reason]];
+ }
+ }
+ @finally {
+ [aklogCredentialAtLoginTime setState:[PListManager checkAklogAtLoginTimeLaunchdEnable]];
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// afsStartupSwitchEvent:
+// -------------------------------------------------------------------------------
+- (IBAction) afsStartupSwitchEvent:(id) sender {
+ NSString *rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
+ //get the new state
+ NSString *afsdPath = [TaskUtil searchExecutablePath:@"afsd"];
+ NSString *afsStartupScriptPath = [[self bundle] pathForResource:@"start_afs" ofType:@"sh"];
+ startAFSAtLogin = [checkButtonAfsAtBootTime state];
+ const char *startAfsArgs[] = {"load", "-w", [AFS_STARTUP_CONTROL_FILE UTF8String], 0L};
+ const char *stopAfsArgs[] = {"unload", "-w", [AFS_STARTUP_CONTROL_FILE UTF8String], 0L};
+ const char *launchctlExecutable = "/bin/launchctl";
+ /* [PListManager manageAfsStartupLaunchdFile:startAFSAtLogin
+ afsStartupScript:afsStartupScriptPath
+ afsBasePath:[afsProperty path] afsdPath:afsdPath];
+ */
+ const char *startupConfigureOption[] = {"start_afs_at_startup", [afsStartupScriptPath UTF8String], [afsdPath UTF8String], [[afsProperty path] UTF8String], 0L};
+ if([[AuthUtil shared] autorize] == noErr) {
+ if(startAFSAtLogin) {
+ [[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String]
+ args:startupConfigureOption
+ output:nil];
+
+ [[AuthUtil shared] execUnixCommand:launchctlExecutable
+ args:startAfsArgs
+ output:nil];
+ } else {
+ //now disable the launchd configuration
+ [[AuthUtil shared] execUnixCommand:launchctlExecutable
+ args:stopAfsArgs
+ output:nil];
+ }
+ }
+}
+
+// -------------------------------------------------------------------------------
+// credentialAtLoginTimeEventCreationLaunchAgentDir:
+// -------------------------------------------------------------------------------
+- (void) credentialAtLoginTimeEventCreationLaunchAgentDir:(NSWindow*)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo {
+ [alert close];
+ switch (returnCode) {
+ case 1:
+ NSLog(@"Yes");
+ if([[NSFileManager defaultManager] createDirectoryAtPath:[HOME_LAUNCHD_AGENT_FOLDER stringByExpandingTildeInPath]
+ attributes:nil]) {
+
+ //Create the file
+ [PListManager installLaunchdFile:YES
+ resourcePath:[[self bundle] resourcePath]];
+
+ //refresh the check box
+ [aklogCredentialAtLoginTime setState:[PListManager checkAklogAtLoginTimeLaunchdEnable]];
+ [self showMessage:kDirectoryCreated];
+ } else {
+ [self showMessage:kErrorCreatingDirectory];
+ }
+ break;
+ case 0:
+ NSLog(@"No");
+
+ break;
+ }
+}
+
+// -------------------------------------------------------------------------------
+// afsMenuActivationEvent:
+// -------------------------------------------------------------------------------
+- (IBAction) krb5KredentialAtLoginTimeEvent:(id) sender {
+ //
+ NSString *rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
+ const char *args[] = {"enable_krb5_startup", [[installKRB5AuthAtLoginButton stringValue] UTF8String], "", 0L};
+
+ //Check helper app
+ [self repairHelperTool];
+ if([[AuthUtil shared] autorize] == noErr) {
+ [[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String]
+ args:args
+ output:nil];
+
+ //check if all is gone well
+ [installKRB5AuthAtLoginButton setState:[PListManager checkKrb5AtLoginTimeLaunchdEnable]];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// afsMenuActivationEvent:
+// -------------------------------------------------------------------------------
+-(IBAction) afsMenuActivationEvent:(id) sender
+{
+ if([(NSButton*)afsMenucheckBox state] == NSOffState){
+ // must remove the menu
+ [self removeAFSMenuExtra];
+ } else {
+ // must add the menu
+ [self addAFSMenuExtra];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// searchCellTextEvent:
+// Fileter the CellServDB list according to NSSearch content
+// -------------------------------------------------------------------------------
+- (IBAction) searchCellTextEvent:(id) sender
+{
+
+ NSString *searchText = [[textSearchField stringValue] lowercaseString]; //filter string
+ [self filterCellServDB:searchText];
+ [((NSTableView*)cellList) reloadData];
+}
+
+// -------------------------------------------------------------------------------
+// clearCellServDBFiltering:
+// clear the NSSearchField and showw all CellServDB table
+// -------------------------------------------------------------------------------
+- (void) clearCellServDBFiltering {
+ //Clear the text search
+ [textSearchField setStringValue:@""];
+ //load the temp array with all cell servdb
+ [self searchCellTextEvent:nil];
+}
+// --------------------------------------o-----------------------------------------
+// filterCellServDB:
+// make the NSMutableArray with all cellservdb or filtered element
+// -------------------------------------------------------------------------------
+- (void) filterCellServDB:(NSString*)textToFilter {
+ DBCellElement *cellElement; //Filtered element
+ BOOL doFilter = !(textToFilter == nil || ([textToFilter length] == 0));
+
+ // We can do filtering and make the temp array
+ if(filteredCellDB){
+ [filteredCellDB release];
+ }
+ filteredCellDB = [[NSMutableArray alloc] init];
+ NSEnumerator *e = [[afsProperty getCellList] objectEnumerator];
+ while(cellElement = (DBCellElement*)[e nextObject]) {
+ // check if the element can be get
+ if(doFilter) {
+ //Get the CellServDB array enumerator
+ //NSLog(@"String for filtering: %s", [textToFilter UTF8String]);
+ NSRange rsltRng = [[[cellElement getCellName] lowercaseString] rangeOfString:textToFilter];
+ if(rsltRng.location != NSNotFound) {
+ //we can add this cell to filtered
+ //NSLog(@"Element found during filter: %s", [[cellElement getCellName] UTF8String]);
+ [filteredCellDB addObject:[cellElement retain]];
+ }
+ } else {
+ [filteredCellDB addObject:[cellElement retain]];
+
+ }
+ }
+}
+
+// -------------------------------------------------------------------------------
+// getCurrentCellInDB:
+// -------------------------------------------------------------------------------
+- (DBCellElement*) getCurrentCellInDB
+{
+ int rowSelected = [((NSTableView *) cellList) selectedRow];
+ return [self getCellByIDX:rowSelected];
+}
+
+// -------------------------------------------------------------------------------
+// getCurrentCellInDB:
+// -------------------------------------------------------------------------------
+- (DBCellElement*) getCellByIDX:(int) idx
+{
+ //NSMutableArray *cellArray = [afsProperty getCellList];
+ DBCellElement *cellElement = (DBCellElement*)[filteredCellDB objectAtIndex:idx];
+ return cellElement;
+}
+
+// -------------------------------------------------------------------------------
+// showMessage:
+// -------------------------------------------------------------------------------
+-(void) showMessage:(NSString*) message{
+ NSAlert *alert = [[NSAlert alloc] init];
+
+ [alert setMessageText:message];
+ [alert beginSheetModalForWindow:[[self mainView] window]
+ modalDelegate:nil
+ didEndSelector:nil
+ contextInfo:nil];
+ [alert release];
+}
+
+// -------------------------------------------------------------------------------
+// manageButtonState:
+// -------------------------------------------------------------------------------
+-(void) manageButtonState:(int) rowSelected {
+ [((NSControl*) cellIpButton) setEnabled:rowSelected >= 0];
+ [((NSControl*) removeCellButton) setEnabled:rowSelected >= 0];
+}
+
+// -------------------------------------------------------------------------------
+// setAfsStatus:
+// -------------------------------------------------------------------------------
+-(void) setAfsStatus
+{
+ BOOL afsIsUp = [afsProperty checkAfsStatus];
+ NSLog(@"Afs is: %s", afsIsUp?"Up":"Down");
+ [((NSButton *)startStopButton) setTitle: (afsIsUp?kAfsButtonShutdown:kAfsButtonStartup)];
+
+ NSMutableAttributedString *colorTitle =[[NSMutableAttributedString alloc] initWithAttributedString:[((NSButton *)startStopButton) attributedTitle]];
+ NSRange titleRange = NSMakeRange(0, [colorTitle length]);
+
+ [colorTitle addAttribute:NSForegroundColorAttributeName
+ value:(afsIsUp?[NSColor redColor]:[NSColor blackColor])
+ range:titleRange];
+
+ [((NSButton *)startStopButton) setAttributedTitle:colorTitle];
+
+ if(afsIsUp) {
+ [self startTimer];
+ } else {
+ [self stopTimer];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// refreshToken:
+// -------------------------------------------------------------------------------
+- (void) refreshTokens:(NSTimer*)theTimer;
+{
+ if(![tokensLock tryLock]) return;
+ if(tokenList){
+ [tokenList release];
+ }
+
+ tokenList = [afsProperty getTokenList];
+ [((NSTableView*)tokensTable) reloadData];
+ [tokensLock unlock];
+}
+
+
+// -------------------------------------------------------------------------------
+// isExtraMenuLoaded:
+// -------------------------------------------------------------------------------
+- (BOOL) isAFSMenuExtraLoaded
+{
+ void *menu;
+ if ((CoreMenuExtraGetMenuExtra((CFStringRef)kAFSMenuExtraID, &menu) == 0) && menu) {
+ return YES;
+ }
+ else {
+ return NO;
+ }
+}
+
+// -------------------------------------------------------------------------------
+// isExtraMenuLoaded:
+// -------------------------------------------------------------------------------
+- (void)addAFSMenuExtra {
+
+ void *menuCracker = 0L;
+
+ //Check for MenuCracker
+ if ((CoreMenuExtraGetMenuExtra((CFStringRef)kMenuCrakerMenuExtraID, &menuCracker) != 0) || !menuCracker) {
+ NSLog(@"MenuCracker not present");
+
+ // load the MenuCracker.menu menu extra
+ CoreMenuExtraAddMenuExtra((CFURLRef)kMenuCrakerMenuExtra, 0, 0, 0, 0, 0);
+ } else NSLog(@"MenuCracker alredy loaded");
+
+
+ //Load the AFSCommander menu extra
+ CoreMenuExtraAddMenuExtra((CFURLRef)kAFSMenuExtra, 0, 0, 0, 0, 0);
+}
+
+// -------------------------------------------------------------------------------
+// removeExtra:
+// -------------------------------------------------------------------------------
+- (IBAction) addLink:(id) sender {
+ [NSBundle loadNibNamed:@"SymLinkEdit" owner:self];
+
+ [NSApp beginSheet: lyncCreationSheet
+ modalForWindow: [[self mainView] window]
+ modalDelegate: self
+ didEndSelector: @selector(didEndSymlinkSheet:returnCode:contextInfo:)
+ contextInfo: nil];
+
+}
+
+// -------------------------------------------------------------------------------
+// removeExtra:
+// -------------------------------------------------------------------------------
+- (IBAction) removeLink:(id) sender {
+
+}
+
+// -------------------------------------------------------------------------------
+// removeExtra:
+// -------------------------------------------------------------------------------
+- (IBAction) enableLink:(id) sender {
+
+}
+
+
+// -------------------------------------------------------------------------------
+// removeExtra:
+// -------------------------------------------------------------------------------
+- (void)removeAFSMenuExtra{
+ void *menu;
+ if ((CoreMenuExtraGetMenuExtra((CFStringRef)kAFSMenuExtraID, &menu) == 0) && menu) {
+ CoreMenuExtraRemoveMenuExtra(menu, 0);
+ }
+}
+
+
+// -------------------------------------------------------------------------------
+// mextraChangeActivation:
+// -------------------------------------------------------------------------------
+- (void)mextraChangeActivation:(NSNotification *)notification
+{
+ // set the afsmenu check state
+ [(NSButton*)afsMenucheckBox setState: [self isAFSMenuExtraLoaded]?NSOnState:NSOffState];
+}
+@end
+
+@implementation AFSCommanderPref (NSTableDataSource)
+
+
+// -------------------------------------------------------------------------------
+// tableView:
+// Manage the checkbox of CellServDB Table
+
+// -------------------------------------------------------------------------------
+- (void)tableView:(NSTableView *)table
+ setObjectValue:(id)data
+ forTableColumn:(NSTableColumn *)col
+ row:(int)row
+{
+ NSString *identifier = (NSString*)[col identifier];
+ switch([table tag]){
+ case TABLE_TOKENS_LIST:
+ break;
+
+ case TABLE_CELL_LIST:
+ // we are editing checkbox for cellservdb table
+ if([identifier intValue] == CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN) {
+ // set the user default cell
+ DBCellElement *cellElement = (DBCellElement*)[filteredCellDB objectAtIndex:row];
+ [afsProperty setDefaultCellByName:[cellElement getCellName]];
+ //[afsDefaultCellLabel setStringValue:[afsProperty getDefaultCellName]];
+ [((NSTableView*)cellList) reloadData];
+ } else if([identifier intValue] == CELLSRVDB_TABLE_DFLT_CHECK_COLUMN) {
+ // set the cell for wich the user want to get token
+ DBCellElement *cellElement = (DBCellElement*)[filteredCellDB objectAtIndex:row];
+ [cellElement setUserDefaultForToken:![cellElement userDefaultForToken]];
+ }
+ break;
+ }
+
+}
+
+
+// -------------------------------------------------------------------------------
+// tableView:
+// refresh delegate method for two AFSCommander table
+// -------------------------------------------------------------------------------
+- (id) tableView:(NSTableView *) aTableView
+ objectValueForTableColumn:(NSTableColumn *) aTableColumn
+ row:(int) rowIndex
+{
+
+ id result = nil;
+ NSString *identifier = (NSString*)[aTableColumn identifier];
+ switch([aTableView tag]){
+ case TABLE_TOKENS_LIST:
+ //We are refreshing tokens table
+ result = [self getTableTokensListValue:[identifier intValue] row:rowIndex];
+ break;
+
+ case TABLE_CELL_LIST:
+ //We are refreshing cell db table
+ result = [self getTableCelListValue:[identifier intValue] row:rowIndex];
+ break;
+
+ }
+ return result;
+}
+
+
+// -------------------------------------------------------------------------------
+// getTableCelListValue:
+// -------------------------------------------------------------------------------
+- (id)getTableTokensListValue:(int) colId row:(int)row
+{
+ id result = nil;
+ if(!tokenList) return nil;
+ switch(colId){
+ case 0:
+ result = (NSString*)[tokenList objectAtIndex:row];
+ break;
+ }
+ return result;
+}
+
+
+// -------------------------------------------------------------------------------
+// getTableCelListValue:
+// -------------------------------------------------------------------------------
+- (id)getTableCelListValue:(int) colId row:(int)row
+{
+ id result = nil;
+ //NSMutableArray *cellArray = [afsProperty getCellList];
+ DBCellElement *cellElement = (DBCellElement*)[filteredCellDB objectAtIndex:row];
+ switch(colId){
+ case CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN:
+ result = [NSNumber numberWithInt:[cellElement userDefaultForCell]];
+ break;
+
+ case CELLSRVDB_TABLE_DFLT_CHECK_COLUMN:
+ result = [NSNumber numberWithInt:[cellElement userDefaultForToken]];
+ break;
+ case CELLSRVDB_TABLE_NAME_COLUMN:
+ result = [cellElement getCellName];
+ break;
+
+ case CELLSRVDB_TABLE_DESCRIPTION_COLUMN:
+ result = [cellElement getCellComment];
+ break;
+ }
+ return result;
+}
+
+// -------------------------------------------------------------------------------
+// numberOfRowsInTableView:
+// -------------------------------------------------------------------------------
+- (int)numberOfRowsInTableView:(NSTableView *)aTableView
+{
+ int rowCount = 0;
+ //NSMutableArray *cellArray = nil;
+ switch([aTableView tag]){
+ case TABLE_TOKENS_LIST:
+ if(tokenList) rowCount = [tokenList count];
+ break;
+
+ case TABLE_CELL_LIST:
+ //cellArray = [afsProperty getCellList];
+ if(filteredCellDB) rowCount = [filteredCellDB count];
+ break;
+
+ }
+ return rowCount;
+}
+
+
+@end
+
+
+@implementation AFSCommanderPref (TableDelegate)
+// -------------------------------------------------------------------------------
+// selectionShouldChangeInTableView:
+// -------------------------------------------------------------------------------
+- (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTable
+{
+ [self manageButtonState:[aTable selectedRow]];
+ return YES;
+}
+
+// -------------------------------------------------------------------------------
+// tableView:
+// -------------------------------------------------------------------------------
+- (BOOL)tableView:(NSTableView *)aTable shouldSelectRow:(int)aRow
+{
+ [self manageButtonState:aRow];
+ return YES;
+}
+
+@end
+
+
+@implementation AFSCommanderPref (ModalDelegate)
+// -------------------------------------------------------------------------------
+// didEndSheet:
+// -------------------------------------------------------------------------------
+- (void)didEndSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
+{
+ NSLog(@"didEndSheet");
+ [sheet orderOut:self];
+ //Filter the cellServDb and allocate filtered array
+ [self searchCellTextEvent:nil];
+ [((NSTableView*)cellList) reloadData];
+ NSLog(@"Has saved %s:", ([((IpConfiguratorCommander*) ipConfControllerCommander) saved])?"YES":"NO");
+}
+
+// -------------------------------------------------------------------------------
+// Klog credential request
+// -------------------------------------------------------------------------------
+- (void)didEndCredentialSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
+{
+ NSLog(@"didEndCredentialSheet");
+ if([((TokenCredentialController*)credentialCommander) takenToken] == YES){
+ /*[AFSPropertyManager klog:[((TokenCredentialController*)credentialCommander) uName]
+ uPwd:[((TokenCredentialController*)credentialCommander) uPwd] ];*/
+ [afsProperty getTokens:true
+ usr:[((TokenCredentialController*)credentialCommander) uName]
+ pwd:[((TokenCredentialController*)credentialCommander) uPwd]];
+ }
+ [sheet orderOut:self];
+ [self refreshTokens:nil];
+ //Inform afs menuextra to updata afs status
+ if ([self isAFSMenuExtraLoaded]) [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
+
+}
+
+// -------------------------------------------------------------------------------
+// Klog credential request
+// -------------------------------------------------------------------------------
+- (void)didEndInfoSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
+{
+ NSLog(@"didEndInfoSheet");
+ [sheet orderOut:self];
+}
+
+// -------------------------------------------------------------------------------
+// symlink edite
+// -------------------------------------------------------------------------------
+- (void)didEndSymlinkSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
+{
+ NSLog(@"didEndSymlinkSheet");
+ [lyncCreationSheet orderOut:self];
+}
+@end
+
+// -------------------------------------------------------------------------------
+// AFSCommanderPref(NSTabViewDelegator) - delegate for nstabview in
+// main preference view
+// -------------------------------------------------------------------------------
+@implementation AFSCommanderPref(NSTabViewDelegator)
+- (void)tabView:(NSTabView *)tabView willSelectTabViewItem: (NSTabViewItem *)tabViewItem
+{
+ //check to see if the cache param tab is the tab that will be selected
+ if([((NSString*)[tabViewItem identifier]) intValue] == TAB_GROUP)
+ {
+ //get
+ NSLog(@"cache param tab");
+ // [groupsBox setHidden:YES];
+ NSLog([groupsBox title]);
+ [ViewUtility enbleDisableControlView:[groupsBox contentView]
+ controlState:NO];
+ }
+}
+@end
\ No newline at end of file
--- /dev/null
+//
+// Prefix header for all source files of the 'AFSCommander' target in the 'AFSCommander' project.
+//
+
+#ifdef __OBJC__
+ #import <Foundation/Foundation.h>
+ #import <AppKit/AppKit.h>
+
+#endif
--- /dev/null
+//
+// AFSMenuCredentialContoller.h
+// AFSCommander
+//
+// Created by Claudio on 14/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CredentialWindowController.h"
+#import "AFSPropertyManager.h"
+
+@interface AFSMenuCredentialContoller : NSObject {
+ NSRect viewRect;
+ id credentialView;
+ id credentialController;
+ NSPanel *credentialWindow;
+ id credWinController;
+ AFSPropertyManager *afsPropMngr;
+}
+-(id) initWhitRec:(NSRect)rect afsPropManager:(AFSPropertyManager*)afsPropManager;
+-(void) showWindow;
+-(void) closeWindow;
+@end
--- /dev/null
+//
+// AFSMenuCredentialContoller.m
+// AFSCommander
+//
+// Created by Claudio on 14/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "AFSMenuCredentialContoller.h"
+#import "CredentialWindowController.h"
+#import "global.h"
+#import "AFSPropertyManager.h"
+
+@implementation AFSMenuCredentialContoller
+
+-(id) initWhitRec:(NSRect)rect afsPropManager:(AFSPropertyManager*)afsPropManager;
+{
+ viewRect = rect;
+ credentialWindow = nil;
+ afsPropMngr = [afsPropManager retain];
+ NSLog(@"init AFSMenuCredentialContoller");
+ return [self init];
+}
+
+- (void)dealloc {
+ NSLog(@"dealloc AFSMenuCredentialContoller");
+ if(credentialWindow) [credentialWindow release];
+ [super dealloc];
+
+} // dealloc
+
+-(void) showWindow
+{
+ // calculate the point where show the window
+ NSPoint topLeft = {viewRect.origin.x-160,[[NSScreen mainScreen] frame].size.height-kMenuBarHeight};
+ NSLog(@"viewRect.origin.x=%d, topLeft.x=%d", viewRect.origin.x, topLeft.x);
+ // load the bundle for
+ [NSBundle loadNibNamed:@"CredentialWindow.nib" owner:self];
+ NSLog(@"prepare to open window CredentialWindow");
+
+ credentialWindow = [[NSWindow alloc] initWithContentRect:[((NSView*) credentialView) frame]
+ styleMask:NSTitledWindowMask /*| NSUtilityWindowMask*/
+ backing:NSBackingStoreBuffered
+ defer:YES screen:[NSScreen mainScreen]];
+ NSLog(@"Finestra");
+ [credentialWindow setTitle:@"Klog"];
+ [credentialWindow setFrameTopLeftPoint:topLeft];
+ [credentialWindow setContentView:credentialView];
+ [credentialWindow makeKeyAndOrderFront:self];
+ NSLog(@"creata");
+
+}
+
+-(void) closeWindow
+{
+ NSLog(@"closeWindow");
+ if([(CredentialWindowController*)credWinController takenToken] && afsPropMngr) {
+ [afsPropMngr getTokens:true
+ usr:[(CredentialWindowController*)credWinController uName]
+ pwd:[(CredentialWindowController*)credWinController uPwd]];
+ [afsPropMngr release];
+ afsPropMngr = nil;
+ }
+ [credentialWindow close];
+ credentialWindow = nil;
+}
+@end
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>it.infn.lnf.network.AFSMenuExtra</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleSignature</key>
+ <string>INFN</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>NSPrincipalClass</key>
+ <string>AFSMenuExtra</string>
+</dict>
+</plist>
--- /dev/null
+//
+// AFSMenuExtra.h
+// AFSCommander
+//
+// Created by Claudio on 10/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+
+#import <Cocoa/Cocoa.h>
+#import "SystemUIPlugin.h"
+#import "global.h"
+#import "AFSMenuCredentialContoller.h"
+@class AFSMenuExtraView;
+@interface AFSMenuExtra : NSMenuExtra {
+ @public
+ BOOL afsState; //0-off 1-on
+ BOOL gotToken; //0-no 1-one o more token
+
+ @protected
+ NSString *afsSysPath;
+ NSNumber *useAklogPrefValue;
+ //menu extra
+ NSMenu *theMenu;
+
+ //Menu extra view
+ AFSMenuExtraView *theView;
+ // menu reference
+ NSMenuItem *startStopMenu;
+ NSMenuItem *loginMenu;
+ NSMenuItem *unlogMenu;
+
+ //Icon for state visualization
+ NSImage *hasTokenImage;
+ NSImage *noTokenImage;
+
+ //credential windows mainWindow
+ AFSMenuCredentialContoller *credentialMenuController;
+
+ //NSTimer for tokens refresh
+ NSTimer *timerForCheckTokensList;
+ NSLock *tokensLock;
+}
+- (void)startTimer;
+- (void)stopTimer;
+- (BOOL)useAklogPrefValue;
+- (void)readPreferenceFile:(NSNotification *)notification;
+- (void)getToken:(id)sender;
+- (void)releaseToken:(id)sender;
+- (void)updateAfsStatus:(NSTimer*)timer;
+- (void)klogUserEven:(NSNotification *)notification;
+- (NSImage*)getImageFromBundle:(NSString*)fileName fileExt:(NSString*)ext;
+- (NSImage*)imageToRender;
+- (void)updateMenu;
+- (void)repairHelperTool;
+- (void) afsVolumeMountChange:(NSNotification *)notification;
+@end
--- /dev/null
+//
+// AFSMenuExtra.m
+// AFSCommander
+//
+// Created by Claudio on 10/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "AFSMenuExtra.h"
+#import "AFSMenuExtraView.h"
+#import "AFSPropertyManager.h"
+#import "TaskUtil.h"
+#import "TokenCredentialController.h"
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/fcntl.h>
+#include <sys/errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+@implementation AFSMenuExtra
+// -------------------------------------------------------------------------------
+// -(id) initWithBundle
+// -------------------------------------------------------------------------------
+- (id) initWithBundle:(NSBundle *)bundle
+{
+ self = [super initWithBundle:bundle];
+ if( self == nil )
+ return nil;
+
+ // allocate the lock
+ tokensLock = [[NSLock alloc] init];
+ // inizialize the afspath
+ afsSysPath = nil;
+ credentialMenuController = nil;
+
+ theView = [[AFSMenuExtraView alloc] initWithFrame:[[self view] frame]
+ menuExtra:self];
+ [self setView:theView];
+
+
+ // Get the imge for menu
+ //Load image for menu rappresentation
+ hasTokenImage = [self getImageFromBundle:@"hasToken"
+ fileExt:@"png"];
+
+ noTokenImage = [self getImageFromBundle:@"noToken"
+ fileExt:@"png"];
+
+ theMenu = [[NSMenu alloc] initWithTitle: @""];
+ [theMenu setAutoenablesItems: NO];
+ startStopMenu = [theMenu addItemWithTitle: kAfsOff action: @selector(startStopAfs:) keyEquivalent: @""];
+ [startStopMenu setTarget:self];
+
+ loginMenu = [theMenu addItemWithTitle: kMenuLogin action: @selector(getToken:) keyEquivalent: @""];
+ [loginMenu setTarget:self];
+
+ unlogMenu = [theMenu addItemWithTitle: kMenuUnlog action: @selector(releaseToken:) keyEquivalent: @""];
+ [unlogMenu setTarget:self];
+
+ // Register for preference user change
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(readPreferenceFile:)
+ name:kAFSMenuExtraID object:kPrefChangeNotification];
+
+ // Register for afs state change
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(afsVolumeMountChange:)
+ name:kAFSMenuExtraID object:kMExtraAFSStateChange];
+
+
+ //Register for mount/unmount afs volume
+ [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
+ selector:@selector(afsVolumeMountChange:)
+ name:NSWorkspaceDidMountNotification object:nil];
+
+ [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
+ selector:@selector(afsVolumeMountChange:)
+ name:NSWorkspaceDidUnmountNotification object:nil];
+ //Start to read the afs path
+ [self readPreferenceFile:nil];
+ [self startTimer];
+ return self;
+}
+
+// -------------------------------------------------------------------------------
+// -(void) willUnload
+// -------------------------------------------------------------------------------
+- (void) willUnload {
+ //release the lock
+ [self stopTimer];
+
+ if(hasTokenImage) [hasTokenImage release];
+ if(noTokenImage) [noTokenImage release];
+
+ // Unregister for preference change
+ [[NSDistributedNotificationCenter defaultCenter] removeObserver:self name:kAFSMenuExtraID object:kPrefChangeNotification];
+ [[NSDistributedNotificationCenter defaultCenter] removeObserver:self name:kAFSMenuExtraID object:kMExtraAFSStateChange];
+ [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self name:NSWorkspaceDidMountNotification object:nil];
+ [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self name:NSWorkspaceDidUnmountNotification object:nil];
+
+
+ [tokensLock release];
+}
+
+// -------------------------------------------------------------------------------
+// startTimer:
+// -------------------------------------------------------------------------------
+- (void)startTimer{
+ //start the time for check tokens validity
+ if(timerForCheckTokensList) return;
+ timerForCheckTokensList = [NSTimer scheduledTimerWithTimeInterval:TOKENS_REFRESH_TIME_IN_SEC
+ target:self
+ selector:@selector(updateAfsStatus:)
+ userInfo:nil
+ repeats:YES];
+ [timerForCheckTokensList fire];
+}
+
+// -------------------------------------------------------------------------------
+// stopTimer:
+// -------------------------------------------------------------------------------
+- (void)stopTimer{
+ if(!timerForCheckTokensList) return;
+ [timerForCheckTokensList invalidate];
+ timerForCheckTokensList = nil;
+}
+// -------------------------------------------------------------------------------
+// -(void) dealloc
+// -------------------------------------------------------------------------------
+- (void) dealloc
+{
+ [theMenu release];
+ [theView release];
+ if(afsSysPath) [afsSysPath release];
+ // send notify that menuextra has closed
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:afsCommanderID object:kPrefChangeNotification];
+ [super dealloc];
+}
+
+// -------------------------------------------------------------------------------
+// -(NSMenu*) menu
+// -------------------------------------------------------------------------------
+- (NSMenu *) menu
+{
+ return theMenu;
+}
+
+
+// -------------------------------------------------------------------------------
+// -(void) readPreferenceFile
+// -------------------------------------------------------------------------------
+- (void) readPreferenceFile:(NSNotification *)notification
+{
+ NSLog(@"Reading preference file");
+ //CFPreferencesSynchronize((CFStringRef)afsCommanderID, kCFPreferencesAnyUser, kCFPreferencesAnyHost);
+ //CFPreferencesSynchronize((CFStringRef)afsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
+
+ if(afsSysPath) {
+ [afsSysPath release];
+ afsSysPath = nil;
+ }
+
+ afsSysPath = PREFERENCE_AFS_SYS_PAT_STATIC;/*(NSString*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_AFS_SYS_PAT,
+ (CFStringRef)afsCommanderID,
+ kCFPreferencesAnyUser,
+ kCFPreferencesAnyHost);*/
+ //NSLog(@"Path readed %s", (afsSysPath==nil?[afsSysPath UTF8String]:@" no path found "));
+
+ // read the preference for aklog use
+ useAklogPrefValue = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_USE_AKLOG,
+ (CFStringRef)afsCommanderID,
+ kCFPreferencesCurrentUser,
+ kCFPreferencesAnyHost);
+ //set the menu name
+ //NSLog(@"Preference readed for useAklogPrefValue %d", [useAklogPrefValue intValue]);
+
+ [self updateAfsStatus:nil];
+}
+
+// -------------------------------------------------------------------------------
+// -(void) readPreferenceFile
+// -------------------------------------------------------------------------------
+- (void)startStopAfs:(id)sender
+{
+ NSLog(@"startStopAfs: %s",[afsSysPath UTF8String]);
+ if(!afsSysPath) return;
+
+ OSStatus status = noErr;
+ NSString *afsdPath = [TaskUtil searchExecutablePath:@"afsd"];
+ NSString *rootHelperApp = nil;
+ BOOL currentAfsState = NO;
+
+ @try {
+ if(afsdPath == nil) return;
+ AFSPropertyManager *afsMngr = [[AFSPropertyManager alloc] initWithAfsPath:afsSysPath];
+ currentAfsState = [afsMngr checkAfsStatus];
+ [afsMngr release];
+
+ rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
+
+ //[startStopScript setString: resourcePath];
+ //NSLog(@"LAunch repair HelperTool");
+ //Check helper app
+ [self repairHelperTool];
+
+ // make the parameter to call the root helper app
+ //NSLog(@"Path installazione afs: %s",[afsSysPath UTF8String]);
+ //NSLog(@"Path installazione afsd: %s", [afsdPath UTF8String]);
+ status = [[AuthUtil shared] autorize];
+ if(status == noErr){
+ if(currentAfsState){
+ //shutdown afs
+ //NSLog(@"Shutting down afs");
+ NSMutableString *afsKextPath = [[NSMutableString alloc] initWithCapacity:256];
+ [afsKextPath setString:afsSysPath];
+ [afsKextPath appendString:@"/etc/afs.kext"];
+
+ //NSLog(@"executeTaskWithAuth");
+ const char *stopAfsArgs[] = {"stop_afs", [afsKextPath UTF8String], [afsdPath UTF8String], 0L};
+ [[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String]
+ args:stopAfsArgs
+ output:nil];
+ } else {
+ //NSLog(@"Starting up afs");
+ const char *startAfsArgs[] = {[[[self bundle] pathForResource:@"start_afs" ofType:@"sh"] UTF8String], [afsSysPath UTF8String], [afsdPath UTF8String], 0L};
+ [[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String]
+ args:startAfsArgs
+ output:nil];
+ }
+ }
+ }
+ @catch (NSException * e) {
+ NSLog([e reason]);
+ }
+ @finally {
+ [[AuthUtil shared] deautorize];
+ [self updateAfsStatus:nil];
+ //Send notification to preferencepane
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:afsCommanderID object:kMenuExtraEventOccured];
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// -(void) getToken
+// -------------------------------------------------------------------------------
+- (void)getToken:(id)sender
+{
+
+ NSRect globalRect;
+ globalRect.origin = [[[self view] window] convertBaseToScreen:[[self view] frame].origin];
+ globalRect.size = [[self view] frame].size;
+ AFSPropertyManager *afsPropMngr = [[AFSPropertyManager alloc] initWithAfsPath:afsSysPath ];
+ [afsPropMngr loadConfiguration];
+
+
+ if([useAklogPrefValue intValue]==NSOnState ) {
+ NSLog(@"Use Aklog");
+ [afsPropMngr getTokens:false
+ usr:nil
+ pwd:nil];
+ [self klogUserEven:nil];
+ } else {
+ NSLog(@"Use Klog");
+ // register for user event
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(klogUserEven:)
+ name:kAFSMenuExtraID
+ object:kLogWindowClosed];
+
+ credentialMenuController = [[AFSMenuCredentialContoller alloc] initWhitRec:globalRect
+ afsPropManager:afsPropMngr];
+ [credentialMenuController showWindow];
+ }
+
+ //Dispose afs manager
+ [afsPropMngr release];
+}
+
+// -------------------------------------------------------------------------------
+// -(void) releaseToken
+// -------------------------------------------------------------------------------
+- (void)releaseToken:(id)sender
+{
+ AFSPropertyManager *afsMngr = [[AFSPropertyManager alloc] initWithAfsPath:afsSysPath];
+ [afsMngr unlog:nil];
+ [afsMngr release];
+ [self updateAfsStatus:nil];
+}
+
+
+// -------------------------------------------------------------------------------
+// -(void) afsVolumeMountChange - Track for mount unmount afs volume
+// -------------------------------------------------------------------------------
+- (void) afsVolumeMountChange:(NSNotification *)notification{
+ [self updateAfsStatus:nil];
+}
+
+// -------------------------------------------------------------------------------
+// -(void) updateAfsStatus
+// -------------------------------------------------------------------------------
+- (void)updateAfsStatus:(NSTimer*)timer
+{
+ //Try to locking
+ if(![tokensLock tryLock]) return;
+
+ // check the afs state in esclusive mode
+ AFSPropertyManager *afsMngr = [[AFSPropertyManager alloc] initWithAfsPath:afsSysPath];
+ afsState = [afsMngr checkAfsStatus];
+
+ NSArray *tokens = [afsMngr getTokenList];
+ [afsMngr release];
+ gotToken = [tokens count] > 0;
+ [tokens release];
+ // update the menu item title
+ [startStopMenu setTitle:afsState?kAfsButtonShutdown:kAfsButtonStartup];
+
+ [self updateMenu];
+
+ [theView setNeedsDisplay:YES];
+
+ //unlock
+ [tokensLock unlock];
+}
+
+// -------------------------------------------------------------------------------
+// -(void) klogUserEven
+// -------------------------------------------------------------------------------
+-(void) klogUserEven:(NSNotification *)notification
+{
+ if(credentialMenuController) {
+ [[NSDistributedNotificationCenter defaultCenter] removeObserver:self name:kAFSMenuExtraID object:kLogWindowClosed];
+ [credentialMenuController closeWindow];
+ [credentialMenuController release];
+ credentialMenuController = nil;
+ }
+ //Send notification to PreferencePane
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:afsCommanderID object:kMenuExtraEventOccured];
+
+ [self updateAfsStatus:nil];
+}
+
+// -------------------------------------------------------------------------------
+// -(void) getImageFromBundle
+// -------------------------------------------------------------------------------
+- (NSImage*)getImageFromBundle:(NSString*)fileName fileExt:(NSString*)ext
+{
+ return [[NSImage alloc]initWithContentsOfFile:[[self bundle] pathForResource:fileName
+ ofType:ext]];
+}
+
+// -------------------------------------------------------------------------------
+// -(void) imageToRender
+// -------------------------------------------------------------------------------
+- (NSImage*)imageToRender
+{
+ if(gotToken){
+ return hasTokenImage;
+ } else {
+ return noTokenImage;
+ }
+}
+
+
+// -------------------------------------------------------------------------------
+// -(void) updateMenu
+// -------------------------------------------------------------------------------
+- (void)updateMenu{
+ [loginMenu setEnabled:afsState];
+ [unlogMenu setEnabled:afsState];
+}
+
+
+// -------------------------------------------------------------------------------
+// -(void) useAklogPrefValue
+// -------------------------------------------------------------------------------
+- (BOOL)useAklogPrefValue
+{
+ if(useAklogPrefValue) return [useAklogPrefValue intValue] == NSOnState;
+ else return NSOffState;
+}
+
+// -------------------------------------------------------------------------------
+// repairHelperTool:
+// -------------------------------------------------------------------------------
+- (void) repairHelperTool
+{
+ struct stat st;
+ int fdTool;
+ int status = 0;
+ NSLog(@"repairHelperTool");
+ NSString *afshlpPath = [[self bundle] pathForResource:@"afshlp" ofType:nil];
+
+
+
+ // Open tool exclusively, so nobody can change it while we bless it.
+ fdTool = open([afshlpPath UTF8String], O_NONBLOCK | O_RDONLY | O_EXLOCK, 0);
+
+ if(fdTool == -1)
+ {
+ NSLog(@"Exclusive open while repairing tool failed: %d.", errno);
+ exit(-1);
+ }
+
+ if(fstat(fdTool, &st))
+ {
+ NSLog(@"fstat failed.");
+ exit(-1);
+ }
+
+ if(st.st_uid != 0)
+ {
+ status = [[AuthUtil shared] autorize];
+ if(status == noErr){
+ fchown(fdTool, 0, st.st_gid);
+
+ // Disable group and world writability and make setuid root.
+ fchmod(fdTool, (st.st_mode & (~(S_IWGRP | S_IWOTH)))/* | S_ISUID*/);
+ const char *args[] = {"root", [afshlpPath UTF8String],0L};
+ [[AuthUtil shared] execUnixCommand:"/usr/sbin/chown"
+ args:args
+ output:nil];
+ [[AuthUtil shared] deautorize];
+ }
+ } else NSLog(@"st_uid = 0");
+
+
+
+ close(fdTool);
+
+ NSLog(@"Self-repair done.");
+
+}@end
--- /dev/null
+//
+// AFSMenuExtraView.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 11/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "SystemUIPlugin.h"
+#import "AFSMenuExtra.h"
+
+@interface AFSMenuExtraView : NSMenuExtraView {
+ AFSMenuExtra *theMenuExtra;
+
+}
+- (NSAttributedString*) makeKerberosIndicator:(int*)fontHeight;
+@end
--- /dev/null
+//
+// AFSMenuExtraView.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 11/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "AFSMenuExtraView.h"
+#import "AFSPropertyManager.h"
+@implementation AFSMenuExtraView
+
+- initWithFrame:(NSRect)myRect menuExtra:(AFSMenuExtra*)myExtra {
+
+ // Have super init
+ self = [super initWithFrame:myRect];
+ if(!self) {
+ return nil;
+ }
+
+ // Store our extra
+ theMenuExtra = myExtra;
+
+ // Send it on back
+ return self;
+
+} // initWithFrame
+
+- (void)dealloc {
+
+ [super dealloc];
+
+} // dealloc
+
+- (void)drawRect:(NSRect)rect
+{
+ NSImage *image = nil;
+ int fontHeight = 0;
+ NSAttributedString *kerberosStringIndicator = nil;
+
+ image = [theMenuExtra imageToRender];
+ if (image) {
+ // Live updating even when menu is down handled by making the extra
+ // draw the background if needed.
+ if ([theMenuExtra isMenuDown]) {
+ [theMenuExtra drawMenuBackground:YES];
+ }
+ [image compositeToPoint:NSMakePoint(0, 0) operation:NSCompositeSourceOver];
+ }
+
+ //Draw, if necessary, the kerberos indicator for aklog usage for get token
+ if([theMenuExtra useAklogPrefValue] == NSOnState) {
+ kerberosStringIndicator = [[self makeKerberosIndicator:&fontHeight] autorelease];
+ if(kerberosStringIndicator) [kerberosStringIndicator drawAtPoint:NSMakePoint(0, kMenuBarHeight-fontHeight)];
+ }
+}
+
+/*!
+ @method makeKerberosIndicator
+ @abstract Make the kerberos indicator
+ @discussion Make a letter to render in menu view to inform the user if is enable aklog use
+*/
+- (NSAttributedString*) makeKerberosIndicator:(int*)fontHeight {
+ NSFont *font = [NSFont fontWithName:@"Palatino-Roman" size:9.0];
+ NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:font
+ forKey:NSFontAttributeName];
+ NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"K"
+ attributes:attrsDictionary];
+ *fontHeight = [attrString size].height;
+ return attrString;
+}
+@end
--- /dev/null
+//
+// AFSPropertyManager.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 21/05/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "DBCellElement.h"
+#import "FileUtil.h"
+
+/*!
+ @class AFSPropertyManager
+ @abstract AFS Manage Class
+ @discussion This class manage the openafs param for celldbserv, cache param, group creation, get and release token
+*/
+
+@interface AFSPropertyManager : NSObject {
+ NSString *installationPath;
+ NSString *cellName;
+ NSMutableArray *cellList;
+ NSArray *userDefaultCellArray;
+ NSString *afsRootMountPoint;
+ int statCacheEntry;
+ int dCacheDim;
+ int cacheDimension;
+ int daemonNumber;
+ int nVolEntry;
+ bool dynRoot;
+ bool afsDB;
+ bool verbose;
+
+ //-------------------
+ FileUtil *futil;
+ BOOL useAfsdConfVersion;
+}
+
+/*!
+ @method
+ @abstract (brief description)
+ @discussion (comprehensive description)
+*/
+-(id) init;
+
+/*!
+@function initWithAfsPath
+ @abstract (description)
+ @discussion (description)
+ @param path Path di installazione afs
+ @result Istanza della classe di gestione delle propieta' afs
+ */
+- (id)initWithAfsPath:(NSString*)path;
+
+/*!
+ @method
+ @abstract (brief description)
+ @discussion (comprehensive description)
+*/
+-(void) dealloc;
+/*!
+ @method
+ @abstract (brief description)
+ @discussion (comprehensive description)
+ */
+-(NSMutableArray*) getCellList;
+
+
+/*!
+ @method
+ @abstract (brief description)
+ @discussion (comprehensive description)
+ */
+-(NSArray*) getAllCellsName;
+/*!
+ @method
+ @abstract (brief description)
+ @discussion (comprehensive description)
+ */
+-(NSArray*) getUserDefaultForTokenCells;
+/*!
+ @method
+ @abstract (brief description)
+ @discussion (comprehensive description)
+ */
+-(NSArray*) getDefaultForTokenCellsName;
+/*!
+ @method
+ @abstract (brief description)
+ @discussion (comprehensive description)
+ */
+-(NSString*) getDefaultCellName;
+
+/*!
+ @method setDefaultCellByName
+ @abstract set the cell named "name" to be se user default
+ @discussion first clean the last one selected as default and then set the cell named "name" as default user cell
+ */
+-(void) setDefaultCellByName:(NSString*)name;
+
+/*!
+ @method
+ @abstract (brief description)
+ @discussion (comprehensive description)
+ */- (void) setCellName:(NSString*)cell;
+
+/*!
+ @method setPath
+ @abstract Imposta Path
+ @discussion Imposta il path dove e' installato afs, in modo da leggere e scrivere le configurazioni
+*/
+-(void) setPath:(NSString*)path;
+
+/*!
+ @method path
+ @abstract Return the afs base
+ @discussion Return the Afs base installation path
+*/
+-(NSString*) path;
+
+/*!
+ @function statCacheEntry
+ @abstract get the afs number of state cache entry
+ @discussion
+ @result Number of stat cache entry
+ */
+-(int) statCacheEntry;
+
+
+/*!
+ @function setStatCacheEntry
+ @abstract Set the afs number of state cache entry
+ @discussion
+ @result Number of stat cache entry
+ */
+-(void) setStatCacheEntry:(int)statEntry;
+
+/*!
+@function dCacheDim
+@abstract return the dCacheDim param value for cache manager
+@result dCacheDim value
+*/
+-(int) dCacheDim;
+
+/*!
+ @function setDCacheDim
+ @abstract set the setDCacheDim value for cache manager param
+ @discussion <#(description)#>
+ @param dcacheDim cache param value
+ */
+-(void) setDCacheDim:(int)dcacheDim;
+
+/*!
+ @function cacheDimension
+ @abstract return the max size of the cache
+ @result Cache dimension
+ */
+-(int) cacheDimension;
+
+/*!
+ @function setCacheDimension
+ @abstract Set the max cache dimension
+ @discussion
+ @param cacheDim MAx Chace dimension
+ */
+-(void) setCacheDimension:(int)cacheDim;
+
+/*!
+ @function daemonNumber
+ @abstract Return the number of daemon for the cache manager
+ @result Number of daemon
+ */
+-(int) daemonNumber;
+
+/*!
+ @function setDaemonNumber
+ @abstract Set the daemon numbero for the cache manager
+ @param dNumber number of daemon
+ */
+-(void) setDaemonNumber:(int)dNumber;
+
+/*!
+ @function afsRootMountPoint
+ @abstract Return the path where afs root volume will be mounted
+ @result AFS mount point
+ */
+-(NSString*) afsRootMountPoint;
+
+/*!
+ @function setAfsRootMountPoint
+ @abstract Set the AFS mount point
+ @param mountPoint AFS mount point
+ */
+-(void) setAfsRootMountPoint:(NSString*)mountPoint;
+
+/*!
+ @function nVolEntry
+ @abstract Return the nVolEntry for cache manager
+ @result value for nVolEntry cache parameter
+ */
+-(int) nVolEntry;
+
+/*!
+ @function setNVolEntry
+ @abstract Set the nVolEntry parameter for cache manager
+ @param entry value for nVolEntry cache manager parameter
+ */
+-(void) setNVolEntry:(int)entry;
+
+/*!
+ @function dynRoot
+ @abstract Return the DynRoot parametr for cache manager
+ @result dynRoot parameter value
+ */
+-(bool) dynRoot;
+
+/*!
+ @function setDynRoot
+ @abstract Set the DynRoot flag value for cache manager
+ @param flag dynRoot state (enable/disable)
+ */
+-(void) setDynRoot:(bool)flag;
+/*!
+ @function afsDB
+ @abstract Get the afsdb flag value for cache manager
+ @result Return the value of the flag
+ */
+-(bool) afsDB;
+
+/*!
+ @function setAfsDB
+ @abstract Set the flag value for afsdb cache manager
+ @param flag AfsDB state (enable/disable)
+ */
+-(void) setAfsDB:(bool)flag;
+/*!
+ @function verbose
+ */
+-(bool) verbose;
+
+/*!
+ @function setVerbose
+ */
+-(void) setVerbose:(bool)flag;
+/*!
+ @function readCacheInfo
+ @abstract Read the cache info
+ @discussion The cache info is read from the file pointed by filePath param
+ @param filePath file location for the CacheInfo
+ */
+-(void) readCacheInfo:(NSString*)filePath;
+
+/*!
+ @function writeCacheInfo
+ @abstract Write the cache info down the file
+ @param filePath where to write the CacheInfo
+ @result return the execution error
+ */
+-(int) writeCacheInfo:(NSString*)filePath;
+
+/*!
+ @function readAfsdOption
+ @abstract Read the afs option
+ @discussion Read the afs option checking firt the afs version so it can read the old afsd.option or afs.conf file. If any error accour an NSException wil be trown
+ @param filePath file where the parameter are store for default afsd.option or afs.conf
+ */
+-(void) readAfsdOption:(NSString*)filePath;
+
+/*!
+ @function readOldAfsdOption
+ @abstract Read the afsd.option file
+ @discussion Read the old afsd.option style afsd option file. If any error accour an NSException wil be trown22
+ @param filePath file path to afsd.option like file
+ @result <#(description)#>
+ */
+-(void) readOldAfsdOption:(NSString*)filePath;
+/*!
+ @function readAFSDParamLineContent
+ @abstract Try to decode one line of afsd.option or afs.conf
+ @param paramLine one line of file afsd.option(the only one that is present) os afs.conf
+ */
+-(void) readAFSDParamLineContent:(NSString*)paramLine;
+/*!
+ @function readNewAfsdOption
+ @abstract Read the new afs.conf file format
+ @discussion Scann every line f the afs.conf file ad for each one call the readAFSDParamLineContent with it's content
+ @param filePath path of the new file with afs.conf file format
+ */
+-(void) readNewAfsdOption:(NSString*)filePath;
+/*!
+ @function writeAfsdOption
+ @abstract <#(description)#>
+ @discussion <#(description)#>
+ @param <#(name) (description)#>
+ @result <#(description)#>
+ */
+-(int) writeAfsdOption:(NSString*)filePath;
+/*!
+ @function writeOldAfsdOption
+ @abstract Write the cache manager parameter to file
+ @discussion First chech the version of afs installed then choice to save old o new file version(afsd.option or afs.conf)
+ @param filePath file path for file to write into
+ @result <#(description)#>
+ */
+-(int) writeOldAfsdOption:(NSString*)filePath;
+/*!
+ @function writeNewAfsdOption
+ @abstract Write the cache parameter to a file with the new format
+ @param filePath file path where write into
+ */
+-(int) writeNewAfsdOption:(NSString*)filePath;
+/*!
+ @function getAfsVersion
+ @abstract Return the string representing the afs version
+ @result The Enteir string returned from the call of fs -version
+ */
+-(NSString*) getAfsVersion;
+/*!
+ @function getAfsMajorVersionVersion
+ @abstract Return the major version of afs Major.x.x
+ @result
+ */
+-(int) getAfsMajorVersionVersion;
+/*!
+ @function getAfsMinorVersionVersion
+ @abstract Return the major version of afs x.Minor.x
+ @result
+ */
+-(int) getAfsMinorVersionVersion;
+
+/*!
+ @function getAfsPatchVersionVersion
+ @abstract Return the major version of afs x.x.Patch
+ @result
+ */
+-(int) getAfsPatchVersionVersion;
+
+/*!
+ @method clearConfiguration
+ @abstract Clear all structure or array that contain value for afs client setting(cells cache param etch)
+ @discussion
+ */
+-(void) clearConfiguration;
+
+/*!
+ @function exceptionOnInvalidPath
+ @abstract Check the validity of afs path
+ @discussion If the installationPath variable don't point to a valid path, will be fired an NSException
+ */
+-(void) exceptionOnInvalidPath;
+
+/*!
+ @method loadConfiguration
+ @abstract load the all afs configuration (ThisCell & CellServDB & cache parameter)
+*/
+-(void) loadConfiguration;
+
+/*!
+ @method readCellInfo
+ @abstract Read the Main Cell Name
+*/
+-(void) readCellInfo:(NSString*) configFile;
+/*!
+ @method readCellDB
+ @abstract Read the CellServDB File
+ @discussion Read the file of all cellservbd ad make the NSArray containing a DBCellElement for aech cell found
+*/
+-(void) readCellDB:(NSString*) configFile;
+/*!
+ @function readTheseCell
+ @abstract Read the "These Cell"
+ @discussion Read the "These Cell" file that contains all the cell from which the user want to get the token
+ @param configFile TheseCell file path
+ @result NSAray with the cells name
+*/
+-(NSArray*) readTheseCell:(NSString*) configFile;
+/*!
+ @method shutdown
+ @abstract Stop The AFS
+*/
+-(void) shutdown;
+
+-(void) scanIpForCell:(DBCellElement*) cellElement allIP:(NSString*)allIP;
+-(void) backupConfigurationFiles;
+-(void) backupFile:(NSString*)localAfsFilePath;
+-(void) saveConfigurationFiles:(BOOL) makeBackup;
+-(void) saveCacheConfigurationFiles:(BOOL) makeBackup;
+-(void) installConfigurationFile:(NSString*)srcConfFile destPath:(NSString*) destPath;
+-(NSArray*) getTokenList;
+-(BOOL) checkAfsStatus;
+-(void) klog:(NSString*)uName uPwd:(NSString*)uPwd cell:(NSString*)theCell;
+-(void) aklog:(NSString*)theCell noKerberosCall:(BOOL)krb5CallEnable;
+-(void) getTokens:(BOOL)klogAklogFlag usr:(NSString*)usr pwd:(NSString*)pwd;
+-(void) unlog:(NSString*)cell;
+-(NSString*) makeChaceParamString;
+-(BOOL) useAfsdConfConfigFile;
+@end
--- /dev/null
+//
+// AFSPropertyManager.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 21/05/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Kerberos/Kerberos.h>
+#import "AFSPropertyManager.h"
+#import "TaskUtil.h"
+
+#define kKerberosAuthError NSLocalizedStringFromTableInBundle(@"KerberosAuthError",nil,[NSBundle bundleForClass:[self class]],@"KerberosAuthError")
+#define kPathNotEmpty NSLocalizedStringFromTableInBundle(@"PathNotEmpty",nil,[NSBundle bundleForClass:[self class]],@"PathNotEmpty")
+#define kPathDontContainAfsInstallation NSLocalizedStringFromTableInBundle(@"PathDontContainAfsInstallation",nil,[NSBundle bundleForClass:[self class]],@"PathDontContainAfsInstallation")
+#define kThisCellFOError NSLocalizedStringFromTableInBundle(@"ThisCellFOError",nil,[NSBundle bundleForClass:[self class]],@"ThisCellFOError")
+#define kConfFileNotExits NSLocalizedStringFromTableInBundle(@"ConfFileNotExits",nil,[NSBundle bundleForClass:[self class]],@"ConfFileNotExits")
+#define kUserNotAuth NSLocalizedStringFromTableInBundle(@"UserNotAuth",nil,[NSBundle bundleForClass:[self class]],@"UserNotAuth")
+#define kBadAfsPath NSLocalizedStringFromTableInBundle(@"BadAfsPath",nil,[NSBundle bundleForClass:[self class]],@"BadAfsPath")
+
+#define AFS_TOOLS_DIRECTORY /Library/Openafs/
+#define AFS_TOOLS_BIN(x) "/Library/Openafs/bin/"#x
+#define AFS_CACHE_PATH "/var/db/openafs/cache"
+
+#define AFSD_TMP_OLD_PREFERENCE_FILE @"/tmp/afsd.options"
+#define AFSD_TMP_NEW_PREFERENCE_FILE @"/tmp/afs.conf"
+#define AFSD_OLD_PREFERENCE_FILE @"/etc/config/afsd.options"
+#define AFSD_NEW_PREFERENCE_FILE @"/etc/config/afs.conf"
+
+
+//-afsdb -stat 2000 -dcache 800 -daemons 3 -volumes 70 -dynroot -fakestat-all
+#define AFSD_OPTION_AFSDB_KEY "-afsdb"
+#define AFSD_OPTION_VERBOSE_KEY "-verbose"
+#define AFSD_OPTION_STAT_KEY "-stat"
+#define AFSD_OPTION_DCACHE_KEY "-dcache"
+#define AFSD_OPTION_DAEMONS_KEY "-daemons"
+#define AFSD_OPTION_VOLUMES_KEY "-volumes"
+#define AFSD_OPTION_DYNROOT_KEY "-dynroot"
+#define AFSD_OPTION_FKESTAT_ALL "-fakestat-all"
+
+#define AFSD_CONF_VERBOSE @"VERBOSE"
+#define AFSD_CONF_OPTION @"OPTIONS"
+#define AFSD_CONF_SYSNAME @"AFS_SYSNAME"
+#define AFSD_CONF_POST_INI @"AFS_POST_INIT"
+#define AFSD_CONF_PRE_SHUTDOWN @"AFS_PRE_SHUTDOWN"
+
+#define AFS_CONF_CHANGE_FROM_Mj_VERSION 1
+#define AFS_CONF_CHANGE_FROM_Mi_VERSION 4
+#define AFS_DEV_CONF_CHANGE_FROM_Mi_VERSION 5
+#define AFS_CONF_CHANGE_FROM_Pa_VERSION 7
+#define AFS_DEV_CONF_CHANGE_FROM_Pa_VERSION 31
+
+@implementation AFSPropertyManager
+
+
+// -------------------------------------------------------------------------------
+// init:
+// -------------------------------------------------------------------------------
+-(id) init
+{
+ [super init];
+ cellList = [[NSMutableArray alloc] init];
+ cellName = nil;
+ userDefaultCellArray = nil;
+ useAfsdConfVersion = NO;
+ dynRoot = NO;
+ afsDB = NO;
+ verbose = NO;
+ futil = [[FileUtil alloc] init];
+ return self;
+}
+
+// -------------------------------------------------------------------------------
+// initWithAfsPath:
+// -------------------------------------------------------------------------------
+- (id)initWithAfsPath:(NSString*)path
+{
+ // avvio la creazione standard dell'oggetto
+ if([self init]){
+ // imposto il path
+ [self setPath:path];
+ }
+ return self;
+}
+
+// -------------------------------------------------------------------------------
+// dealloc:
+// -------------------------------------------------------------------------------
+-(void) dealloc
+{
+ if(installationPath){ [installationPath release]; NSLog(@"Released installationPath"); }
+ if(cellList) { NSLog(@"Released cellList");[cellList removeAllObjects];[cellList release];}
+ if(cellName) { NSLog(@"Released cellName");[cellName release];}
+ if(futil) {
+ [futil endAutorization];
+ [futil release];
+ futil = nil;
+ }
+ [super dealloc];
+}
+
+// -------------------------------------------------------------------------------
+// setPath:
+// -------------------------------------------------------------------------------
+- (void) setPath:(NSString*)path {
+ if(installationPath)[installationPath release];
+
+ if(path)
+ installationPath = [path retain];
+}
+
+// -------------------------------------------------------------------------------
+// path:
+// -------------------------------------------------------------------------------
+- (NSString*) path{
+ return installationPath;
+}
+
+// -------------------------------------------------------------------------------
+// statCacheEntry:
+// -------------------------------------------------------------------------------
+-(int) statCacheEntry
+{
+ return statCacheEntry;
+}
+
+// -------------------------------------------------------------------------------
+// setStatCacheEntry:
+// -------------------------------------------------------------------------------
+-(void) setStatCacheEntry:(int)statEntry
+{
+ statCacheEntry = statEntry;
+}
+
+
+// -------------------------------------------------------------------------------
+// dCacheDim:
+// -------------------------------------------------------------------------------
+-(int) dCacheDim
+{
+ return dCacheDim;
+}
+
+// -------------------------------------------------------------------------------
+// setDCacheDim:
+// -------------------------------------------------------------------------------
+-(void) setDCacheDim:(int)dcDim
+{
+ dCacheDim = dcDim;
+}
+
+// -------------------------------------------------------------------------------
+// cacheDimension:
+// -------------------------------------------------------------------------------
+-(int) cacheDimension
+{
+ return cacheDimension;
+}
+
+// -------------------------------------------------------------------------------
+// setCacheDimension:
+// -------------------------------------------------------------------------------
+-(void) setCacheDimension:(int)cacheDim
+{
+ cacheDimension = cacheDim;
+}
+
+// -------------------------------------------------------------------------------
+// daemonNumber:
+// -------------------------------------------------------------------------------
+-(int) daemonNumber
+{
+ return daemonNumber;
+}
+
+// -------------------------------------------------------------------------------
+// setDaemonNumber:
+// -------------------------------------------------------------------------------
+-(void) setDaemonNumber:(int)dNumber
+{
+ daemonNumber = dNumber;
+}
+
+// -------------------------------------------------------------------------------
+// afsRootMountPoint:
+// -------------------------------------------------------------------------------
+-(NSString*) afsRootMountPoint
+{
+ return afsRootMountPoint;
+}
+
+// -------------------------------------------------------------------------------
+// setAfsRootMountPoint:
+// -------------------------------------------------------------------------------
+-(void) setAfsRootMountPoint:(NSString*)mountPoint
+{
+ if(afsRootMountPoint)[afsRootMountPoint release];
+
+ if(mountPoint)
+ afsRootMountPoint = [mountPoint retain];
+}
+
+// -------------------------------------------------------------------------------
+// nVolEntry:
+// -------------------------------------------------------------------------------
+-(int) nVolEntry
+{
+ return nVolEntry;
+}
+
+// -------------------------------------------------------------------------------
+// setNVolEntry:
+// -------------------------------------------------------------------------------
+-(void) setNVolEntry:(int)entry
+{
+ nVolEntry = entry;
+}
+
+// -------------------------------------------------------------------------------
+// dynRoot:
+// -------------------------------------------------------------------------------
+-(bool) dynRoot
+{
+ return dynRoot;
+}
+
+// -------------------------------------------------------------------------------
+// setDynRoot:
+// -------------------------------------------------------------------------------
+-(void) setDynRoot:(bool)flag
+{
+ dynRoot = flag;
+}
+
+// -------------------------------------------------------------------------------
+// dynRoot:
+// -------------------------------------------------------------------------------
+-(bool) afsDB
+{
+ return afsDB;
+}
+
+// -------------------------------------------------------------------------------
+// setDynRoot:
+// -------------------------------------------------------------------------------
+-(void) setAfsDB:(bool)flag
+{
+ afsDB = flag;
+}
+
+// -------------------------------------------------------------------------------
+// setDynRoot:
+// -------------------------------------------------------------------------------
+-(bool) verbose
+{
+ return verbose;
+}
+
+// -------------------------------------------------------------------------------
+// setDynRoot:
+// -------------------------------------------------------------------------------
+-(void) setVerbose:(bool)flag
+{
+ verbose = flag;
+}
+
+// -------------------------------------------------------------------------------
+// useAfsdConfVersion:
+// -------------------------------------------------------------------------------
+-(BOOL) useAfsdConfConfigFile
+{
+ return useAfsdConfVersion;
+}
+
+// -------------------------------------------------------------------------------
+// exceptionOnInvalidPath:
+// -------------------------------------------------------------------------------
+- (void) exceptionOnInvalidPath
+{
+ if(!installationPath || ([installationPath length] == 0)) {
+ @throw [NSException exceptionWithName:@"AFSPropertyManager:exceptionOnInvalidPath"
+ reason:kPathNotEmpty
+ userInfo:nil];
+ }
+ if(![[NSFileManager defaultManager] fileExistsAtPath:installationPath]){
+ @throw [NSException exceptionWithName:@"AFSPropertyManager:exceptionOnInvalidPath"
+ reason:kPathDontContainAfsInstallation
+ userInfo:nil];
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// loadConfiguration:
+// -------------------------------------------------------------------------------
+- (void) loadConfiguration {
+ int mjVersion = [self getAfsMajorVersionVersion];
+ int miVersion = [self getAfsMinorVersionVersion];
+ int paVersion = [self getAfsPatchVersionVersion];
+
+ NSMutableString *filePath = [[NSMutableString alloc] initWithCapacity:256];
+ @try{
+
+ [self exceptionOnInvalidPath];
+ [self clearConfiguration];
+
+ //chech the afs version for chioce wich afsd conf file usage
+ useAfsdConfVersion = mjVersion >= 1 && miVersion>=4 && paVersion>=7;
+ useAfsdConfVersion = useAfsdConfVersion || (mjVersion >= 1 && miVersion>=6 && paVersion>=31);
+
+ // read thiscell config file
+ [filePath setString:installationPath];
+ [filePath appendString: @"/etc/ThisCell"];
+ NSLog(@"Search for cell name.");
+ [self readCellInfo:filePath];
+ if(!cellName){
+ @throw [NSException exceptionWithName:@"readCellInfo"
+ reason:kThisCellFOError
+ userInfo:nil];
+ }
+ NSLog(@"Cell found: %s", [cellName cString]);
+
+ //read TheseCell file
+ [filePath setString: installationPath];
+ [filePath appendString: @"/etc/TheseCells"];
+ userDefaultCellArray = [self readTheseCell:filePath];
+
+ //read cell serv db
+ NSLog(@"Scan for cell db");
+ [filePath setString: installationPath];
+ [filePath appendString: @"/etc/CellServDB"];
+ [self readCellDB:filePath];
+ NSLog(@"Server found: %d", [cellList count]);
+
+
+
+ //Read cacheinfo
+ NSLog(@"Scan cacheinfo file");
+ [filePath setString: installationPath];
+ [filePath appendString: @"/etc/cacheinfo"];
+ [self readCacheInfo:filePath];
+ NSLog(@"End scan cacheinfo file");
+
+ //Read config/afsd.options
+ [filePath setString: installationPath];
+ [filePath appendString: useAfsdConfVersion?AFSD_NEW_PREFERENCE_FILE:AFSD_OLD_PREFERENCE_FILE];
+ [self readAfsdOption:filePath];
+
+ } @catch(NSException * e){
+ @throw e;
+ } @finally {
+ [filePath release];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// readCacheInfo:
+// file template "/afs:/var/db/openafs/cache:30000"
+// -------------------------------------------------------------------------------
+-(void) readCacheInfo:(NSString*)filePath
+{
+ int cicle = 0;
+ NSString *tmpString = nil;
+ NSCharacterSet *fullStopCS = [NSCharacterSet characterSetWithCharactersInString:@":"];
+ NSMutableCharacterSet *chunkStartCS = [[NSMutableCharacterSet alloc] init];
+ [chunkStartCS formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
+ [chunkStartCS formUnionWithCharacterSet:[NSMutableCharacterSet characterSetWithCharactersInString:@"/"]];
+
+ NSCharacterSet *returnCS = [NSCharacterSet characterSetWithCharactersInString:@"\n"];
+ NSFileHandle *fileH = [NSFileHandle fileHandleForReadingAtPath:filePath];
+ NSData *fileHData = [fileH readDataToEndOfFile];
+ NSString *cacheInfoStrData = [[NSString alloc] initWithData:fileHData
+ encoding:NSASCIIStringEncoding];
+ NSScanner *cacheInfoS = [NSScanner scannerWithString:cacheInfoStrData];
+
+ @try{
+ do {
+ cicle++;
+ switch(cicle){
+ case 1:
+ // afs mount path
+ [cacheInfoS scanUpToCharactersFromSet:fullStopCS intoString:&tmpString];
+ [self setAfsRootMountPoint:tmpString];
+ [cacheInfoS scanUpToCharactersFromSet:chunkStartCS intoString:&tmpString];
+ break;
+
+ case 2:
+ //cache path default '/var/db/openafs/cache'
+ [cacheInfoS scanUpToCharactersFromSet:fullStopCS intoString:&tmpString];
+ [cacheInfoS scanUpToCharactersFromSet:chunkStartCS intoString:&tmpString];
+ break;
+
+ case 3:
+ // cache dimension
+ [cacheInfoS scanUpToCharactersFromSet:returnCS intoString:&tmpString];
+ [self setCacheDimension:[tmpString intValue]];
+ break;
+ }
+ }while(cicle < 3 && ![cacheInfoS isAtEnd]);
+ }@catch(NSException *e){
+ @throw e;
+ }@finally{
+ //if(cacheInfoStrData) [cacheInfoStrData release];
+ if(chunkStartCS) [chunkStartCS release];
+ }
+
+}
+
+
+// -------------------------------------------------------------------------------
+// writeCacheInfo:
+// -------------------------------------------------------------------------------
+-(int) writeCacheInfo:(NSString*)filePath
+{
+ NSNumber *tmpNum = nil;
+ NSMutableString *cacheInfoContent = [[NSMutableString alloc] init];
+ if(!cacheInfoContent) return -1;
+
+ //Afs root mount point
+ if([[self afsRootMountPoint] rangeOfString:@"/"].location == NSNotFound || [[self afsRootMountPoint] length] == 0)
+ @throw [NSException exceptionWithName:@"AFSPropertyManager:writeCacheInfo"
+ reason:@"Bad afs path"
+ userInfo:nil];
+ [cacheInfoContent appendString:[self afsRootMountPoint]];
+
+ //standard cache path
+
+ [cacheInfoContent appendString:@":"]; [cacheInfoContent appendString:@AFS_CACHE_PATH]; [cacheInfoContent appendString:@":"];
+
+ //cache dimension
+ tmpNum = [NSNumber numberWithInt:[self cacheDimension]];
+ if([tmpNum intValue] == 0)
+ @throw [NSException exceptionWithName:@"AFSPropertyManager:writeCacheInfo"
+ reason:@"Bad cache dimension"
+ userInfo:nil];
+ [cacheInfoContent appendString:[tmpNum stringValue]];
+
+ [cacheInfoContent writeToFile: [filePath stringByExpandingTildeInPath]
+ atomically: YES
+ encoding: NSASCIIStringEncoding
+ error: nil];
+
+ [cacheInfoContent release];
+ return noErr;
+}
+
+// -------------------------------------------------------------------------------
+// readCacheInfo:
+// file template "/afs:/var/db/openafs/cache:30000"
+// -------------------------------------------------------------------------------
+-(void) readAfsdOption:(NSString*)filePath
+{
+ @try{
+ if(useAfsdConfVersion) {
+ [self readNewAfsdOption:filePath];
+ } else {
+ [self readOldAfsdOption:filePath];
+ }
+
+ }@catch(NSException *e){
+ @throw e;
+ }@finally{
+
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// readOldAfsdOption:
+// -------------------------------------------------------------------------------
+-(void) readOldAfsdOption:(NSString*)filePath
+{
+
+ /*NSFileHandle *fileH = [NSFileHandle fileHandleForReadingAtPath:filePath];
+ NSData *fileHData = [fileH readDataToEndOfFile];
+ NSString *afsdOptionStrData = [[NSString alloc] initWithData:fileHData
+ encoding:NSASCIIStringEncoding];*/
+ if(!filePath) return;
+ [self readAFSDParamLineContent:[[NSString stringWithContentsOfFile:filePath] stringByStandardizingPath]];
+}
+
+// -------------------------------------------------------------------------------
+// readAFSDParamLineContent:
+// -------------------------------------------------------------------------------
+-(void) readAFSDParamLineContent:(NSString*) paramLine{
+ NSString *tmpString = nil;
+ NSCharacterSet *space = [NSCharacterSet characterSetWithCharactersInString:@" "];
+ NSScanner *afsdOptionS = [NSScanner scannerWithString:paramLine];
+
+ do{
+ [afsdOptionS scanUpToCharactersFromSet:space intoString:&tmpString];
+ if(!tmpString) continue;
+
+ NSLog(tmpString);
+ //check parameter type
+ if([tmpString isEqualToString:@AFSD_OPTION_DAEMONS_KEY])
+ {
+ // get number of daemon
+ [afsdOptionS scanUpToCharactersFromSet:space intoString:&tmpString];
+ [self setDaemonNumber:[tmpString intValue]];
+ } else
+ //check parameter type
+ if([tmpString isEqualToString:@AFSD_OPTION_DCACHE_KEY])
+ {
+ //get dcache dimension
+ [afsdOptionS scanUpToCharactersFromSet:space intoString:&tmpString];
+ [self setDCacheDim:[tmpString intValue]];
+ } else
+ //check parameter type
+ if([tmpString isEqualToString:@AFSD_OPTION_DYNROOT_KEY])
+ {
+ [self setDynRoot:true];
+ } else
+ if([tmpString isEqualToString:@AFSD_OPTION_VERBOSE_KEY])
+ {
+ [self setVerbose:true];
+ } else if([tmpString isEqualToString:@AFSD_OPTION_AFSDB_KEY])
+ {
+ [self setAfsDB:true];
+ } else
+ //check parameter type
+ if([tmpString isEqualToString:@AFSD_OPTION_STAT_KEY])
+ {
+ // get fstat entry num
+ [afsdOptionS scanUpToCharactersFromSet:space intoString:&tmpString];
+ [self setStatCacheEntry:[tmpString intValue]];
+ } else
+
+ //check parameter type
+ if([tmpString isEqualToString:@AFSD_OPTION_VOLUMES_KEY])
+ {
+ // get fstat entry num
+ [afsdOptionS scanUpToCharactersFromSet:space intoString:&tmpString];
+ [self setNVolEntry:[tmpString intValue]];
+ }
+
+
+
+ }while(![afsdOptionS isAtEnd]);
+
+}
+
+// -------------------------------------------------------------------------------
+// readNewAfsdOption:
+// -------------------------------------------------------------------------------
+-(void) readNewAfsdOption:(NSString*)filePath
+{
+ if(!filePath) return;
+ NSString *currentLines = nil;
+ NSString *paramValue = nil;
+ NSScanner *lineScanner = nil;
+
+ //Get file content
+ NSString *newAFSDConfContent = [NSString stringWithContentsOfFile:filePath];
+
+ //get lines in array
+ NSArray *confLines = [newAFSDConfContent componentsSeparatedByString:@"\n"];
+
+ //Get the lines enumerator
+ NSEnumerator *lineEnumerator = [confLines objectEnumerator];
+
+ //scann all lines
+ while(currentLines = [lineEnumerator nextObject]) {
+ if([currentLines rangeOfString:@"#"].location != NSNotFound) continue;
+
+ if([currentLines rangeOfString:AFSD_CONF_OPTION].location != NSNotFound) {
+ lineScanner = [NSScanner scannerWithString:currentLines];
+ if(!lineScanner) continue;
+
+ //scann the line
+
+ [lineScanner scanUpToString:@"\"" intoString:¶mValue]; NSLog(paramValue);[lineScanner scanUpToString:@"-" intoString:¶mValue];
+ [lineScanner scanUpToString:@"\"" intoString:¶mValue]; NSLog(paramValue);
+
+ // read the asfd option param line
+ [self readAFSDParamLineContent:paramValue];
+ } else if([currentLines rangeOfString:AFSD_CONF_SYSNAME].location != NSNotFound) {
+
+ } else if([currentLines rangeOfString:AFSD_CONF_POST_INI].location != NSNotFound) {
+
+ } else if([currentLines rangeOfString:AFSD_CONF_PRE_SHUTDOWN].location != NSNotFound) {
+
+ }
+ }
+}
+
+
+// -------------------------------------------------------------------------------
+// writeCacheInfo:
+// -------------------------------------------------------------------------------
+-(int) writeAfsdOption:(NSString*)filePath
+{
+ int result = 0;
+ @try{
+ if(useAfsdConfVersion) {
+ result = [self writeNewAfsdOption:filePath];
+ } else {
+ result = [self writeOldAfsdOption:filePath];
+ }
+
+ }@catch(NSException *e){
+ @throw e;
+ }@finally{
+
+ }
+ return result;
+}
+
+// -------------------------------------------------------------------------------
+// writeOldAfsdOption:
+// -------------------------------------------------------------------------------
+-(int) writeOldAfsdOption:(NSString*)filePath;
+{
+ NSMutableString *oldConfFileContent = [[[NSMutableString alloc] init] autorelease];
+ //add afsd param
+ [oldConfFileContent appendString:[self makeChaceParamString]];
+
+ //add cariage return at end of file
+ [oldConfFileContent appendString:@"\n"];
+
+ //write content on file
+ [oldConfFileContent writeToFile: [filePath stringByExpandingTildeInPath]
+ atomically: YES
+ encoding: NSASCIIStringEncoding
+ error: nil];
+ return noErr;
+
+}
+
+// -------------------------------------------------------------------------------
+// writeNewAfsdOption:
+// OPTIONS=
+// AFS_SYSNAME=
+// AFS_POST_INIT=afs_server_prefs
+// AFS_PRE_SHUTDOWN=
+// -------------------------------------------------------------------------------
+-(int) writeNewAfsdOption:(NSString*)filePath
+{
+ NSMutableString *newConfFileContent = [[[NSMutableString alloc] init] autorelease];
+
+ //Verbose
+ [newConfFileContent appendString:AFSD_CONF_VERBOSE]; [newConfFileContent appendString:@"="]; [newConfFileContent appendString:@"\n"];
+
+ //AFSD Option
+ [newConfFileContent appendString:AFSD_CONF_OPTION];[newConfFileContent appendString:@"=\""]; [newConfFileContent appendString:[self makeChaceParamString]]; [newConfFileContent appendString:@"\""]; [newConfFileContent appendString:@"\n"];
+
+ //AFS_SYSNAME
+ [newConfFileContent appendString:AFSD_CONF_SYSNAME];[newConfFileContent appendString:@"=\""];[newConfFileContent appendString:@"\""]; [newConfFileContent appendString:@"\n"];
+
+ //AFS_POST_INIT
+ [newConfFileContent appendString:AFSD_CONF_POST_INI];[newConfFileContent appendString:@"="]; [newConfFileContent appendString:@"\n"];
+
+ //AFS_PRE_SHUTDOWN
+ [newConfFileContent appendString:AFSD_CONF_PRE_SHUTDOWN];[newConfFileContent appendString:@"="]; [newConfFileContent appendString:@"\n"];
+
+ //add content on file
+ [newConfFileContent appendString:@"\n"];
+
+ //Write to file
+ [newConfFileContent writeToFile: [filePath stringByExpandingTildeInPath]
+ atomically: YES
+ encoding: NSASCIIStringEncoding
+ error: nil];
+ return noErr;
+}
+
+// -------------------------------------------------------------------------------
+// getAfsVersion:
+// -------------------------------------------------------------------------------
+-(NSString*) getAfsVersion
+{
+ NSString *tmpString = nil;
+ NSString *result = [TaskUtil executeTaskSearchingPath:@"fs" args:[NSArray arrayWithObjects:@"-version", nil]];
+ if(result) NSLog(@"fs -version return: %s", [result cString]);
+
+
+ NSCharacterSet *endVersionCS = [NSCharacterSet characterSetWithCharactersInString:@"qwertyuiopasdfghjklzxcvbnmMNBVCXZLKJHGFDSAPOIUYTREWQ"];
+
+ NSCharacterSet *spaceCS = [NSCharacterSet characterSetWithCharactersInString:@" "];
+ NSScanner *versionS = [NSScanner scannerWithString:result];
+ //go to start of version
+ [versionS scanUpToCharactersFromSet:spaceCS intoString:&tmpString];
+
+ //get the total version string
+ [versionS scanUpToCharactersFromSet:endVersionCS intoString:&tmpString];
+
+ return tmpString;
+}
+
+// -------------------------------------------------------------------------------
+// getAfsMajorVersionVersion:
+// -------------------------------------------------------------------------------
+-(int) getAfsMajorVersionVersion
+{
+ NSString *tmpString = nil;
+ NSString *totalVersion = [self getAfsVersion];
+ NSCharacterSet *pointCS = [NSCharacterSet characterSetWithCharactersInString:@"."];
+ NSScanner *versionMS = [NSScanner scannerWithString:totalVersion];
+ [versionMS scanUpToCharactersFromSet:pointCS intoString:&tmpString];
+ return [tmpString intValue];
+}
+
+// -------------------------------------------------------------------------------
+// getAfsMinorVersionVersion:
+// -------------------------------------------------------------------------------
+-(int) getAfsMinorVersionVersion
+{
+ NSString *tmpString = nil;
+ NSString *totalVersion = [self getAfsVersion];
+ NSCharacterSet *numCS = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"];
+ NSCharacterSet *pointCS = [NSCharacterSet characterSetWithCharactersInString:@"."];
+ NSScanner *versionMS = [NSScanner scannerWithString:totalVersion];
+ [versionMS scanUpToCharactersFromSet:pointCS intoString:&tmpString];[versionMS scanUpToCharactersFromSet:numCS intoString:&tmpString];[versionMS scanUpToCharactersFromSet:pointCS intoString:&tmpString];
+ return [tmpString intValue];
+}
+
+// -------------------------------------------------------------------------------
+// getAfsPatchVersionVersion:
+// -------------------------------------------------------------------------------
+-(int) getAfsPatchVersionVersion
+{
+ NSString *totalVersion = [self getAfsVersion];
+ NSCharacterSet *pointCS = [NSCharacterSet characterSetWithCharactersInString:@"."];
+ int lastPointIndex = [totalVersion rangeOfCharacterFromSet:pointCS
+ options:NSBackwardsSearch].location;
+ int patchVersion = [[totalVersion substringFromIndex:lastPointIndex+1] intValue];
+ return patchVersion;
+}
+
+
+// -------------------------------------------------------------------------------
+// clearConfiguration:
+// -------------------------------------------------------------------------------
+- (void) clearConfiguration{
+
+ // clear list of cell
+ [cellList removeAllObjects];
+
+ userDefaultCellArray= nil;
+
+ // remove the old cell name
+ if(cellName) {
+ [cellName release];
+ cellName = nil;
+ }
+}
+
+// -------------------------------------------------------------------------------
+// getCellList:
+// -------------------------------------------------------------------------------
+-(NSMutableArray*) getCellList
+{
+ return cellList;
+}
+
+
+
+// -------------------------------------------------------------------------------
+// getAllCellName:
+// -------------------------------------------------------------------------------
+-(NSArray*) getAllCellsName {
+ NSMutableArray *allCelListName = [[[NSMutableArray alloc] init] autorelease];
+ for(int idx = 0; idx < [cellList count]; idx++){
+ DBCellElement *elemnt = [cellList objectAtIndex:idx];
+ [allCelListName addObject:[elemnt getCellName]];
+ }
+ return allCelListName;
+}
+
+// -------------------------------------------------------------------------------
+// getCellList:
+// -------------------------------------------------------------------------------
+-(NSArray*) getUserDefaultForTokenCells {
+ return userDefaultCellArray;
+}
+
+// -------------------------------------------------------------------------------
+// getDefaultCellName:
+// -------------------------------------------------------------------------------
+-(NSArray*) getDefaultForTokenCellsName {
+ NSMutableArray *allCelListName = [[[NSMutableArray alloc] init] autorelease];
+ for(int idx = 0; idx < [cellList count]; idx++){
+ DBCellElement *elemnt = [cellList objectAtIndex:idx];
+ if([elemnt userDefaultForToken]) [allCelListName addObject:[[elemnt getCellName] retain]];
+ }
+ return allCelListName;
+}
+
+// -------------------------------------------------------------------------------
+// getCellName:
+// -------------------------------------------------------------------------------
+-(NSString*) getDefaultCellName
+{
+ return cellName;
+}
+
+// -------------------------------------------------------------------------------
+// setDefaultCellByName:
+// -------------------------------------------------------------------------------
+-(void) setDefaultCellByName:(NSString*)name
+{
+ DBCellElement *elementCell = nil;
+ BOOL cellFound = false;
+ if(!name) return;
+
+ for(int idx = 0; idx < [cellList count]; idx++) {
+ // check every cell for delete as old user default cell or selected as neww cell
+ elementCell = [cellList objectAtIndex:idx];
+ cellFound = [name compare:[elementCell getCellName]] == NSOrderedSame;
+ [elementCell setUserDefaultCell:cellFound];
+ if(cellFound) {
+ [elementCell setUserDefaultForToken:YES];
+ if(cellName)[cellName release];
+ cellName = [name retain];
+ }
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// setCellName:
+// -------------------------------------------------------------------------------
+- (void) setCellName:(NSString*)cell {
+ [self setDefaultCellByName:cell];
+}
+
+// -------------------------------------------------------------------------------
+// readCellInfo:
+// -------------------------------------------------------------------------------
+-(void) readCellInfo:(NSString*) configFile {
+
+
+ NSError *error = nil;
+ NSString *tmpStr = nil;
+ NSLog(@"Try to opening file: %s",[configFile cString] );
+ NSString * result = [NSString stringWithContentsOfFile:configFile
+ encoding:NSASCIIStringEncoding
+ error:&error];
+ if(!result && error){
+ if([error domain] )
+ @throw [NSException exceptionWithName:@"readCellInfo"
+ reason:kConfFileNotExits
+ userInfo:nil];
+ }
+ NSScanner *scanner = [NSScanner scannerWithString:result];
+
+ [scanner scanUpToString:@"\n"
+ intoString:&tmpStr];
+
+ // make a copy of self created string
+ cellName = [tmpStr retain];
+}
+
+// -------------------------------------------------------------------------------
+// readCellDB:
+// -------------------------------------------------------------------------------
+-(void) readCellDB:(NSString*) configFile {
+ NSString *tmpString = nil;
+ BOOL isInCellDefaultArray = NO; // the cell belong
+ BOOL isDefaultCell = NO;
+ DBCellElement *afsCellDBElement = nil;
+ NSCharacterSet *returnCS = [NSCharacterSet characterSetWithCharactersInString:@"\n"];
+ NSCharacterSet *spaceCS = [NSCharacterSet characterSetWithCharactersInString:@" \t"];
+
+ NSFileHandle *fileH = [NSFileHandle fileHandleForReadingAtPath:configFile];
+ NSData *dbCellData = [fileH readDataToEndOfFile];
+ NSString *strData = [[NSString alloc] initWithData:dbCellData
+ encoding:NSASCIIStringEncoding];
+ NSScanner *cellDBScanner = [NSScanner scannerWithString:strData];
+
+ @try{
+ [cellDBScanner scanUpToCharactersFromSet:[NSCharacterSet alphanumericCharacterSet] intoString:&tmpString];
+ while([cellDBScanner isAtEnd] == NO) {
+ // make new cell
+ afsCellDBElement = [[DBCellElement alloc] init];
+
+ // get the name of cell
+ [cellDBScanner scanUpToCharactersFromSet:spaceCS intoString:&tmpString];
+ [afsCellDBElement setCellName: tmpString];
+
+ //check if this cells is one of user has selected to get token
+ isInCellDefaultArray = [userDefaultCellArray containsObject:tmpString];
+ //check if this cell is also the default cell
+ isDefaultCell = [cellName compare:tmpString]==NSOrderedSame;
+
+ [afsCellDBElement setUserDefaultForToken:isInCellDefaultArray||isDefaultCell];
+ [afsCellDBElement setUserDefaultCell:isDefaultCell];
+
+
+
+
+
+ // get the cell comment
+ [cellDBScanner scanUpToCharactersFromSet:[NSCharacterSet alphanumericCharacterSet] intoString:nil];
+ [cellDBScanner scanUpToCharactersFromSet:returnCS intoString:&tmpString];
+ [afsCellDBElement setCellComment: tmpString];
+
+ // get all ip
+ [cellDBScanner scanUpToString:@">" intoString:&tmpString];
+ // scann all ip in list
+ [self scanIpForCell:afsCellDBElement allIP:tmpString];
+
+ // add cell to list
+ [cellList addObject:afsCellDBElement];
+ // release the object becasuse NSMutableArray make a retain on object
+ [afsCellDBElement release];
+ //repeat
+ [cellDBScanner scanUpToCharactersFromSet:[NSCharacterSet alphanumericCharacterSet] intoString:&tmpString];
+ }
+ }@catch(NSException *e){
+ @throw e;
+ }@finally{
+ //if(strData) [strData release];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// scanIpForCell:
+// -------------------------------------------------------------------------------
+-(void) scanIpForCell:(DBCellElement*) cellElement allIP:(NSString*)allIP {
+ NSScanner *ipScann = [NSScanner scannerWithString:allIP];
+ NSCharacterSet *returnCS = [NSCharacterSet characterSetWithCharactersInString:@"\n"];
+ NSCharacterSet *spaceCS = [NSCharacterSet characterSetWithCharactersInString:@" \t"];
+ NSCharacterSet *startCommentCS = [NSCharacterSet characterSetWithCharactersInString:@"#"];
+ NSString *tmpString = nil;
+ while([ipScann isAtEnd] == NO){
+ CellIp *cellIpDesc = [[CellIp alloc] init];
+
+ //ip string
+ [ipScann scanUpToCharactersFromSet:spaceCS
+ intoString:&tmpString];
+
+ [cellIpDesc setCellIp:tmpString];
+ //[tmpString release];
+
+ // go to comment
+ [ipScann scanUpToCharactersFromSet:startCommentCS intoString:nil];
+ // skip comment symbol
+ [ipScann scanUpToCharactersFromSet:[NSCharacterSet alphanumericCharacterSet] intoString:nil];
+ // get comment
+ [ipScann scanUpToCharactersFromSet:returnCS intoString:&tmpString];
+ [cellIpDesc setCellComment:tmpString];
+ //[tmpString release];
+
+ [cellElement addIpToCell:cellIpDesc];
+ // release the object becasuse NSMutableArray make a retain on object
+ [cellIpDesc release];
+ }
+}
+
+
+// -------------------------------------------------------------------------------
+// scanIpForCell:
+// -------------------------------------------------------------------------------
+-(NSArray*) readTheseCell:(NSString*) configFile {
+
+ NSFileHandle *fileH = [NSFileHandle fileHandleForReadingAtPath:configFile];
+ NSData *dbCellData = [fileH readDataToEndOfFile];
+ NSString *strData = [[NSString alloc] initWithData:dbCellData
+ encoding:NSASCIIStringEncoding];
+
+ return [strData componentsSeparatedByString:@"\n"];
+}
+
+// -------------------------------------------------------------------------------
+// -(void) getTokenList
+// -------------------------------------------------------------------------------
+-(NSArray*) getTokenList
+{
+ int line = 0;
+ NSString *tokenLine = nil;
+ //NSString *tmpValue = nil;
+ NSMutableArray *tokenList = [[NSMutableArray alloc] init];
+ NSString *tokensOutput = [TaskUtil executeTaskSearchingPath:@"tokens" args:[NSArray arrayWithObjects:nil]];
+
+ // scann the tokens
+ NSScanner *tokenScan = [NSScanner scannerWithString:tokensOutput];
+ NSCharacterSet *returnCS = [NSCharacterSet characterSetWithCharactersInString:@"\n"];
+
+ while([tokenScan isAtEnd] == NO){
+ line++;
+ // get the next line
+ [tokenScan scanUpToCharactersFromSet:returnCS
+ intoString:&tokenLine];
+
+ // check for tokens end
+ if([tokenLine rangeOfString:@"--End of list--"].location != NSNotFound) break;
+
+
+ if(line >= 2){
+ NSLog(@"Token found %s", [tokenLine UTF8String]);
+ // add enteir row to result
+ [tokenList addObject:tokenLine];
+ // create the line scanner for all the row that contains token info
+ }
+ }
+ //
+ return tokenList;
+}
+
+// -------------------------------------------------------------------------------
+// +(void) klog:(NSString*)uName uPwd:(NSString*)uPwd
+// -------------------------------------------------------------------------------
+-(void) klog:(NSString*)uName uPwd:(NSString*)uPwd cell:(NSString*)theCell
+{
+ if(uName == @"" || uPwd == @"") return;
+
+ [TaskUtil executeTaskSearchingPath:@"klog"
+ args:(theCell==nil?[NSArray arrayWithObjects:@"-principal", uName, @"-password", uPwd, nil]:[NSArray arrayWithObjects:@"-principal", uName, @"-password", uPwd, @"-c", theCell, nil])];
+
+
+}
+
+
+// -------------------------------------------------------------------------------
+// +(void) aklog
+// -------------------------------------------------------------------------------
+-(void) aklog:(NSString*)theCell noKerberosCall:(BOOL)krb5CallEnable {
+ KLPrincipal princ = nil;
+ KLStatus kstatus = noErr;
+ char *princName = malloc(255);
+ @try {
+ // trying to ket kerberos ticket
+ if(krb5CallEnable) {
+ kstatus = KLAcquireInitialTickets (0L, 0L, &princ, &princName);
+ if(kstatus != noErr && kstatus != klUserCanceledErr) @throw [NSException exceptionWithName:@"aklog"
+ reason:kPathNotEmpty
+ userInfo:nil];
+ } else kstatus = klNoErr;
+
+ //ok to launch aklog
+ if(kstatus == klNoErr) [TaskUtil executeTaskSearchingPath:@"aklog"
+ args:(theCell==nil?[NSArray arrayWithObjects:nil]:[NSArray arrayWithObjects:@"-c", theCell, nil])];
+
+ }
+ @catch (NSException * e) {
+ @throw e;
+ }
+ @finally {
+ // destory the kerberos va
+ if(princName && princ != nil)
+ KLDisposeString(princName);
+ else if(princName) free(princName);
+ }
+
+}
+
+
+// -------------------------------------------------------------------------------
+// getTokens:
+// -------------------------------------------------------------------------------
+- (void) getTokens:(BOOL)klogAklogFlag usr:(NSString*)usr pwd:(NSString*)pwd {
+
+ NSString *celStrName = nil;
+ NSArray *tmpDefaultArray = [self getDefaultForTokenCellsName];
+ if(tmpDefaultArray && [tmpDefaultArray count] > 1) {
+ //there are other cell to autenticate
+ for(int idx=0; idx < [tmpDefaultArray count]; idx++){
+ celStrName = [tmpDefaultArray objectAtIndex:idx];
+ if(klogAklogFlag)
+ [self klog:usr
+ uPwd:pwd
+ cell:celStrName];
+ else
+ [self aklog:celStrName noKerberosCall:YES];
+ }
+
+ } else {
+ //there is only default cell to autenticate
+ if(klogAklogFlag)
+ [self klog:usr
+ uPwd:pwd
+ cell:nil];
+ else
+ [self aklog:nil noKerberosCall:YES];
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// +(void) unlog
+// -------------------------------------------------------------------------------
+-(void) unlog:(NSString*)cell
+{
+ [TaskUtil executeTaskSearchingPath:@"unlog"
+ args:(cell?[NSArray arrayWithObjects:@"-c",cell,nil]:[NSArray arrayWithObjects:nil])];
+}
+
+// -------------------------------------------------------------------------------
+// -(void) shutdown
+// -------------------------------------------------------------------------------
+-(void) shutdown
+{
+ NSMutableString *filePath = [[NSMutableString alloc] initWithCapacity:256];
+ @try {
+ if([[AuthUtil shared] autorize] != noErr)
+ return;
+
+ /*const char *args0[] = {"stop", 0L};
+ [[AuthUtil shared] execUnixCommand:"/Library/StartupItems/OpenAFS/OpenAFS_stop"
+ args:args0
+ output:0L];*/
+
+ // unmount afs
+ const char *args1[] = {"-f", "/afs", 0L};
+ [[AuthUtil shared] execUnixCommand:"/sbin/umount"
+ args:args1
+ output:0L];
+
+ const char *args2[] = {"-shutdown", 0L};
+ [[AuthUtil shared] execUnixCommand:"/usr/sbin/afsd"
+ args:args2
+ output:0L];
+
+ const char *args3[] = {[filePath UTF8String], 0L};
+ [[AuthUtil shared] execUnixCommand:"/sbin/kextunload"
+ args:args3
+ output:0L];
+
+ }
+ @catch (NSException * e) {
+ @throw e;
+ }
+ @finally {
+
+ }
+
+
+}
+
+// -------------------------------------------------------------------------------
+// -(void) saveConfigurationFiles
+// -------------------------------------------------------------------------------
+-(void) saveConfigurationFiles:(BOOL) makeBackup
+{
+ NSError *err;
+ NSMutableString *filePath = [[NSMutableString alloc] initWithCapacity:256];
+ NSMutableString *cellServDBString = [[NSMutableString alloc] initWithCapacity:256];
+ NSMutableString *theseCellString = [[NSMutableString alloc] initWithCapacity:256];
+ DBCellElement *cellElement = nil;
+
+ // save the configuration file
+ @try{
+ [self exceptionOnInvalidPath];
+
+ // ThisCell
+ [filePath setString: @"/tmp/ThisCell"];
+ [cellName writeToFile: [filePath stringByExpandingTildeInPath]
+ atomically:YES
+ encoding: NSASCIIStringEncoding
+ error:nil];
+ // CellServDB
+
+ for(int idx = 0; idx < [cellList count]; idx++){
+ cellElement = [cellList objectAtIndex:idx];
+ [cellServDBString appendString:[cellElement description]];
+ if([cellElement userDefaultForToken]) {
+ [theseCellString appendString:[cellElement getCellName]];
+ [theseCellString appendString:@"\n"];
+ }
+ }
+
+
+ [filePath setString: @"/tmp/CellServDB"];
+ [cellServDBString writeToFile: [filePath stringByExpandingTildeInPath]
+ atomically:YES
+ encoding: NSUTF8StringEncoding
+ error:&err];
+
+ [filePath setString: @"/tmp/TheseCells"];
+ [theseCellString writeToFile: [filePath stringByExpandingTildeInPath]
+ atomically:YES
+ encoding: NSUTF8StringEncoding
+ error:&err];
+
+ // backup original file
+ if([futil startAutorization] != noErr){
+ @throw [NSException exceptionWithName:@"saveConfigurationFiles:startAutorization"
+ reason:kUserNotAuth
+ userInfo:nil];
+ }
+
+ if(makeBackup) [self backupConfigurationFiles];
+
+ // install ThisCell
+ [filePath setString: installationPath];
+ [filePath appendString: @"/etc/ThisCell"];
+ [self installConfigurationFile:@"/tmp/ThisCell"
+ destPath:filePath];
+
+ // install CellServDB
+ [filePath setString: installationPath];
+ [filePath appendString: @"/etc/CellServDB"];
+ [self installConfigurationFile:@"/tmp/CellServDB"
+ destPath:filePath];
+
+ // install CellServDB
+ [filePath setString: installationPath];
+ [filePath appendString: @"/etc/TheseCells"];
+ [self installConfigurationFile:@"/tmp/TheseCells"
+ destPath:filePath];
+
+ } @catch (NSException *e) {
+ @throw e;
+ }@finally {
+ // dispose all variable used
+ if(filePath) [filePath release];
+ if(cellServDBString) [cellServDBString release];
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// -(void) saveCacheConfigurationFiles
+// -------------------------------------------------------------------------------
+-(void) saveCacheConfigurationFiles:(BOOL)makeBackup
+{
+ NSMutableString *filePath = [[NSMutableString alloc] initWithCapacity:256];
+ // save the configuration file
+ @try{
+ [self exceptionOnInvalidPath];
+
+ // cacheinfo file creation
+ [self writeCacheInfo:@"/tmp/cacheinfo"];
+
+ //afsd.option or afs.conf file creation
+ [self writeAfsdOption:useAfsdConfVersion?AFSD_TMP_NEW_PREFERENCE_FILE:AFSD_TMP_OLD_PREFERENCE_FILE];
+
+ // backup original file
+ if([futil startAutorization] != noErr){
+ @throw [NSException exceptionWithName:@"AFSPropertyManager:saveCacheConfigurationFiles:startAutorization"
+ reason:kUserNotAuth
+ userInfo:nil];
+ }
+
+ if(makeBackup) {
+ //cacheinfo
+ [self backupFile:@"/etc/cacheinfo"];
+
+ //afsd.options
+ [self backupFile:useAfsdConfVersion?AFSD_NEW_PREFERENCE_FILE:AFSD_OLD_PREFERENCE_FILE];
+ }
+
+ // install cacheinfo
+ [filePath setString:installationPath];
+ [filePath appendString: @"/etc/cacheinfo"];
+ [self installConfigurationFile:@"/tmp/cacheinfo"
+ destPath:filePath];
+
+ // install afsd.conf or afs.conf configuration file
+ [filePath setString: installationPath];
+ [filePath appendString: useAfsdConfVersion?AFSD_NEW_PREFERENCE_FILE:AFSD_OLD_PREFERENCE_FILE];
+ [self installConfigurationFile:useAfsdConfVersion?AFSD_TMP_NEW_PREFERENCE_FILE:AFSD_TMP_OLD_PREFERENCE_FILE
+ destPath:filePath];
+
+ } @catch (NSException *e) {
+ @throw e;
+ }@finally {
+ if(filePath) [filePath release];
+ }
+
+
+}
+
+// -------------------------------------------------------------------------------
+// -(void) installConfigurationFile
+// -------------------------------------------------------------------------------
+-(void) installConfigurationFile:(NSString*)srcConfFile
+ destPath:(NSString*)destPath
+{
+ // delete the file original file
+
+ if([futil autorizedDelete:destPath] != noErr){
+ @throw [NSException exceptionWithName:@"installConfigurationFile:autorizedDelete"
+ reason:destPath
+ userInfo:nil];
+ }
+
+ // move the file
+ if([futil autorizedMoveFile:srcConfFile
+ toPath:destPath] != noErr) {
+ @throw [NSException exceptionWithName:@"saveConfigurationFiles:autorizedMoveFile"
+ reason:srcConfFile
+ userInfo:nil];
+ }
+
+
+ if([futil autorizedChown:destPath
+ owner:@"root"
+ group:@"wheel"]!= noErr) {
+ @throw [NSException exceptionWithName:@"saveConfigurationFiles:autorizedChown"
+ reason:destPath
+ userInfo:nil];
+ }
+}
+
+// -------------------------------------------------------------------------------
+// -(void) backupConfigurationFiles
+// -------------------------------------------------------------------------------
+-(void) backupConfigurationFiles
+{
+
+ @try{
+ if([futil startAutorization] != noErr){
+ @throw [NSException exceptionWithName:@"backupConfigurationFiles:startAutorization"
+ reason:kUserNotAuth
+ userInfo:nil];
+ }
+ //This cell
+ [self backupFile:@"/etc/ThisCell"];
+
+ //CellServDB
+ [self backupFile:@"/etc/CellServDB"];
+
+ //TheseCell
+ [self backupFile:@"/etc/TheseCells"];
+
+ //[futil endAutorization];
+ } @catch (NSException *e) {
+ @throw e;
+ } @finally {
+ }
+}
+
+// -------------------------------------------------------------------------------
+// -(void) backupFile:(NSString*)localAfsFilePath
+// -------------------------------------------------------------------------------
+-(void) backupFile:(NSString*)localAfsFilePath
+{
+ NSString *srcString = nil;
+ NSMutableString *filePath = [[NSMutableString alloc] initWithCapacity:256];
+ OSStatus err = noErr;
+ @try{
+ [filePath setString: installationPath];
+ [filePath appendString: localAfsFilePath];
+
+ //Check if the file at path exist
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+
+ //check if th efile exist
+ if(![fileManager fileExistsAtPath:[filePath stringByExpandingTildeInPath]]) return;
+
+ // store the source path
+ srcString = [filePath stringByExpandingTildeInPath];
+ [filePath appendString: @".afscommander_bk"];
+
+ // check for presence of bk file
+ if(![[NSFileManager defaultManager] fileExistsAtPath:[filePath stringByExpandingTildeInPath]]){
+ // backup the file
+ err = [futil autorizedCopy:srcString
+ toPath:[filePath stringByExpandingTildeInPath]];
+ }
+ } @catch (NSException *e) {
+ @throw e;
+ } @finally {
+ if(filePath) [filePath release];
+ }
+}
+// -------------------------------------------------------------------------------
+// checkAfsStatus:[NSArray arrayWithObjects:@"checkserver", nil];
+// -------------------------------------------------------------------------------
+-(BOOL) checkAfsStatus
+{
+ BOOL result = NO;
+ NSString *fsResult = [TaskUtil executeTaskSearchingPath:@"fs" args:[NSArray arrayWithObjects:@"checkserver", nil]];
+ result = (fsResult?([fsResult rangeOfString:@"All servers are running."].location != NSNotFound):NO);
+ return result;
+}
+
+// -------------------------------------------------------------------------------
+// makeChaceParamString
+// -------------------------------------------------------------------------------
+-(NSString*) makeChaceParamString
+{
+ NSNumber *tmpNum = nil;
+ NSMutableString *afsdOption = [[NSMutableString alloc] init];
+ if(!afsdOption) return @"";
+ //write the data for afsd config file '-afsdb -stat x -dcache x -daemons x -volumes x -dynroot -fakestat-all'
+ //afsdb
+ //dynRoot
+ if([self afsDB]) {
+ [afsdOption appendString:@AFSD_OPTION_AFSDB_KEY];[afsdOption appendString:@" "];
+ }
+
+ //Verbose
+ if([self verbose]) {
+ [afsdOption appendString:@AFSD_OPTION_VERBOSE_KEY];[afsdOption appendString:@" "];
+ }
+
+ //stat entry
+ tmpNum = [NSNumber numberWithInt:[self statCacheEntry]];
+ if([tmpNum intValue]) {[afsdOption appendString:@AFSD_OPTION_STAT_KEY];[afsdOption appendString:@" "];[afsdOption appendString:[tmpNum stringValue]];[afsdOption appendString:@" "];}
+
+ //dcace
+ tmpNum = [NSNumber numberWithInt:[self dCacheDim]];
+ if([tmpNum intValue]) {[afsdOption appendString:@AFSD_OPTION_DCACHE_KEY];[afsdOption appendString:@" "];[afsdOption appendString:[tmpNum stringValue]];[afsdOption appendString:@" "];}
+
+ //daemons
+ tmpNum = [NSNumber numberWithInt:[self daemonNumber]];
+ if([tmpNum intValue]) {[afsdOption appendString:@AFSD_OPTION_DAEMONS_KEY];[afsdOption appendString:@" "];[afsdOption appendString:[tmpNum stringValue]];[afsdOption appendString:@" "];}
+
+ //volumes
+ tmpNum = [NSNumber numberWithInt:[self nVolEntry]];
+ if([tmpNum intValue]) {[afsdOption appendString:@AFSD_OPTION_VOLUMES_KEY];[afsdOption appendString:@" "];[afsdOption appendString:[tmpNum stringValue]];[afsdOption appendString:@" "];}
+
+ //dynRoot
+ if([self dynRoot]) {
+ [afsdOption appendString:@AFSD_OPTION_DYNROOT_KEY];[afsdOption appendString:@" "];
+ }
+
+ //fakestat-all
+ [afsdOption appendString:@AFSD_OPTION_FKESTAT_ALL];[afsdOption appendString:@" "];
+
+ return [afsdOption autorelease];
+}
+
+@end
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>AFSMenuCredentialContoller</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>OUTLETS</key>
+ <dict>
+ <key>credWinController</key>
+ <string>CredentialWindowController</string>
+ <key>credentialController</key>
+ <string>id</string>
+ <key>credentialView</key>
+ <string>id</string>
+ </dict>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>ACTIONS</key>
+ <dict>
+ <key>closePanel</key>
+ <string>id</string>
+ <key>getToken</key>
+ <string>id</string>
+ </dict>
+ <key>CLASS</key>
+ <string>CredentialWindowController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>OUTLETS</key>
+ <dict>
+ <key>afsMenuController</key>
+ <string>id</string>
+ <key>credentialView</key>
+ <string>id</string>
+ <key>textEditPassword</key>
+ <string>id</string>
+ <key>textEditUserName</key>
+ <string>id</string>
+ </dict>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IBFramework Version</key>
+ <string>644</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../AFSCommander.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>248</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C31</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>AFSMenuExtra</string>
+ <key>CFBundleIdentifier</key>
+ <string>it.infn.lnf.network.AFSMenuExtra</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleSignature</key>
+ <string>INFN</string>
+ <key>CFBundleVersion</key>
+ <string>0.2a</string>
+ <key>NSPrincipalClass</key>
+ <string>AFSMenuExtra</string>
+</dict>
+</plist>
--- /dev/null
+//
+// AuthUtil.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 21/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#include <Security/Authorization.h>
+#include <Security/AuthorizationTags.h>
+
+@interface AuthUtil : NSObject {
+ AuthorizationRef authorizationRef;
+}
+-(id) init;
+-(OSStatus) autorize;
+-(BOOL) deautorize;
+-(AuthorizationRef) authorization;
+-(NSData*) extFormAuth;
+-(OSStatus) execUnixCommand:(const char*) commandPath args:(const char*[])args output:(NSMutableString*)output;
++(AuthUtil*) shared;
++ (id)allocWithZone:(NSZone *)zone;
+- (id)copyWithZone:(NSZone *)zone;
+- (id)retain;
+- (unsigned)retainCount;
+- (void)release;
+- (id)autorelease;
+@end
--- /dev/null
+//
+// AuthUtil.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 21/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "AuthUtil.h"
+//#include <stdio.h>
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <unistd.h>
+static AuthUtil *sharedAuthUtil = nil;
+
+@implementation AuthUtil
+
++(AuthUtil*) shared
+{
+ @synchronized(self) {
+ if (sharedAuthUtil == nil) {
+ [[self alloc] init]; // assignment not done here
+ }
+ }
+ return sharedAuthUtil;
+}
+
++ (id)allocWithZone:(NSZone *)zone
+{
+ @synchronized(self) {
+ if (sharedAuthUtil == nil) {
+ sharedAuthUtil = [super allocWithZone:zone];
+ return sharedAuthUtil; // assignment and return on first allocation
+ }
+ }
+ return nil; //on subsequent allocation attempts return nil
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+ return self;
+}
+
+// -------------------------------------------------------------------------------
+// init:
+// -------------------------------------------------------------------------------
+-(id) init {
+ [super init];
+ authorizationRef = nil;
+ return self;
+}
+
+// -------------------------------------------------------------------------------
+// autorize:
+// -------------------------------------------------------------------------------
+-(OSStatus) autorize
+{
+ OSStatus status = noErr;
+ AuthorizationFlags flags;
+ AuthorizationItem myItems = {kAuthorizationRightExecute, 0, NULL, 0};
+ AuthorizationRights myRights = {1, &myItems};
+ flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
+
+ /*if(authorizationRef) {
+ [self deautorize];
+ }*/
+
+ // chek if autorization is valid for and old password request
+ status = AuthorizationCopyRights (authorizationRef, &myRights, NULL, flags, NULL );
+
+ if (status != errAuthorizationSuccess) {
+ //
+ flags = kAuthorizationFlagDefaults;
+ if(!authorizationRef){
+ status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, flags, &authorizationRef);
+ if (status != errAuthorizationSuccess) {
+ return status;
+ }
+ }
+
+ flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
+ status = AuthorizationCopyRights (authorizationRef, &myRights, NULL, flags, NULL );
+
+ if (status != errAuthorizationSuccess) {
+ AuthorizationFree (authorizationRef, kAuthorizationFlagDefaults);
+ return status;
+ }
+ }
+
+ return status;
+}
+
+
+// -------------------------------------------------------------------------------
+// deatorize:
+// -------------------------------------------------------------------------------
+-(BOOL) deautorize
+{
+ OSStatus status = 0L;
+ if(authorizationRef){
+ status = AuthorizationFree (authorizationRef, kAuthorizationFlagDefaults);
+ authorizationRef = 0L;
+ }
+ return status == noErr;
+}
+
+
+// -------------------------------------------------------------------------------
+// authorization:
+// -------------------------------------------------------------------------------
+-(AuthorizationRef) authorization
+{
+ return authorizationRef;
+}
+
+// -------------------------------------------------------------------------------
+// authorization:
+// -------------------------------------------------------------------------------
+-(NSData*) extFormAuth {
+ AuthorizationExternalForm extAuth; // external authorization
+ NSData *authorizationData = nil;
+ if(AuthorizationMakeExternalForm([self authorization], &extAuth))
+ {
+ NSLog(@"Could not create external authorization form.");
+ return nil;
+ }
+ authorizationData = [NSData dataWithBytes:&extAuth length:sizeof(AuthorizationExternalForm)];
+ return authorizationData;
+}
+
+// -------------------------------------------------------------------------------
+// execUnixCommand:
+// -------------------------------------------------------------------------------
+-(OSStatus) execUnixCommand:(const char*) commandPath args:(const char*[])args output:(NSMutableString*)output
+{
+ OSStatus status = noErr;
+ FILE *commandOutIn = NULL;
+ char buff[1024];
+ int pid, pidStatus;
+
+ status = AuthorizationExecuteWithPrivileges (authorizationRef, commandPath, kAuthorizationFlagDefaults , (char *const *)args, &commandOutIn);
+ if (status == errAuthorizationSuccess && commandOutIn){
+ for(;;)
+ {
+ int bytesRead = read(fileno (commandOutIn), buff, sizeof (buff));
+ if (bytesRead < 1) break;
+ //write (fileno (stdout), buff, bytesRead);
+ if(output) {
+ [output appendString:[NSString stringWithCString:buff length:bytesRead]];
+ }
+ }
+ }
+ if(commandOutIn){
+ fflush(commandOutIn);
+ fclose(commandOutIn);
+ }
+ // whait for comand finish
+ pid = wait( &pidStatus );
+ if (pid == -1 || !WIFEXITED( pidStatus ))
+ {
+ NSLog( @"Error: problem with wait pid status: %d", pidStatus );
+ return 1;
+ }
+ return status;
+}
+
+- (id)retain
+{
+ return self;
+}
+
+- (unsigned)retainCount
+{
+ return UINT_MAX; //denotes an object that cannot be released
+}
+
+- (void)release
+{
+ //do nothing
+}
+
+- (id)autorelease
+{
+ return self;
+}
+@end
--- /dev/null
+//
+// CellIp.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 14/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CellIp : NSObject {
+ NSString *ip;
+ NSString *ipComment;
+}
+-(id)init;
+-(void)dealloc;
+-(void)setCellIp:(NSString*)newip;
+-(NSString*) getCellIp;
+-(void)setCellComment:(NSString*)newcomment;
+-(NSString*) getCellComment;
+-(NSString*) description;
+@end
--- /dev/null
+//
+// CellIp.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 14/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "CellIp.h"
+
+
+@implementation CellIp
+// -------------------------------------------------------------------------------
+// init:
+// -------------------------------------------------------------------------------
+-(id)init {
+ [super init];
+ ip = @"0.0.0.0";
+ ipComment = @"-----";
+ return self;
+}
+
+// -------------------------------------------------------------------------------
+// dealloc:
+// -------------------------------------------------------------------------------
+-(void)dealloc{
+ if(ip) [ip release];
+ if(ipComment) [ipComment release];
+ [super dealloc];
+}
+
+// -------------------------------------------------------------------------------
+// setCellIp:
+// -------------------------------------------------------------------------------
+-(void)setCellIp:(NSString*)newip{
+ if(ip){
+ [ip release];
+ }
+ ip = [newip retain];
+}
+
+// -------------------------------------------------------------------------------
+// getCellIp:
+// -------------------------------------------------------------------------------
+-(NSString*) getCellIp{
+ return ip;
+}
+
+// -------------------------------------------------------------------------------
+// setCellComment:(NSString*)newcomment
+// -------------------------------------------------------------------------------
+-(void)setCellComment:(NSString*)newcomment{
+ if(ipComment){
+ [ipComment release];
+ }
+ ipComment = [newcomment retain];
+}
+
+// -------------------------------------------------------------------------------
+// getCellComment:
+// -------------------------------------------------------------------------------
+-(NSString*) getCellComment{
+ return ipComment;
+}
+
+// -------------------------------------------------------------------------------
+// description:
+// -------------------------------------------------------------------------------
+-(NSString*) description{
+ NSMutableString *desc = [[NSMutableString alloc] init];
+ [desc autorelease];
+ [desc appendString:ip];[desc appendString:@" "];[desc appendString:@"#"];[desc appendString:ipComment];[desc appendString:@"\n"];
+ return desc;
+}
+
+@end
--- /dev/null
+//
+// CredentialWindowController.h
+// AFSCommander
+//
+// Created by Claudio on 14/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "AFSMenuCredentialContoller.h"
+#import "global.h"
+
+@interface CredentialWindowController : NSObject {
+ id credentialView;
+ id afsMenuController;
+ id textEditUserName;
+ id textEditPassword;
+
+ BOOL taken;
+ NSString *uName;
+ NSString *uPwd;
+
+}
+
+- (IBAction) getToken:(id) sender;
+- (IBAction) closePanel:(id) sender;
+- (BOOL) takenToken;
+- (NSString*) uName;
+- (NSString*) uPwd;
+@end
--- /dev/null
+//
+// CredentialWindowController.m
+// AFSCommander
+//
+// Created by Claudio on 14/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "CredentialWindowController.h"
+#import "AFSPropertyManager.h"
+
+@implementation CredentialWindowController
+// -------------------------------------------------------------------------------
+// awakeFromNib:
+// -------------------------------------------------------------------------------
+- (void)awakeFromNib
+{
+ NSLog(@"awakeFromNib");
+}
+
+// -------------------------------------------------------------------------------
+// getToken:
+// -------------------------------------------------------------------------------
+- (IBAction) getToken:(id) sender
+{
+ uName = [((NSTextField*) textEditUserName) stringValue];
+ uPwd = [((NSTextField*) textEditPassword) stringValue];
+ if(uName == @"" || uPwd == @"") return;
+ taken = YES;
+
+
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kLogWindowClosed];
+}
+
+
+// -------------------------------------------------------------------------------
+// closePanel:
+// -------------------------------------------------------------------------------
+- (IBAction) closePanel:(id) sender
+{
+ taken = NO;
+ NSLog(@"closePanel");
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kLogWindowClosed];
+}
+
+
+// -------------------------------------------------------------------------------
+// takenToken:
+// -------------------------------------------------------------------------------
+- (BOOL) takenToken
+{
+ return taken;
+}
+
+// -------------------------------------------------------------------------------
+// takenToken:
+// -------------------------------------------------------------------------------
+- (NSString*) uName
+{
+ return uName;
+}
+
+// -------------------------------------------------------------------------------
+// takenToken:
+// -------------------------------------------------------------------------------
+- (NSString*) uPwd
+{
+ return uPwd;
+}
+
+@end
--- /dev/null
+//
+// DBCellElement.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 14/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+// Is the identification of a cell in he afs cell database
+
+#import <Cocoa/Cocoa.h>
+#import "CellIp.h"
+
+@interface DBCellElement : NSObject {
+ BOOL userDefaultForToken;
+ BOOL userDefaultCell;
+ NSString *cellName;
+ NSString *cellComment;
+ NSMutableArray *ipCellList;
+}
+
+/*!
+ @method init
+ @abstract
+ @discussion
+ */
+-(id) init;
+
+/*!
+ @method dealloc
+ @abstract
+ @discussion
+ */
+-(void) dealloc;
+
+/*!
+ @method setCellName
+ @abstract Set the cel name
+ @discussion Release the old cell name andretain the new one
+ @param name - Name of the cell
+ */
+-(void) setCellName:(NSString *)name;
+
+/*!
+ @method getCellName
+ @abstract Return the cell name
+ @discussion Return the cell name
+ @result Name of the cell
+ */
+-(NSString*) getCellName;
+
+/*!
+ @method setCellComment
+ @abstract Set the comment of the cell
+ @discussion Release the old cell comment and retain the new one
+ @param comment - Comment of the cell
+ */
+-(void) setCellComment:(NSString *)comment;
+
+/*!
+ @method getCellComment
+ @abstract Get the comment of the cell
+ @discussion Get the comment of the cell
+ @result comment of the cell
+
+ */
+-(NSString*) getCellComment;
+
+/*!
+ @method setUserDefaultForToken
+ @abstract Set the userde fault for tokens for the cell
+ @discussion If this cell is a cell used by user this flag will be true,
+ for multi cell authentication will be more cell with this flag on true.
+ @param isDefault - true if the this cell is default which the user want to ge token for
+
+ */
+-(void) setUserDefaultForToken:(BOOL)isDefault;
+
+/*!
+ @method userDefault
+ @abstract Return the user request for token flag
+ @discussion
+ @result if true this cell is used to get the tokens
+ */
+-(BOOL) userDefaultForToken;
+/*!
+ @method setUserDefaultCell
+ @abstract set the user default cell state
+ @discussion
+ @result set this cell as default user cell
+ */
+-(void) setUserDefaultCell:(BOOL)isDefault;
+/*!
+ @method userDefaultForCell
+ @abstract Return the user default cell state
+ @discussion
+ @result is true if this cell is the default cell
+ */
+-(BOOL) userDefaultForCell;
+/*!
+ @method addIpToCell
+ @abstract Add an ipcell description to this cell
+ @discussion Add a new IpCell class to this cell to specify the server ip
+ @param ip - CellIP class representing the ip of one server of the cell
+ */
+-(void) addIpToCell:(CellIp*)ip;
+
+/*!
+ @method getIp
+ @abstract Return the array containing all ip for thi cell
+ @discussion
+ @result The array containing all the cell ip decription class
+ */
+-(NSMutableArray*) getIp;
+
+/*!
+ @method description
+ @abstract Return the description of this cell
+ @discussion The description is the same stile used in CellServDB file(for a single cell)
+ so calling thi method for all cell will be reconstructed the entire afs configuration file for CellSerDB
+ @result The string description of the cell with all the ip
+ */
+-(NSString*) description;
+
+/*!
+ @method isEqual
+ @abstract Compare this object with anoter of the same type
+ @discussion Compare this object with the ine passed to the function
+ @param anObject - An object to compare with this.
+ @result true if the two object are the same.
+ */
+- (BOOL)isEqual:(id)anObject;
+
+- (BOOL)isEqualToString:(NSString *)aString;
+@end
--- /dev/null
+//
+// DBCellElement.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 14/06/07.
+// Copyright 2007 INFN. All rights reserved.
+//
+
+#import "DBCellElement.h"
+
+
+@implementation DBCellElement
+
+// -------------------------------------------------------------------------------
+// init:
+// -------------------------------------------------------------------------------
+-(id) init{
+ [super init];
+ userDefaultForToken = false;
+ userDefaultCell = false;
+ ipCellList = [[NSMutableArray alloc] init];
+ return self;
+}
+
+// -------------------------------------------------------------------------------
+// dealloc:
+// -------------------------------------------------------------------------------
+-(void) dealloc{
+ if(ipCellList) [ipCellList release];
+ if(cellName) [cellName release];
+ if(cellComment) [cellComment release];
+ [super dealloc];
+}
+
+// -------------------------------------------------------------------------------
+// setCellName:
+// -------------------------------------------------------------------------------
+-(void) setCellName:(NSString *)name
+{
+ if(cellName){
+ [cellName release];
+ }
+ cellName = [name retain];
+}
+
+// -------------------------------------------------------------------------------
+// getCellName:
+// -------------------------------------------------------------------------------
+-(NSString*) getCellName{
+ return cellName;
+}
+
+// -------------------------------------------------------------------------------
+// setCellComment:
+// -------------------------------------------------------------------------------
+-(void) setCellComment:(NSString *)comment{
+ if(cellComment){
+ [cellComment release];
+ }
+ cellComment = [comment retain];
+}
+
+// -------------------------------------------------------------------------------
+// getCellComment:
+// -------------------------------------------------------------------------------
+-(NSString*) getCellComment{
+ return cellComment;
+}
+
+// -------------------------------------------------------------------------------
+// setCellComment:
+// -------------------------------------------------------------------------------
+-(void) setUserDefaultForToken:(BOOL)isDefault {
+ userDefaultForToken = isDefault;
+}
+
+// -------------------------------------------------------------------------------
+// getCellComment:
+// -------------------------------------------------------------------------------
+-(BOOL) userDefaultForToken {
+ return userDefaultForToken;
+}
+
+// -------------------------------------------------------------------------------
+// setCellComment:
+// -------------------------------------------------------------------------------
+-(void) setUserDefaultCell:(BOOL)isDefault {
+ userDefaultCell = isDefault;
+}
+
+// -------------------------------------------------------------------------------
+// getCellComment:
+// -------------------------------------------------------------------------------
+-(BOOL) userDefaultForCell {
+ return userDefaultCell;
+}
+
+// -------------------------------------------------------------------------------
+// addIpToCell:
+// -------------------------------------------------------------------------------
+-(void) addIpToCell:(CellIp*)ip{
+ [ipCellList addObject:ip];
+}
+
+// -------------------------------------------------------------------------------
+// getIp:
+// -------------------------------------------------------------------------------
+-(NSMutableArray*) getIp{
+ return ipCellList;
+}
+
+// -------------------------------------------------------------------------------
+// description:
+// -------------------------------------------------------------------------------
+-(NSString*) description{
+ NSMutableString *desc = [[NSMutableString alloc] init];
+ // write the description according to CellServDB semantic
+ // write cell name
+ [desc appendString:@">"];[desc appendString:cellName];[desc appendString:@" "];[desc appendString:@"#"];[desc appendString:cellComment];[desc appendString:@"\n"];
+
+ // write all ip
+ for(int idx = 0, count = [ipCellList count]; idx < count; idx++){
+ CellIp *cellIP = (CellIp*)[ipCellList objectAtIndex:idx];
+ [desc appendString:[cellIP description]];
+ }
+
+ return desc;
+}
+
+// -------------------------------------------------------------------------------
+// description:
+// -------------------------------------------------------------------------------
+- (BOOL)isEqual:(id)anObject
+{
+ if(!anObject) return NO;
+ else return [cellName isEqual:[anObject getCellName]] && [cellComment isEqual:[anObject getCellComment]];
+}
+
+- (BOOL)isEqualToString:(NSString *)aString {
+ if(!aString) return NO;
+ else return [aString isEqualToString:[self getCellName]];
+}
+@end
--- /dev/null
+//
+// DialogUtility.h
+// OpenAFS
+//
+// Created by Claudio Bisegni on 01/05/08.
+// Copyright 2008 Infn. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface DialogUtility : NSObject {
+
+}
++ (BOOL) showMessageYesNo:(NSString*) message delegator:(id)delegator functionSelecter:(SEL)fSelector window:(NSWindow*)window;
+@end
--- /dev/null
+//
+// DialogUtility.m
+// OpenAFS
+//
+// Created by Claudio Bisegni on 01/05/08.
+// Copyright 2008 Infn. All rights reserved.
+//
+
+#import "DialogUtility.h"
+
+
+@implementation DialogUtility
+// -------------------------------------------------------------------------------
+// showMessage:
+// -------------------------------------------------------------------------------
++ (BOOL) showMessageYesNo:(NSString*) message delegator:(id)delegator functionSelecter:(SEL)fSelector window:(NSWindow*)window {
+ NSAlert *alert = [[[NSAlert alloc] init] autorelease];
+ [alert setMessageText:message];
+ [alert addButtonWithTitle:@"Yes"];
+ [alert addButtonWithTitle:@"No"];
+ [alert beginSheetModalForWindow:window
+ modalDelegate:delegator
+ didEndSelector:fSelector
+ contextInfo:nil];
+}
+@end
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">9C31</string>
+ <string key="IBDocument.InterfaceBuilderVersion">648</string>
+ <string key="IBDocument.AppKitVersion">949.26</string>
+ <string key="IBDocument.HIToolboxVersion">352.00</string>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="500241113">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="483479706">
+ <string key="NSClassName">AFSCommanderPref</string>
+ </object>
+ <object class="NSCustomObject" id="194032068">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="136977041">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="317089838">
+ <int key="NSWindowStyleMask">3</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{594, 606}, {360, 116}}</string>
+ <int key="NSWTFlags">1886912512</int>
+ <string key="NSWindowTitle">Panel</string>
+ <object class="NSMutableString" key="NSWindowClass">
+ <characters key="NS.bytes">NSPanel</characters>
+ </object>
+ <object class="NSMutableString" key="NSViewClass">
+ <characters key="NS.bytes">View</characters>
+ </object>
+ <string key="NSWindowContentMinSize">{213, 107}</string>
+ <object class="NSView" key="NSWindowView" id="897176997">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextField" id="1043652849">
+ <reference key="NSNextResponder" ref="897176997"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{19, 75}, {63, 14}}</string>
+ <reference key="NSSuperview" ref="897176997"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="285386094">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents">Username:</string>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <reference key="NSControlView" ref="1043652849"/>
+ <object class="NSColor" key="NSBackgroundColor" id="39862648">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="625691461">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="993541148">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="6777892">
+ <reference key="NSNextResponder" ref="897176997"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{21, 47}, {61, 14}}</string>
+ <reference key="NSSuperview" ref="897176997"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="941629363">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents">Password:</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="6777892"/>
+ <reference key="NSBackgroundColor" ref="39862648"/>
+ <reference key="NSTextColor" ref="625691461"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="167535534">
+ <reference key="NSNextResponder" ref="897176997"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{87, 73}, {253, 19}}</string>
+ <reference key="NSSuperview" ref="897176997"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="690718153">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="167535534"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <object class="NSColor" key="NSBackgroundColor" id="547292417">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="303282358">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="993541148"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="944739158">
+ <reference key="NSNextResponder" ref="897176997"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{87, 45}, {253, 19}}</string>
+ <reference key="NSSuperview" ref="897176997"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="590522050">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="944739158"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="547292417"/>
+ <reference key="NSTextColor" ref="303282358"/>
+ </object>
+ </object>
+ <object class="NSButton" id="394185848">
+ <reference key="NSNextResponder" ref="897176997"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{242, 13}, {103, 28}}</string>
+ <reference key="NSSuperview" ref="897176997"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="543624439">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Get Token</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="394185848"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <object class="NSFont" key="NSAlternateImage" id="961233622">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="37378773">
+ <reference key="NSNextResponder" ref="897176997"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{160, 13}, {80, 28}}</string>
+ <reference key="NSSuperview" ref="897176997"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="464336313">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Cancel</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="37378773"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="961233622"/>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {360, 116}}</string>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
+ <string key="NSMinSize">{213, 129}</string>
+ <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ </object>
+ <object class="NSCustomObject" id="643915252">
+ <string key="NSClassName">TokenCredentialController</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">afsCommanderPref</string>
+ <reference key="source" ref="643915252"/>
+ <reference key="destination" ref="483479706"/>
+ </object>
+ <int key="connectionID">8</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">credentialCommander</string>
+ <reference key="source" ref="483479706"/>
+ <reference key="destination" ref="643915252"/>
+ </object>
+ <int key="connectionID">9</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">credentialSheet</string>
+ <reference key="source" ref="483479706"/>
+ <reference key="destination" ref="317089838"/>
+ </object>
+ <int key="connectionID">10</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">credentialPanel</string>
+ <reference key="source" ref="643915252"/>
+ <reference key="destination" ref="317089838"/>
+ </object>
+ <int key="connectionID">11</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textEditUserName</string>
+ <reference key="source" ref="643915252"/>
+ <reference key="destination" ref="167535534"/>
+ </object>
+ <int key="connectionID">18</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textEditPassword</string>
+ <reference key="source" ref="643915252"/>
+ <reference key="destination" ref="944739158"/>
+ </object>
+ <int key="connectionID">19</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">getToken:</string>
+ <reference key="source" ref="643915252"/>
+ <reference key="destination" ref="394185848"/>
+ </object>
+ <int key="connectionID">20</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">closePanel:</string>
+ <reference key="source" ref="643915252"/>
+ <reference key="destination" ref="37378773"/>
+ </object>
+ <int key="connectionID">21</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="500241113"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="483479706"/>
+ <reference key="parent" ref="0"/>
+ <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="194032068"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="317089838"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="897176997"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Panel</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">6</int>
+ <reference key="object" ref="897176997"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1043652849"/>
+ <reference ref="6777892"/>
+ <reference ref="167535534"/>
+ <reference ref="944739158"/>
+ <reference ref="394185848"/>
+ <reference ref="37378773"/>
+ </object>
+ <reference key="parent" ref="317089838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="1043652849"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="285386094"/>
+ </object>
+ <reference key="parent" ref="897176997"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="6777892"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="941629363"/>
+ </object>
+ <reference key="parent" ref="897176997"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="167535534"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="690718153"/>
+ </object>
+ <reference key="parent" ref="897176997"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">15</int>
+ <reference key="object" ref="944739158"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="590522050"/>
+ </object>
+ <reference key="parent" ref="897176997"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">16</int>
+ <reference key="object" ref="394185848"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="543624439"/>
+ </object>
+ <reference key="parent" ref="897176997"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">17</int>
+ <reference key="object" ref="37378773"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="464336313"/>
+ </object>
+ <reference key="parent" ref="897176997"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">7</int>
+ <reference key="object" ref="643915252"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">TokenCredentialController</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">23</int>
+ <reference key="object" ref="285386094"/>
+ <reference key="parent" ref="1043652849"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">24</int>
+ <reference key="object" ref="941629363"/>
+ <reference key="parent" ref="6777892"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">25</int>
+ <reference key="object" ref="690718153"/>
+ <reference key="parent" ref="167535534"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">26</int>
+ <reference key="object" ref="590522050"/>
+ <reference key="parent" ref="944739158"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">27</int>
+ <reference key="object" ref="543624439"/>
+ <reference key="parent" ref="394185848"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">28</int>
+ <reference key="object" ref="464336313"/>
+ <reference key="parent" ref="37378773"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="136977041"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>12.IBPluginDependency</string>
+ <string>12.ImportedFromIB2</string>
+ <string>13.IBPluginDependency</string>
+ <string>13.ImportedFromIB2</string>
+ <string>14.IBPluginDependency</string>
+ <string>14.ImportedFromIB2</string>
+ <string>15.CustomClassName</string>
+ <string>15.IBPluginDependency</string>
+ <string>15.ImportedFromIB2</string>
+ <string>16.IBPluginDependency</string>
+ <string>16.ImportedFromIB2</string>
+ <string>17.IBPluginDependency</string>
+ <string>17.ImportedFromIB2</string>
+ <string>5.IBPluginDependency</string>
+ <string>5.ImportedFromIB2</string>
+ <string>5.windowTemplate.hasMinSize</string>
+ <string>5.windowTemplate.minSize</string>
+ <string>6.IBPluginDependency</string>
+ <string>6.ImportedFromIB2</string>
+ <string>7.IBPluginDependency</string>
+ <string>7.ImportedFromIB2</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1" id="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>NSSecureTextField</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <string>{213, 107}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">28</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">AFSCommanderPref</string>
+ <string key="superclassName">NSPreferencePane</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addRemoveCell:</string>
+ <string>afsMenuActivationEvent:</string>
+ <string>aklogSwitchEvent:</string>
+ <string>getNewToken:</string>
+ <string>info:</string>
+ <string>refreshConfiguration:</string>
+ <string>saveCacheManagerParam:</string>
+ <string>saveConfiguration:</string>
+ <string>searchCellTextEvent:</string>
+ <string>showCellIP:</string>
+ <string>startStopAfs:</string>
+ <string>tableDoubleAction:</string>
+ <string>unlog:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addCellButton</string>
+ <string>afsCommanderView</string>
+ <string>afsDB</string>
+ <string>afsDefaultCellLabel</string>
+ <string>afsMenucheckBox</string>
+ <string>afsRootMountPoint</string>
+ <string>afsVersionLabel</string>
+ <string>cacheDimension</string>
+ <string>cellIpButton</string>
+ <string>cellList</string>
+ <string>credentialCommander</string>
+ <string>credentialSheet</string>
+ <string>dCacheDim</string>
+ <string>daemonNumber</string>
+ <string>dynRoot</string>
+ <string>groupsBox</string>
+ <string>infoController</string>
+ <string>infoSheet</string>
+ <string>installationPathTextField</string>
+ <string>ipConfControllerCommander</string>
+ <string>ipConfigurationSheet</string>
+ <string>labelSaveResult</string>
+ <string>nVolEntry</string>
+ <string>refreshConfigurationButton</string>
+ <string>removeCellButton</string>
+ <string>saveConfigurationButton</string>
+ <string>startStopButton</string>
+ <string>statCacheEntry</string>
+ <string>textSearchField</string>
+ <string>tokensButton</string>
+ <string>tokensTable</string>
+ <string>unlogButton</string>
+ <string>useAklogCheck</string>
+ <string>verbose</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>NSView</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSBox</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSSearchField</string>
+ <string>NSButton</string>
+ <string>id</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">AFSCommanderPref.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">AFSCommanderPref</string>
+ <string key="superclassName">NSPreferencePane</string>
+ <object class="NSMutableDictionary" key="outlets">
+ <string key="NS.key.0">cellNameTextEdit</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">FirstResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSPreferencePane</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>_firstKeyView</string>
+ <string>_initialKeyView</string>
+ <string>_lastKeyView</string>
+ <string>_window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSView</string>
+ <string>NSView</string>
+ <string>NSView</string>
+ <string>NSWindow</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">TokenCredentialController</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>closePanel:</string>
+ <string>getToken:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>afsCommanderPref</string>
+ <string>credentialPanel</string>
+ <string>textEditPassword</string>
+ <string>textEditUserName</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">TokenCredentialController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">TokenCredentialController</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <nil key="IBDocument.LastKnownRelativeProjectPath"/>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ </data>
+</archive>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">9C31</string>
+ <string key="IBDocument.InterfaceBuilderVersion">648</string>
+ <string key="IBDocument.AppKitVersion">949.26</string>
+ <string key="IBDocument.HIToolboxVersion">352.00</string>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="429600039">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="657952263">
+ <string key="NSClassName">AFSCommanderPref</string>
+ </object>
+ <object class="NSCustomObject" id="930067686">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="784296185">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="249730404">
+ <int key="NSWindowStyleMask">11</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{622, 526}, {525, 370}}</string>
+ <int key="NSWTFlags">813170688</int>
+ <string key="NSWindowTitle">Panel</string>
+ <object class="NSMutableString" key="NSWindowClass">
+ <characters key="NS.bytes">NSPanel</characters>
+ </object>
+ <object class="NSMutableString" key="NSViewClass">
+ <characters key="NS.bytes">View</characters>
+ </object>
+ <string key="NSWindowContentMinSize">{525, 345}</string>
+ <object class="NSView" key="NSWindowView" id="274468230">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSButton" id="800283714">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{430, 13}, {80, 28}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="1042040079">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Ok</string>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <reference key="NSControlView" ref="800283714"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <object class="NSFont" key="NSAlternateImage" id="845391598">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="956015576">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{348, 13}, {80, 28}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="441391248">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Cancel</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="956015576"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="845391598"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="680338282">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{51, 344}, {54, 16}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="496687085">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">272760832</int>
+ <string type="base64-UTF8" key="NSContents">QWZzIENlbGw6Cg</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="680338282"/>
+ <object class="NSColor" key="NSBackgroundColor" id="319048697">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor" id="315060860">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="513483274">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="350675897">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSBox" id="338197250">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSView" id="612441040">
+ <reference key="NSNextResponder" ref="338197250"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSScrollView" id="585065386">
+ <reference key="NSNextResponder" ref="612441040"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="786132725">
+ <reference key="NSNextResponder" ref="585065386"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableView" id="234348651">
+ <reference key="NSNextResponder" ref="786132725"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{453, 190}</string>
+ <reference key="NSSuperview" ref="786132725"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTableHeaderView" key="NSHeaderView" id="367895900">
+ <reference key="NSNextResponder" ref="336840699"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{453, 17}</string>
+ <reference key="NSSuperview" ref="336840699"/>
+ <reference key="NSTableView" ref="234348651"/>
+ </object>
+ <object class="_NSCornerView" key="NSCornerView" id="211425262">
+ <reference key="NSNextResponder" ref="585065386"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{-22, 0}, {12, 17}}</string>
+ <reference key="NSSuperview" ref="585065386"/>
+ </object>
+ <object class="NSMutableArray" key="NSTableColumns">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableColumn" id="304822933">
+ <string key="NSIdentifier">1</string>
+ <double key="NSWidth">2.080000e+02</double>
+ <double key="NSMinWidth">4.000000e+01</double>
+ <double key="NSMaxWidth">1.000000e+03</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">IP</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor" id="87486732">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="446718123">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">headerTextColor</string>
+ <reference key="NSColor" ref="350675897"/>
+ </object>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="204595378">
+ <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags2">133120</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="234348651"/>
+ <object class="NSColor" key="NSBackgroundColor" id="189347581">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlBackgroundColor</string>
+ <reference key="NSColor" ref="315060860"/>
+ </object>
+ <reference key="NSTextColor" ref="513483274"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="234348651"/>
+ </object>
+ <object class="NSTableColumn" id="1066913939">
+ <string key="NSIdentifier">2</string>
+ <double key="NSWidth">2.389761e+02</double>
+ <double key="NSMinWidth">5.997607e+01</double>
+ <double key="NSMaxWidth">1.000000e+03</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Comment</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="87486732"/>
+ <reference key="NSTextColor" ref="446718123"/>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="228999791">
+ <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags2">133120</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="234348651"/>
+ <reference key="NSBackgroundColor" ref="189347581"/>
+ <reference key="NSTextColor" ref="513483274"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="234348651"/>
+ </object>
+ </object>
+ <double key="NSIntercellSpacingWidth">3.000000e+00</double>
+ <double key="NSIntercellSpacingHeight">2.000000e+00</double>
+ <object class="NSColor" key="NSBackgroundColor" id="875926337">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ <object class="NSColor" key="NSGridColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">gridColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC41AA</bytes>
+ </object>
+ </object>
+ <double key="NSRowHeight">1.700000e+01</double>
+ <int key="NSTvFlags">-692060160</int>
+ <int key="NSColumnAutoresizingStyle">4</int>
+ <int key="NSDraggingSourceMaskForLocal">15</int>
+ <int key="NSDraggingSourceMaskForNonLocal">0</int>
+ <bool key="NSAllowsTypeSelect">YES</bool>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 17}, {453, 190}}</string>
+ <reference key="NSSuperview" ref="585065386"/>
+ <reference key="NSNextKeyView" ref="234348651"/>
+ <reference key="NSDocView" ref="234348651"/>
+ <reference key="NSBGColor" ref="189347581"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="592355064">
+ <reference key="NSNextResponder" ref="585065386"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{-22, 17}, {11, 189}}</string>
+ <reference key="NSSuperview" ref="585065386"/>
+ <int key="NSsFlags">256</int>
+ <reference key="NSTarget" ref="585065386"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">9.947369e-01</double>
+ </object>
+ <object class="NSScroller" id="814656055">
+ <reference key="NSNextResponder" ref="585065386"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{1, -22}, {442, 11}}</string>
+ <reference key="NSSuperview" ref="585065386"/>
+ <int key="NSsFlags">257</int>
+ <reference key="NSTarget" ref="585065386"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">9.757174e-01</double>
+ </object>
+ <object class="NSClipView" id="336840699">
+ <reference key="NSNextResponder" ref="585065386"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="367895900"/>
+ </object>
+ <string key="NSFrame">{{1, 0}, {453, 17}}</string>
+ <reference key="NSSuperview" ref="585065386"/>
+ <reference key="NSNextKeyView" ref="367895900"/>
+ <reference key="NSDocView" ref="367895900"/>
+ <reference key="NSBGColor" ref="189347581"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <reference ref="211425262"/>
+ </object>
+ <string key="NSFrame">{{16, 30}, {455, 208}}</string>
+ <reference key="NSSuperview" ref="612441040"/>
+ <reference key="NSNextKeyView" ref="786132725"/>
+ <int key="NSsFlags">562</int>
+ <reference key="NSVScroller" ref="592355064"/>
+ <reference key="NSHScroller" ref="814656055"/>
+ <reference key="NSContentView" ref="786132725"/>
+ <reference key="NSHeaderClipView" ref="336840699"/>
+ <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
+ </object>
+ </object>
+ <string key="NSFrame">{{2, 2}, {487, 249}}</string>
+ <reference key="NSSuperview" ref="338197250"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{17, 41}, {491, 266}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Authentication server ip</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor" id="383485033">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <reference key="NSColor" ref="875926337"/>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="612441040"/>
+ <int key="NSBorderType">3</int>
+ <int key="NSBoxType">0</int>
+ <int key="NSTitlePosition">2</int>
+ <bool key="NSTransparent">NO</bool>
+ </object>
+ <object class="NSButton" id="216429474">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{331, 52}, {75, 16}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="305136955">
+ <int key="NSCellFlags">604110336</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string key="NSContents">Delete</string>
+ <object class="NSFont" key="NSSupport" id="22">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">9.000000e+00</double>
+ <int key="NSfFlags">3614</int>
+ </object>
+ <reference key="NSControlView" ref="216429474"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <object class="NSFont" key="NSAlternateImage" id="160758642">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">9.000000e+00</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="655780437">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{412, 52}, {75, 16}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="675738899">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string key="NSContents">Add</string>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="655780437"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="160758642"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="953679499">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{44, 314}, {61, 16}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="847361982">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">272760832</int>
+ <string type="base64-UTF8" key="NSContents">Q29tbWVudDoKA</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="953679499"/>
+ <reference key="NSBackgroundColor" ref="319048697"/>
+ <reference key="NSTextColor" ref="513483274"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="379757882">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">266</int>
+ <string key="NSFrame">{{110, 344}, {389, 19}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="620196816">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <string key="NSPlaceholderString">cell name</string>
+ <reference key="NSControlView" ref="379757882"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="383485033"/>
+ <object class="NSColor" key="NSTextColor" id="563830179">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="350675897"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="523190513">
+ <reference key="NSNextResponder" ref="274468230"/>
+ <int key="NSvFlags">266</int>
+ <string key="NSFrame">{{110, 315}, {389, 19}}</string>
+ <reference key="NSSuperview" ref="274468230"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="115478350">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <string key="NSPlaceholderString">Comment</string>
+ <reference key="NSControlView" ref="523190513"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="383485033"/>
+ <reference key="NSTextColor" ref="563830179"/>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrameSize">{525, 370}</string>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
+ <string key="NSMinSize">{525, 367}</string>
+ <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ </object>
+ <object class="NSCustomObject" id="446101933">
+ <string key="NSClassName">IpConfiguratorCommander</string>
+ </object>
+ <object class="NSCustomObject" id="934847714">
+ <string key="NSClassName">AFSCommanderPref</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">ipConfigurationSheet</string>
+ <reference key="source" ref="657952263"/>
+ <reference key="destination" ref="249730404"/>
+ </object>
+ <int key="connectionID">15</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cancel:</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="956015576"/>
+ </object>
+ <int key="connectionID">17</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">save:</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="800283714"/>
+ </object>
+ <int key="connectionID">18</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">confPanel</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="249730404"/>
+ </object>
+ <int key="connectionID">19</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">afsCommanderPref</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="657952263"/>
+ </object>
+ <int key="connectionID">20</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">ipConfControllerCommander</string>
+ <reference key="source" ref="657952263"/>
+ <reference key="destination" ref="446101933"/>
+ </object>
+ <int key="connectionID">22</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">tableViewCellIP</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="234348651"/>
+ </object>
+ <int key="connectionID">40</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">deleteButton</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="216429474"/>
+ </object>
+ <int key="connectionID">41</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">createButton</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="655780437"/>
+ </object>
+ <int key="connectionID">43</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cancelIP:</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="216429474"/>
+ </object>
+ <int key="connectionID">48</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">createNewIP:</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="655780437"/>
+ </object>
+ <int key="connectionID">50</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="249730404"/>
+ <reference key="destination" ref="446101933"/>
+ </object>
+ <int key="connectionID">52</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textFieldCellName</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="379757882"/>
+ </object>
+ <int key="connectionID">57</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textFieldComment</string>
+ <reference key="source" ref="446101933"/>
+ <reference key="destination" ref="523190513"/>
+ </object>
+ <int key="connectionID">58</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="429600039"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="657952263"/>
+ <reference key="parent" ref="0"/>
+ <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="930067686"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="784296185"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="249730404"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="274468230"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">IpConfigurator</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">6</int>
+ <reference key="object" ref="274468230"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="800283714"/>
+ <reference ref="956015576"/>
+ <reference ref="680338282"/>
+ <reference ref="338197250"/>
+ <reference ref="216429474"/>
+ <reference ref="655780437"/>
+ <reference ref="953679499"/>
+ <reference ref="379757882"/>
+ <reference ref="523190513"/>
+ </object>
+ <reference key="parent" ref="249730404"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">7</int>
+ <reference key="object" ref="800283714"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1042040079"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">8</int>
+ <reference key="object" ref="956015576"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="441391248"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="680338282"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="496687085"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">25</int>
+ <reference key="object" ref="338197250"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="585065386"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">38</int>
+ <reference key="object" ref="216429474"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="305136955"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">39</int>
+ <reference key="object" ref="655780437"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="675738899"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">53</int>
+ <reference key="object" ref="953679499"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="847361982"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">55</int>
+ <reference key="object" ref="379757882"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="620196816"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">56</int>
+ <reference key="object" ref="523190513"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="115478350"/>
+ </object>
+ <reference key="parent" ref="274468230"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">16</int>
+ <reference key="object" ref="446101933"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">IpConfiguratorCommander1</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">21</int>
+ <reference key="object" ref="934847714"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">AFSCommanderPref</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">62</int>
+ <reference key="object" ref="1042040079"/>
+ <reference key="parent" ref="800283714"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">63</int>
+ <reference key="object" ref="441391248"/>
+ <reference key="parent" ref="956015576"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">64</int>
+ <reference key="object" ref="496687085"/>
+ <reference key="parent" ref="680338282"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">65</int>
+ <reference key="object" ref="305136955"/>
+ <reference key="parent" ref="216429474"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">66</int>
+ <reference key="object" ref="675738899"/>
+ <reference key="parent" ref="655780437"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">67</int>
+ <reference key="object" ref="847361982"/>
+ <reference key="parent" ref="953679499"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">68</int>
+ <reference key="object" ref="620196816"/>
+ <reference key="parent" ref="379757882"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">69</int>
+ <reference key="object" ref="115478350"/>
+ <reference key="parent" ref="523190513"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">27</int>
+ <reference key="object" ref="585065386"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="367895900"/>
+ <reference ref="814656055"/>
+ <reference ref="592355064"/>
+ <reference ref="234348651"/>
+ </object>
+ <reference key="parent" ref="338197250"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">74</int>
+ <reference key="object" ref="367895900"/>
+ <reference key="parent" ref="585065386"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">73</int>
+ <reference key="object" ref="814656055"/>
+ <reference key="parent" ref="585065386"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">72</int>
+ <reference key="object" ref="592355064"/>
+ <reference key="parent" ref="585065386"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">28</int>
+ <reference key="object" ref="234348651"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1066913939"/>
+ <reference ref="304822933"/>
+ </object>
+ <reference key="parent" ref="585065386"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">30</int>
+ <reference key="object" ref="1066913939"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="228999791"/>
+ </object>
+ <reference key="parent" ref="234348651"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">29</int>
+ <reference key="object" ref="304822933"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="204595378"/>
+ </object>
+ <reference key="parent" ref="234348651"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">70</int>
+ <reference key="object" ref="204595378"/>
+ <reference key="parent" ref="304822933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">71</int>
+ <reference key="object" ref="228999791"/>
+ <reference key="parent" ref="1066913939"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>-3.IBPluginDependency</string>
+ <string>-3.ImportedFromIB2</string>
+ <string>14.IBPluginDependency</string>
+ <string>14.ImportedFromIB2</string>
+ <string>16.IBPluginDependency</string>
+ <string>16.ImportedFromIB2</string>
+ <string>21.IBPluginDependency</string>
+ <string>21.ImportedFromIB2</string>
+ <string>25.IBPluginDependency</string>
+ <string>25.ImportedFromIB2</string>
+ <string>27.IBPluginDependency</string>
+ <string>27.ImportedFromIB2</string>
+ <string>28.IBPluginDependency</string>
+ <string>28.ImportedFromIB2</string>
+ <string>29.IBPluginDependency</string>
+ <string>29.ImportedFromIB2</string>
+ <string>30.IBPluginDependency</string>
+ <string>30.ImportedFromIB2</string>
+ <string>38.IBPluginDependency</string>
+ <string>38.ImportedFromIB2</string>
+ <string>39.IBPluginDependency</string>
+ <string>39.ImportedFromIB2</string>
+ <string>5.IBPluginDependency</string>
+ <string>5.ImportedFromIB2</string>
+ <string>5.windowTemplate.hasMinSize</string>
+ <string>5.windowTemplate.minSize</string>
+ <string>53.IBPluginDependency</string>
+ <string>53.ImportedFromIB2</string>
+ <string>55.IBPluginDependency</string>
+ <string>55.ImportedFromIB2</string>
+ <string>56.IBPluginDependency</string>
+ <string>56.ImportedFromIB2</string>
+ <string>6.IBPluginDependency</string>
+ <string>6.ImportedFromIB2</string>
+ <string>7.IBPluginDependency</string>
+ <string>7.ImportedFromIB2</string>
+ <string>70.IBShouldRemoveOnLegacySave</string>
+ <string>71.IBShouldRemoveOnLegacySave</string>
+ <string>72.IBShouldRemoveOnLegacySave</string>
+ <string>73.IBShouldRemoveOnLegacySave</string>
+ <string>74.IBShouldRemoveOnLegacySave</string>
+ <string>8.IBPluginDependency</string>
+ <string>8.ImportedFromIB2</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1" id="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <string>{525, 345}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">74</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">AFSCommanderPref</string>
+ <string key="superclassName">NSPreferencePane</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addRemoveCell:</string>
+ <string>afsMenuActivationEvent:</string>
+ <string>aklogSwitchEvent:</string>
+ <string>getNewToken:</string>
+ <string>info:</string>
+ <string>refreshConfiguration:</string>
+ <string>saveCacheManagerParam:</string>
+ <string>saveConfiguration:</string>
+ <string>searchCellTextEvent:</string>
+ <string>showCellIP:</string>
+ <string>startStopAfs:</string>
+ <string>tableDoubleAction:</string>
+ <string>unlog:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addCellButton</string>
+ <string>afsCommanderView</string>
+ <string>afsDB</string>
+ <string>afsDefaultCellLabel</string>
+ <string>afsMenucheckBox</string>
+ <string>afsRootMountPoint</string>
+ <string>afsVersionLabel</string>
+ <string>cacheDimension</string>
+ <string>cellIpButton</string>
+ <string>cellList</string>
+ <string>credentialCommander</string>
+ <string>credentialSheet</string>
+ <string>dCacheDim</string>
+ <string>daemonNumber</string>
+ <string>dynRoot</string>
+ <string>groupsBox</string>
+ <string>infoController</string>
+ <string>infoSheet</string>
+ <string>installationPathTextField</string>
+ <string>ipConfControllerCommander</string>
+ <string>ipConfigurationSheet</string>
+ <string>labelSaveResult</string>
+ <string>nVolEntry</string>
+ <string>refreshConfigurationButton</string>
+ <string>removeCellButton</string>
+ <string>saveConfigurationButton</string>
+ <string>startStopButton</string>
+ <string>statCacheEntry</string>
+ <string>textSearchField</string>
+ <string>tokensButton</string>
+ <string>tokensTable</string>
+ <string>unlogButton</string>
+ <string>useAklogCheck</string>
+ <string>verbose</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>NSView</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSBox</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSSearchField</string>
+ <string>NSButton</string>
+ <string>id</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">AFSCommanderPref.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">AFSCommanderPref</string>
+ <string key="superclassName">NSPreferencePane</string>
+ <object class="NSMutableDictionary" key="actions">
+ <string key="NS.key.0">addMoifyCell:</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <string key="NS.key.0">cellNameTextEdit</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">FirstResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">IpConfiguratorCommander</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancel:</string>
+ <string>cancelIP:</string>
+ <string>createNewIP:</string>
+ <string>save:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>afsCommanderPref</string>
+ <string>confPanel</string>
+ <string>createButton</string>
+ <string>deleteButton</string>
+ <string>modifyButton</string>
+ <string>tableViewCellIP</string>
+ <string>textFieldCellName</string>
+ <string>textFieldComment</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">IpConfiguratorCommander.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">IpConfiguratorCommander</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSPreferencePane</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>_firstKeyView</string>
+ <string>_initialKeyView</string>
+ <string>_lastKeyView</string>
+ <string>_window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSView</string>
+ <string>NSView</string>
+ <string>NSView</string>
+ <string>NSWindow</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../../AFSCommander.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ </data>
+</archive>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>AfsButtonShutdown</key>
+ <string>Shutdown</string>
+ <key>AfsButtonStartup</key>
+ <string>Startup</string>
+ <key>AfsOff</key>
+ <string>Afs is off</string>
+ <key>AfsOn</key>
+ <string>Afs is on</string>
+ <key>ConfFileNotExits</key>
+ <string>Configuration files not found</string>
+ <key>ConfigurationSaved</key>
+ <string>Configuration file has been saved</string>
+ <key>DevelopInfo</key>
+ <string>Developed by Claudio Bisegni</string>
+ <key>NewCellComment</key>
+ <string>Cell comment</string>
+ <key>NewCellName</key>
+ <string>Cell name</string>
+ <key>PathDontContainAfsInstallation</key>
+ <string>Installation path doesn't contain an afs installation</string>
+ <key>PathNotEmpty</key>
+ <string>Path can't be empty</string>
+ <key>ThisCellFOError</key>
+ <string>ThisCell file open error</string>
+ <key>UserNotAuth</key>
+ <string>User not autenticated</string>
+ <key>MenuLogin</key>
+ <string>Get token</string>
+ <key>MenuUnlog</key>
+ <string>Release token</string>
+ <key>SavedCacheConfiguration</key>
+ <string>Cache Configuration File Saved</string>
+ <key>BadAfsRootMountPoint</key>
+ <string>Error in afs volume mount point</string>
+ <key>KerberosAuthError</key>
+ <string>Error in Kerberos Authetincation</string>
+ <key>BadAfsPath</key>
+ <string>Bad AFS mount point</string>
+ <key>DoYouWantCreateTheDirectory</key>
+ <string>Do you want create the directory </string>
+ <key>DirectoryCreated</key>
+ <string>Directory and launchd configuration file created</string>
+ <key>ErrorCreatingDirectory</key>
+ <string>Error creating directory</string>
+</dict>
+</plist>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">9D34</string>
+ <string key="IBDocument.InterfaceBuilderVersion">670</string>
+ <string key="IBDocument.AppKitVersion">949.33</string>
+ <string key="IBDocument.HIToolboxVersion">352.00</string>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="6"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="84888716">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="773588579">
+ <string key="NSClassName">AFSCommanderPref</string>
+ </object>
+ <object class="NSCustomObject" id="270520968">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="173116405">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="61231707">
+ <int key="NSWindowStyleMask">15</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{423, 652}, {595, 486}}</string>
+ <int key="NSWTFlags">1081606144</int>
+ <string type="base64-UTF8" key="NSWindowTitle">PDwgZG8gbm90IGxvY2FsaXplID4+A</string>
+ <string key="NSWindowClass">NSWindow</string>
+ <object class="NSMutableString" key="NSViewClass">
+ <characters key="NS.bytes">View</characters>
+ </object>
+ <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <object class="NSView" key="NSWindowView" id="645279396">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextField" id="415603882">
+ <reference key="NSNextResponder" ref="645279396"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{17, 0}, {488, 17}}</string>
+ <reference key="NSSuperview" ref="645279396"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="947523856">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="22">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">9.000000e+00</double>
+ <int key="NSfFlags">3614</int>
+ </object>
+ <reference key="NSControlView" ref="415603882"/>
+ <object class="NSColor" key="NSBackgroundColor" id="568311573">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor" id="277525007">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="276594776">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="39932154">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSBox" id="748501112">
+ <reference key="NSNextResponder" ref="645279396"/>
+ <int key="NSvFlags">266</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSView" id="520583273">
+ <reference key="NSNextResponder" ref="748501112"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSButton" id="709840556">
+ <reference key="NSNextResponder" ref="520583273"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{13, 9}, {109, 28}}</string>
+ <reference key="NSSuperview" ref="520583273"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="675447498">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">On</string>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <reference key="NSControlView" ref="709840556"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="26"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="871603218">
+ <reference key="NSNextResponder" ref="520583273"/>
+ <int key="NSvFlags">265</int>
+ <string key="NSFrame">{{526, 12}, {21, 23}}</string>
+ <reference key="NSSuperview" ref="520583273"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="1009755861">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="275217208">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.300000e+01</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <reference key="NSControlView" ref="871603218"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">33</int>
+ <reference key="NSAlternateImage" ref="275217208"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="239701474">
+ <reference key="NSNextResponder" ref="520583273"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{273, 15}, {170, 18}}</string>
+ <reference key="NSSuperview" ref="520583273"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="855912809">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Get Krb5 credential at login</string>
+ <object class="NSFont" key="NSSupport" id="894635401">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="239701474"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">130</int>
+ <object class="NSCustomResource" key="NSNormalImage" id="1069694397">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSSwitch</string>
+ </object>
+ <object class="NSButtonImageSource" key="NSAlternateImage" id="894136682">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="713307252">
+ <reference key="NSNextResponder" ref="520583273"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{138, 15}, {117, 18}}</string>
+ <reference key="NSSuperview" ref="520583273"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="98390178">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">Start AFS at boot</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="713307252"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">130</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {562, 49}}</string>
+ <reference key="NSSuperview" ref="748501112"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{17, 417}, {564, 51}}</string>
+ <reference key="NSSuperview" ref="645279396"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Box</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor" id="878835253">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor" id="400556243">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="520583273"/>
+ <int key="NSBorderType">1</int>
+ <int key="NSBoxType">0</int>
+ <int key="NSTitlePosition">0</int>
+ <bool key="NSTransparent">NO</bool>
+ <object class="NSColor" key="NSBorderColor2">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwIDAgMC40MQA</bytes>
+ </object>
+ </object>
+ <object class="NSTabView" id="739317740">
+ <reference key="NSNextResponder" ref="645279396"/>
+ <int key="NSvFlags">274</int>
+ <string key="NSFrame">{{13, 15}, {572, 401}}</string>
+ <reference key="NSSuperview" ref="645279396"/>
+ <object class="NSMutableArray" key="NSTabViewItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTabViewItem" id="269508902">
+ <object class="NSMutableString" key="NSIdentifier">
+ <characters key="NS.bytes">1</characters>
+ </object>
+ <object class="NSView" key="NSView" id="1020318718">
+ <reference key="NSNextResponder" ref="739317740"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSScrollView" id="440720679">
+ <reference key="NSNextResponder" ref="1020318718"/>
+ <int key="NSvFlags">266</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="457121079">
+ <reference key="NSNextResponder" ref="440720679"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableView" id="313963250">
+ <reference key="NSNextResponder" ref="457121079"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{516, 140}</string>
+ <reference key="NSSuperview" ref="457121079"/>
+ <int key="NSTag">1</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTableHeaderView" key="NSHeaderView" id="1048519426">
+ <reference key="NSNextResponder" ref="214413149"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{516, 17}</string>
+ <reference key="NSSuperview" ref="214413149"/>
+ <reference key="NSTableView" ref="313963250"/>
+ </object>
+ <object class="_NSCornerView" key="NSCornerView" id="360324124">
+ <reference key="NSNextResponder" ref="440720679"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{-22, 0}, {12, 17}}</string>
+ <reference key="NSSuperview" ref="440720679"/>
+ </object>
+ <object class="NSMutableArray" key="NSTableColumns">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableColumn" id="10567446">
+ <double key="NSWidth">5.130000e+02</double>
+ <double key="NSMinWidth">4.109668e+01</double>
+ <double key="NSMaxWidth">1.000000e+03</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Token</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="716292118">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">headerTextColor</string>
+ <reference key="NSColor" ref="39932154"/>
+ </object>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="361287568">
+ <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags2">264192</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="313963250"/>
+ <object class="NSColor" key="NSBackgroundColor" id="252569531">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlBackgroundColor</string>
+ <reference key="NSColor" ref="277525007"/>
+ </object>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <reference key="NSTableView" ref="313963250"/>
+ </object>
+ </object>
+ <double key="NSIntercellSpacingWidth">3.000000e+00</double>
+ <double key="NSIntercellSpacingHeight">2.000000e+00</double>
+ <reference key="NSBackgroundColor" ref="400556243"/>
+ <object class="NSColor" key="NSGridColor" id="850792713">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">gridColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC41AA</bytes>
+ </object>
+ </object>
+ <double key="NSRowHeight">1.200000e+01</double>
+ <int key="NSTvFlags">-692060160</int>
+ <int key="NSGridStyleMask">2</int>
+ <int key="NSColumnAutoresizingStyle">5</int>
+ <int key="NSDraggingSourceMaskForLocal">15</int>
+ <int key="NSDraggingSourceMaskForNonLocal">0</int>
+ <bool key="NSAllowsTypeSelect">YES</bool>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 17}, {516, 140}}</string>
+ <reference key="NSSuperview" ref="440720679"/>
+ <reference key="NSNextKeyView" ref="313963250"/>
+ <reference key="NSDocView" ref="313963250"/>
+ <reference key="NSBGColor" ref="252569531"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="884311606">
+ <reference key="NSNextResponder" ref="440720679"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{494, 17}, {11, 80}}</string>
+ <reference key="NSSuperview" ref="440720679"/>
+ <int key="NSsFlags">256</int>
+ <reference key="NSTarget" ref="440720679"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">8.791209e-01</double>
+ </object>
+ <object class="NSScroller" id="258996751">
+ <reference key="NSNextResponder" ref="440720679"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{1, 97}, {505, 11}}</string>
+ <reference key="NSSuperview" ref="440720679"/>
+ <int key="NSsFlags">257</int>
+ <reference key="NSTarget" ref="440720679"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">9.980198e-01</double>
+ </object>
+ <object class="NSClipView" id="214413149">
+ <reference key="NSNextResponder" ref="440720679"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1048519426"/>
+ </object>
+ <string key="NSFrame">{{1, 0}, {516, 17}}</string>
+ <reference key="NSSuperview" ref="440720679"/>
+ <reference key="NSNextKeyView" ref="1048519426"/>
+ <reference key="NSDocView" ref="1048519426"/>
+ <reference key="NSBGColor" ref="252569531"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <reference ref="360324124"/>
+ </object>
+ <string key="NSFrame">{{17, 199}, {518, 158}}</string>
+ <reference key="NSSuperview" ref="1020318718"/>
+ <reference key="NSNextKeyView" ref="457121079"/>
+ <int key="NSsFlags">562</int>
+ <reference key="NSVScroller" ref="884311606"/>
+ <reference key="NSHScroller" ref="258996751"/>
+ <reference key="NSContentView" ref="457121079"/>
+ <reference key="NSHeaderClipView" ref="214413149"/>
+ <reference key="NSCornerView" ref="360324124"/>
+ <bytes key="NSScrollAmts">QSAAAEEgAABBYAAAQWAAAA</bytes>
+ </object>
+ <object class="NSButton" id="210387551">
+ <reference key="NSNextResponder" ref="1020318718"/>
+ <int key="NSvFlags">265</int>
+ <string key="NSFrame">{{322, 167}, {80, 28}}</string>
+ <reference key="NSSuperview" ref="1020318718"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="327131725">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Unlog</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="210387551"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="26"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="977607312">
+ <reference key="NSNextResponder" ref="1020318718"/>
+ <int key="NSvFlags">265</int>
+ <string key="NSFrame">{{407, 167}, {133, 28}}</string>
+ <reference key="NSSuperview" ref="1020318718"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="73578210">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Get new Token</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="977607312"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="26"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="893552286">
+ <reference key="NSNextResponder" ref="1020318718"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{14, 163}, {86, 18}}</string>
+ <reference key="NSSuperview" ref="1020318718"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="428850916">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">AFS Menu</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="893552286"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSBox" id="184192603">
+ <reference key="NSNextResponder" ref="1020318718"/>
+ <int key="NSvFlags">12</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSView" id="1000204505">
+ <reference key="NSNextResponder" ref="184192603"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSButton" id="478533800">
+ <reference key="NSNextResponder" ref="1000204505"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{5, 31}, {75, 18}}</string>
+ <reference key="NSSuperview" ref="1000204505"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="989004902">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">Use aklog</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="478533800"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">130</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="541208829">
+ <reference key="NSNextResponder" ref="1000204505"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{5, 11}, {167, 18}}</string>
+ <reference key="NSSuperview" ref="1000204505"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="95048095">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">get credential at login time</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="541208829"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">130</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {195, 57}}</string>
+ <reference key="NSSuperview" ref="184192603"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{103, 130}, {197, 73}}</string>
+ <reference key="NSSuperview" ref="1020318718"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="1000204505"/>
+ <int key="NSBorderType">1</int>
+ <int key="NSBoxType">0</int>
+ <int key="NSTitlePosition">2</int>
+ <bool key="NSTransparent">NO</bool>
+ </object>
+ </object>
+ <string key="NSFrame">{{10, 25}, {552, 363}}</string>
+ <reference key="NSSuperview" ref="739317740"/>
+ </object>
+ <string key="NSLabel">Tokens</string>
+ <reference key="NSColor" ref="568311573"/>
+ <reference key="NSTabView" ref="739317740"/>
+ </object>
+ <object class="NSTabViewItem" id="443722606">
+ <string key="NSIdentifier">2</string>
+ <object class="NSView" key="NSView" id="1069727156">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSSearchField" id="530233415">
+ <reference key="NSNextResponder" ref="1069727156"/>
+ <int key="NSvFlags">265</int>
+ <string key="NSFrame">{{337, 335}, {198, 19}}</string>
+ <reference key="NSSuperview" ref="1069727156"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSSearchFieldCell" key="NSCell" id="497389328">
+ <int key="NSCellFlags">343014976</int>
+ <int key="NSCellFlags2">134349824</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <string key="NSPlaceholderString">CellServDB Search</string>
+ <reference key="NSControlView" ref="530233415"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <int key="NSTextBezelStyle">1</int>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ <object class="NSButtonCell" key="NSSearchButtonCell">
+ <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">search</string>
+ <string key="NSAction">_searchFieldSearch:</string>
+ <reference key="NSTarget" ref="497389328"/>
+ <reference key="NSControlView" ref="530233415"/>
+ <int key="NSButtonFlags">138690815</int>
+ <int key="NSButtonFlags2">0</int>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ <object class="NSButtonCell" key="NSCancelButtonCell">
+ <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">clear</string>
+ <object class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableDictionary">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>AXDescription</string>
+ <string>NSAccessibilityEncodedAttributesValueType</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancel</string>
+ <integer value="1" id="9"/>
+ </object>
+ </object>
+ </object>
+ <string key="NSAction">_searchFieldCancel:</string>
+ <reference key="NSTarget" ref="497389328"/>
+ <int key="NSButtonFlags">138428671</int>
+ <int key="NSButtonFlags2">0</int>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ <string key="NSRecentsAutosaveName">cell_searc</string>
+ <int key="NSMaximumRecents">255</int>
+ <bytes key="NSSearchFieldFlags">CAAAAA</bytes>
+ </object>
+ </object>
+ <object class="NSTextField" id="1038382119">
+ <reference key="NSNextResponder" ref="1069727156"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{17, 335}, {76, 17}}</string>
+ <reference key="NSSuperview" ref="1069727156"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="269454663">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents">Default Cell:</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="1038382119"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ </object>
+ <object class="NSButton" id="788506691">
+ <reference key="NSNextResponder" ref="1069727156"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{17, 7}, {30, 25}}</string>
+ <reference key="NSSuperview" ref="1069727156"/>
+ <int key="NSTag">1</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="934170338">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">+</string>
+ <reference key="NSSupport" ref="26"/>
+ <int key="NSTag">1</int>
+ <reference key="NSControlView" ref="788506691"/>
+ <int key="NSButtonFlags">-2038021889</int>
+ <int key="NSButtonFlags2">35</int>
+ <reference key="NSAlternateImage" ref="894635401"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSButton" id="537320483">
+ <reference key="NSNextResponder" ref="1069727156"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{50, 7}, {30, 25}}</string>
+ <reference key="NSSuperview" ref="1069727156"/>
+ <int key="NSTag">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="1045702831">
+ <int key="NSCellFlags">604110336</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">-</string>
+ <reference key="NSSupport" ref="26"/>
+ <int key="NSTag">2</int>
+ <reference key="NSControlView" ref="537320483"/>
+ <int key="NSButtonFlags">-2038021889</int>
+ <int key="NSButtonFlags2">35</int>
+ <reference key="NSAlternateImage" ref="894635401"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSButton" id="593598121">
+ <reference key="NSNextResponder" ref="1069727156"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{82, 7}, {72, 25}}</string>
+ <reference key="NSSuperview" ref="1069727156"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="567447351">
+ <int key="NSCellFlags">604110336</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Modify</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="593598121"/>
+ <int key="NSButtonFlags">-2038021889</int>
+ <int key="NSButtonFlags2">35</int>
+ <reference key="NSAlternateImage" ref="894635401"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSButton" id="335179878">
+ <reference key="NSNextResponder" ref="1069727156"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{387, 4}, {151, 28}}</string>
+ <reference key="NSSuperview" ref="1069727156"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="372630674">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Save Cell Configuration</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="335179878"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="894635401"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSScrollView" id="96110784">
+ <reference key="NSNextResponder" ref="1069727156"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="259172039">
+ <reference key="NSNextResponder" ref="96110784"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableView" id="536830463">
+ <reference key="NSNextResponder" ref="259172039"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{516, 271}</string>
+ <reference key="NSSuperview" ref="259172039"/>
+ <int key="NSTag">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTableHeaderView" key="NSHeaderView" id="993816125">
+ <reference key="NSNextResponder" ref="281754774"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{516, 17}</string>
+ <reference key="NSSuperview" ref="281754774"/>
+ <reference key="NSTableView" ref="536830463"/>
+ </object>
+ <object class="_NSCornerView" key="NSCornerView" id="772760699">
+ <reference key="NSNextResponder" ref="96110784"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{-22, 0}, {12, 17}}</string>
+ <reference key="NSSuperview" ref="96110784"/>
+ </object>
+ <object class="NSMutableArray" key="NSTableColumns">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableColumn" id="136480779">
+ <string key="NSIdentifier">0</string>
+ <double key="NSWidth">4.700000e+01</double>
+ <double key="NSMinWidth">1.000000e+01</double>
+ <double key="NSMaxWidth">3.402823e+38</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Default</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor" id="496166923">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">headerColor</string>
+ <reference key="NSColor" ref="400556243"/>
+ </object>
+ <reference key="NSTextColor" ref="716292118"/>
+ </object>
+ <object class="NSButtonCell" key="NSDataCell" id="787517969">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="536830463"/>
+ <int key="NSButtonFlags">1215582719</int>
+ <int key="NSButtonFlags2">130</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="536830463"/>
+ </object>
+ <object class="NSTableColumn" id="720585546">
+ <string key="NSIdentifier">1</string>
+ <double key="NSWidth">4.700000e+01</double>
+ <double key="NSMinWidth">1.000000e+01</double>
+ <double key="NSMaxWidth">3.402823e+38</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Tokens</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="496166923"/>
+ <reference key="NSTextColor" ref="716292118"/>
+ </object>
+ <object class="NSButtonCell" key="NSDataCell" id="110685339">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Check</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="536830463"/>
+ <int key="NSButtonFlags">1212436991</int>
+ <int key="NSButtonFlags2">130</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <int key="NSResizingMask">2</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="536830463"/>
+ </object>
+ <object class="NSTableColumn" id="909348673">
+ <string key="NSIdentifier">2</string>
+ <double key="NSWidth">1.670000e+02</double>
+ <double key="NSMinWidth">4.000000e+01</double>
+ <double key="NSMaxWidth">1.000000e+03</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Name</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
+ </object>
+ <reference key="NSTextColor" ref="716292118"/>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="990091450">
+ <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags2">133120</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="536830463"/>
+ <reference key="NSBackgroundColor" ref="252569531"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <reference key="NSTableView" ref="536830463"/>
+ </object>
+ <object class="NSTableColumn" id="145486834">
+ <string key="NSIdentifier">3</string>
+ <double key="NSWidth">2.430000e+02</double>
+ <double key="NSMinWidth">6.509082e+01</double>
+ <double key="NSMaxWidth">1.000000e+03</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Description</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="496166923"/>
+ <reference key="NSTextColor" ref="716292118"/>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="345168793">
+ <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags2">133120</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="536830463"/>
+ <reference key="NSBackgroundColor" ref="252569531"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <reference key="NSTableView" ref="536830463"/>
+ </object>
+ </object>
+ <double key="NSIntercellSpacingWidth">3.000000e+00</double>
+ <double key="NSIntercellSpacingHeight">2.000000e+00</double>
+ <reference key="NSBackgroundColor" ref="400556243"/>
+ <reference key="NSGridColor" ref="850792713"/>
+ <double key="NSRowHeight">1.500000e+01</double>
+ <int key="NSTvFlags">1522532352</int>
+ <int key="NSGridStyleMask">1</int>
+ <int key="NSColumnAutoresizingStyle">4</int>
+ <int key="NSDraggingSourceMaskForLocal">15</int>
+ <int key="NSDraggingSourceMaskForNonLocal">0</int>
+ <bool key="NSAllowsTypeSelect">YES</bool>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 17}, {516, 271}}</string>
+ <reference key="NSSuperview" ref="96110784"/>
+ <reference key="NSNextKeyView" ref="536830463"/>
+ <reference key="NSDocView" ref="536830463"/>
+ <reference key="NSBGColor" ref="252569531"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="177605134">
+ <reference key="NSNextResponder" ref="96110784"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{506, 17}, {11, 198}}</string>
+ <reference key="NSSuperview" ref="96110784"/>
+ <int key="NSsFlags">256</int>
+ <reference key="NSTarget" ref="96110784"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">9.473684e-01</double>
+ </object>
+ <object class="NSScroller" id="172641834">
+ <reference key="NSNextResponder" ref="96110784"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{1, 215}, {516, 11}}</string>
+ <reference key="NSSuperview" ref="96110784"/>
+ <int key="NSsFlags">257</int>
+ <reference key="NSTarget" ref="96110784"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">1.000000e+00</double>
+ <double key="NSPercent">9.942197e-01</double>
+ </object>
+ <object class="NSClipView" id="281754774">
+ <reference key="NSNextResponder" ref="96110784"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="993816125"/>
+ </object>
+ <string key="NSFrame">{{1, 0}, {516, 17}}</string>
+ <reference key="NSSuperview" ref="96110784"/>
+ <reference key="NSNextKeyView" ref="993816125"/>
+ <reference key="NSDocView" ref="993816125"/>
+ <reference key="NSBGColor" ref="252569531"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <reference ref="772760699"/>
+ </object>
+ <string key="NSFrame">{{15, 41}, {518, 289}}</string>
+ <reference key="NSSuperview" ref="1069727156"/>
+ <reference key="NSNextKeyView" ref="259172039"/>
+ <int key="NSsFlags">562</int>
+ <reference key="NSVScroller" ref="177605134"/>
+ <reference key="NSHScroller" ref="172641834"/>
+ <reference key="NSContentView" ref="259172039"/>
+ <reference key="NSHeaderClipView" ref="281754774"/>
+ <reference key="NSCornerView" ref="772760699"/>
+ <bytes key="NSScrollAmts">QSAAAEEgAABBiAAAQYgAAA</bytes>
+ </object>
+ <object class="NSTextField" id="747536303">
+ <reference key="NSNextResponder" ref="1069727156"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{95, 338}, {237, 14}}</string>
+ <reference key="NSSuperview" ref="1069727156"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="579088625">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Default Cell</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="747536303"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwLjEwOTg1MTg0IDEAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{10, 25}, {552, 363}}</string>
+ </object>
+ <string key="NSLabel">CellServDB Editor</string>
+ <reference key="NSColor" ref="568311573"/>
+ <reference key="NSTabView" ref="739317740"/>
+ </object>
+ <object class="NSTabViewItem" id="584361947">
+ <string key="NSIdentifier">3</string>
+ <object class="NSView" key="NSView" id="537928258">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSBox" id="1056952440">
+ <reference key="NSNextResponder" ref="537928258"/>
+ <int key="NSvFlags">266</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSView" id="1006532054">
+ <reference key="NSNextResponder" ref="1056952440"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextField" id="748314809">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{18, 112}, {114, 14}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1008754563">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string type="base64-UTF8" key="NSContents">TsKwIHN0YXQgY2hhY2hlIGVudHJ5A</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="748314809"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="411322031">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{140, 107}, {55, 19}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1051935415">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272761856</int>
+ <real value="0.000000e+00" key="NSContents" id="396840617"/>
+ <reference key="NSSupport" ref="894635401"/>
+ <object class="NSNumberFormatter" key="NSFormatter" id="455485314">
+ <object class="NSMutableDictionary" key="NS.attributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>allowsFloats</string>
+ <string>formatterBehavior</string>
+ <string>minimum</string>
+ <string>minimumIntegerDigits</string>
+ <string>numberStyle</string>
+ <string>positiveFormat</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="9"/>
+ <integer value="1040" id="436216989"/>
+ <real value="1.000000e+03" id="960815929"/>
+ <integer value="4"/>
+ <reference ref="396840617"/>
+ <string>#</string>
+ </object>
+ </object>
+ <string key="NS.positiveformat">#</string>
+ <string key="NS.negativeformat">#0000</string>
+ <nil key="NS.positiveattrs"/>
+ <nil key="NS.negativeattrs"/>
+ <object class="NSAttributedString" key="NS.zero">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nil">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nan">
+ <string key="NSString">NaN</string>
+ <object class="NSDictionary" key="NSAttributes" id="231714890">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ </object>
+ <reference key="NS.min" ref="960815929"/>
+ <object class="NSDecimalNumberPlaceholder" key="NS.max" id="139642944">
+ <int key="NS.exponent">0</int>
+ <int key="NS.length">0</int>
+ <bool key="NS.negative">YES</bool>
+ <bool key="NS.compact">NO</bool>
+ <int key="NS.mantissa.bo">1</int>
+ <bytes key="NS.mantissa">AAAAAAAAAAAAAAAAAAAAAA</bytes>
+ </object>
+ <object class="NSDecimalNumberHandler" key="NS.rounding">
+ <int key="NS.roundingmode">3</int>
+ <bool key="NS.raise.overflow">YES</bool>
+ <bool key="NS.raise.underflow">YES</bool>
+ <bool key="NS.raise.dividebyzero">YES</bool>
+ </object>
+ <string key="NS.decimal">,</string>
+ <string key="NS.thousand">.</string>
+ <bool key="NS.hasthousands">NO</bool>
+ <bool key="NS.localized">YES</bool>
+ <bool key="NS.allowsfloats">YES</bool>
+ </object>
+ <reference key="NSControlView" ref="411322031"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <object class="NSColor" key="NSTextColor" id="568125270">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="39932154"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="761947305">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{140, 81}, {55, 19}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="19899457">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">-1874721792</int>
+ <string key="NSContents">0</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <object class="NSNumberFormatter" key="NSFormatter" id="248712560">
+ <object class="NSMutableDictionary" key="NS.attributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>allowsFloats</string>
+ <string>formatterBehavior</string>
+ <string>minimum</string>
+ <string>minimumIntegerDigits</string>
+ <string>positiveFormat</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="9"/>
+ <reference ref="436216989"/>
+ <real value="1.000000e+02" id="62693020"/>
+ <integer value="3" id="11"/>
+ <string>#</string>
+ </object>
+ </object>
+ <string key="NS.positiveformat">#</string>
+ <string key="NS.negativeformat">#000</string>
+ <nil key="NS.positiveattrs"/>
+ <nil key="NS.negativeattrs"/>
+ <object class="NSAttributedString" key="NS.zero">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nil">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nan">
+ <string key="NSString">NaN</string>
+ <reference key="NSAttributes" ref="231714890"/>
+ </object>
+ <reference key="NS.min" ref="62693020"/>
+ <reference key="NS.max" ref="139642944"/>
+ <object class="NSDecimalNumberHandler" key="NS.rounding">
+ <int key="NS.roundingmode">3</int>
+ <bool key="NS.raise.overflow">YES</bool>
+ <bool key="NS.raise.underflow">YES</bool>
+ <bool key="NS.raise.dividebyzero">YES</bool>
+ </object>
+ <string key="NS.decimal">,</string>
+ <string key="NS.thousand">.</string>
+ <bool key="NS.hasthousands">NO</bool>
+ <bool key="NS.localized">YES</bool>
+ <bool key="NS.allowsfloats">YES</bool>
+ </object>
+ <reference key="NSControlView" ref="761947305"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <reference key="NSTextColor" ref="568125270"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="560081349">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{83, 83}, {49, 14}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="628600719">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">DCache</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="560081349"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="23658009">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{140, 52}, {25, 19}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="463621063">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272761856</int>
+ <reference key="NSContents" ref="396840617"/>
+ <reference key="NSSupport" ref="894635401"/>
+ <object class="NSNumberFormatter" key="NSFormatter" id="833073507">
+ <object class="NSMutableDictionary" key="NS.attributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>allowsFloats</string>
+ <string>formatterBehavior</string>
+ <string>maximumIntegerDigits</string>
+ <string>minimum</string>
+ <string>minimumIntegerDigits</string>
+ <string>positiveFormat</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="9"/>
+ <reference ref="436216989"/>
+ <integer value="2" id="10"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <string>#</string>
+ </object>
+ </object>
+ <string key="NS.positiveformat">#</string>
+ <string key="NS.negativeformat">#0</string>
+ <nil key="NS.positiveattrs"/>
+ <nil key="NS.negativeattrs"/>
+ <object class="NSAttributedString" key="NS.zero">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nil">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nan">
+ <string key="NSString">NaN</string>
+ <reference key="NSAttributes" ref="231714890"/>
+ </object>
+ <reference key="NS.min" ref="9"/>
+ <reference key="NS.max" ref="139642944"/>
+ <object class="NSDecimalNumberHandler" key="NS.rounding">
+ <int key="NS.roundingmode">3</int>
+ <bool key="NS.raise.overflow">YES</bool>
+ <bool key="NS.raise.underflow">YES</bool>
+ <bool key="NS.raise.dividebyzero">YES</bool>
+ </object>
+ <string key="NS.decimal">,</string>
+ <string key="NS.thousand">.</string>
+ <bool key="NS.hasthousands">NO</bool>
+ <bool key="NS.localized">YES</bool>
+ <bool key="NS.allowsfloats">YES</bool>
+ </object>
+ <reference key="NSControlView" ref="23658009"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <reference key="NSTextColor" ref="568125270"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="217732195">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{47, 54}, {85, 14}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1057450635">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string type="base64-UTF8" key="NSContents">TsKwIG9mIGRhZW1vbnM</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="217732195"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ </object>
+ <object class="NSButton" id="1070305297">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">297</int>
+ <string key="NSFrame">{{413, 109}, {93, 18}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="474187509">
+ <int key="NSCellFlags">604110336</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">Encryption</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="1070305297"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="358834889">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">301</int>
+ <string key="NSFrame">{{209, 112}, {103, 14}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="120617252">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string type="base64-UTF8" key="NSContents">TsKwIFZvbHVtZSBlbnRyaWVzA</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="358834889"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="255735511">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">301</int>
+ <string key="NSFrame">{{313, 109}, {37, 19}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="310838537">
+ <int key="NSCellFlags">343014977</int>
+ <int key="NSCellFlags2">272630784</int>
+ <reference key="NSContents" ref="396840617"/>
+ <reference key="NSSupport" ref="894635401"/>
+ <object class="NSNumberFormatter" key="NSFormatter" id="547764719">
+ <object class="NSMutableDictionary" key="NS.attributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>allowsFloats</string>
+ <string>formatWidth</string>
+ <string>formatterBehavior</string>
+ <string>generatesDecimalNumbers</string>
+ <string>groupingSize</string>
+ <string>maximumFractionDigits</string>
+ <string>maximumIntegerDigits</string>
+ <string>minimum</string>
+ <string>minimumIntegerDigits</string>
+ <string>numberStyle</string>
+ <string>positiveFormat</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="396840617"/>
+ <reference ref="396840617"/>
+ <reference ref="436216989"/>
+ <reference ref="396840617"/>
+ <reference ref="396840617"/>
+ <reference ref="396840617"/>
+ <reference ref="11"/>
+ <real value="1.000000e+01" id="313841979"/>
+ <reference ref="10"/>
+ <reference ref="9"/>
+ <string>#</string>
+ </object>
+ </object>
+ <string key="NS.positiveformat">#</string>
+ <string key="NS.negativeformat">#00</string>
+ <nil key="NS.positiveattrs"/>
+ <nil key="NS.negativeattrs"/>
+ <object class="NSAttributedString" key="NS.zero">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nil">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nan">
+ <string key="NSString">NaN</string>
+ <reference key="NSAttributes" ref="231714890"/>
+ </object>
+ <reference key="NS.min" ref="313841979"/>
+ <reference key="NS.max" ref="139642944"/>
+ <object class="NSDecimalNumberHandler" key="NS.rounding">
+ <int key="NS.roundingmode">3</int>
+ <bool key="NS.raise.overflow">YES</bool>
+ <bool key="NS.raise.underflow">YES</bool>
+ <bool key="NS.raise.dividebyzero">YES</bool>
+ </object>
+ <string key="NS.decimal">,</string>
+ <string key="NS.thousand">.</string>
+ <bool key="NS.hasthousands">NO</bool>
+ <bool key="NS.localized">YES</bool>
+ <bool key="NS.allowsfloats">NO</bool>
+ </object>
+ <reference key="NSControlView" ref="255735511"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <reference key="NSTextColor" ref="568125270"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="640588663">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{46, 23}, {86, 14}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="35880329">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Afs Root Mount</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="640588663"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="850669444">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{140, 21}, {55, 19}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="456324371">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">/</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="850669444"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <reference key="NSTextColor" ref="568125270"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="972024631">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">301</int>
+ <string key="NSFrame">{{215, 81}, {97, 14}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="383369569">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Cache Dimension</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="972024631"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="627718334">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">301</int>
+ <string key="NSFrame">{{313, 79}, {52, 19}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="756462877">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272630784</int>
+ <reference key="NSContents" ref="396840617"/>
+ <reference key="NSSupport" ref="894635401"/>
+ <object class="NSNumberFormatter" key="NSFormatter" id="592804150">
+ <object class="NSMutableDictionary" key="NS.attributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>allowsFloats</string>
+ <string>formatterBehavior</string>
+ <string>minimum</string>
+ <string>minimumIntegerDigits</string>
+ <string>numberStyle</string>
+ <string>positiveFormat</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="9"/>
+ <reference ref="436216989"/>
+ <real value="1.000000e+04" id="63011763"/>
+ <integer value="5"/>
+ <reference ref="9"/>
+ <string>#</string>
+ </object>
+ </object>
+ <string key="NS.positiveformat">#</string>
+ <string key="NS.negativeformat">#00000</string>
+ <nil key="NS.positiveattrs"/>
+ <nil key="NS.negativeattrs"/>
+ <object class="NSAttributedString" key="NS.zero">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nil">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nan">
+ <string key="NSString">NaN</string>
+ <reference key="NSAttributes" ref="231714890"/>
+ </object>
+ <reference key="NS.min" ref="63011763"/>
+ <reference key="NS.max" ref="139642944"/>
+ <object class="NSDecimalNumberHandler" key="NS.rounding">
+ <int key="NS.roundingmode">3</int>
+ <bool key="NS.raise.overflow">YES</bool>
+ <bool key="NS.raise.underflow">YES</bool>
+ <bool key="NS.raise.dividebyzero">YES</bool>
+ </object>
+ <string key="NS.decimal">,</string>
+ <string key="NS.thousand">.</string>
+ <bool key="NS.hasthousands">NO</bool>
+ <bool key="NS.localized">YES</bool>
+ <bool key="NS.allowsfloats">YES</bool>
+ </object>
+ <reference key="NSControlView" ref="627718334"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <reference key="NSTextColor" ref="568125270"/>
+ </object>
+ </object>
+ <object class="NSButton" id="892096934">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">297</int>
+ <string key="NSFrame">{{400, 15}, {104, 17}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="728535364">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Save Param</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="892096934"/>
+ <int key="NSButtonFlags">-2038152961</int>
+ <int key="NSButtonFlags2">164</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="835771463">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">297</int>
+ <string key="NSFrame">{{388, 4}, {126, 13}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="672812502">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">afs needs to be restarted</string>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.000000e+01</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="835771463"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MSAwLjAyNDA1ODExNSAwLjAxMjI2ODU0MwA</bytes>
+ </object>
+ </object>
+ </object>
+ <object class="NSButton" id="805322468">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">297</int>
+ <string key="NSFrame">{{413, 89}, {76, 18}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="703486492">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">DynRoot</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="805322468"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="1064737768">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">297</int>
+ <string key="NSFrame">{{413, 49}, {66, 18}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="533239018">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">Verbose</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="1064737768"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">130</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="509563943">
+ <reference key="NSNextResponder" ref="1006532054"/>
+ <int key="NSvFlags">297</int>
+ <string key="NSFrame">{{413, 69}, {63, 18}}</string>
+ <reference key="NSSuperview" ref="1006532054"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="442311508">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">AfsDB</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="509563943"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">130</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {522, 139}}</string>
+ <reference key="NSSuperview" ref="1056952440"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{14, 202}, {524, 155}}</string>
+ <reference key="NSSuperview" ref="537928258"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Cache Manager</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="878835253"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="1006532054"/>
+ <int key="NSBorderType">1</int>
+ <int key="NSBoxType">0</int>
+ <int key="NSTitlePosition">2</int>
+ <bool key="NSTransparent">NO</bool>
+ </object>
+ </object>
+ <string key="NSFrame">{{10, 25}, {552, 363}}</string>
+ </object>
+ <string key="NSLabel">Parameter</string>
+ <reference key="NSColor" ref="568311573"/>
+ <reference key="NSTabView" ref="739317740"/>
+ </object>
+ <object class="NSTabViewItem" id="126070858">
+ <string key="NSIdentifier">4</string>
+ <object class="NSView" key="NSView" id="786994103">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSScrollView" id="284115188">
+ <reference key="NSNextResponder" ref="786994103"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="229139620">
+ <reference key="NSNextResponder" ref="284115188"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableView" id="1029505942">
+ <reference key="NSNextResponder" ref="229139620"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{501, 283}</string>
+ <reference key="NSSuperview" ref="229139620"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTableHeaderView" key="NSHeaderView" id="209519573">
+ <reference key="NSNextResponder" ref="785725164"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{501, 17}</string>
+ <reference key="NSSuperview" ref="785725164"/>
+ <reference key="NSTableView" ref="1029505942"/>
+ </object>
+ <object class="_NSCornerView" key="NSCornerView" id="151502956">
+ <reference key="NSNextResponder" ref="284115188"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{502, 0}, {16, 17}}</string>
+ <reference key="NSSuperview" ref="284115188"/>
+ </object>
+ <object class="NSMutableArray" key="NSTableColumns">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableColumn" id="604570943">
+ <double key="NSWidth">8.400000e+01</double>
+ <double key="NSMinWidth">4.000000e+01</double>
+ <double key="NSMaxWidth">1.000000e+03</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Mount Name</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor" id="869401119">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
+ </object>
+ <reference key="NSTextColor" ref="716292118"/>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="404459918">
+ <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="1029505942"/>
+ <reference key="NSBackgroundColor" ref="252569531"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="1029505942"/>
+ </object>
+ <object class="NSTableColumn" id="915858279">
+ <double key="NSWidth">4.110000e+02</double>
+ <double key="NSMinWidth">4.000000e+01</double>
+ <double key="NSMaxWidth">1.000000e+03</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Mount Path</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="869401119"/>
+ <reference key="NSTextColor" ref="716292118"/>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="367407167">
+ <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="894635401"/>
+ <reference key="NSControlView" ref="1029505942"/>
+ <reference key="NSBackgroundColor" ref="252569531"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="1029505942"/>
+ </object>
+ </object>
+ <double key="NSIntercellSpacingWidth">3.000000e+00</double>
+ <double key="NSIntercellSpacingHeight">2.000000e+00</double>
+ <reference key="NSBackgroundColor" ref="400556243"/>
+ <reference key="NSGridColor" ref="850792713"/>
+ <double key="NSRowHeight">1.700000e+01</double>
+ <int key="NSTvFlags">-557842432</int>
+ <int key="NSGridStyleMask">2</int>
+ <int key="NSColumnAutoresizingStyle">4</int>
+ <int key="NSDraggingSourceMaskForLocal">15</int>
+ <int key="NSDraggingSourceMaskForNonLocal">0</int>
+ <bool key="NSAllowsTypeSelect">YES</bool>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 17}, {501, 283}}</string>
+ <reference key="NSSuperview" ref="284115188"/>
+ <reference key="NSNextKeyView" ref="1029505942"/>
+ <reference key="NSDocView" ref="1029505942"/>
+ <reference key="NSBGColor" ref="252569531"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="497462431">
+ <reference key="NSNextResponder" ref="284115188"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{502, 17}, {15, 283}}</string>
+ <reference key="NSSuperview" ref="284115188"/>
+ <reference key="NSTarget" ref="284115188"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">3.700000e+01</double>
+ <double key="NSPercent">1.947368e-01</double>
+ </object>
+ <object class="NSScroller" id="145484441">
+ <reference key="NSNextResponder" ref="284115188"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{1, 300}, {501, 15}}</string>
+ <reference key="NSSuperview" ref="284115188"/>
+ <int key="NSsFlags">1</int>
+ <reference key="NSTarget" ref="284115188"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">5.714286e-01</double>
+ </object>
+ <object class="NSClipView" id="785725164">
+ <reference key="NSNextResponder" ref="284115188"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="209519573"/>
+ </object>
+ <string key="NSFrame">{{1, 0}, {501, 17}}</string>
+ <reference key="NSSuperview" ref="284115188"/>
+ <reference key="NSNextKeyView" ref="209519573"/>
+ <reference key="NSDocView" ref="209519573"/>
+ <reference key="NSBGColor" ref="252569531"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <reference ref="151502956"/>
+ </object>
+ <string key="NSFrame">{{17, 41}, {518, 316}}</string>
+ <reference key="NSSuperview" ref="786994103"/>
+ <reference key="NSNextKeyView" ref="229139620"/>
+ <int key="NSsFlags">50</int>
+ <reference key="NSVScroller" ref="497462431"/>
+ <reference key="NSHScroller" ref="145484441"/>
+ <reference key="NSContentView" ref="229139620"/>
+ <reference key="NSHeaderClipView" ref="785725164"/>
+ <reference key="NSCornerView" ref="151502956"/>
+ <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
+ </object>
+ <object class="NSButton" id="642014996">
+ <reference key="NSNextResponder" ref="786994103"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{17, 16}, {81, 18}}</string>
+ <reference key="NSSuperview" ref="786994103"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="865151679">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Add New Path</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="642014996"/>
+ <int key="NSButtonFlags">-2033434369</int>
+ <int key="NSButtonFlags2">160</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSButton" id="635503948">
+ <reference key="NSNextResponder" ref="786994103"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{106, 16}, {78, 18}}</string>
+ <reference key="NSSuperview" ref="786994103"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="713243405">
+ <int key="NSCellFlags">-1543373312</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Remove Path</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="635503948"/>
+ <int key="NSButtonFlags">-2033434369</int>
+ <int key="NSButtonFlags2">160</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSButton" id="224507096">
+ <reference key="NSNextResponder" ref="786994103"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{400, 17}, {137, 18}}</string>
+ <reference key="NSSuperview" ref="786994103"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="378183006">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">Enable Symbolic Link</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="224507096"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">130</int>
+ <reference key="NSNormalImage" ref="1069694397"/>
+ <reference key="NSAlternateImage" ref="894136682"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{10, 25}, {552, 363}}</string>
+ </object>
+ <string key="NSLabel">Mounts</string>
+ <reference key="NSColor" ref="568311573"/>
+ <reference key="NSTabView" ref="739317740"/>
+ </object>
+ </object>
+ <reference key="NSSelectedTabViewItem" ref="269508902"/>
+ <reference key="NSFont" ref="26"/>
+ <int key="NSTvFlags">134217728</int>
+ <bool key="NSAllowTruncatedLabels">YES</bool>
+ <bool key="NSDrawsBackground">YES</bool>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1020318718"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="1047946385">
+ <reference key="NSNextResponder" ref="645279396"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{229, 6}, {349, 11}}</string>
+ <reference key="NSSuperview" ref="645279396"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="999146642">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">71435264</int>
+ <string key="NSContents">afs version</string>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">9.000000e+00</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="1047946385"/>
+ <reference key="NSBackgroundColor" ref="568311573"/>
+ <reference key="NSTextColor" ref="276594776"/>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrameSize">{595, 486}</string>
+ <reference key="NSSuperview"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
+ <string key="NSMinSize">{0, 22}</string>
+ <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ </object>
+ <object class="NSWindowTemplate" id="52789773">
+ <int key="NSWindowStyleMask">9</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{1006, 707}, {715, 485}}</string>
+ <int key="NSWTFlags">1886912512</int>
+ <string key="NSWindowTitle">Panel</string>
+ <object class="NSMutableString" key="NSWindowClass">
+ <characters key="NS.bytes">NSPanel</characters>
+ </object>
+ <object class="NSMutableString" key="NSViewClass">
+ <characters key="NS.bytes">View</characters>
+ </object>
+ <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <object class="NSView" key="NSWindowView" id="1017822711">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSScrollView" id="935020490">
+ <reference key="NSNextResponder" ref="1017822711"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="853671207">
+ <reference key="NSNextResponder" ref="935020490"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextView" id="297493656">
+ <reference key="NSNextResponder" ref="853671207"/>
+ <int key="NSvFlags">2322</int>
+ <string key="NSFrameSize">{662, 14}</string>
+ <reference key="NSSuperview" ref="853671207"/>
+ <object class="NSTextContainer" key="NSTextContainer" id="512204159">
+ <object class="NSLayoutManager" key="NSLayoutManager">
+ <object class="NSTextStorage" key="NSTextStorage">
+ <object class="NSMutableString" key="NSString">
+ <characters key="NS.bytes"/>
+ </object>
+ <nil key="NSDelegate"/>
+ </object>
+ <object class="NSMutableArray" key="NSTextContainers">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="512204159"/>
+ </object>
+ <int key="NSLMFlags">6</int>
+ <nil key="NSDelegate"/>
+ </object>
+ <reference key="NSTextView" ref="297493656"/>
+ <double key="NSWidth">6.620000e+02</double>
+ <int key="NSTCFlags">1</int>
+ </object>
+ <object class="NSTextViewSharedData" key="NSSharedData">
+ <int key="NSFlags">2913</int>
+ <reference key="NSBackgroundColor" ref="400556243"/>
+ <reference key="NSInsertionColor" ref="39932154"/>
+ <object class="NSDictionary" key="NSSelectedAttributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSBackgroundColor</string>
+ <string>NSColor</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">selectedTextBackgroundColor</string>
+ <reference key="NSColor" ref="277525007"/>
+ </object>
+ <object class="NSColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">selectedTextColor</string>
+ <reference key="NSColor" ref="39932154"/>
+ </object>
+ </object>
+ </object>
+ <nil key="NSMarkedAttributes"/>
+ <object class="NSDictionary" key="NSLinkAttributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSColor</string>
+ <string>NSUnderline</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwIDEAA</bytes>
+ </object>
+ <reference ref="9"/>
+ </object>
+ </object>
+ <nil key="NSDefaultParagraphStyle"/>
+ </object>
+ <int key="NSTVFlags">6</int>
+ <string key="NSMaxSize">{1337, 1e+07}</string>
+ <string key="NSMinize">{114, 0}</string>
+ <nil key="NSDelegate"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {662, 423}}</string>
+ <reference key="NSSuperview" ref="935020490"/>
+ <reference key="NSNextKeyView" ref="297493656"/>
+ <reference key="NSDocView" ref="297493656"/>
+ <reference key="NSBGColor" ref="400556243"/>
+ <object class="NSCursor" key="NSCursor">
+ <string key="NSHotSpot">{4, -5}</string>
+ <int key="NSCursorType">1</int>
+ </object>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="11642274">
+ <reference key="NSNextResponder" ref="935020490"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{663, 1}, {11, 423}}</string>
+ <reference key="NSSuperview" ref="935020490"/>
+ <int key="NSsFlags">256</int>
+ <reference key="NSTarget" ref="935020490"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">1.000000e+00</double>
+ </object>
+ <object class="NSScroller" id="574894181">
+ <reference key="NSNextResponder" ref="935020490"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{-100, -100}, {87, 18}}</string>
+ <reference key="NSSuperview" ref="935020490"/>
+ <int key="NSsFlags">257</int>
+ <reference key="NSTarget" ref="935020490"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">1.000000e+00</double>
+ <double key="NSPercent">9.456522e-01</double>
+ </object>
+ </object>
+ <string key="NSFrame">{{20, 40}, {675, 425}}</string>
+ <reference key="NSSuperview" ref="1017822711"/>
+ <reference key="NSNextKeyView" ref="853671207"/>
+ <int key="NSsFlags">18</int>
+ <reference key="NSVScroller" ref="11642274"/>
+ <reference key="NSHScroller" ref="574894181"/>
+ <reference key="NSContentView" ref="853671207"/>
+ </object>
+ <object class="NSButton" id="729692979">
+ <reference key="NSNextResponder" ref="1017822711"/>
+ <int key="NSvFlags">293</int>
+ <string key="NSFrame">{{318, 8}, {80, 28}}</string>
+ <reference key="NSSuperview" ref="1017822711"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="278933381">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Close</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="729692979"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="26"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrameSize">{715, 485}</string>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
+ <string key="NSMinSize">{0, 22}</string>
+ <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ </object>
+ <object class="NSCustomObject" id="176554930">
+ <string key="NSClassName">InfoController</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">_window</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="61231707"/>
+ </object>
+ <int key="connectionID">100</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">cellList</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="536830463"/>
+ </object>
+ <int key="connectionID">187</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">cellIpButton</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="593598121"/>
+ </object>
+ <int key="connectionID">188</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">removeCellButton</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="537320483"/>
+ </object>
+ <int key="connectionID">189</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">addCellButton</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="788506691"/>
+ </object>
+ <int key="connectionID">190</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">addRemoveCell:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="788506691"/>
+ </object>
+ <int key="connectionID">191</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">addRemoveCell:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="537320483"/>
+ </object>
+ <int key="connectionID">192</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showCellIP:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="593598121"/>
+ </object>
+ <int key="connectionID">193</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">saveConfiguration:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="335179878"/>
+ </object>
+ <int key="connectionID">202</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">infoSheet</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="52789773"/>
+ </object>
+ <int key="connectionID">217</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">infoController</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="176554930"/>
+ </object>
+ <int key="connectionID">225</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">infoPanel</string>
+ <reference key="source" ref="176554930"/>
+ <reference key="destination" ref="52789773"/>
+ </object>
+ <int key="connectionID">226</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">texEditInfo</string>
+ <reference key="source" ref="176554930"/>
+ <reference key="destination" ref="297493656"/>
+ </object>
+ <int key="connectionID">227</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">closePanel:</string>
+ <reference key="source" ref="176554930"/>
+ <reference key="destination" ref="729692979"/>
+ </object>
+ <int key="connectionID">228</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">afsCommanderView</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="645279396"/>
+ </object>
+ <int key="connectionID">303</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">statCacheEntry</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="411322031"/>
+ </object>
+ <int key="connectionID">418</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">dCacheDim</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="761947305"/>
+ </object>
+ <int key="connectionID">419</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">daemonNumber</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="23658009"/>
+ </object>
+ <int key="connectionID">420</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">afsRootMountPoint</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="850669444"/>
+ </object>
+ <int key="connectionID">421</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">nVolEntry</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="255735511"/>
+ </object>
+ <int key="connectionID">422</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">cacheDimension</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="627718334"/>
+ </object>
+ <int key="connectionID">423</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">dynRoot</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="805322468"/>
+ </object>
+ <int key="connectionID">424</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">saveCacheManagerParam:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="892096934"/>
+ </object>
+ <int key="connectionID">474</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="739317740"/>
+ <reference key="destination" ref="773588579"/>
+ </object>
+ <int key="connectionID">669</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textSearchField</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="530233415"/>
+ </object>
+ <int key="connectionID">812</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">searchCellTextEvent:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="530233415"/>
+ </object>
+ <int key="connectionID">817</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="530233415"/>
+ <reference key="destination" ref="773588579"/>
+ </object>
+ <int key="connectionID">886</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">startStopAfs:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="709840556"/>
+ </object>
+ <int key="connectionID">1105</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">startStopButton</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="709840556"/>
+ </object>
+ <int key="connectionID">1106</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">afsMenuActivationEvent:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="893552286"/>
+ </object>
+ <int key="connectionID">1109</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">afsMenucheckBox</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="893552286"/>
+ </object>
+ <int key="connectionID">1110</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">info:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="871603218"/>
+ </object>
+ <int key="connectionID">1113</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">tokensTable</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="313963250"/>
+ </object>
+ <int key="connectionID">1206</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">unlog:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="210387551"/>
+ </object>
+ <int key="connectionID">1211</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">getNewToken:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="977607312"/>
+ </object>
+ <int key="connectionID">1212</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">useAklogCheck</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="478533800"/>
+ </object>
+ <int key="connectionID">1282</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">aklogSwitchEvent:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="478533800"/>
+ </object>
+ <int key="connectionID">1353</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">unlogButton</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="210387551"/>
+ </object>
+ <int key="connectionID">1644</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">tokensButton</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="977607312"/>
+ </object>
+ <int key="connectionID">1645</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">afsVersionLabel</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="1047946385"/>
+ </object>
+ <int key="connectionID">1717</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">afsDefaultCellLabel</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="747536303"/>
+ </object>
+ <int key="connectionID">1847</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">afsDB</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="509563943"/>
+ </object>
+ <int key="connectionID">1904</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">verbose</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="1064737768"/>
+ </object>
+ <int key="connectionID">1962</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">aklogCredentialAtLoginTime</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="541208829"/>
+ </object>
+ <int key="connectionID">2014</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">credentialAtLoginTimeEvent:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="541208829"/>
+ </object>
+ <int key="connectionID">2015</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">installKRB5AuthAtLoginButton</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="239701474"/>
+ </object>
+ <int key="connectionID">2020</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">krb5KredentialAtLoginTimeEvent:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="855912809"/>
+ </object>
+ <int key="connectionID">2021</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">checkEnableLink</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="224507096"/>
+ </object>
+ <int key="connectionID">2042</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">buttonRemoveLink</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="642014996"/>
+ </object>
+ <int key="connectionID">2044</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">buttonAddLink</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="642014996"/>
+ </object>
+ <int key="connectionID">2045</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">addLink:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="642014996"/>
+ </object>
+ <int key="connectionID">2046</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">removeLink:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="635503948"/>
+ </object>
+ <int key="connectionID">2047</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">enableLink:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="224507096"/>
+ </object>
+ <int key="connectionID">2048</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">checkButtonAfsAtBootTime</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="713307252"/>
+ </object>
+ <int key="connectionID">2051</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">afsStartupSwitchEvent:</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="713307252"/>
+ </object>
+ <int key="connectionID">2052</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textFieldDevInfoLabel</string>
+ <reference key="source" ref="773588579"/>
+ <reference key="destination" ref="415603882"/>
+ </object>
+ <int key="connectionID">2053</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="84888716"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="773588579"/>
+ <reference key="parent" ref="0"/>
+ <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="270520968"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="173116405"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="61231707"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="645279396"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">PrefPane</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">6</int>
+ <reference key="object" ref="645279396"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="415603882"/>
+ <reference ref="1047946385"/>
+ <reference ref="748501112"/>
+ <reference ref="739317740"/>
+ </object>
+ <reference key="parent" ref="61231707"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">101</int>
+ <reference key="object" ref="739317740"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="269508902"/>
+ <reference ref="443722606"/>
+ <reference ref="584361947"/>
+ <reference ref="126070858"/>
+ </object>
+ <reference key="parent" ref="645279396"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">104</int>
+ <reference key="object" ref="269508902"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1020318718"/>
+ </object>
+ <reference key="parent" ref="739317740"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">105</int>
+ <reference key="object" ref="1020318718"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="440720679"/>
+ <reference ref="210387551"/>
+ <reference ref="977607312"/>
+ <reference ref="184192603"/>
+ <reference ref="893552286"/>
+ </object>
+ <reference key="parent" ref="269508902"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1107</int>
+ <reference key="object" ref="893552286"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="428850916"/>
+ </object>
+ <reference key="parent" ref="1020318718"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1199</int>
+ <reference key="object" ref="440720679"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="313963250"/>
+ <reference ref="884311606"/>
+ <reference ref="258996751"/>
+ <reference ref="1048519426"/>
+ </object>
+ <reference key="parent" ref="1020318718"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1203</int>
+ <reference key="object" ref="313963250"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="10567446"/>
+ </object>
+ <reference key="parent" ref="440720679"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1204</int>
+ <reference key="object" ref="10567446"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="361287568"/>
+ </object>
+ <reference key="parent" ref="313963250"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1207</int>
+ <reference key="object" ref="210387551"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="327131725"/>
+ </object>
+ <reference key="parent" ref="1020318718"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1209</int>
+ <reference key="object" ref="977607312"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="73578210"/>
+ </object>
+ <reference key="parent" ref="1020318718"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">177</int>
+ <reference key="object" ref="443722606"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1069727156"/>
+ </object>
+ <reference key="parent" ref="739317740"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">178</int>
+ <reference key="object" ref="1069727156"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="96110784"/>
+ <reference ref="788506691"/>
+ <reference ref="537320483"/>
+ <reference ref="593598121"/>
+ <reference ref="530233415"/>
+ <reference ref="335179878"/>
+ <reference ref="1038382119"/>
+ <reference ref="747536303"/>
+ </object>
+ <reference key="parent" ref="443722606"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">179</int>
+ <reference key="object" ref="96110784"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="536830463"/>
+ <reference ref="177605134"/>
+ <reference ref="172641834"/>
+ <reference ref="993816125"/>
+ </object>
+ <reference key="parent" ref="1069727156"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">180</int>
+ <reference key="object" ref="536830463"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="145486834"/>
+ <reference ref="909348673"/>
+ <reference ref="720585546"/>
+ <reference ref="136480779"/>
+ </object>
+ <reference key="parent" ref="96110784"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">181</int>
+ <reference key="object" ref="145486834"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="345168793"/>
+ </object>
+ <reference key="parent" ref="536830463"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">182</int>
+ <reference key="object" ref="909348673"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="990091450"/>
+ </object>
+ <reference key="parent" ref="536830463"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1422</int>
+ <reference key="object" ref="720585546"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="110685339"/>
+ </object>
+ <reference key="parent" ref="536830463"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1426</int>
+ <reference key="object" ref="110685339"/>
+ <reference key="parent" ref="720585546"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1787</int>
+ <reference key="object" ref="136480779"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="787517969"/>
+ </object>
+ <reference key="parent" ref="536830463"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1789</int>
+ <reference key="object" ref="787517969"/>
+ <reference key="parent" ref="136480779"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">183</int>
+ <reference key="object" ref="788506691"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="934170338"/>
+ </object>
+ <reference key="parent" ref="1069727156"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">184</int>
+ <reference key="object" ref="537320483"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1045702831"/>
+ </object>
+ <reference key="parent" ref="1069727156"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">185</int>
+ <reference key="object" ref="593598121"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="567447351"/>
+ </object>
+ <reference key="parent" ref="1069727156"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">186</int>
+ <reference key="object" ref="530233415"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="497389328"/>
+ </object>
+ <reference key="parent" ref="1069727156"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">200</int>
+ <reference key="object" ref="335179878"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="372630674"/>
+ </object>
+ <reference key="parent" ref="1069727156"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">265</int>
+ <reference key="object" ref="1038382119"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="269454663"/>
+ </object>
+ <reference key="parent" ref="1069727156"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1845</int>
+ <reference key="object" ref="747536303"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="579088625"/>
+ </object>
+ <reference key="parent" ref="1069727156"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">337</int>
+ <reference key="object" ref="584361947"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="537928258"/>
+ </object>
+ <reference key="parent" ref="739317740"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">338</int>
+ <reference key="object" ref="537928258"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1056952440"/>
+ </object>
+ <reference key="parent" ref="584361947"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">339</int>
+ <reference key="object" ref="1056952440"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="748314809"/>
+ <reference ref="411322031"/>
+ <reference ref="761947305"/>
+ <reference ref="560081349"/>
+ <reference ref="23658009"/>
+ <reference ref="217732195"/>
+ <reference ref="1070305297"/>
+ <reference ref="358834889"/>
+ <reference ref="255735511"/>
+ <reference ref="640588663"/>
+ <reference ref="850669444"/>
+ <reference ref="972024631"/>
+ <reference ref="627718334"/>
+ <reference ref="892096934"/>
+ <reference ref="835771463"/>
+ <reference ref="805322468"/>
+ <reference ref="1064737768"/>
+ <reference ref="509563943"/>
+ </object>
+ <reference key="parent" ref="537928258"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">207</int>
+ <reference key="object" ref="415603882"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="947523856"/>
+ </object>
+ <reference key="parent" ref="645279396"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1122</int>
+ <reference key="object" ref="748501112"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="709840556"/>
+ <reference ref="713307252"/>
+ <reference ref="871603218"/>
+ <reference ref="239701474"/>
+ </object>
+ <reference key="parent" ref="645279396"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1715</int>
+ <reference key="object" ref="1047946385"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="999146642"/>
+ </object>
+ <reference key="parent" ref="645279396"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">208</int>
+ <reference key="object" ref="52789773"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1017822711"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Info</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">209</int>
+ <reference key="object" ref="1017822711"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="935020490"/>
+ <reference ref="729692979"/>
+ </object>
+ <reference key="parent" ref="52789773"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">214</int>
+ <reference key="object" ref="935020490"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="297493656"/>
+ <reference ref="11642274"/>
+ <reference ref="574894181"/>
+ </object>
+ <reference key="parent" ref="1017822711"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">215</int>
+ <reference key="object" ref="297493656"/>
+ <reference key="parent" ref="935020490"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">216</int>
+ <reference key="object" ref="729692979"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="278933381"/>
+ </object>
+ <reference key="parent" ref="1017822711"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">224</int>
+ <reference key="object" ref="176554930"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">InfoController</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1964</int>
+ <reference key="object" ref="428850916"/>
+ <reference key="parent" ref="893552286"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1965</int>
+ <reference key="object" ref="327131725"/>
+ <reference key="parent" ref="210387551"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1966</int>
+ <reference key="object" ref="73578210"/>
+ <reference key="parent" ref="977607312"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1968</int>
+ <reference key="object" ref="934170338"/>
+ <reference key="parent" ref="788506691"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1969</int>
+ <reference key="object" ref="1045702831"/>
+ <reference key="parent" ref="537320483"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1970</int>
+ <reference key="object" ref="567447351"/>
+ <reference key="parent" ref="593598121"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1971</int>
+ <reference key="object" ref="497389328"/>
+ <reference key="parent" ref="530233415"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1972</int>
+ <reference key="object" ref="372630674"/>
+ <reference key="parent" ref="335179878"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1973</int>
+ <reference key="object" ref="269454663"/>
+ <reference key="parent" ref="1038382119"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1974</int>
+ <reference key="object" ref="579088625"/>
+ <reference key="parent" ref="747536303"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1993</int>
+ <reference key="object" ref="947523856"/>
+ <reference key="parent" ref="415603882"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1998</int>
+ <reference key="object" ref="999146642"/>
+ <reference key="parent" ref="1047946385"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1999</int>
+ <reference key="object" ref="278933381"/>
+ <reference key="parent" ref="729692979"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2000</int>
+ <reference key="object" ref="361287568"/>
+ <reference key="parent" ref="10567446"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2001</int>
+ <reference key="object" ref="345168793"/>
+ <reference key="parent" ref="145486834"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2002</int>
+ <reference key="object" ref="990091450"/>
+ <reference key="parent" ref="909348673"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2003</int>
+ <reference key="object" ref="884311606"/>
+ <reference key="parent" ref="440720679"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2004</int>
+ <reference key="object" ref="258996751"/>
+ <reference key="parent" ref="440720679"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2005</int>
+ <reference key="object" ref="1048519426"/>
+ <reference key="parent" ref="440720679"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2006</int>
+ <reference key="object" ref="177605134"/>
+ <reference key="parent" ref="96110784"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2007</int>
+ <reference key="object" ref="172641834"/>
+ <reference key="parent" ref="96110784"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2008</int>
+ <reference key="object" ref="993816125"/>
+ <reference key="parent" ref="96110784"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2009</int>
+ <reference key="object" ref="11642274"/>
+ <reference key="parent" ref="935020490"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2010</int>
+ <reference key="object" ref="574894181"/>
+ <reference key="parent" ref="935020490"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">340</int>
+ <reference key="object" ref="748314809"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1008754563"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1975</int>
+ <reference key="object" ref="1008754563"/>
+ <reference key="parent" ref="748314809"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">342</int>
+ <reference key="object" ref="411322031"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1051935415"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1976</int>
+ <reference key="object" ref="1051935415"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="455485314"/>
+ </object>
+ <reference key="parent" ref="411322031"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">741</int>
+ <reference key="object" ref="455485314"/>
+ <reference key="parent" ref="1051935415"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">344</int>
+ <reference key="object" ref="761947305"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="19899457"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1977</int>
+ <reference key="object" ref="19899457"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="248712560"/>
+ </object>
+ <reference key="parent" ref="761947305"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">742</int>
+ <reference key="object" ref="248712560"/>
+ <reference key="parent" ref="19899457"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">345</int>
+ <reference key="object" ref="560081349"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="628600719"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1978</int>
+ <reference key="object" ref="628600719"/>
+ <reference key="parent" ref="560081349"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">348</int>
+ <reference key="object" ref="23658009"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="463621063"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1979</int>
+ <reference key="object" ref="463621063"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="833073507"/>
+ </object>
+ <reference key="parent" ref="23658009"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">417</int>
+ <reference key="object" ref="833073507"/>
+ <reference key="parent" ref="463621063"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">349</int>
+ <reference key="object" ref="217732195"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1057450635"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1980</int>
+ <reference key="object" ref="1057450635"/>
+ <reference key="parent" ref="217732195"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">352</int>
+ <reference key="object" ref="1070305297"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="474187509"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1981</int>
+ <reference key="object" ref="474187509"/>
+ <reference key="parent" ref="1070305297"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">402</int>
+ <reference key="object" ref="358834889"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="120617252"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1983</int>
+ <reference key="object" ref="120617252"/>
+ <reference key="parent" ref="358834889"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">404</int>
+ <reference key="object" ref="255735511"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="310838537"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1984</int>
+ <reference key="object" ref="310838537"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="547764719"/>
+ </object>
+ <reference key="parent" ref="255735511"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">411</int>
+ <reference key="object" ref="547764719"/>
+ <reference key="parent" ref="310838537"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">406</int>
+ <reference key="object" ref="640588663"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="35880329"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1985</int>
+ <reference key="object" ref="35880329"/>
+ <reference key="parent" ref="640588663"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">408</int>
+ <reference key="object" ref="850669444"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="456324371"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1986</int>
+ <reference key="object" ref="456324371"/>
+ <reference key="parent" ref="850669444"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">413</int>
+ <reference key="object" ref="972024631"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="383369569"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1987</int>
+ <reference key="object" ref="383369569"/>
+ <reference key="parent" ref="972024631"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">415</int>
+ <reference key="object" ref="627718334"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="756462877"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1988</int>
+ <reference key="object" ref="756462877"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="592804150"/>
+ </object>
+ <reference key="parent" ref="627718334"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">740</int>
+ <reference key="object" ref="592804150"/>
+ <reference key="parent" ref="756462877"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">425</int>
+ <reference key="object" ref="892096934"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="728535364"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1989</int>
+ <reference key="object" ref="728535364"/>
+ <reference key="parent" ref="892096934"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">475</int>
+ <reference key="object" ref="835771463"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="672812502"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1990</int>
+ <reference key="object" ref="672812502"/>
+ <reference key="parent" ref="835771463"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">400</int>
+ <reference key="object" ref="805322468"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="703486492"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1982</int>
+ <reference key="object" ref="703486492"/>
+ <reference key="parent" ref="805322468"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1902</int>
+ <reference key="object" ref="509563943"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="442311508"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1991</int>
+ <reference key="object" ref="442311508"/>
+ <reference key="parent" ref="509563943"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1960</int>
+ <reference key="object" ref="1064737768"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="533239018"/>
+ </object>
+ <reference key="parent" ref="1056952440"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1992</int>
+ <reference key="object" ref="533239018"/>
+ <reference key="parent" ref="1064737768"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1103</int>
+ <reference key="object" ref="709840556"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="675447498"/>
+ </object>
+ <reference key="parent" ref="748501112"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1994</int>
+ <reference key="object" ref="675447498"/>
+ <reference key="parent" ref="709840556"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1111</int>
+ <reference key="object" ref="871603218"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1009755861"/>
+ </object>
+ <reference key="parent" ref="748501112"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1995</int>
+ <reference key="object" ref="1009755861"/>
+ <reference key="parent" ref="871603218"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2013</int>
+ <reference key="object" ref="184192603"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="478533800"/>
+ <reference ref="541208829"/>
+ </object>
+ <reference key="parent" ref="1020318718"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1280</int>
+ <reference key="object" ref="478533800"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="989004902"/>
+ </object>
+ <reference key="parent" ref="184192603"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1967</int>
+ <reference key="object" ref="989004902"/>
+ <reference key="parent" ref="478533800"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2011</int>
+ <reference key="object" ref="541208829"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="95048095"/>
+ </object>
+ <reference key="parent" ref="184192603"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2012</int>
+ <reference key="object" ref="95048095"/>
+ <reference key="parent" ref="541208829"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2018</int>
+ <reference key="object" ref="239701474"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="855912809"/>
+ </object>
+ <reference key="parent" ref="748501112"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2019</int>
+ <reference key="object" ref="855912809"/>
+ <reference key="parent" ref="239701474"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2022</int>
+ <reference key="object" ref="126070858"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="786994103"/>
+ </object>
+ <reference key="parent" ref="739317740"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2023</int>
+ <reference key="object" ref="786994103"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="284115188"/>
+ <reference ref="224507096"/>
+ <reference ref="642014996"/>
+ <reference ref="635503948"/>
+ </object>
+ <reference key="parent" ref="126070858"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2024</int>
+ <reference key="object" ref="284115188"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="497462431"/>
+ <reference ref="145484441"/>
+ <reference ref="1029505942"/>
+ <reference ref="209519573"/>
+ </object>
+ <reference key="parent" ref="786994103"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2025</int>
+ <reference key="object" ref="497462431"/>
+ <reference key="parent" ref="284115188"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2026</int>
+ <reference key="object" ref="145484441"/>
+ <reference key="parent" ref="284115188"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2027</int>
+ <reference key="object" ref="1029505942"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="604570943"/>
+ <reference ref="915858279"/>
+ </object>
+ <reference key="parent" ref="284115188"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2028</int>
+ <reference key="object" ref="209519573"/>
+ <reference key="parent" ref="284115188"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2029</int>
+ <reference key="object" ref="604570943"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="404459918"/>
+ </object>
+ <reference key="parent" ref="1029505942"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2030</int>
+ <reference key="object" ref="915858279"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="367407167"/>
+ </object>
+ <reference key="parent" ref="1029505942"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2031</int>
+ <reference key="object" ref="367407167"/>
+ <reference key="parent" ref="915858279"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2032</int>
+ <reference key="object" ref="404459918"/>
+ <reference key="parent" ref="604570943"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2033</int>
+ <reference key="object" ref="642014996"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="865151679"/>
+ </object>
+ <reference key="parent" ref="786994103"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2034</int>
+ <reference key="object" ref="865151679"/>
+ <reference key="parent" ref="642014996"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2035</int>
+ <reference key="object" ref="635503948"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="713243405"/>
+ </object>
+ <reference key="parent" ref="786994103"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2036</int>
+ <reference key="object" ref="713243405"/>
+ <reference key="parent" ref="635503948"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2037</int>
+ <reference key="object" ref="224507096"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="378183006"/>
+ </object>
+ <reference key="parent" ref="786994103"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2038</int>
+ <reference key="object" ref="378183006"/>
+ <reference key="parent" ref="224507096"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2049</int>
+ <reference key="object" ref="713307252"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="98390178"/>
+ </object>
+ <reference key="parent" ref="748501112"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2050</int>
+ <reference key="object" ref="98390178"/>
+ <reference key="parent" ref="713307252"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>-3.IBPluginDependency</string>
+ <string>-3.ImportedFromIB2</string>
+ <string>101.IBPluginDependency</string>
+ <string>101.ImportedFromIB2</string>
+ <string>104.IBPluginDependency</string>
+ <string>104.ImportedFromIB2</string>
+ <string>105.IBPluginDependency</string>
+ <string>105.ImportedFromIB2</string>
+ <string>1103.IBPluginDependency</string>
+ <string>1103.ImportedFromIB2</string>
+ <string>1107.IBPluginDependency</string>
+ <string>1107.ImportedFromIB2</string>
+ <string>1111.IBPluginDependency</string>
+ <string>1111.ImportedFromIB2</string>
+ <string>1122.IBPluginDependency</string>
+ <string>1122.ImportedFromIB2</string>
+ <string>1199.IBPluginDependency</string>
+ <string>1199.ImportedFromIB2</string>
+ <string>12.IBEditorWindowLastContentRect</string>
+ <string>12.IBPluginDependency</string>
+ <string>12.IBWindowTemplateEditedContentRect</string>
+ <string>12.ImportedFromIB2</string>
+ <string>12.windowTemplate.hasMinSize</string>
+ <string>12.windowTemplate.maxSize</string>
+ <string>12.windowTemplate.minSize</string>
+ <string>1203.IBPluginDependency</string>
+ <string>1203.ImportedFromIB2</string>
+ <string>1204.IBPluginDependency</string>
+ <string>1204.ImportedFromIB2</string>
+ <string>1207.IBPluginDependency</string>
+ <string>1207.ImportedFromIB2</string>
+ <string>1209.IBPluginDependency</string>
+ <string>1209.ImportedFromIB2</string>
+ <string>1280.IBPluginDependency</string>
+ <string>1280.ImportedFromIB2</string>
+ <string>1422.IBPluginDependency</string>
+ <string>1422.ImportedFromIB2</string>
+ <string>1426.IBPluginDependency</string>
+ <string>1426.ImportedFromIB2</string>
+ <string>1715.IBPluginDependency</string>
+ <string>1715.ImportedFromIB2</string>
+ <string>177.IBPluginDependency</string>
+ <string>177.ImportedFromIB2</string>
+ <string>178.IBPluginDependency</string>
+ <string>178.ImportedFromIB2</string>
+ <string>1787.IBPluginDependency</string>
+ <string>1787.ImportedFromIB2</string>
+ <string>1789.IBPluginDependency</string>
+ <string>1789.ImportedFromIB2</string>
+ <string>179.IBPluginDependency</string>
+ <string>179.ImportedFromIB2</string>
+ <string>180.IBPluginDependency</string>
+ <string>180.ImportedFromIB2</string>
+ <string>181.IBPluginDependency</string>
+ <string>181.ImportedFromIB2</string>
+ <string>182.IBPluginDependency</string>
+ <string>182.ImportedFromIB2</string>
+ <string>183.IBPluginDependency</string>
+ <string>183.ImportedFromIB2</string>
+ <string>184.IBPluginDependency</string>
+ <string>184.ImportedFromIB2</string>
+ <string>1845.IBPluginDependency</string>
+ <string>1845.ImportedFromIB2</string>
+ <string>185.IBPluginDependency</string>
+ <string>185.ImportedFromIB2</string>
+ <string>186.IBPluginDependency</string>
+ <string>186.ImportedFromIB2</string>
+ <string>1902.IBPluginDependency</string>
+ <string>1902.ImportedFromIB2</string>
+ <string>1960.IBAttributePlaceholdersKey</string>
+ <string>1960.IBPluginDependency</string>
+ <string>1960.ImportedFromIB2</string>
+ <string>1992.IBAttributePlaceholdersKey</string>
+ <string>200.IBPluginDependency</string>
+ <string>200.ImportedFromIB2</string>
+ <string>2000.IBShouldRemoveOnLegacySave</string>
+ <string>2001.IBShouldRemoveOnLegacySave</string>
+ <string>2002.IBShouldRemoveOnLegacySave</string>
+ <string>2003.IBShouldRemoveOnLegacySave</string>
+ <string>2004.IBShouldRemoveOnLegacySave</string>
+ <string>2005.IBShouldRemoveOnLegacySave</string>
+ <string>2006.IBShouldRemoveOnLegacySave</string>
+ <string>2007.IBShouldRemoveOnLegacySave</string>
+ <string>2008.IBShouldRemoveOnLegacySave</string>
+ <string>2009.IBShouldRemoveOnLegacySave</string>
+ <string>2010.IBShouldRemoveOnLegacySave</string>
+ <string>2011.IBPluginDependency</string>
+ <string>2012.IBPluginDependency</string>
+ <string>2013.IBPluginDependency</string>
+ <string>2018.IBPluginDependency</string>
+ <string>2019.IBPluginDependency</string>
+ <string>2024.IBPluginDependency</string>
+ <string>2025.IBPluginDependency</string>
+ <string>2026.IBPluginDependency</string>
+ <string>2027.IBPluginDependency</string>
+ <string>2028.IBPluginDependency</string>
+ <string>2029.IBPluginDependency</string>
+ <string>2030.IBPluginDependency</string>
+ <string>2031.IBPluginDependency</string>
+ <string>2032.IBPluginDependency</string>
+ <string>2033.IBPluginDependency</string>
+ <string>2034.IBPluginDependency</string>
+ <string>2035.IBPluginDependency</string>
+ <string>2036.IBPluginDependency</string>
+ <string>2037.IBPluginDependency</string>
+ <string>2038.IBPluginDependency</string>
+ <string>2049.IBPluginDependency</string>
+ <string>2050.IBPluginDependency</string>
+ <string>207.IBPluginDependency</string>
+ <string>207.ImportedFromIB2</string>
+ <string>208.IBEditorWindowLastContentRect</string>
+ <string>208.IBPluginDependency</string>
+ <string>208.IBWindowTemplateEditedContentRect</string>
+ <string>208.ImportedFromIB2</string>
+ <string>208.windowTemplate.hasMinSize</string>
+ <string>208.windowTemplate.maxSize</string>
+ <string>208.windowTemplate.minSize</string>
+ <string>209.IBPluginDependency</string>
+ <string>209.ImportedFromIB2</string>
+ <string>214.IBPluginDependency</string>
+ <string>214.ImportedFromIB2</string>
+ <string>215.IBPluginDependency</string>
+ <string>215.ImportedFromIB2</string>
+ <string>216.IBPluginDependency</string>
+ <string>216.ImportedFromIB2</string>
+ <string>224.IBPluginDependency</string>
+ <string>224.ImportedFromIB2</string>
+ <string>265.IBPluginDependency</string>
+ <string>265.ImportedFromIB2</string>
+ <string>337.IBPluginDependency</string>
+ <string>337.ImportedFromIB2</string>
+ <string>338.IBPluginDependency</string>
+ <string>338.ImportedFromIB2</string>
+ <string>339.IBPluginDependency</string>
+ <string>339.ImportedFromIB2</string>
+ <string>340.IBPluginDependency</string>
+ <string>340.ImportedFromIB2</string>
+ <string>342.IBPluginDependency</string>
+ <string>342.ImportedFromIB2</string>
+ <string>344.IBAttributePlaceholdersKey</string>
+ <string>344.IBPluginDependency</string>
+ <string>344.ImportedFromIB2</string>
+ <string>345.IBPluginDependency</string>
+ <string>345.ImportedFromIB2</string>
+ <string>348.IBAttributePlaceholdersKey</string>
+ <string>348.IBPluginDependency</string>
+ <string>348.ImportedFromIB2</string>
+ <string>349.IBPluginDependency</string>
+ <string>349.ImportedFromIB2</string>
+ <string>352.IBPluginDependency</string>
+ <string>352.ImportedFromIB2</string>
+ <string>400.IBPluginDependency</string>
+ <string>400.ImportedFromIB2</string>
+ <string>402.IBPluginDependency</string>
+ <string>402.ImportedFromIB2</string>
+ <string>404.IBAttributePlaceholdersKey</string>
+ <string>404.IBPluginDependency</string>
+ <string>404.ImportedFromIB2</string>
+ <string>406.IBPluginDependency</string>
+ <string>406.ImportedFromIB2</string>
+ <string>408.IBAttributePlaceholdersKey</string>
+ <string>408.IBPluginDependency</string>
+ <string>408.ImportedFromIB2</string>
+ <string>411.IBPluginDependency</string>
+ <string>411.ImportedFromIB2</string>
+ <string>413.IBPluginDependency</string>
+ <string>413.ImportedFromIB2</string>
+ <string>415.IBAttributePlaceholdersKey</string>
+ <string>415.IBPluginDependency</string>
+ <string>415.ImportedFromIB2</string>
+ <string>417.IBPluginDependency</string>
+ <string>417.ImportedFromIB2</string>
+ <string>425.IBPluginDependency</string>
+ <string>425.ImportedFromIB2</string>
+ <string>475.IBPluginDependency</string>
+ <string>475.ImportedFromIB2</string>
+ <string>6.IBPluginDependency</string>
+ <string>6.ImportedFromIB2</string>
+ <string>740.IBPluginDependency</string>
+ <string>740.ImportedFromIB2</string>
+ <string>741.IBPluginDependency</string>
+ <string>741.ImportedFromIB2</string>
+ <string>742.IBPluginDependency</string>
+ <string>742.ImportedFromIB2</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>{{192, 153}, {595, 486}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{192, 153}, {595, 486}}</string>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <string>{3.40282e+38, 3.40282e+38}</string>
+ <string>{0, 0}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="1064737768"/>
+ <string key="toolTip">Enable the verbose mode or afsd</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="533239018"/>
+ <string type="base64-UTF8" key="toolTip">RW5hYmxlIGxvdCBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZnJvbSBhZnNkLiAgT25seSB1c2VmdWwg
+Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>{{0, 510}, {715, 485}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{0, 510}, {715, 485}}</string>
+ <reference ref="9"/>
+ <reference ref="9"/>
+ <string>{3.40282e+38, 3.40282e+38}</string>
+ <string>{0, 0}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="761947305"/>
+ <string key="toolTip">DCache entry used for store information about cache chunk</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="23658009"/>
+ <string key="toolTip">Number of daemons to use</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="255735511"/>
+ <string key="toolTip">Specifies the number of memory structures to allocate for storing volume location information</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="850669444"/>
+ <string key="toolTip">The directory on which the AFS is to be mounted.</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="627718334"/>
+ <string key="toolTip">Specifies the number of memory structures to allocate for storing volume location information</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">2053</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">AFSCommanderPref</string>
+ <string key="superclassName">NSPreferencePane</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addLink:</string>
+ <string>addRemoveCell:</string>
+ <string>afsMenuActivationEvent:</string>
+ <string>afsStartupSwitchEvent:</string>
+ <string>aklogSwitchEvent:</string>
+ <string>credentialAtLoginTimeEvent:</string>
+ <string>enableLink:</string>
+ <string>getNewToken:</string>
+ <string>info:</string>
+ <string>krb5KredentialAtLoginTimeEvent:</string>
+ <string>refreshConfiguration:</string>
+ <string>removeLink:</string>
+ <string>saveCacheManagerParam:</string>
+ <string>saveConfiguration:</string>
+ <string>searchCellTextEvent:</string>
+ <string>showCellIP:</string>
+ <string>startStopAfs:</string>
+ <string>tableDoubleAction:</string>
+ <string>unlog:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addCellButton</string>
+ <string>afsCommanderView</string>
+ <string>afsDB</string>
+ <string>afsDefaultCellLabel</string>
+ <string>afsMenucheckBox</string>
+ <string>afsRootMountPoint</string>
+ <string>afsVersionLabel</string>
+ <string>aklogCredentialAtLoginTime</string>
+ <string>buttonAddLink</string>
+ <string>buttonRemoveLink</string>
+ <string>cacheDimension</string>
+ <string>cellIpButton</string>
+ <string>cellList</string>
+ <string>checkButtonAfsAtBootTime</string>
+ <string>checkEnableLink</string>
+ <string>credentialCommander</string>
+ <string>credentialSheet</string>
+ <string>dCacheDim</string>
+ <string>daemonNumber</string>
+ <string>dynRoot</string>
+ <string>groupsBox</string>
+ <string>infoController</string>
+ <string>infoSheet</string>
+ <string>installKRB5AuthAtLoginButton</string>
+ <string>ipConfControllerCommander</string>
+ <string>ipConfigurationSheet</string>
+ <string>labelSaveResult</string>
+ <string>lyncCreationSheet</string>
+ <string>lynkCreationController</string>
+ <string>nVolEntry</string>
+ <string>removeCellButton</string>
+ <string>saveConfigurationButton</string>
+ <string>startStopButton</string>
+ <string>statCacheEntry</string>
+ <string>textFieldDevInfoLabel</string>
+ <string>textSearchField</string>
+ <string>tokensButton</string>
+ <string>tokensTable</string>
+ <string>unlogButton</string>
+ <string>useAklogCheck</string>
+ <string>verbose</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>NSView</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSBox</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSButton</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>LynkCreationController</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSSearchField</string>
+ <string>NSButton</string>
+ <string>id</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">AFSCommanderPref.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">AFSCommanderPref</string>
+ <string key="superclassName">NSPreferencePane</string>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cellPopupButton</string>
+ <string>getTokenButton</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSPopUpButton</string>
+ <string>NSPopUpButton</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">FirstResponder</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">InfoController</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <string key="NS.key.0">closePanel:</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>infoPanel</string>
+ <string>texEditInfo</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">InfoController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">InfoController</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">LynkCreationController</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancell:</string>
+ <string>save:</string>
+ <string>selectLinkDest:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>lynkCreationSheet</string>
+ <string>textFieldLinkDestPath</string>
+ <string>textfieldLinkName</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSPanel</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">LynkCreationController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSPreferencePane</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>_firstKeyView</string>
+ <string>_initialKeyView</string>
+ <string>_lastKeyView</string>
+ <string>_window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../OpenAFS.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ </data>
+</archive>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">9D34</string>
+ <string key="IBDocument.InterfaceBuilderVersion">667</string>
+ <string key="IBDocument.AppKitVersion">949.33</string>
+ <string key="IBDocument.HIToolboxVersion">352.00</string>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="7"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilderKit</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1001">
+ <string key="NSClassName">AFSCommanderPref</string>
+ </object>
+ <object class="NSCustomObject" id="1003">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1004">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSCustomObject" id="975034471">
+ <string key="NSClassName">LynkCreationController</string>
+ </object>
+ <object class="NSWindowTemplate" id="601928344">
+ <int key="NSWindowStyleMask">11</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{196, 372}, {502, 138}}</string>
+ <int key="NSWTFlags">1946157056</int>
+ <string key="NSWindowTitle">Window</string>
+ <string key="NSWindowClass">NSPanel</string>
+ <nil key="NSViewClass"/>
+ <string key="NSWindowContentMaxSize">{800, 138}</string>
+ <string key="NSWindowContentMinSize">{502, 138}</string>
+ <object class="NSView" key="NSWindowView" id="460331704">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">266</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextField" id="490694985">
+ <reference key="NSNextResponder" ref="460331704"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{46, 116}, {67, 14}}</string>
+ <reference key="NSSuperview" ref="460331704"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="223588969">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents">Lynk Name:</string>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <reference key="NSControlView" ref="490694985"/>
+ <object class="NSColor" key="NSBackgroundColor" id="459467427">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="580207658">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="213974819">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="216298488">
+ <reference key="NSNextResponder" ref="460331704"/>
+ <int key="NSvFlags">266</int>
+ <string key="NSFrame">{{118, 114}, {364, 19}}</string>
+ <reference key="NSSuperview" ref="460331704"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="595483084">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="216298488"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <object class="NSColor" key="NSBackgroundColor" id="842446002">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="456929419">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="213974819"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="396325470">
+ <reference key="NSNextResponder" ref="460331704"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{17, 89}, {96, 14}}</string>
+ <reference key="NSSuperview" ref="460331704"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="606265604">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents">Destination Path:</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="396325470"/>
+ <reference key="NSBackgroundColor" ref="459467427"/>
+ <reference key="NSTextColor" ref="580207658"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="987609939">
+ <reference key="NSNextResponder" ref="460331704"/>
+ <int key="NSvFlags">266</int>
+ <string key="NSFrame">{{118, 87}, {364, 19}}</string>
+ <reference key="NSSuperview" ref="460331704"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1031947755">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="987609939"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="842446002"/>
+ <reference key="NSTextColor" ref="456929419"/>
+ </object>
+ </object>
+ <object class="NSButton" id="852592336">
+ <reference key="NSNextResponder" ref="460331704"/>
+ <int key="NSvFlags">265</int>
+ <string key="NSFrame">{{391, 55}, {96, 28}}</string>
+ <reference key="NSSuperview" ref="460331704"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="293618620">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Select Path</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="852592336"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">268435585</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent">p</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="398365385">
+ <reference key="NSNextResponder" ref="460331704"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{391, 28}, {96, 28}}</string>
+ <reference key="NSSuperview" ref="460331704"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="1037460050">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Save</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="398365385"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">129</int>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="624416640">
+ <reference key="NSNextResponder" ref="460331704"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{297, 28}, {96, 28}}</string>
+ <reference key="NSSuperview" ref="460331704"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="204377612">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents">Cancel</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="624416640"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">129</int>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrameSize">{502, 138}</string>
+ <reference key="NSSuperview"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
+ <string key="NSMinSize">{502, 160}</string>
+ <string key="NSMaxSize">{800, 160}</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">save:</string>
+ <reference key="source" ref="975034471"/>
+ <reference key="destination" ref="398365385"/>
+ </object>
+ <int key="connectionID">23</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cancell:</string>
+ <reference key="source" ref="975034471"/>
+ <reference key="destination" ref="624416640"/>
+ </object>
+ <int key="connectionID">24</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">lynkCreationSheet</string>
+ <reference key="source" ref="975034471"/>
+ <reference key="destination" ref="601928344"/>
+ </object>
+ <int key="connectionID">25</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">lyncCreationSheet</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="601928344"/>
+ </object>
+ <int key="connectionID">26</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">selectLinkDest:</string>
+ <reference key="source" ref="975034471"/>
+ <reference key="destination" ref="852592336"/>
+ </object>
+ <int key="connectionID">27</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textFieldLinkDestPath</string>
+ <reference key="source" ref="975034471"/>
+ <reference key="destination" ref="987609939"/>
+ </object>
+ <int key="connectionID">28</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">textfieldLinkName</string>
+ <reference key="source" ref="975034471"/>
+ <reference key="destination" ref="216298488"/>
+ </object>
+ <int key="connectionID">29</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="1002">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="1000"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1001"/>
+ <reference key="parent" ref="1002"/>
+ <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="1003"/>
+ <reference key="parent" ref="1002"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1004"/>
+ <reference key="parent" ref="1002"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">6</int>
+ <reference key="object" ref="601928344"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="460331704"/>
+ </object>
+ <reference key="parent" ref="1002"/>
+ <string key="objectName">LynkCreation</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">7</int>
+ <reference key="object" ref="460331704"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="490694985"/>
+ <reference ref="216298488"/>
+ <reference ref="987609939"/>
+ <reference ref="852592336"/>
+ <reference ref="398365385"/>
+ <reference ref="624416640"/>
+ <reference ref="396325470"/>
+ </object>
+ <reference key="parent" ref="601928344"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">8</int>
+ <reference key="object" ref="490694985"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="223588969"/>
+ </object>
+ <reference key="parent" ref="460331704"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">9</int>
+ <reference key="object" ref="223588969"/>
+ <reference key="parent" ref="490694985"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">10</int>
+ <reference key="object" ref="216298488"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="595483084"/>
+ </object>
+ <reference key="parent" ref="460331704"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">11</int>
+ <reference key="object" ref="595483084"/>
+ <reference key="parent" ref="216298488"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="396325470"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="606265604"/>
+ </object>
+ <reference key="parent" ref="460331704"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="987609939"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1031947755"/>
+ </object>
+ <reference key="parent" ref="460331704"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="1031947755"/>
+ <reference key="parent" ref="987609939"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">15</int>
+ <reference key="object" ref="606265604"/>
+ <reference key="parent" ref="396325470"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">16</int>
+ <reference key="object" ref="852592336"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="293618620"/>
+ </object>
+ <reference key="parent" ref="460331704"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">17</int>
+ <reference key="object" ref="293618620"/>
+ <reference key="parent" ref="852592336"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">18</int>
+ <reference key="object" ref="398365385"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1037460050"/>
+ </object>
+ <reference key="parent" ref="460331704"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">19</int>
+ <reference key="object" ref="1037460050"/>
+ <reference key="parent" ref="398365385"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">20</int>
+ <reference key="object" ref="624416640"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="204377612"/>
+ </object>
+ <reference key="parent" ref="460331704"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">21</int>
+ <reference key="object" ref="204377612"/>
+ <reference key="parent" ref="624416640"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">22</int>
+ <reference key="object" ref="975034471"/>
+ <reference key="parent" ref="1002"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>-3.IBPluginDependency</string>
+ <string>10.IBAttributePlaceholdersKey</string>
+ <string>10.IBPluginDependency</string>
+ <string>11.IBPluginDependency</string>
+ <string>12.IBPluginDependency</string>
+ <string>13.IBAttributePlaceholdersKey</string>
+ <string>13.IBPluginDependency</string>
+ <string>14.IBPluginDependency</string>
+ <string>15.IBPluginDependency</string>
+ <string>16.IBPluginDependency</string>
+ <string>17.IBPluginDependency</string>
+ <string>18.IBPluginDependency</string>
+ <string>19.IBPluginDependency</string>
+ <string>20.IBPluginDependency</string>
+ <string>21.IBPluginDependency</string>
+ <string>22.IBPluginDependency</string>
+ <string>6.IBEditorWindowLastContentRect</string>
+ <string>6.IBPluginDependency</string>
+ <string>6.IBWindowTemplateEditedContentRect</string>
+ <string>6.NSWindowTemplate.visibleAtLaunch</string>
+ <string>6.windowTemplate.hasMaxSize</string>
+ <string>6.windowTemplate.hasMinSize</string>
+ <string>6.windowTemplate.maxSize</string>
+ <string>6.windowTemplate.minSize</string>
+ <string>7.IBPluginDependency</string>
+ <string>8.IBPluginDependency</string>
+ <string>9.IBPluginDependency</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilderKit</string>
+ <string>com.apple.InterfaceBuilderKit</string>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="216298488"/>
+ <string key="toolTip">Alias that describe the link. It will be used as mount name.</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="987609939"/>
+ <string key="toolTip">AFS path for the link destination</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{86, 409}, {502, 138}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{86, 409}, {502, 138}}</string>
+ <integer value="0"/>
+ <integer value="1" id="9"/>
+ <reference ref="9"/>
+ <string>{800, 138}</string>
+ <string>{502, 138}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">29</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">AFSCommanderPref</string>
+ <string key="superclassName">NSPreferencePane</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addLink:</string>
+ <string>addRemoveCell:</string>
+ <string>afsMenuActivationEvent:</string>
+ <string>aklogSwitchEvent:</string>
+ <string>credentialAtLoginTimeEvent:</string>
+ <string>enableLink:</string>
+ <string>getNewToken:</string>
+ <string>info:</string>
+ <string>krb5KredentialAtLoginTimeEvent:</string>
+ <string>refreshConfiguration:</string>
+ <string>removeLink:</string>
+ <string>saveCacheManagerParam:</string>
+ <string>saveConfiguration:</string>
+ <string>searchCellTextEvent:</string>
+ <string>showCellIP:</string>
+ <string>startStopAfs:</string>
+ <string>tableDoubleAction:</string>
+ <string>unlog:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addCellButton</string>
+ <string>afsCommanderView</string>
+ <string>afsDB</string>
+ <string>afsDefaultCellLabel</string>
+ <string>afsMenucheckBox</string>
+ <string>afsRootMountPoint</string>
+ <string>afsVersionLabel</string>
+ <string>aklogCredentialAtLoginTime</string>
+ <string>buttonAddLink</string>
+ <string>buttonRemoveLink</string>
+ <string>cacheDimension</string>
+ <string>cellIpButton</string>
+ <string>cellList</string>
+ <string>checkEnableLink</string>
+ <string>credentialCommander</string>
+ <string>credentialSheet</string>
+ <string>dCacheDim</string>
+ <string>daemonNumber</string>
+ <string>dynRoot</string>
+ <string>groupsBox</string>
+ <string>infoController</string>
+ <string>infoSheet</string>
+ <string>installKRB5AuthAtLoginButton</string>
+ <string>installationPathTextField</string>
+ <string>ipConfControllerCommander</string>
+ <string>ipConfigurationSheet</string>
+ <string>labelSaveResult</string>
+ <string>lyncCreationSheet</string>
+ <string>lynkCreationController</string>
+ <string>nVolEntry</string>
+ <string>refreshConfigurationButton</string>
+ <string>removeCellButton</string>
+ <string>saveConfigurationButton</string>
+ <string>startStopButton</string>
+ <string>statCacheEntry</string>
+ <string>textSearchField</string>
+ <string>tokensButton</string>
+ <string>tokensTable</string>
+ <string>unlogButton</string>
+ <string>useAklogCheck</string>
+ <string>verbose</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>NSView</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSButton</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSBox</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSButton</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>LynkCreationController</string>
+ <string>NSTextField</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSTextField</string>
+ <string>NSSearchField</string>
+ <string>NSButton</string>
+ <string>id</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">AFSCommanderPref.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">LynkCreationController</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancell:</string>
+ <string>save:</string>
+ <string>selectLinkDest:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>lynkCreationSheet</string>
+ <string>textFieldLinkDestPath</string>
+ <string>textfieldLinkName</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSPanel</string>
+ <string>NSTextField</string>
+ <string>NSTextField</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">LynkCreationController.h</string>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../OpenAFS.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ </data>
+</archive>
--- /dev/null
+//
+// FileUtil.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 21/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#include "AuthUtil.h"
+
+@interface FileUtil : NSObject {
+ AuthUtil *autorization;
+}
+
+-(id) init;
+-(void) dealloc;
+-(OSStatus) startAutorization;
+-(OSStatus) autorizedMoveFile:(NSString*)srcPath toPath:(NSString*)dstPath;
+-(OSStatus) autorizedChown:(NSString*)filePath owner:(NSString*)owner group:(NSString*)group;
+-(OSStatus) autorizedCopy:(NSString*)srcPath toPath:(NSString*)dstPath;
+-(OSStatus) autorizedDelete:(NSString*)destFilePath;
+-(void) endAutorization;
+@end
--- /dev/null
+//
+// FileUtil.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 21/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "FileUtil.h"
+
+@implementation FileUtil
+
+-(id) init;
+{
+ [super init];
+ return self;
+}
+
+-(void) dealloc
+{
+ [super dealloc];
+}
+
+// -------------------------------------------------------------------------------
+// startAutorization:
+// -------------------------------------------------------------------------------
+-(OSStatus) startAutorization
+{
+ OSStatus err = noErr;
+ err = [[AuthUtil shared] autorize];
+ return err;
+}
+
+// -------------------------------------------------------------------------------
+// autorizedMoveFile:
+// -------------------------------------------------------------------------------
+-(OSStatus) autorizedMoveFile:(NSString*)srcPath toPath:(NSString*)dstPath
+{
+ OSStatus status = noErr;
+ const char *arguments[] = {[srcPath UTF8String], [dstPath UTF8String], 0L};
+ status = [[AuthUtil shared] execUnixCommand:"/bin/mv" args:arguments output:nil];
+ return status;
+}
+
+// -------------------------------------------------------------------------------
+// autorizedMoveFile:
+// -------------------------------------------------------------------------------
+-(OSStatus) autorizedCopy:(NSString*)srcPath toPath:(NSString*)dstPath
+{
+ OSStatus status = noErr;
+ const char *arguments[] = {[srcPath UTF8String], [dstPath UTF8String], 0L};
+ status = [[AuthUtil shared] execUnixCommand:"/bin/cp" args:arguments output:nil];
+ return status;
+}
+
+// -------------------------------------------------------------------------------
+// autorizedChown:
+// -------------------------------------------------------------------------------
+-(OSStatus) autorizedChown:(NSString*)filePath owner:(NSString*)owner group:(NSString*)group;
+{
+ OSStatus status = noErr;
+ NSMutableString *chownParam = [[NSMutableString alloc] init];
+ [chownParam appendString:owner];
+ [chownParam appendString:@":"];
+ [chownParam appendString:group];
+
+ const char *arguments[] = {[chownParam UTF8String], [filePath UTF8String], 0L};
+ status = [[AuthUtil shared] execUnixCommand:"/usr/sbin/chown" args:arguments output:nil];
+ [chownParam release];
+ return status;
+}
+
+// -------------------------------------------------------------------------------
+// autorizedDelete:
+// -------------------------------------------------------------------------------
+-(OSStatus) autorizedDelete:(NSString*)destFilePath{
+ OSStatus status = noErr;
+ const char *arguments[] = {[destFilePath UTF8String], 0L};
+ status = [[AuthUtil shared] execUnixCommand:"/bin/rm" args:arguments output:nil];
+ return status;
+}
+
+// -------------------------------------------------------------------------------
+// endAutorization:
+// -------------------------------------------------------------------------------
+-(void) endAutorization
+{
+ [[AuthUtil shared] deautorize];
+}
+
+@end
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string>OpenAFS</string>
+ <key>CFBundleIdentifier</key>
+ <string>it.infn.lnf.network.openafs</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0b</string>
+ <key>CFBundleSignature</key>
+ <string>INFN</string>
+ <key>CFBundleVersion</key>
+ <string>1.0b</string>
+ <key>NSMainNibFile</key>
+ <string>OpenAFSPreference</string>
+ <key>NSPrefPaneIconFile</key>
+ <string>AFSCommanderIcon</string>
+ <key>NSPrefPaneIconLabel</key>
+ <string>OpenAFS</string>
+ <key>NSPrincipalClass</key>
+ <string>AFSCommanderPref</string>
+</dict>
+</plist>
--- /dev/null
+//
+// InfoCommander.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 06/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface InfoController : NSObject {
+ id infoPanel;
+ id texEditInfo;
+
+ NSAttributedString *htmlLicence;
+}
+- (IBAction) closePanel:(id) sender;
+- (void)showHtmlResource :(NSString*)resourcePath;
+
+@end
--- /dev/null
+//
+// InfoCommander.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 06/07/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "InfoController.h"
+
+
+@implementation InfoController
+// -------------------------------------------------------------------------------
+// awakeFromNib:
+// -------------------------------------------------------------------------------
+- (void)awakeFromNib
+{
+ NSLog(@"awakeFromNib");
+ htmlLicence = nil;
+}
+
+// -------------------------------------------------------------------------------
+// awakeFromNib:
+// -------------------------------------------------------------------------------
+- (void)showHtmlResource :(NSString*)resourcePath
+{
+ NSData *rtfData = [NSData dataWithContentsOfFile:resourcePath];
+ htmlLicence = [[NSAttributedString alloc] initWithRTF:rtfData
+ documentAttributes:nil];
+ [[((NSTextView*) texEditInfo ) textStorage] setAttributedString:htmlLicence];
+}
+
+
+// -------------------------------------------------------------------------------
+// awakeFromNib:
+// -------------------------------------------------------------------------------
+- (IBAction) closePanel:(id) sender
+{
+ if(htmlLicence) [htmlLicence release];
+ [NSApp endSheet:infoPanel];
+}
+@end
--- /dev/null
+//
+// IpConfiguratorCommander.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 18/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "DBCellElement.h"
+#import "AFSCommanderPref.h"
+@interface IpConfiguratorCommander : NSObject {
+ id confPanel;
+ id afsCommanderPref;
+ id textFieldCellName;
+ id textFieldComment;
+ id tableViewCellIP;
+
+ id modifyButton;
+ id createButton;
+ id deleteButton;
+
+ BOOL hasSaved;
+ DBCellElement *cellElement;
+ NSMutableArray *bkIPArray;
+ NSMutableArray *workIPArray;
+ CellIp *currentSelectedIP;
+}
+
+- (void) setWorkCell:(DBCellElement*)cell;
+- (IBAction) save:(id) sender;
+- (IBAction) cancel:(id) sender;
+- (IBAction) createNewIP:(id) sender;
+- (IBAction) cancelIP:(id) sender;
+- (BOOL) saved;
+
+- (id) getPanel;
+- (void) commitModify;
+- (void) rollbackModify;
+- (void) loadValueFromCellIPClass;
+- (void) manageTableSelection:(int)row;
+@end
--- /dev/null
+//
+// IpConfiguratorCommander.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 18/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "IpConfiguratorCommander.h"
+#import "AFSCommanderPref.h"
+
+@implementation IpConfiguratorCommander
+
+// -------------------------------------------------------------------------------
+// awakeFromNib:
+// -------------------------------------------------------------------------------
+- (void)awakeFromNib
+{
+ NSLog(@"awakeFromNib");
+ [((NSTableView*)tableViewCellIP) setDelegate:self];
+ [((NSTableView*)tableViewCellIP) setDataSource:self];
+}
+
+// -------------------------------------------------------------------------------
+// initWhitCell:
+// -------------------------------------------------------------------------------
+- (void) setWorkCell:(DBCellElement*)cell {
+ cellElement = cell;
+ currentSelectedIP = nil;
+}
+
+// -------------------------------------------------------------------------------
+// save:
+// -------------------------------------------------------------------------------
+- (IBAction) save:(id) sender
+{
+ hasSaved = YES;
+ [self commitModify];
+ [NSApp endSheet:confPanel];
+}
+
+// -------------------------------------------------------------------------------
+// commitModify:
+// -------------------------------------------------------------------------------
+- (void) commitModify
+{
+ //store the cell name
+ [cellElement setCellName:[((NSControl*) textFieldCellName) stringValue]];
+ [cellElement setCellComment:[((NSControl*) textFieldComment) stringValue]];
+
+ NSLog(@"Deleting:\n%s",[[bkIPArray description] cString]);
+ [bkIPArray removeAllObjects];
+ NSLog(@"deleted:\n");
+ NSLog(@"Coping:\n%s",[[workIPArray description] cString]);
+ [bkIPArray setArray:workIPArray];
+ NSLog(@"Copied:\n%s",[[workIPArray description] cString]);
+ NSLog(@"Releasing:\n%s",[[workIPArray description] cString]);
+ [workIPArray release];
+ NSLog(@"Released:\n%s",[[workIPArray description] cString]);
+}
+
+// -------------------------------------------------------------------------------
+// cancel:
+// -------------------------------------------------------------------------------
+- (IBAction) cancel:(id) sender
+{
+ hasSaved = NO;
+ [self rollbackModify];
+ [NSApp endSheet:confPanel];
+}
+
+
+// -------------------------------------------------------------------------------
+// rollbackModify:
+// -------------------------------------------------------------------------------
+- (void) rollbackModify
+{
+ // take bkarray
+ [workIPArray release];
+ workIPArray = nil;
+}
+
+// -------------------------------------------------------------------------------
+// createNewIP:
+// -------------------------------------------------------------------------------
+- (IBAction) createNewIP:(id) sender
+{
+ CellIp *ip = [[CellIp alloc] init];
+ [workIPArray addObject:ip];
+ [ip release];
+ currentSelectedIP = ip;
+ [((NSTableView*)tableViewCellIP) reloadData];
+ [((NSTableView *) tableViewCellIP) scrollRowToVisible:[[cellElement getIp] count]-1];
+}
+
+// -------------------------------------------------------------------------------
+// cancelIP:
+// -------------------------------------------------------------------------------
+- (IBAction) cancelIP:(id) sender
+{
+ [workIPArray removeObjectAtIndex:[((NSTableView*)tableViewCellIP) selectedRow]];
+ [((NSTableView*)tableViewCellIP) deselectAll:nil];
+ [self manageTableSelection:-1];
+ [((NSTableView*)tableViewCellIP) reloadData];
+
+}
+
+// -------------------------------------------------------------------------------
+// hasSaved:
+// -------------------------------------------------------------------------------
+- (BOOL)saved
+{
+ return hasSaved;
+}
+
+// -------------------------------------------------------------------------------
+// loadValueFromCellIPClass:
+// -------------------------------------------------------------------------------
+- (void) loadValueFromCellIPClass
+{
+ [((NSTextField*)textFieldCellName) setStringValue:[cellElement getCellName]];
+ [((NSTextField*)textFieldComment) setStringValue:[cellElement getCellComment]];
+ [((NSTableView*)tableViewCellIP) reloadData];
+}
+
+// -------------------------------------------------------------------------------
+// manageTableSelection:
+// -------------------------------------------------------------------------------
+- (void) manageTableSelection:(int)row
+{
+ //[((NSControl*) modifyButton) setEnabled:row>=0];
+ [((NSControl*) deleteButton) setEnabled:row>=0];
+}
+
+- (id) getPanel
+{
+ return confPanel;
+}
+@end
+
+//Windows Delegator
+@implementation IpConfiguratorCommander(PanelDelegator)
+// -------------------------------------------------------------------------------
+// windowDidBecomeKey:
+// -------------------------------------------------------------------------------
+- (void)windowDidBecomeKey:(NSNotification *)aNotification
+{
+ if(!cellElement){
+ [NSApp endSheet:confPanel];
+ return;
+ }
+
+ bkIPArray = [cellElement getIp];
+ workIPArray = [[NSMutableArray alloc] initWithArray:bkIPArray];
+ [self loadValueFromCellIPClass];
+}
+
+// -------------------------------------------------------------------------------
+// windowWillClose:
+// -------------------------------------------------------------------------------
+- (void)windowWillClose:(NSNotification *)aNotification
+{
+}
+@end
+
+//Table datasource
+@implementation IpConfiguratorCommander (NSTableDataSource)
+// -------------------------------------------------------------------------------
+// tableView:
+// -------------------------------------------------------------------------------
+- (id) tableView:(NSTableView *) aTableView
+ objectValueForTableColumn:(NSTableColumn *) aTableColumn
+ row:(int) rowIndex
+{
+
+ NSString *result = nil;
+ //NSMutableArray *cellArray = [cellElement getIp];
+ CellIp *ipElement = (CellIp*)[workIPArray objectAtIndex:rowIndex];
+ NSString *identifier = (NSString*)[aTableColumn identifier];
+ switch([identifier intValue]){
+ case 1:
+ result = [ipElement getCellIp];
+ break;
+
+ case 2:
+ result = [ipElement getCellComment];
+ break;
+
+ }
+ return result;
+}
+
+// -------------------------------------------------------------------------------
+// numberOfRowsInTableView:
+// -------------------------------------------------------------------------------
+- (int)numberOfRowsInTableView:(NSTableView *)aTableView
+{
+ return [workIPArray count];
+}
+
+- (void)tableView:(NSTableView *)aTable setObjectValue:(id)aData
+ forTableColumn:(NSTableColumn *)aCol row:(int)aRow
+{
+ NSLog([aData description]);
+ CellIp *ipElement = (CellIp*)[workIPArray objectAtIndex:aRow];
+ switch([((NSNumber*)[aCol identifier]) intValue])
+ {
+ case 1:
+ [ipElement setCellIp:[aData description]];
+ break;
+
+ case 2:
+ [ipElement setCellComment:[aData description]];
+ break;
+ }
+}
+@end
+
+// Table delegator
+@implementation IpConfiguratorCommander (TableDelegate)
+// -------------------------------------------------------------------------------
+// selectionShouldChangeInTableView:
+// -------------------------------------------------------------------------------
+- (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTable
+{
+ [self manageTableSelection:[aTable selectedRow]];
+ return YES;
+}
+
+// -------------------------------------------------------------------------------
+// tableView:
+// -------------------------------------------------------------------------------
+- (BOOL)tableView:(NSTableView *)aTable shouldSelectRow:(int)aRow
+{
+ [self manageTableSelection:aRow];
+ return YES;
+}
+@end
--- /dev/null
+//
+// LynkCreationController.h
+// OpenAFS
+//
+// Created by MacDeveloper on 03/06/08.
+// Copyright 2008 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface LynkCreationController : NSObject {
+ IBOutlet NSPanel *lynkCreationSheet;
+ IBOutlet NSTextField *textFieldLinkDestPath;
+ IBOutlet NSTextField *textfieldLinkName;
+ int choiceResult;
+}
+
+-(NSPanel*)getView;
+- (IBAction) save:(id) sender;
+- (IBAction) cancell:(id) sender;
+- (IBAction) selectLinkDest:(id) sender;
+@end
--- /dev/null
+//
+// LynkCreationController.m
+// OpenAFS
+//
+// Created by MacDeveloper on 03/06/08.
+// Copyright 2008 __MyCompanyName__. All rights reserved.
+//
+
+#import "LynkCreationController.h"
+
+
+@implementation LynkCreationController
+
+-(NSPanel*)getView {
+ return lynkCreationSheet;
+}
+
+- (IBAction) save:(id) sender {
+ [NSApp endSheet:lynkCreationSheet];
+}
+
+- (IBAction) cancell:(id) sender{
+ [NSApp endSheet:lynkCreationSheet];
+}
+
+- (IBAction) selectLinkDest:(id) sender {
+ NSOpenPanel *openPanel = [NSOpenPanel openPanel];
+ [openPanel setCanChooseFiles:NO];
+ [openPanel setCanChooseDirectories:YES];
+ [openPanel setAllowsMultipleSelection:NO];
+ choiceResult = [openPanel runModalForTypes:nil];
+ switch(choiceResult){
+ case NSOKButton:
+ if([[openPanel filenames] count] == 1) {
+ [textFieldLinkDestPath setStringValue:[[openPanel filenames] objectAtIndex:0]];
+ }
+ break;
+
+ case NSCancelButton:
+ [textFieldLinkDestPath setStringValue:@""];
+ break;
+ }
+}
+@end
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleExecutable</key>
+ <string>MenuCracker</string>
+ <key>CFBundleGetInfoString</key>
+ <string>MenuCracker 1.4 ©2001-2006, james_007_bond@users.sourceforge.net</string>
+ <key>CFBundleIdentifier</key>
+ <string>net.sourceforge.menucracker2</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>MenuCracker</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.4</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>6</string>
+ <key>NSMenuExtraWidth</key>
+ <integer>0</integer>
+ <key>NSPrincipalClass</key>
+ <string>CPUExtra</string>
+</dict>
+</plist>
--- /dev/null
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 Helvetica-Bold;\f2\fnil\fcharset77 Monaco;
+}
+{\colortbl;\red255\green255\blue255;\red118\green15\blue80;\red0\green0\blue255;\red35\green110\blue37;
+}
+\margl1440\margr1440\vieww17140\viewh9140\viewkind0
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
+
+\f0\fs24 \cf0 Welcome to
+\f1\b MenuCracker
+\f0\b0 .\
+\
+Menu cracker is a little tool to reenable the menu extra that Apple closed in Mac OS X 10.2 (code named Jaguar). Using MenuCracker you can use all your 10.1 Menu Extras unmodified.\
+\
+If you are an end user and you just want to make sure everything works as it was before 10.2:\
+\
+- first copy MenuCracker.menu anywhere in your home directory (Applications and Library/Bundles are relatively good choices)\
+\
+- Then double click on the installed version or drag it to the menubar.\
+\
+That's it.\
+\
+From then on all your third party menu extra will work.\
+\
+If you are a developer and your menu extra is controlled by an application there is some work for you to do. First add the MenuCracker binary to the resource folder of your application or preference pane. Then before calling
+\f2\fs20 \CocoaLigature0 CoreMenuExtraAddMenuExtra()
+\f0\fs24 \CocoaLigature1 for your menu extra execute the following code:\
+\
+\pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\li1440\fi-1440\ql\qnatural
+
+\f2\fs20 \cf0 \CocoaLigature0 NSString *menuExtraPath = [[[\cf2 self\cf0 bundle] resourcePath] stringByAppendingPathComponent:@"MenuCracker.menu"];\
+ CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)menuExtraPath, kCFURLPOSIXPathStyle, \cf2 NO\cf0 );\
+\pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\li960\fi-960\ql\qnatural
+\cf0 \cf2 unsigned\cf0 \cf2 int\cf0 outExtra;\
+\pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\li1440\fi-1440\ql\qnatural
+\cf0 \
+ CoreMenuExtraAddMenuExtra(url, 0, \cf3 0\cf0 , \cf2 nil\cf0 , \cf3 0\cf0 , &outExtra);\
+\pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\li1920\fi-1920\ql\qnatural
+\cf0
+\f0\fs24 \cf4 // Do not check the return value as it is always going to return an error
+\f2\fs20 \cf0 \
+\pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\li1440\fi-1440\ql\qnatural
+\cf0 CFRelease(url);\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
+
+\f0\fs24 \cf0 \CocoaLigature1 \
+That's it.\
+\
+You can find the latest version of MenuCracker at http://sourceforge.net/projects/menucracker.\
+\
+-- james_007_bond @ users.sourceforge.net}
\ No newline at end of file
--- /dev/null
+//
+// NSString+search.h
+// AFSCommander
+//
+// Created by MacDeveloper on 18/03/08.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+
+/*!
+ @category NSString (search)
+ @abstract Implements some function for searching something into string
+ @discussion <#(comprehensive description)#>
+*/
+@interface NSString (search)
+/*!
+ @function estractTokenByDelimiter
+ @abstract Extract a string enclosed by two token
+ @discussion <#(description)#>
+ @param startToken - start token where the string to get begin
+ @param endTk - end token where the string to get begin
+ @result the found string
+ */
+-(NSString*) estractTokenByDelimiter:(NSString*)startToken endToken:(NSString*)endTk;
+@end
--- /dev/null
+//
+// NSString+search.m
+// AFSCommander
+//
+// Created by MacDeveloper on 18/03/08.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "NSString+search.h"
+
+
+@implementation NSString(search)
+
+-(NSString*) estractTokenByDelimiter:(NSString*)startToken endToken:(NSString*)endTk {
+ NSString *result = nil;
+ NSScanner *strScan = [NSScanner scannerWithString:self];
+ if(!endTk) return nil;
+ //make the CharacterSet for scanner
+
+ if(startToken) [strScan scanUpToString:startToken intoString:&result];
+ [strScan scanUpToString:endTk intoString:&result];
+ if(startToken) result = [result substringFromIndex:[startToken length]];
+ return result;
+}
+
+@end
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>ActivePerspectiveName</key>
+ <string>Project</string>
+ <key>AllowedModules</key>
+ <array>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXSmartGroupTreeModule</string>
+ <key>Name</key>
+ <string>Groups and Files Outline View</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Name</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>XCTaskListModule</string>
+ <key>Name</key>
+ <string>Task List</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>XCDetailModule</string>
+ <key>Name</key>
+ <string>File and Smart Group Detail Viewer</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>1</string>
+ <key>Module</key>
+ <string>PBXBuildResultsModule</string>
+ <key>Name</key>
+ <string>Detailed Build Results Viewer</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>1</string>
+ <key>Module</key>
+ <string>PBXProjectFindModule</string>
+ <key>Name</key>
+ <string>Project Batch Find Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXRunSessionModule</string>
+ <key>Name</key>
+ <string>Run Log</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXBookmarksModule</string>
+ <key>Name</key>
+ <string>Bookmarks Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXClassBrowserModule</string>
+ <key>Name</key>
+ <string>Class Browser</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXCVSModule</string>
+ <key>Name</key>
+ <string>Source Code Control Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXDebugBreakpointsModule</string>
+ <key>Name</key>
+ <string>Debug Breakpoints Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>XCDockableInspector</string>
+ <key>Name</key>
+ <string>Inspector</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXOpenQuicklyModule</string>
+ <key>Name</key>
+ <string>Open Quickly Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>1</string>
+ <key>Module</key>
+ <string>PBXDebugSessionModule</string>
+ <key>Name</key>
+ <string>Debugger</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>1</string>
+ <key>Module</key>
+ <string>PBXDebugCLIModule</string>
+ <key>Name</key>
+ <string>Debug Console</string>
+ </dict>
+ </array>
+ <key>Description</key>
+ <string>DefaultDescriptionKey</string>
+ <key>DockingSystemVisible</key>
+ <false/>
+ <key>Extension</key>
+ <string>mode1</string>
+ <key>FavBarConfig</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>3213E8430BF3E63C0010360B</string>
+ <key>XCBarModuleItemNames</key>
+ <dict/>
+ <key>XCBarModuleItems</key>
+ <array/>
+ </dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>com.apple.perspectives.project.mode1</string>
+ <key>MajorVersion</key>
+ <integer>31</integer>
+ <key>MinorVersion</key>
+ <integer>1</integer>
+ <key>Name</key>
+ <string>Default</string>
+ <key>Notifications</key>
+ <array/>
+ <key>OpenEditors</key>
+ <array/>
+ <key>PerspectiveWidths</key>
+ <array>
+ <integer>-1</integer>
+ <integer>-1</integer>
+ </array>
+ <key>Perspectives</key>
+ <array>
+ <dict>
+ <key>ChosenToolbarItems</key>
+ <array>
+ <string>active-target-popup</string>
+ <string>active-buildstyle-popup</string>
+ <string>action</string>
+ <string>NSToolbarFlexibleSpaceItem</string>
+ <string>buildOrClean</string>
+ <string>build-and-runOrDebug</string>
+ <string>com.apple.ide.PBXToolbarStopButton</string>
+ <string>get-info</string>
+ <string>toggle-editor</string>
+ <string>NSToolbarFlexibleSpaceItem</string>
+ <string>com.apple.pbx.toolbar.searchfield</string>
+ </array>
+ <key>ControllerClassBaseName</key>
+ <string></string>
+ <key>IconName</key>
+ <string>WindowOfProjectWithEditor</string>
+ <key>Identifier</key>
+ <string>perspective.project</string>
+ <key>IsVertical</key>
+ <false/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>BecomeActive</key>
+ <true/>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXBottomSmartGroupGIDs</key>
+ <array>
+ <string>1C37FBAC04509CD000000102</string>
+ <string>1C37FAAC04509CD000000102</string>
+ <string>1C08E77C0454961000C914BD</string>
+ <string>1C37FABC05509CD000000102</string>
+ <string>1C37FABC05539CD112110102</string>
+ <string>E2644B35053B69B200211256</string>
+ <string>1C37FABC04509CD000100104</string>
+ <string>1CC0EA4004350EF90044410B</string>
+ <string>1CC0EA4004350EF90041110B</string>
+ </array>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Files</string>
+ <key>PBXProjectStructureProvided</key>
+ <string>yes</string>
+ <key>PBXSmartGroupTreeModuleColumnData</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+ <array>
+ <real>22</real>
+ <real>22</real>
+ <real>309</real>
+ </array>
+ <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+ <array>
+ <string>SCMStatusColumn</string>
+ <string>TargetStatusColumn</string>
+ <string>MainColumn</string>
+ </array>
+ </dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+ <array>
+ <string>089C166AFE841209C02AAC07</string>
+ <string>08FB77AFFE84173DC02AAC07</string>
+ <string>3212AA7F0C27AC2800A0689C</string>
+ <string>3219259A0C339C1F00B55E86</string>
+ <string>494BD47A0C43EDD400DB0A3A</string>
+ <string>4941F62F0C49377000B29A73</string>
+ <string>325313A10C4515A700FAF2F3</string>
+ <string>32DBCFA10370C40200C91783</string>
+ <string>089C167CFE841241C02AAC07</string>
+ <string>32B0AFB40C016E6900272348</string>
+ <string>19C28FB8FE9D52D311CA2CBB</string>
+ <string>1C37FBAC04509CD000000102</string>
+ <string>1C37FAAC04509CD000000102</string>
+ <string>1C37FABC05509CD000000102</string>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+ <array>
+ <array>
+ <integer>48</integer>
+ <integer>47</integer>
+ <integer>0</integer>
+ </array>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+ <string>{{0, 41}, {353, 1064}}</string>
+ </dict>
+ <key>PBXTopSmartGroupGIDs</key>
+ <array/>
+ <key>XCIncludePerspectivesSwitch</key>
+ <true/>
+ <key>XCSharingToken</key>
+ <string>com.apple.Xcode.GFSharingToken</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {370, 1082}}</string>
+ <key>GroupTreeTableConfiguration</key>
+ <array>
+ <string>SCMStatusColumn</string>
+ <real>22</real>
+ <string>TargetStatusColumn</string>
+ <real>22</real>
+ <string>MainColumn</string>
+ <real>309</real>
+ </array>
+ <key>RubberWindowFrame</key>
+ <string>53 55 1264 1123 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXSmartGroupTreeModule</string>
+ <key>Proportion</key>
+ <string>370pt</string>
+ </dict>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B20306471E060097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Localizable.strings</string>
+ <key>PBXSplitModuleInNavigatorKey</key>
+ <dict>
+ <key>Split0</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B20406471E060097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Localizable.strings</string>
+ <key>_historyCapacity</key>
+ <integer>0</integer>
+ <key>bookmark</key>
+ <string>322F65490C9AF64400B937CC</string>
+ <key>history</key>
+ <array>
+ <string>323DFED60C0B2C9C000350E8</string>
+ <string>32C4A9190C268A03009280A0</string>
+ <string>32C4AB110C26D6D6009280A0</string>
+ <string>3259409D0C26F85400040E5A</string>
+ <string>3212AB240C27C12800A0689C</string>
+ <string>322381E80C3273AE00380547</string>
+ <string>3223832D0C32A51B00380547</string>
+ <string>322383FA0C32AF4200380547</string>
+ <string>321926E20C33EC0700B55E86</string>
+ <string>322884390C3E477C00E778CC</string>
+ <string>3228845D0C3E48AA00E778CC</string>
+ <string>322884E40C3E6F4400E778CC</string>
+ <string>325311BA0C44F3B500FAF2F3</string>
+ <string>325311BB0C44F3B500FAF2F3</string>
+ <string>325311BC0C44F3B500FAF2F3</string>
+ <string>325311BD0C44F3B500FAF2F3</string>
+ <string>325311BE0C44F3B500FAF2F3</string>
+ <string>325312CE0C45140300FAF2F3</string>
+ <string>325312CF0C45140300FAF2F3</string>
+ <string>325313890C45154E00FAF2F3</string>
+ <string>3279B9450C4519AA008FE3FA</string>
+ <string>3279B9BE0C4524D3008FE3FA</string>
+ <string>3279BA480C452A61008FE3FA</string>
+ <string>3279BA9C0C452DFB008FE3FA</string>
+ <string>3279BAA00C4530C5008FE3FA</string>
+ <string>32D45E420C4F4FE500A1012D</string>
+ <string>32D45E450C4F4FE500A1012D</string>
+ <string>32922CD00C4F882800A95641</string>
+ <string>32922CD10C4F882800A95641</string>
+ <string>32922CD20C4F882800A95641</string>
+ <string>32922D4D0C4F8EA400A95641</string>
+ <string>32922D6D0C4FA65A00A95641</string>
+ <string>32922D840C4FA75900A95641</string>
+ <string>32922D970C4FB32500A95641</string>
+ <string>32F2DD100C54870900655773</string>
+ <string>32F2DD110C54870900655773</string>
+ <string>3241DEDF0C97E0E1000AEF82</string>
+ <string>322F653F0C9AF5BC00B937CC</string>
+ <string>322F65400C9AF5BC00B937CC</string>
+ <string>322384170C32C2CC00380547</string>
+ </array>
+ <key>prevStack</key>
+ <array>
+ <string>3213E83B0BF3E63C0010360B</string>
+ <string>3213E83C0BF3E63C0010360B</string>
+ <string>3213E83D0BF3E63C0010360B</string>
+ <string>323DFEA80C0B1CB3000350E8</string>
+ <string>32C4A8770C268649009280A0</string>
+ <string>32C4A88B0C268717009280A0</string>
+ <string>32C4A88C0C268717009280A0</string>
+ <string>32C4A8FE0C2689B2009280A0</string>
+ <string>32C4A8FF0C2689B2009280A0</string>
+ <string>32C4A9010C2689B2009280A0</string>
+ <string>32C4A9750C268F07009280A0</string>
+ <string>32C4A9780C268F07009280A0</string>
+ <string>325940A70C26F85400040E5A</string>
+ <string>3212AA740C27AB8700A0689C</string>
+ <string>3212AB2B0C27C12800A0689C</string>
+ <string>322381EC0C3273AE00380547</string>
+ <string>322381ED0C3273AE00380547</string>
+ <string>322381EE0C3273AE00380547</string>
+ <string>322382250C3296C600380547</string>
+ <string>322383320C32A51B00380547</string>
+ <string>322383FD0C32AF4200380547</string>
+ <string>3223841E0C32C2CC00380547</string>
+ <string>321925C90C33A85700B55E86</string>
+ <string>321925CB0C33A85700B55E86</string>
+ <string>3228840D0C3E45E700E778CC</string>
+ <string>3228842F0C3E469000E778CC</string>
+ <string>325311CC0C44F3B500FAF2F3</string>
+ <string>325311DD0C44F56A00FAF2F3</string>
+ <string>325312050C44F76800FAF2F3</string>
+ <string>325312D50C45140300FAF2F3</string>
+ <string>325312D60C45140300FAF2F3</string>
+ <string>325312D70C45140300FAF2F3</string>
+ <string>3279B9260C45194F008FE3FA</string>
+ <string>3279B9490C4519AA008FE3FA</string>
+ <string>3279BA9E0C452DFB008FE3FA</string>
+ <string>32D45E4C0C4F4FE500A1012D</string>
+ <string>32D45E4D0C4F4FE500A1012D</string>
+ <string>32D45E4E0C4F4FE500A1012D</string>
+ <string>32D45E530C4F4FE500A1012D</string>
+ <string>32F2DD140C54870900655773</string>
+ <string>322F65410C9AF5BC00B937CC</string>
+ <string>322F65420C9AF5BC00B937CC</string>
+ </array>
+ </dict>
+ <key>SplitCount</key>
+ <string>1</string>
+ </dict>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {889, 872}}</string>
+ <key>RubberWindowFrame</key>
+ <string>53 55 1264 1123 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>872pt</string>
+ </dict>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B20506471E060097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Detail</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 877}, {889, 205}}</string>
+ <key>RubberWindowFrame</key>
+ <string>53 55 1264 1123 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>XCDetailModule</string>
+ <key>Proportion</key>
+ <string>205pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>889pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Project</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>XCModuleDock</string>
+ <string>PBXSmartGroupTreeModule</string>
+ <string>XCModuleDock</string>
+ <string>PBXNavigatorGroup</string>
+ <string>XCDetailModule</string>
+ </array>
+ <key>TableOfContents</key>
+ <array>
+ <string>322F65380C9AF59500B937CC</string>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <string>322F65390C9AF59500B937CC</string>
+ <string>1CE0B20306471E060097A5F4</string>
+ <string>1CE0B20506471E060097A5F4</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.default</string>
+ </dict>
+ <dict>
+ <key>ControllerClassBaseName</key>
+ <string></string>
+ <key>IconName</key>
+ <string>WindowOfProject</string>
+ <key>Identifier</key>
+ <string>perspective.morph</string>
+ <key>IsVertical</key>
+ <integer>0</integer>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>BecomeActive</key>
+ <integer>1</integer>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXBottomSmartGroupGIDs</key>
+ <array>
+ <string>1C37FBAC04509CD000000102</string>
+ <string>1C37FAAC04509CD000000102</string>
+ <string>1C08E77C0454961000C914BD</string>
+ <string>1C37FABC05509CD000000102</string>
+ <string>1C37FABC05539CD112110102</string>
+ <string>E2644B35053B69B200211256</string>
+ <string>1C37FABC04509CD000100104</string>
+ <string>1CC0EA4004350EF90044410B</string>
+ <string>1CC0EA4004350EF90041110B</string>
+ </array>
+ <key>PBXProjectModuleGUID</key>
+ <string>11E0B1FE06471DED0097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Files</string>
+ <key>PBXProjectStructureProvided</key>
+ <string>yes</string>
+ <key>PBXSmartGroupTreeModuleColumnData</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+ <array>
+ <real>186</real>
+ </array>
+ <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+ <array>
+ <string>MainColumn</string>
+ </array>
+ </dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+ <array>
+ <string>29B97314FDCFA39411CA2CEA</string>
+ <string>1C37FABC05509CD000000102</string>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+ <array>
+ <array>
+ <integer>0</integer>
+ </array>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+ <string>{{0, 0}, {186, 337}}</string>
+ </dict>
+ <key>PBXTopSmartGroupGIDs</key>
+ <array/>
+ <key>XCIncludePerspectivesSwitch</key>
+ <integer>1</integer>
+ <key>XCSharingToken</key>
+ <string>com.apple.Xcode.GFSharingToken</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {203, 355}}</string>
+ <key>GroupTreeTableConfiguration</key>
+ <array>
+ <string>MainColumn</string>
+ <real>186</real>
+ </array>
+ <key>RubberWindowFrame</key>
+ <string>373 269 690 397 0 0 1440 878 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXSmartGroupTreeModule</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Morph</string>
+ <key>PreferredWidth</key>
+ <integer>300</integer>
+ <key>ServiceClasses</key>
+ <array>
+ <string>XCModuleDock</string>
+ <string>PBXSmartGroupTreeModule</string>
+ </array>
+ <key>TableOfContents</key>
+ <array>
+ <string>11E0B1FE06471DED0097A5F4</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.default.short</string>
+ </dict>
+ </array>
+ <key>PerspectivesBarVisible</key>
+ <false/>
+ <key>ShelfIsVisible</key>
+ <false/>
+ <key>SourceDescription</key>
+ <string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TimeStamp</key>
+ <real>0.0</real>
+ <key>ToolbarDisplayMode</key>
+ <integer>1</integer>
+ <key>ToolbarIsVisible</key>
+ <true/>
+ <key>ToolbarSizeMode</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Perspectives</string>
+ <key>UpdateMessage</key>
+ <string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?</string>
+ <key>WindowJustification</key>
+ <integer>5</integer>
+ <key>WindowOrderList</key>
+ <array>
+ <string>323DFE5E0C0B173F000350E8</string>
+ <string>/Users/bisegni/svnrepo/AFSCommander/AFSCommander.xcodeproj</string>
+ </array>
+ <key>WindowString</key>
+ <string>53 55 1264 1123 0 0 1920 1178 </string>
+ <key>WindowTools</key>
+ <array>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.build</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CD0528F0623707200166675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string></string>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {1307, 396}}</string>
+ <key>RubberWindowFrame</key>
+ <string>342 266 1307 912 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>396pt</string>
+ </dict>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXBuildLogShowsTranscriptDefaultKey</key>
+ <string>{{0, 5}, {1307, 465}}</string>
+ <key>PBXProjectModuleGUID</key>
+ <string>XCMainBuildResultsModuleGUID</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Build</string>
+ <key>XCBuildResultsTrigger_Collapse</key>
+ <integer>1021</integer>
+ <key>XCBuildResultsTrigger_Open</key>
+ <integer>1011</integer>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 401}, {1307, 470}}</string>
+ <key>RubberWindowFrame</key>
+ <string>342 266 1307 912 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXBuildResultsModule</string>
+ <key>Proportion</key>
+ <string>470pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>871pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Build Results</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXBuildResultsModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>323DFE5E0C0B173F000350E8</string>
+ <string>322F65440C9AF5BC00B937CC</string>
+ <string>1CD0528F0623707200166675</string>
+ <string>XCMainBuildResultsModuleGUID</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.build</string>
+ <key>WindowString</key>
+ <string>342 266 1307 912 0 0 1920 1178 </string>
+ <key>WindowToolGUID</key>
+ <string>323DFE5E0C0B173F000350E8</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.debugger</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>Debugger</key>
+ <dict>
+ <key>HorizontalSplitView</key>
+ <dict>
+ <key>_collapsingFrameDimension</key>
+ <real>0.0</real>
+ <key>_indexOfCollapsedView</key>
+ <integer>0</integer>
+ <key>_percentageOfCollapsedView</key>
+ <real>0.0</real>
+ <key>isCollapsed</key>
+ <string>yes</string>
+ <key>sizes</key>
+ <array>
+ <string>{{0, 0}, {150, 432}}</string>
+ <string>{{150, 0}, {921, 432}}</string>
+ </array>
+ </dict>
+ <key>VerticalSplitView</key>
+ <dict>
+ <key>_collapsingFrameDimension</key>
+ <real>0.0</real>
+ <key>_indexOfCollapsedView</key>
+ <integer>0</integer>
+ <key>_percentageOfCollapsedView</key>
+ <real>0.0</real>
+ <key>isCollapsed</key>
+ <string>yes</string>
+ <key>sizes</key>
+ <array>
+ <string>{{0, 0}, {1071, 432}}</string>
+ <string>{{0, 432}, {1071, 459}}</string>
+ </array>
+ </dict>
+ </dict>
+ <key>LauncherConfigVersion</key>
+ <string>8</string>
+ <key>PBXProjectModuleGUID</key>
+ <string>1C162984064C10D400B95A72</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Debug - GLUTExamples (Underwater)</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>DebugConsoleDrawerSize</key>
+ <string>{100, 120}</string>
+ <key>DebugConsoleVisible</key>
+ <string>None</string>
+ <key>DebugConsoleWindowFrame</key>
+ <string>{{200, 200}, {500, 300}}</string>
+ <key>DebugSTDIOWindowFrame</key>
+ <string>{{200, 200}, {500, 300}}</string>
+ <key>Frame</key>
+ <string>{{0, 0}, {1071, 891}}</string>
+ <key>RubberWindowFrame</key>
+ <string>519 246 1071 932 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXDebugSessionModule</string>
+ <key>Proportion</key>
+ <string>891pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>891pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Debugger</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXDebugSessionModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>1CD10A99069EF8BA00B06720</string>
+ <string>322884AF0C3E4B1600E778CC</string>
+ <string>1C162984064C10D400B95A72</string>
+ <string>322884B00C3E4B1600E778CC</string>
+ <string>322884B10C3E4B1600E778CC</string>
+ <string>322884B20C3E4B1600E778CC</string>
+ <string>322884B30C3E4B1600E778CC</string>
+ <string>322884B40C3E4B1600E778CC</string>
+ <string>322884B50C3E4B1600E778CC</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.debug</string>
+ <key>WindowString</key>
+ <string>519 246 1071 932 0 0 1920 1178 </string>
+ <key>WindowToolGUID</key>
+ <string>1CD10A99069EF8BA00B06720</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.find</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CDD528C0622207200134675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string></string>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {781, 212}}</string>
+ <key>RubberWindowFrame</key>
+ <string>62 685 781 470 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>781pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>212pt</string>
+ </dict>
+ <dict>
+ <key>BecomeActive</key>
+ <true/>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CD0528E0623707200166675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Project Find</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 217}, {781, 212}}</string>
+ <key>RubberWindowFrame</key>
+ <string>62 685 781 470 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXProjectFindModule</string>
+ <key>Proportion</key>
+ <string>212pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>429pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Project Find</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXProjectFindModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>1C530D57069F1CE1000CFCEE</string>
+ <string>321926770C33DF7E00B55E86</string>
+ <string>321926780C33DF7E00B55E86</string>
+ <string>1CDD528C0622207200134675</string>
+ <string>1CD0528E0623707200166675</string>
+ </array>
+ <key>WindowString</key>
+ <string>62 685 781 470 0 0 1920 1178 </string>
+ <key>WindowToolGUID</key>
+ <string>1C530D57069F1CE1000CFCEE</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>MENUSEPARATOR</string>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.debuggerConsole</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1C78EAAC065D492600B07095</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Debugger Console</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {578, 500}}</string>
+ <key>RubberWindowFrame</key>
+ <string>1342 637 578 541 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXDebugCLIModule</string>
+ <key>Proportion</key>
+ <string>500pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>500pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Debugger Console</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXDebugCLIModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>325A0B160C291AFC007B198B</string>
+ <string>321926950C33E0EE00B55E86</string>
+ <string>1C78EAAC065D492600B07095</string>
+ </array>
+ <key>WindowString</key>
+ <string>1342 637 578 541 0 0 1920 1178 </string>
+ <key>WindowToolGUID</key>
+ <string>325A0B160C291AFC007B198B</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.run</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>LauncherConfigVersion</key>
+ <string>3</string>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CD0528B0623707200166675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Run</string>
+ <key>Runner</key>
+ <dict>
+ <key>HorizontalSplitView</key>
+ <dict>
+ <key>_collapsingFrameDimension</key>
+ <real>0.0</real>
+ <key>_indexOfCollapsedView</key>
+ <integer>0</integer>
+ <key>_percentageOfCollapsedView</key>
+ <real>0.0</real>
+ <key>isCollapsed</key>
+ <string>yes</string>
+ <key>sizes</key>
+ <array>
+ <string>{{0, 0}, {493, 167}}</string>
+ <string>{{0, 176}, {493, 267}}</string>
+ </array>
+ </dict>
+ <key>VerticalSplitView</key>
+ <dict>
+ <key>_collapsingFrameDimension</key>
+ <real>0.0</real>
+ <key>_indexOfCollapsedView</key>
+ <integer>0</integer>
+ <key>_percentageOfCollapsedView</key>
+ <real>0.0</real>
+ <key>isCollapsed</key>
+ <string>yes</string>
+ <key>sizes</key>
+ <array>
+ <string>{{0, 0}, {405, 443}}</string>
+ <string>{{414, 0}, {514, 443}}</string>
+ </array>
+ </dict>
+ </dict>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {530, 159}}</string>
+ <key>RubberWindowFrame</key>
+ <string>1389 978 530 200 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXRunSessionModule</string>
+ <key>Proportion</key>
+ <string>159pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>159pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Run Log</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXRunSessionModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>1C0AD2B3069F1EA900FABCE6</string>
+ <string>32B3AF7C0C2A4C9100CB8686</string>
+ <string>1CD0528B0623707200166675</string>
+ <string>32B3AF7D0C2A4C9100CB8686</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.run</string>
+ <key>WindowString</key>
+ <string>1389 978 530 200 0 0 1920 1178 </string>
+ <key>WindowToolGUID</key>
+ <string>1C0AD2B3069F1EA900FABCE6</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.scm</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1C78EAB2065D492600B07095</string>
+ <key>PBXProjectModuleLabel</key>
+ <string></string>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {998, 0}}</string>
+ <key>RubberWindowFrame</key>
+ <string>87 268 998 887 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>0pt</string>
+ </dict>
+ <dict>
+ <key>BecomeActive</key>
+ <true/>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CD052920623707200166675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>SCM Results</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 5}, {998, 841}}</string>
+ <key>RubberWindowFrame</key>
+ <string>87 268 998 887 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXCVSModule</string>
+ <key>Proportion</key>
+ <string>841pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>846pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>SCM</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXCVSModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>3259408D0C26F72A00040E5A</string>
+ <string>327E2EEC0C280DA1007E8712</string>
+ <string>1C78EAB2065D492600B07095</string>
+ <string>1CD052920623707200166675</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.scm</string>
+ <key>WindowString</key>
+ <string>87 268 998 887 0 0 1920 1178 </string>
+ <key>WindowToolGUID</key>
+ <string>3259408D0C26F72A00040E5A</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.breakpoints</string>
+ <key>IsVertical</key>
+ <false/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXBottomSmartGroupGIDs</key>
+ <array>
+ <string>1C77FABC04509CD000000102</string>
+ </array>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Files</string>
+ <key>PBXProjectStructureProvided</key>
+ <string>no</string>
+ <key>PBXSmartGroupTreeModuleColumnData</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+ <array>
+ <real>168</real>
+ </array>
+ <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+ <array>
+ <string>MainColumn</string>
+ </array>
+ </dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+ <array>
+ <string>1C77FABC04509CD000000102</string>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+ <array>
+ <array>
+ <integer>0</integer>
+ </array>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+ <string>{{0, 0}, {168, 350}}</string>
+ </dict>
+ <key>PBXTopSmartGroupGIDs</key>
+ <array/>
+ <key>XCIncludePerspectivesSwitch</key>
+ <false/>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {185, 368}}</string>
+ <key>GroupTreeTableConfiguration</key>
+ <array>
+ <string>MainColumn</string>
+ <real>168</real>
+ </array>
+ <key>RubberWindowFrame</key>
+ <string>226 582 744 409 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXSmartGroupTreeModule</string>
+ <key>Proportion</key>
+ <string>185pt</string>
+ </dict>
+ <dict>
+ <key>BecomeActive</key>
+ <true/>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CA1AED706398EBD00589147</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Detail</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{190, 0}, {554, 368}}</string>
+ <key>RubberWindowFrame</key>
+ <string>226 582 744 409 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>XCDetailModule</string>
+ <key>Proportion</key>
+ <string>554pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>368pt</string>
+ </dict>
+ </array>
+ <key>MajorVersion</key>
+ <integer>2</integer>
+ <key>MinorVersion</key>
+ <integer>0</integer>
+ <key>Name</key>
+ <string>Breakpoints</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXSmartGroupTreeModule</string>
+ <string>XCDetailModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>32E9C9760C2BF29A0028F051</string>
+ <string>32E9C9770C2BF29A0028F051</string>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <string>1CA1AED706398EBD00589147</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.breakpoints</string>
+ <key>WindowString</key>
+ <string>226 582 744 409 0 0 1920 1178 </string>
+ <key>WindowToolGUID</key>
+ <string>32E9C9760C2BF29A0028F051</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.debugAnimator</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Debug Visualizer</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXNavigatorGroup</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>1</integer>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.debugAnimator</string>
+ <key>WindowString</key>
+ <string>100 100 700 500 0 0 1280 1002 </string>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.bookmarks</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>Module</key>
+ <string>PBXBookmarksModule</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Bookmarks</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXBookmarksModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>0</integer>
+ <key>WindowString</key>
+ <string>538 42 401 187 0 0 1280 1002 </string>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.classBrowser</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>OptionsSetName</key>
+ <string>Hierarchy, project classes</string>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CA6456E063B45B4001379D8</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Class Browser - NSObject</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>ClassesFrame</key>
+ <string>{{0, 0}, {378, 96}}</string>
+ <key>ClassesTreeTableConfiguration</key>
+ <array>
+ <string>PBXClassNameColumnIdentifier</string>
+ <real>208</real>
+ <string>PBXClassBookColumnIdentifier</string>
+ <real>22</real>
+ </array>
+ <key>Frame</key>
+ <string>{{0, 0}, {630, 332}}</string>
+ <key>MembersFrame</key>
+ <string>{{0, 101}, {378, 231}}</string>
+ <key>MembersTreeTableConfiguration</key>
+ <array>
+ <string>PBXMemberTypeIconColumnIdentifier</string>
+ <real>22</real>
+ <string>PBXMemberNameColumnIdentifier</string>
+ <real>216</real>
+ <string>PBXMemberTypeColumnIdentifier</string>
+ <real>101</real>
+ <string>PBXMemberBookColumnIdentifier</string>
+ <real>22</real>
+ </array>
+ <key>RubberWindowFrame</key>
+ <string>547 674 630 352 0 0 1920 1178 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXClassBrowserModule</string>
+ <key>Proportion</key>
+ <string>332pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>332pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Class Browser</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXClassBrowserModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <false/>
+ <key>TableOfContents</key>
+ <array>
+ <string>1C0AD2AF069F1E9B00FABCE6</string>
+ <string>325940910C26F7D700040E5A</string>
+ <string>1CA6456E063B45B4001379D8</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.classbrowser</string>
+ <key>WindowString</key>
+ <string>547 674 630 352 0 0 1920 1178 </string>
+ <key>WindowToolGUID</key>
+ <string>1C0AD2AF069F1E9B00FABCE6</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ </array>
+</dict>
+</plist>
--- /dev/null
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 3213E9410C2ABFD200D3D2F6 /* AuthUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 3213E93F0C2ABFD200D3D2F6 /* AuthUtil.h */; };
+ 3213E9420C2ABFD200D3D2F6 /* AuthUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3213E9400C2ABFD200D3D2F6 /* AuthUtil.m */; };
+ 3219259D0C339DAE00B55E86 /* TokenCredentialController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3219259C0C339DAE00B55E86 /* TokenCredentialController.m */; };
+ 3223836C0C32A96F00380547 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3223836A0C32A96F00380547 /* Localizable.strings */; };
+ 322884030C3E45C800E778CC /* InfoController.h in Headers */ = {isa = PBXBuildFile; fileRef = 322884010C3E45C800E778CC /* InfoController.h */; };
+ 322884040C3E45C800E778CC /* InfoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 322884020C3E45C800E778CC /* InfoController.m */; };
+ 322884050C3E45C800E778CC /* InfoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 322884020C3E45C800E778CC /* InfoController.m */; };
+ 322B90450C2F0A2D0068F99A /* start_afs.sh in Resources */ = {isa = PBXBuildFile; fileRef = 322B90430C2F0A2D0068F99A /* start_afs.sh */; };
+ 322B90460C2F0A2D0068F99A /* stop_afs.sh in Resources */ = {isa = PBXBuildFile; fileRef = 322B90440C2F0A2D0068F99A /* stop_afs.sh */; };
+ 322CEF600C211D220060D66D /* DBCellElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF5F0C211D220060D66D /* DBCellElement.m */; };
+ 322CEF6E0C211DCC0060D66D /* CellIp.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF6D0C211DCC0060D66D /* CellIp.m */; };
+ 324D67FD0DA13194007E1561 /* OpenAFSPreference.xib in Resources */ = {isa = PBXBuildFile; fileRef = 324D67FB0DA13194007E1561 /* OpenAFSPreference.xib */; };
+ 324D683D0DA133A3007E1561 /* IpPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 324D683B0DA133A3007E1561 /* IpPanel.xib */; };
+ 324D684A0DA133CF007E1561 /* CredentialPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 324D68480DA133CF007E1561 /* CredentialPanel.xib */; };
+ 325311AB0C44F38200FAF2F3 /* AFSPropertyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B0AFDE0C01729400272348 /* AFSPropertyManager.m */; };
+ 325311AF0C44F38D00FAF2F3 /* CellIp.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF6D0C211DCC0060D66D /* CellIp.m */; };
+ 325311B00C44F38D00FAF2F3 /* DBCellElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF5F0C211D220060D66D /* DBCellElement.m */; };
+ 325311B10C44F39200FAF2F3 /* TaskUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 327756260C3053A100C15D11 /* TaskUtil.m */; };
+ 325311B20C44F39300FAF2F3 /* AuthUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3213E9400C2ABFD200D3D2F6 /* AuthUtil.m */; };
+ 325311B30C44F39400FAF2F3 /* FileUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3273088C0C2A9B05008C322B /* FileUtil.m */; };
+ 325311D00C44F4B100FAF2F3 /* licenza.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 325311CF0C44F4B100FAF2F3 /* licenza.rtf */; };
+ 325312190C44F7BD00FAF2F3 /* AFSMenuExtraView.m in Sources */ = {isa = PBXBuildFile; fileRef = 325312180C44F7BD00FAF2F3 /* AFSMenuExtraView.m */; };
+ 325313520C45153400FAF2F3 /* SecurityFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327308D20C2AA364008C322B /* SecurityFoundation.framework */; };
+ 325313550C45153500FAF2F3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327309620C2AB433008C322B /* Security.framework */; };
+ 3253138D0C45157A00FAF2F3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
+ 325313B10C4516A900FAF2F3 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 325313B00C4516A900FAF2F3 /* Info.plist */; };
+ 3273088D0C2A9B05008C322B /* FileUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 3273088B0C2A9B05008C322B /* FileUtil.h */; };
+ 3273088E0C2A9B05008C322B /* FileUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3273088C0C2A9B05008C322B /* FileUtil.m */; };
+ 327308C30C2AA2E1008C322B /* FileUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3273088C0C2A9B05008C322B /* FileUtil.m */; };
+ 327308D70C2AA364008C322B /* SecurityFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327308D20C2AA364008C322B /* SecurityFoundation.framework */; };
+ 327308D80C2AA369008C322B /* SecurityFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327308D20C2AA364008C322B /* SecurityFoundation.framework */; };
+ 327309970C2AB433008C322B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327309620C2AB433008C322B /* Security.framework */; };
+ 327309980C2AB434008C322B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327309620C2AB433008C322B /* Security.framework */; };
+ 327756270C3053A100C15D11 /* TaskUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 327756260C3053A100C15D11 /* TaskUtil.m */; };
+ 327756280C3053A100C15D11 /* TaskUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 327756250C3053A100C15D11 /* TaskUtil.h */; };
+ 327756290C3053A100C15D11 /* TaskUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 327756260C3053A100C15D11 /* TaskUtil.m */; };
+ 32B0AFDF0C01729400272348 /* AFSPropertyManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 32B0AFDD0C01729400272348 /* AFSPropertyManager.h */; };
+ 32B0AFE00C01729400272348 /* AFSPropertyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B0AFDE0C01729400272348 /* AFSPropertyManager.m */; };
+ 32B565740D8FAF62005255F2 /* NSString+search.h in Headers */ = {isa = PBXBuildFile; fileRef = 32B565720D8FAF62005255F2 /* NSString+search.h */; };
+ 32B565750D8FAF62005255F2 /* NSString+search.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B565730D8FAF62005255F2 /* NSString+search.m */; };
+ 32B565760D8FAF62005255F2 /* NSString+search.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B565730D8FAF62005255F2 /* NSString+search.m */; };
+ 32C4A9580C268D9B009280A0 /* IpConfiguratorCommander.m in Sources */ = {isa = PBXBuildFile; fileRef = 32C4A9570C268D9B009280A0 /* IpConfiguratorCommander.m */; };
+ 32C4A9B80C26A0FA009280A0 /* IpConfiguratorCommander.m in Sources */ = {isa = PBXBuildFile; fileRef = 32C4A9570C268D9B009280A0 /* IpConfiguratorCommander.m */; };
+ 32C4A9B90C26A0FB009280A0 /* IpConfiguratorCommander.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C4A9560C268D9B009280A0 /* IpConfiguratorCommander.h */; };
+ 32CF013F0C203C5600A8DC58 /* TestLib.m in Sources */ = {isa = PBXBuildFile; fileRef = 32CFFEFD0C20316B00A8DC58 /* TestLib.m */; };
+ 32CF01460C203CA800A8DC58 /* AFSPropertyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B0AFDE0C01729400272348 /* AFSPropertyManager.m */; };
+ 32CF014C0C203CBD00A8DC58 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
+ 32D45E070C4B4D9C00A1012D /* afshlp in Resources */ = {isa = PBXBuildFile; fileRef = 49683EE40C3446380093C7C8 /* afshlp */; };
+ 32DE818C0DF573200069A05C /* LynkCreationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 32DE818A0DF573200069A05C /* LynkCreationController.h */; };
+ 32DE818D0DF573200069A05C /* LynkCreationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 32DE818B0DF573200069A05C /* LynkCreationController.m */; };
+ 32DE81BD0DF57BDA0069A05C /* SymLinkEdit.xib in Resources */ = {isa = PBXBuildFile; fileRef = 32DE81BC0DF57BDA0069A05C /* SymLinkEdit.xib */; };
+ 492AFA860C51301D00AEDC93 /* TokenCredentialController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3219259B0C339DAE00B55E86 /* TokenCredentialController.h */; };
+ 492AFA870C51301E00AEDC93 /* TokenCredentialController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3219259C0C339DAE00B55E86 /* TokenCredentialController.m */; };
+ 492AFB280C51483600AEDC93 /* CredentialWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = 492AFB270C51483600AEDC93 /* CredentialWindow.nib */; };
+ 4934D4170DC38958000511D2 /* PListManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 498DCB420DC2240B00D143C8 /* PListManager.m */; };
+ 493564E80CE711F300699A24 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 493564E70CE711F300699A24 /* Carbon.framework */; };
+ 4940075B0CE62EB500F40D0A /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4940075A0CE62EB500F40D0A /* CoreServices.framework */; };
+ 4941F4C00C491D2D00B29A73 /* TokenCredentialController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3219259C0C339DAE00B55E86 /* TokenCredentialController.m */; };
+ 4941F5100C4929C000B29A73 /* AFSMenuCredentialContoller.m in Sources */ = {isa = PBXBuildFile; fileRef = 4941F50F0C4929C000B29A73 /* AFSMenuCredentialContoller.m */; };
+ 4941F6320C49379000B29A73 /* CredentialWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4941F6310C49379000B29A73 /* CredentialWindowController.m */; };
+ 494435170DC35D4C00C7A333 /* LoginTimeDaemon in Resources */ = {isa = PBXBuildFile; fileRef = 4998A6860DC33BEC00146652 /* LoginTimeDaemon */; };
+ 494BD4880C43EEA400DB0A3A /* SystemUIPlugin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 494BD4870C43EEA400DB0A3A /* SystemUIPlugin.framework */; };
+ 494BD48C0C43EEC300DB0A3A /* AFSMenuExtra.m in Sources */ = {isa = PBXBuildFile; fileRef = 494BD48B0C43EEC300DB0A3A /* AFSMenuExtra.m */; };
+ 494C75110C4605C000D3A2D2 /* AFSMenuExtra.menu in Resources */ = {isa = PBXBuildFile; fileRef = 494C74DE0C46052800D3A2D2 /* AFSMenuExtra.menu */; };
+ 49575BB50C53CBDB00B3BC32 /* hasToken.png in Resources */ = {isa = PBXBuildFile; fileRef = 49575BB30C53CBDB00B3BC32 /* hasToken.png */; };
+ 49575BB60C53CBDB00B3BC32 /* noToken.png in Resources */ = {isa = PBXBuildFile; fileRef = 49575BB40C53CBDB00B3BC32 /* noToken.png */; };
+ 495B04400D219A2900F1E328 /* ViewUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 495B043E0D219A2900F1E328 /* ViewUtility.h */; };
+ 495B04410D219A2900F1E328 /* ViewUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 495B043F0D219A2900F1E328 /* ViewUtility.m */; };
+ 495B04420D219A2900F1E328 /* ViewUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 495B043F0D219A2900F1E328 /* ViewUtility.m */; };
+ 495C39470D81EA3C003426FC /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 495C39460D81EA3C003426FC /* Kerberos.framework */; };
+ 495C39480D81EA3C003426FC /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 495C39460D81EA3C003426FC /* Kerberos.framework */; };
+ 495C39490D81EA3C003426FC /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 495C39460D81EA3C003426FC /* Kerberos.framework */; };
+ 495C39CC0D81F742003426FC /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 495C39460D81EA3C003426FC /* Kerberos.framework */; };
+ 49683EEC0C3446600093C7C8 /* afshlp.m in Sources */ = {isa = PBXBuildFile; fileRef = 49683EEB0C3446600093C7C8 /* afshlp.m */; };
+ 49683F3D0C344CD40093C7C8 /* AFSPropertyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B0AFDE0C01729400272348 /* AFSPropertyManager.m */; };
+ 49683F3E0C344CD50093C7C8 /* DBCellElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF5F0C211D220060D66D /* DBCellElement.m */; };
+ 49683F3F0C344CD70093C7C8 /* CellIp.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF6D0C211DCC0060D66D /* CellIp.m */; };
+ 49683F400C344CD80093C7C8 /* IpConfiguratorCommander.m in Sources */ = {isa = PBXBuildFile; fileRef = 32C4A9570C268D9B009280A0 /* IpConfiguratorCommander.m */; };
+ 49683F410C344CD90093C7C8 /* FileUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3273088C0C2A9B05008C322B /* FileUtil.m */; };
+ 49683F420C344CDA0093C7C8 /* AuthUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3213E9400C2ABFD200D3D2F6 /* AuthUtil.m */; };
+ 49683F430C344CDB0093C7C8 /* TaskUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 327756260C3053A100C15D11 /* TaskUtil.m */; };
+ 49683F440C344CE20093C7C8 /* SecurityFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327308D20C2AA364008C322B /* SecurityFoundation.framework */; };
+ 49683F470C344CE40093C7C8 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327309620C2AB433008C322B /* Security.framework */; };
+ 49683F990C3452870093C7C8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
+ 4968CBEB0C51EA01001F5CC7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 089C1672FE841209C02AAC07 /* Foundation.framework */; };
+ 498DCB430DC2240B00D143C8 /* PListManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 498DCB410DC2240B00D143C8 /* PListManager.h */; };
+ 498DCB440DC2240B00D143C8 /* PListManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 498DCB420DC2240B00D143C8 /* PListManager.m */; };
+ 499716930C23E36E001339E3 /* CellIp.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF6D0C211DCC0060D66D /* CellIp.m */; };
+ 499716940C23E36F001339E3 /* CellIp.h in Headers */ = {isa = PBXBuildFile; fileRef = 322CEF6C0C211DCC0060D66D /* CellIp.h */; };
+ 499716950C23E370001339E3 /* DBCellElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF5F0C211D220060D66D /* DBCellElement.m */; };
+ 499716960C23E370001339E3 /* DBCellElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 322CEF5E0C211D220060D66D /* DBCellElement.h */; };
+ 4998A6A40DC33C9300146652 /* afsltd.m in Sources */ = {isa = PBXBuildFile; fileRef = 4998A6A30DC33C9300146652 /* afsltd.m */; };
+ 4998A6A50DC33CD800146652 /* AFSPropertyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B0AFDE0C01729400272348 /* AFSPropertyManager.m */; };
+ 4998A6A60DC33CDB00146652 /* DBCellElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF5F0C211D220060D66D /* DBCellElement.m */; };
+ 4998A6A70DC33CDB00146652 /* CellIp.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF6D0C211DCC0060D66D /* CellIp.m */; };
+ 4998A6A80DC33CE600146652 /* FileUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3273088C0C2A9B05008C322B /* FileUtil.m */; };
+ 4998A6A90DC33CE700146652 /* AuthUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3213E9400C2ABFD200D3D2F6 /* AuthUtil.m */; };
+ 4998A6AA0DC33CE800146652 /* TaskUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 327756260C3053A100C15D11 /* TaskUtil.m */; };
+ 4998A6AB0DC33CE900146652 /* ViewUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 495B043F0D219A2900F1E328 /* ViewUtility.m */; };
+ 4998A6AC0DC33CEA00146652 /* NSString+search.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B565730D8FAF62005255F2 /* NSString+search.m */; };
+ 4998A6AD0DC33CEB00146652 /* PListManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 498DCB420DC2240B00D143C8 /* PListManager.m */; };
+ 4998A6F00DC3415600146652 /* SecurityFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327308D20C2AA364008C322B /* SecurityFoundation.framework */; };
+ 4998A6F10DC3415700146652 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327309620C2AB433008C322B /* Security.framework */; };
+ 4998A6F20DC3415800146652 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 495C39460D81EA3C003426FC /* Kerberos.framework */; };
+ 4998A6F30DC3415900146652 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 493564E70CE711F300699A24 /* Carbon.framework */; };
+ 4998A6F40DC3415900146652 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4940075A0CE62EB500F40D0A /* CoreServices.framework */; };
+ 4998A6F50DC3415A00146652 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
+ 49AF1F480C25B52A006A046E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 49AF1F470C25B52A006A046E /* InfoPlist.strings */; };
+ 49B766450DCA47A50014A80F /* DialogUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B766430DCA47A50014A80F /* DialogUtility.h */; };
+ 49B766460DCA47A50014A80F /* DialogUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 49B766440DCA47A50014A80F /* DialogUtility.m */; };
+ 49E05CAD0C2674DA002AAEF2 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D202CF70486D31800D8A456 /* Info.plist */; };
+ 49E43BA60C47D53F00084436 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3223836A0C32A96F00380547 /* Localizable.strings */; };
+ 49E43BE70C47D9EE00084436 /* global.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E43BE60C47D9EE00084436 /* global.h */; };
+ 49E43C730C47E0EA00084436 /* start_afs.sh in Resources */ = {isa = PBXBuildFile; fileRef = 322B90430C2F0A2D0068F99A /* start_afs.sh */; };
+ 49E43C740C47E0EC00084436 /* stop_afs.sh in Resources */ = {isa = PBXBuildFile; fileRef = 322B90440C2F0A2D0068F99A /* stop_afs.sh */; };
+ 49E43D2E0C480B8200084436 /* afshlp in Resources */ = {isa = PBXBuildFile; fileRef = 49683EE40C3446380093C7C8 /* afshlp */; };
+ 49FFE7D20C2AED7200DF83CF /* AuthUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3213E9400C2ABFD200D3D2F6 /* AuthUtil.m */; };
+ 8D202CEA0486D31800D8A456 /* AFSCommander_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32DBCFA20370C41700C91783 /* AFSCommander_Prefix.pch */; };
+ 8D202CEB0486D31800D8A456 /* AFSCommanderPref.h in Headers */ = {isa = PBXBuildFile; fileRef = F506C03C013D9D7901CA16C8 /* AFSCommanderPref.h */; };
+ 8D202CF10486D31800D8A456 /* AFSCommanderPref.m in Sources */ = {isa = PBXBuildFile; fileRef = F506C03D013D9D7901CA16C8 /* AFSCommanderPref.m */; };
+ 8D202CF30486D31800D8A456 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
+ 8D202CF40486D31800D8A456 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F506C035013D953901CA16C8 /* PreferencePanes.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 3279B9800C451A63008FE3FA /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 494BD4680C43ED0C00DB0A3A;
+ remoteInfo = AFSMenuExtra;
+ };
+ 494435680DC35D6F00C7A333 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4998A6850DC33BEC00146652;
+ remoteInfo = LoginTimeDaemon;
+ };
+ 49575C270C53CD9A00B3BC32 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 49683EE30C3446380093C7C8;
+ remoteInfo = afshlp;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 494D72C90C350BC400B1FD21 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = MenuCracker.menu;
+ dstSubfolderSpec = 7;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
+ 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+ 3213E93F0C2ABFD200D3D2F6 /* AuthUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthUtil.h; sourceTree = "<group>"; };
+ 3213E9400C2ABFD200D3D2F6 /* AuthUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuthUtil.m; sourceTree = "<group>"; };
+ 3219259B0C339DAE00B55E86 /* TokenCredentialController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TokenCredentialController.h; sourceTree = "<group>"; };
+ 3219259C0C339DAE00B55E86 /* TokenCredentialController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TokenCredentialController.m; sourceTree = "<group>"; };
+ 3223836B0C32A96F00380547 /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; name = English; path = English.lproj/Localizable.strings; sourceTree = "<group>"; };
+ 322884010C3E45C800E778CC /* InfoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InfoController.h; sourceTree = "<group>"; };
+ 322884020C3E45C800E778CC /* InfoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InfoController.m; sourceTree = "<group>"; };
+ 322B90430C2F0A2D0068F99A /* start_afs.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = start_afs.sh; sourceTree = "<group>"; };
+ 322B90440C2F0A2D0068F99A /* stop_afs.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = stop_afs.sh; sourceTree = "<group>"; };
+ 322CEF5E0C211D220060D66D /* DBCellElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBCellElement.h; sourceTree = "<group>"; };
+ 322CEF5F0C211D220060D66D /* DBCellElement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DBCellElement.m; sourceTree = "<group>"; };
+ 322CEF6C0C211DCC0060D66D /* CellIp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CellIp.h; sourceTree = "<group>"; };
+ 322CEF6D0C211DCC0060D66D /* CellIp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CellIp.m; sourceTree = "<group>"; };
+ 324D67FC0DA13194007E1561 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/OpenAFSPreference.xib; sourceTree = "<group>"; };
+ 324D683C0DA133A3007E1561 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/IpPanel.xib; sourceTree = "<group>"; };
+ 324D68490DA133CF007E1561 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/CredentialPanel.xib; sourceTree = "<group>"; };
+ 325311CF0C44F4B100FAF2F3 /* licenza.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = licenza.rtf; sourceTree = "<group>"; };
+ 325312170C44F7BD00FAF2F3 /* AFSMenuExtraView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSMenuExtraView.h; sourceTree = "<group>"; };
+ 325312180C44F7BD00FAF2F3 /* AFSMenuExtraView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSMenuExtraView.m; sourceTree = "<group>"; };
+ 325313B00C4516A900FAF2F3 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; name = Info.plist; path = AfsMenuExtraResource/Info.plist; sourceTree = "<group>"; };
+ 3273088B0C2A9B05008C322B /* FileUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileUtil.h; sourceTree = "<group>"; };
+ 3273088C0C2A9B05008C322B /* FileUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FileUtil.m; sourceTree = "<group>"; };
+ 327308D20C2AA364008C322B /* SecurityFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SecurityFoundation.framework; path = /System/Library/Frameworks/SecurityFoundation.framework; sourceTree = "<absolute>"; };
+ 327309620C2AB433008C322B /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; };
+ 327756250C3053A100C15D11 /* TaskUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TaskUtil.h; sourceTree = "<group>"; };
+ 327756260C3053A100C15D11 /* TaskUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TaskUtil.m; sourceTree = "<group>"; };
+ 32B0AFDD0C01729400272348 /* AFSPropertyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSPropertyManager.h; sourceTree = "<group>"; };
+ 32B0AFDE0C01729400272348 /* AFSPropertyManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSPropertyManager.m; sourceTree = "<group>"; };
+ 32B565720D8FAF62005255F2 /* NSString+search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+search.h"; sourceTree = "<group>"; };
+ 32B565730D8FAF62005255F2 /* NSString+search.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+search.m"; sourceTree = "<group>"; };
+ 32C4A9560C268D9B009280A0 /* IpConfiguratorCommander.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IpConfiguratorCommander.h; sourceTree = "<group>"; };
+ 32C4A9570C268D9B009280A0 /* IpConfiguratorCommander.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IpConfiguratorCommander.m; sourceTree = "<group>"; };
+ 32CF01390C203C1800A8DC58 /* Test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Test; sourceTree = BUILT_PRODUCTS_DIR; };
+ 32CFFEFD0C20316B00A8DC58 /* TestLib.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestLib.m; sourceTree = "<group>"; };
+ 32DBCFA20370C41700C91783 /* AFSCommander_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSCommander_Prefix.pch; sourceTree = "<group>"; };
+ 32DE817D0DF571630069A05C /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/SymLinkEdit.xib; sourceTree = "<group>"; };
+ 32DE818A0DF573200069A05C /* LynkCreationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LynkCreationController.h; sourceTree = "<group>"; };
+ 32DE818B0DF573200069A05C /* LynkCreationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LynkCreationController.m; sourceTree = "<group>"; };
+ 492AFB270C51483600AEDC93 /* CredentialWindow.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = CredentialWindow.nib; path = AfsMenuExtraResource/CredentialWindow.nib; sourceTree = "<group>"; };
+ 493564E70CE711F300699A24 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+ 4940075A0CE62EB500F40D0A /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
+ 4941F50E0C4929C000B29A73 /* AFSMenuCredentialContoller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSMenuCredentialContoller.h; sourceTree = "<group>"; };
+ 4941F50F0C4929C000B29A73 /* AFSMenuCredentialContoller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSMenuCredentialContoller.m; sourceTree = "<group>"; };
+ 4941F6300C49379000B29A73 /* CredentialWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CredentialWindowController.h; sourceTree = "<group>"; };
+ 4941F6310C49379000B29A73 /* CredentialWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CredentialWindowController.m; sourceTree = "<group>"; };
+ 494BD47B0C43EDF900DB0A3A /* SystemUIPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SystemUIPlugin.h; sourceTree = "<group>"; };
+ 494BD4870C43EEA400DB0A3A /* SystemUIPlugin.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemUIPlugin.framework; path = /System/Library/PrivateFrameworks/SystemUIPlugin.framework; sourceTree = "<absolute>"; };
+ 494BD48A0C43EEC300DB0A3A /* AFSMenuExtra.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSMenuExtra.h; sourceTree = "<group>"; };
+ 494BD48B0C43EEC300DB0A3A /* AFSMenuExtra.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSMenuExtra.m; sourceTree = "<group>"; };
+ 494C74DE0C46052800D3A2D2 /* AFSMenuExtra.menu */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AFSMenuExtra.menu; sourceTree = BUILT_PRODUCTS_DIR; };
+ 49575BB30C53CBDB00B3BC32 /* hasToken.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = hasToken.png; sourceTree = "<group>"; };
+ 49575BB40C53CBDB00B3BC32 /* noToken.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = noToken.png; sourceTree = "<group>"; };
+ 495B043E0D219A2900F1E328 /* ViewUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewUtility.h; sourceTree = "<group>"; };
+ 495B043F0D219A2900F1E328 /* ViewUtility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewUtility.m; sourceTree = "<group>"; };
+ 495C39460D81EA3C003426FC /* Kerberos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kerberos.framework; path = /System/Library/Frameworks/Kerberos.framework; sourceTree = "<absolute>"; };
+ 49683EE40C3446380093C7C8 /* afshlp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = afshlp; sourceTree = BUILT_PRODUCTS_DIR; };
+ 49683EEB0C3446600093C7C8 /* afshlp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = afshlp.m; sourceTree = "<group>"; };
+ 498DCB410DC2240B00D143C8 /* PListManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PListManager.h; sourceTree = "<group>"; };
+ 498DCB420DC2240B00D143C8 /* PListManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PListManager.m; sourceTree = "<group>"; };
+ 4998A6860DC33BEC00146652 /* LoginTimeDaemon */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = LoginTimeDaemon; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4998A6A30DC33C9300146652 /* afsltd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = afsltd.m; sourceTree = "<group>"; };
+ 49B766430DCA47A50014A80F /* DialogUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialogUtility.h; sourceTree = "<group>"; };
+ 49B766440DCA47A50014A80F /* DialogUtility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DialogUtility.m; sourceTree = "<group>"; };
+ 49E43BE60C47D9EE00084436 /* global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = global.h; sourceTree = "<group>"; };
+ 8D202CF70486D31800D8A456 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 8D202CF80486D31800D8A456 /* OpenAFS.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenAFS.prefPane; sourceTree = BUILT_PRODUCTS_DIR; };
+ F506C035013D953901CA16C8 /* PreferencePanes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PreferencePanes.framework; path = /System/Library/Frameworks/PreferencePanes.framework; sourceTree = "<absolute>"; };
+ F506C03C013D9D7901CA16C8 /* AFSCommanderPref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSCommanderPref.h; sourceTree = "<group>"; };
+ F506C03D013D9D7901CA16C8 /* AFSCommanderPref.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSCommanderPref.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 32CF01370C203C1800A8DC58 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 32CF014C0C203CBD00A8DC58 /* Cocoa.framework in Frameworks */,
+ 327308D80C2AA369008C322B /* SecurityFoundation.framework in Frameworks */,
+ 327309980C2AB434008C322B /* Security.framework in Frameworks */,
+ 495C39490D81EA3C003426FC /* Kerberos.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 494BD4670C43ED0C00DB0A3A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 494BD4880C43EEA400DB0A3A /* SystemUIPlugin.framework in Frameworks */,
+ 325313520C45153400FAF2F3 /* SecurityFoundation.framework in Frameworks */,
+ 325313550C45153500FAF2F3 /* Security.framework in Frameworks */,
+ 3253138D0C45157A00FAF2F3 /* Cocoa.framework in Frameworks */,
+ 495C39480D81EA3C003426FC /* Kerberos.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 49683EE20C3446380093C7C8 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 49683F440C344CE20093C7C8 /* SecurityFoundation.framework in Frameworks */,
+ 49683F470C344CE40093C7C8 /* Security.framework in Frameworks */,
+ 49683F990C3452870093C7C8 /* Cocoa.framework in Frameworks */,
+ 4968CBEB0C51EA01001F5CC7 /* Foundation.framework in Frameworks */,
+ 495C39CC0D81F742003426FC /* Kerberos.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4998A6840DC33BEC00146652 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4998A6F00DC3415600146652 /* SecurityFoundation.framework in Frameworks */,
+ 4998A6F10DC3415700146652 /* Security.framework in Frameworks */,
+ 4998A6F20DC3415800146652 /* Kerberos.framework in Frameworks */,
+ 4998A6F30DC3415900146652 /* Carbon.framework in Frameworks */,
+ 4998A6F40DC3415900146652 /* CoreServices.framework in Frameworks */,
+ 4998A6F50DC3415A00146652 /* Cocoa.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8D202CF20486D31800D8A456 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D202CF30486D31800D8A456 /* Cocoa.framework in Frameworks */,
+ 8D202CF40486D31800D8A456 /* PreferencePanes.framework in Frameworks */,
+ 327308D70C2AA364008C322B /* SecurityFoundation.framework in Frameworks */,
+ 327309970C2AB433008C322B /* Security.framework in Frameworks */,
+ 4940075B0CE62EB500F40D0A /* CoreServices.framework in Frameworks */,
+ 493564E80CE711F300699A24 /* Carbon.framework in Frameworks */,
+ 495C39470D81EA3C003426FC /* Kerberos.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 089C166AFE841209C02AAC07 /* AFSCommander */ = {
+ isa = PBXGroup;
+ children = (
+ 32CFFEF90C20314100A8DC58 /* Stand Alone Program */,
+ 08FB77AFFE84173DC02AAC07 /* Classes */,
+ 494BD47A0C43EDD400DB0A3A /* AFSMenuExtra */,
+ 32DBCFA10370C40200C91783 /* Other Sources */,
+ 089C167CFE841241C02AAC07 /* Resources */,
+ 089C1671FE841209C02AAC07 /* Frameworks and Libraries */,
+ 19C28FB8FE9D52D311CA2CBB /* Products */,
+ );
+ comments = "Progetto per la gestione delle configurazioni afs";
+ name = AFSCommander;
+ sourceTree = "<group>";
+ };
+ 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */,
+ 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */,
+ );
+ name = "Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 089C167CFE841241C02AAC07 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 325311CF0C44F4B100FAF2F3 /* licenza.rtf */,
+ 322B90430C2F0A2D0068F99A /* start_afs.sh */,
+ 322B90440C2F0A2D0068F99A /* stop_afs.sh */,
+ 324D67FB0DA13194007E1561 /* OpenAFSPreference.xib */,
+ 32DE81BC0DF57BDA0069A05C /* SymLinkEdit.xib */,
+ 324D68480DA133CF007E1561 /* CredentialPanel.xib */,
+ 324D683B0DA133A3007E1561 /* IpPanel.xib */,
+ 32B0AFB40C016E6900272348 /* English.lproj */,
+ 8D202CF70486D31800D8A456 /* Info.plist */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 08FB77AFFE84173DC02AAC07 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ 49E43BE60C47D9EE00084436 /* global.h */,
+ F506C03C013D9D7901CA16C8 /* AFSCommanderPref.h */,
+ F506C03D013D9D7901CA16C8 /* AFSCommanderPref.m */,
+ 3212AA7F0C27AC2800A0689C /* AFS Logic */,
+ 32C4A9550C268D84009280A0 /* IpConfigurator */,
+ 3219259A0C339C1F00B55E86 /* TokenCredential */,
+ 32DE81890DF573030069A05C /* Lynk Creation */,
+ 322884000C3E45B100E778CC /* Info */,
+ 327308880C2A99A1008C322B /* Utility */,
+ );
+ name = Classes;
+ sourceTree = "<group>";
+ };
+ 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 495C39460D81EA3C003426FC /* Kerberos.framework */,
+ 493564E70CE711F300699A24 /* Carbon.framework */,
+ 4940075A0CE62EB500F40D0A /* CoreServices.framework */,
+ 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */,
+ F506C035013D953901CA16C8 /* PreferencePanes.framework */,
+ );
+ name = "Linked Frameworks";
+ sourceTree = "<group>";
+ };
+ 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 494BD4870C43EEA400DB0A3A /* SystemUIPlugin.framework */,
+ 327309620C2AB433008C322B /* Security.framework */,
+ 327308D20C2AA364008C322B /* SecurityFoundation.framework */,
+ 089C1672FE841209C02AAC07 /* Foundation.framework */,
+ 089C167FFE841241C02AAC07 /* AppKit.framework */,
+ );
+ name = "Other Frameworks";
+ sourceTree = "<group>";
+ };
+ 19C28FB8FE9D52D311CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D202CF80486D31800D8A456 /* OpenAFS.prefPane */,
+ 32CF01390C203C1800A8DC58 /* Test */,
+ 49683EE40C3446380093C7C8 /* afshlp */,
+ 494C74DE0C46052800D3A2D2 /* AFSMenuExtra.menu */,
+ 4998A6860DC33BEC00146652 /* LoginTimeDaemon */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 3212AA7F0C27AC2800A0689C /* AFS Logic */ = {
+ isa = PBXGroup;
+ children = (
+ 32B0AFDD0C01729400272348 /* AFSPropertyManager.h */,
+ 32B0AFDE0C01729400272348 /* AFSPropertyManager.m */,
+ 322CEF6B0C211DAC0060D66D /* Afs Element */,
+ );
+ name = "AFS Logic";
+ sourceTree = "<group>";
+ };
+ 3219259A0C339C1F00B55E86 /* TokenCredential */ = {
+ isa = PBXGroup;
+ children = (
+ 3219259B0C339DAE00B55E86 /* TokenCredentialController.h */,
+ 3219259C0C339DAE00B55E86 /* TokenCredentialController.m */,
+ );
+ name = TokenCredential;
+ sourceTree = "<group>";
+ };
+ 322884000C3E45B100E778CC /* Info */ = {
+ isa = PBXGroup;
+ children = (
+ 322884010C3E45C800E778CC /* InfoController.h */,
+ 322884020C3E45C800E778CC /* InfoController.m */,
+ );
+ name = Info;
+ sourceTree = "<group>";
+ };
+ 322CEF6B0C211DAC0060D66D /* Afs Element */ = {
+ isa = PBXGroup;
+ children = (
+ 322CEF5E0C211D220060D66D /* DBCellElement.h */,
+ 322CEF5F0C211D220060D66D /* DBCellElement.m */,
+ 322CEF6C0C211DCC0060D66D /* CellIp.h */,
+ 322CEF6D0C211DCC0060D66D /* CellIp.m */,
+ );
+ name = "Afs Element";
+ sourceTree = "<group>";
+ };
+ 325313A10C4515A700FAF2F3 /* Resource */ = {
+ isa = PBXGroup;
+ children = (
+ 49575BB30C53CBDB00B3BC32 /* hasToken.png */,
+ 49575BB40C53CBDB00B3BC32 /* noToken.png */,
+ 325313B00C4516A900FAF2F3 /* Info.plist */,
+ 492AFB270C51483600AEDC93 /* CredentialWindow.nib */,
+ );
+ name = Resource;
+ sourceTree = "<group>";
+ };
+ 327308880C2A99A1008C322B /* Utility */ = {
+ isa = PBXGroup;
+ children = (
+ 3273088B0C2A9B05008C322B /* FileUtil.h */,
+ 3273088C0C2A9B05008C322B /* FileUtil.m */,
+ 3213E93F0C2ABFD200D3D2F6 /* AuthUtil.h */,
+ 3213E9400C2ABFD200D3D2F6 /* AuthUtil.m */,
+ 327756250C3053A100C15D11 /* TaskUtil.h */,
+ 327756260C3053A100C15D11 /* TaskUtil.m */,
+ 495B043E0D219A2900F1E328 /* ViewUtility.h */,
+ 495B043F0D219A2900F1E328 /* ViewUtility.m */,
+ 32B565720D8FAF62005255F2 /* NSString+search.h */,
+ 32B565730D8FAF62005255F2 /* NSString+search.m */,
+ 498DCB410DC2240B00D143C8 /* PListManager.h */,
+ 498DCB420DC2240B00D143C8 /* PListManager.m */,
+ 49B766430DCA47A50014A80F /* DialogUtility.h */,
+ 49B766440DCA47A50014A80F /* DialogUtility.m */,
+ );
+ name = Utility;
+ sourceTree = "<group>";
+ };
+ 32B0AFB40C016E6900272348 /* English.lproj */ = {
+ isa = PBXGroup;
+ children = (
+ 3223836A0C32A96F00380547 /* Localizable.strings */,
+ 49AF1F470C25B52A006A046E /* InfoPlist.strings */,
+ );
+ name = English.lproj;
+ sourceTree = "<group>";
+ };
+ 32C4A9550C268D84009280A0 /* IpConfigurator */ = {
+ isa = PBXGroup;
+ children = (
+ 32C4A9560C268D9B009280A0 /* IpConfiguratorCommander.h */,
+ 32C4A9570C268D9B009280A0 /* IpConfiguratorCommander.m */,
+ );
+ name = IpConfigurator;
+ sourceTree = "<group>";
+ };
+ 32CFFEF90C20314100A8DC58 /* Stand Alone Program */ = {
+ isa = PBXGroup;
+ children = (
+ 32CFFEFD0C20316B00A8DC58 /* TestLib.m */,
+ 49683EEB0C3446600093C7C8 /* afshlp.m */,
+ 4998A6A30DC33C9300146652 /* afsltd.m */,
+ );
+ name = "Stand Alone Program";
+ sourceTree = "<group>";
+ };
+ 32DBCFA10370C40200C91783 /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 494BD47B0C43EDF900DB0A3A /* SystemUIPlugin.h */,
+ 32DBCFA20370C41700C91783 /* AFSCommander_Prefix.pch */,
+ );
+ name = "Other Sources";
+ sourceTree = "<group>";
+ };
+ 32DE81890DF573030069A05C /* Lynk Creation */ = {
+ isa = PBXGroup;
+ children = (
+ 32DE818A0DF573200069A05C /* LynkCreationController.h */,
+ 32DE818B0DF573200069A05C /* LynkCreationController.m */,
+ );
+ name = "Lynk Creation";
+ sourceTree = "<group>";
+ };
+ 4941F62F0C49377000B29A73 /* CredentialWindow */ = {
+ isa = PBXGroup;
+ children = (
+ 4941F6300C49379000B29A73 /* CredentialWindowController.h */,
+ 4941F6310C49379000B29A73 /* CredentialWindowController.m */,
+ );
+ name = CredentialWindow;
+ sourceTree = "<group>";
+ };
+ 494BD47A0C43EDD400DB0A3A /* AFSMenuExtra */ = {
+ isa = PBXGroup;
+ children = (
+ 494BD48A0C43EEC300DB0A3A /* AFSMenuExtra.h */,
+ 494BD48B0C43EEC300DB0A3A /* AFSMenuExtra.m */,
+ 325312170C44F7BD00FAF2F3 /* AFSMenuExtraView.h */,
+ 325312180C44F7BD00FAF2F3 /* AFSMenuExtraView.m */,
+ 4941F50E0C4929C000B29A73 /* AFSMenuCredentialContoller.h */,
+ 4941F50F0C4929C000B29A73 /* AFSMenuCredentialContoller.m */,
+ 4941F62F0C49377000B29A73 /* CredentialWindow */,
+ 325313A10C4515A700FAF2F3 /* Resource */,
+ );
+ name = AFSMenuExtra;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 8D202CE90486D31800D8A456 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D202CEA0486D31800D8A456 /* AFSCommander_Prefix.pch in Headers */,
+ 8D202CEB0486D31800D8A456 /* AFSCommanderPref.h in Headers */,
+ 32B0AFDF0C01729400272348 /* AFSPropertyManager.h in Headers */,
+ 499716940C23E36F001339E3 /* CellIp.h in Headers */,
+ 499716960C23E370001339E3 /* DBCellElement.h in Headers */,
+ 32C4A9B90C26A0FB009280A0 /* IpConfiguratorCommander.h in Headers */,
+ 3273088D0C2A9B05008C322B /* FileUtil.h in Headers */,
+ 3213E9410C2ABFD200D3D2F6 /* AuthUtil.h in Headers */,
+ 327756280C3053A100C15D11 /* TaskUtil.h in Headers */,
+ 322884030C3E45C800E778CC /* InfoController.h in Headers */,
+ 49E43BE70C47D9EE00084436 /* global.h in Headers */,
+ 492AFA860C51301D00AEDC93 /* TokenCredentialController.h in Headers */,
+ 495B04400D219A2900F1E328 /* ViewUtility.h in Headers */,
+ 32B565740D8FAF62005255F2 /* NSString+search.h in Headers */,
+ 498DCB430DC2240B00D143C8 /* PListManager.h in Headers */,
+ 49B766450DCA47A50014A80F /* DialogUtility.h in Headers */,
+ 32DE818C0DF573200069A05C /* LynkCreationController.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 32CF01380C203C1800A8DC58 /* Test */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 32CF013C0C203C4900A8DC58 /* Build configuration list for PBXNativeTarget "Test" */;
+ buildPhases = (
+ 32CF01360C203C1800A8DC58 /* Sources */,
+ 32CF01370C203C1800A8DC58 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Test;
+ productName = Test;
+ productReference = 32CF01390C203C1800A8DC58 /* Test */;
+ productType = "com.apple.product-type.tool";
+ };
+ 494BD4680C43ED0C00DB0A3A /* AFSMenuExtra */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 494BD46C0C43ED0D00DB0A3A /* Build configuration list for PBXNativeTarget "AFSMenuExtra" */;
+ buildPhases = (
+ 494BD4650C43ED0C00DB0A3A /* Resources */,
+ 494BD4660C43ED0C00DB0A3A /* Sources */,
+ 494BD4670C43ED0C00DB0A3A /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 49575C280C53CD9A00B3BC32 /* PBXTargetDependency */,
+ );
+ name = AFSMenuExtra;
+ productName = AFSMenuExtra;
+ productReference = 494C74DE0C46052800D3A2D2 /* AFSMenuExtra.menu */;
+ productType = "com.apple.product-type.bundle";
+ };
+ 49683EE30C3446380093C7C8 /* afshlp */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 49683EE70C34465D0093C7C8 /* Build configuration list for PBXNativeTarget "afshlp" */;
+ buildPhases = (
+ 49683EE10C3446380093C7C8 /* Sources */,
+ 49683EE20C3446380093C7C8 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = afshlp;
+ productName = afshlp;
+ productReference = 49683EE40C3446380093C7C8 /* afshlp */;
+ productType = "com.apple.product-type.tool";
+ };
+ 4998A6850DC33BEC00146652 /* LoginTimeDaemon */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4998A6A10DC33C2000146652 /* Build configuration list for PBXNativeTarget "LoginTimeDaemon" */;
+ buildPhases = (
+ 4998A6830DC33BEC00146652 /* Sources */,
+ 4998A6840DC33BEC00146652 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = LoginTimeDaemon;
+ productName = LoginTimeDaemon;
+ productReference = 4998A6860DC33BEC00146652 /* LoginTimeDaemon */;
+ productType = "com.apple.product-type.tool";
+ };
+ 8D202CE80486D31800D8A456 /* OpenAFS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DBD214808BA80EA00186707 /* Build configuration list for PBXNativeTarget "OpenAFS" */;
+ buildPhases = (
+ 8D202CE90486D31800D8A456 /* Headers */,
+ 8D202CEC0486D31800D8A456 /* Resources */,
+ 8D202CF00486D31800D8A456 /* Sources */,
+ 8D202CF20486D31800D8A456 /* Frameworks */,
+ 8D202CF50486D31800D8A456 /* Rez */,
+ 494D72C90C350BC400B1FD21 /* CopyFiles */,
+ 3281A5B00CD7432A00907CF6 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 3279B9810C451A63008FE3FA /* PBXTargetDependency */,
+ 494435690DC35D6F00C7A333 /* PBXTargetDependency */,
+ );
+ name = OpenAFS;
+ productInstallPath = "$(HOME)/Library/PreferencePanes";
+ productName = AFSCommander;
+ productReference = 8D202CF80486D31800D8A456 /* OpenAFS.prefPane */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 089C1669FE841209C02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DBD214C08BA80EA00186707 /* Build configuration list for PBXProject "OpenAFS" */;
+ compatibilityVersion = "Xcode 2.4";
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ Italian,
+ );
+ mainGroup = 089C166AFE841209C02AAC07 /* AFSCommander */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8D202CE80486D31800D8A456 /* OpenAFS */,
+ 32CF01380C203C1800A8DC58 /* Test */,
+ 49683EE30C3446380093C7C8 /* afshlp */,
+ 494BD4680C43ED0C00DB0A3A /* AFSMenuExtra */,
+ 4998A6850DC33BEC00146652 /* LoginTimeDaemon */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 494BD4650C43ED0C00DB0A3A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 325313B10C4516A900FAF2F3 /* Info.plist in Resources */,
+ 49E43BA60C47D53F00084436 /* Localizable.strings in Resources */,
+ 49E43C730C47E0EA00084436 /* start_afs.sh in Resources */,
+ 49E43C740C47E0EC00084436 /* stop_afs.sh in Resources */,
+ 32D45E070C4B4D9C00A1012D /* afshlp in Resources */,
+ 492AFB280C51483600AEDC93 /* CredentialWindow.nib in Resources */,
+ 49575BB50C53CBDB00B3BC32 /* hasToken.png in Resources */,
+ 49575BB60C53CBDB00B3BC32 /* noToken.png in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8D202CEC0486D31800D8A456 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 49AF1F480C25B52A006A046E /* InfoPlist.strings in Resources */,
+ 49E05CAD0C2674DA002AAEF2 /* Info.plist in Resources */,
+ 322B90450C2F0A2D0068F99A /* start_afs.sh in Resources */,
+ 322B90460C2F0A2D0068F99A /* stop_afs.sh in Resources */,
+ 3223836C0C32A96F00380547 /* Localizable.strings in Resources */,
+ 325311D00C44F4B100FAF2F3 /* licenza.rtf in Resources */,
+ 494C75110C4605C000D3A2D2 /* AFSMenuExtra.menu in Resources */,
+ 49E43D2E0C480B8200084436 /* afshlp in Resources */,
+ 324D67FD0DA13194007E1561 /* OpenAFSPreference.xib in Resources */,
+ 324D683D0DA133A3007E1561 /* IpPanel.xib in Resources */,
+ 324D684A0DA133CF007E1561 /* CredentialPanel.xib in Resources */,
+ 494435170DC35D4C00C7A333 /* LoginTimeDaemon in Resources */,
+ 32DE81BD0DF57BDA0069A05C /* SymLinkEdit.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXRezBuildPhase section */
+ 8D202CF50486D31800D8A456 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3281A5B00CD7432A00907CF6 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ comments = "Copy the menucraker.menu into resources";
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\nif [ \"$ACTION\" = \"build\" ]\nthen\n\techo \"Start coping MenuCraker.menu\"\n\techo $SRCROOT/MenuCracker.menu\n\techo $TARGET_BUILD_DIR/$PRODUCT_NAME.prefPane/Resources/\t\n\tcp -R $SRCROOT/MenuCracker.menu $TARGET_BUILD_DIR/$PRODUCT_NAME.prefPane/Contents/Resources/MenuCracker.menu\nfi\n\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 32CF01360C203C1800A8DC58 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 32CF013F0C203C5600A8DC58 /* TestLib.m in Sources */,
+ 32CF01460C203CA800A8DC58 /* AFSPropertyManager.m in Sources */,
+ 322CEF600C211D220060D66D /* DBCellElement.m in Sources */,
+ 322CEF6E0C211DCC0060D66D /* CellIp.m in Sources */,
+ 32C4A9580C268D9B009280A0 /* IpConfiguratorCommander.m in Sources */,
+ 327308C30C2AA2E1008C322B /* FileUtil.m in Sources */,
+ 49FFE7D20C2AED7200DF83CF /* AuthUtil.m in Sources */,
+ 327756270C3053A100C15D11 /* TaskUtil.m in Sources */,
+ 3219259D0C339DAE00B55E86 /* TokenCredentialController.m in Sources */,
+ 322884050C3E45C800E778CC /* InfoController.m in Sources */,
+ 495B04420D219A2900F1E328 /* ViewUtility.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 494BD4660C43ED0C00DB0A3A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 494BD48C0C43EEC300DB0A3A /* AFSMenuExtra.m in Sources */,
+ 325311AB0C44F38200FAF2F3 /* AFSPropertyManager.m in Sources */,
+ 325311AF0C44F38D00FAF2F3 /* CellIp.m in Sources */,
+ 325311B00C44F38D00FAF2F3 /* DBCellElement.m in Sources */,
+ 325311B10C44F39200FAF2F3 /* TaskUtil.m in Sources */,
+ 325311B20C44F39300FAF2F3 /* AuthUtil.m in Sources */,
+ 325311B30C44F39400FAF2F3 /* FileUtil.m in Sources */,
+ 325312190C44F7BD00FAF2F3 /* AFSMenuExtraView.m in Sources */,
+ 4941F4C00C491D2D00B29A73 /* TokenCredentialController.m in Sources */,
+ 4941F5100C4929C000B29A73 /* AFSMenuCredentialContoller.m in Sources */,
+ 4941F6320C49379000B29A73 /* CredentialWindowController.m in Sources */,
+ 32B565760D8FAF62005255F2 /* NSString+search.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 49683EE10C3446380093C7C8 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 49683EEC0C3446600093C7C8 /* afshlp.m in Sources */,
+ 49683F3D0C344CD40093C7C8 /* AFSPropertyManager.m in Sources */,
+ 49683F3E0C344CD50093C7C8 /* DBCellElement.m in Sources */,
+ 49683F3F0C344CD70093C7C8 /* CellIp.m in Sources */,
+ 49683F400C344CD80093C7C8 /* IpConfiguratorCommander.m in Sources */,
+ 49683F410C344CD90093C7C8 /* FileUtil.m in Sources */,
+ 49683F420C344CDA0093C7C8 /* AuthUtil.m in Sources */,
+ 49683F430C344CDB0093C7C8 /* TaskUtil.m in Sources */,
+ 4934D4170DC38958000511D2 /* PListManager.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4998A6830DC33BEC00146652 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4998A6A40DC33C9300146652 /* afsltd.m in Sources */,
+ 4998A6A50DC33CD800146652 /* AFSPropertyManager.m in Sources */,
+ 4998A6A60DC33CDB00146652 /* DBCellElement.m in Sources */,
+ 4998A6A70DC33CDB00146652 /* CellIp.m in Sources */,
+ 4998A6A80DC33CE600146652 /* FileUtil.m in Sources */,
+ 4998A6A90DC33CE700146652 /* AuthUtil.m in Sources */,
+ 4998A6AA0DC33CE800146652 /* TaskUtil.m in Sources */,
+ 4998A6AB0DC33CE900146652 /* ViewUtility.m in Sources */,
+ 4998A6AC0DC33CEA00146652 /* NSString+search.m in Sources */,
+ 4998A6AD0DC33CEB00146652 /* PListManager.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8D202CF00486D31800D8A456 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D202CF10486D31800D8A456 /* AFSCommanderPref.m in Sources */,
+ 32B0AFE00C01729400272348 /* AFSPropertyManager.m in Sources */,
+ 499716930C23E36E001339E3 /* CellIp.m in Sources */,
+ 499716950C23E370001339E3 /* DBCellElement.m in Sources */,
+ 32C4A9B80C26A0FA009280A0 /* IpConfiguratorCommander.m in Sources */,
+ 3273088E0C2A9B05008C322B /* FileUtil.m in Sources */,
+ 3213E9420C2ABFD200D3D2F6 /* AuthUtil.m in Sources */,
+ 327756290C3053A100C15D11 /* TaskUtil.m in Sources */,
+ 322884040C3E45C800E778CC /* InfoController.m in Sources */,
+ 492AFA870C51301E00AEDC93 /* TokenCredentialController.m in Sources */,
+ 495B04410D219A2900F1E328 /* ViewUtility.m in Sources */,
+ 32B565750D8FAF62005255F2 /* NSString+search.m in Sources */,
+ 498DCB440DC2240B00D143C8 /* PListManager.m in Sources */,
+ 49B766460DCA47A50014A80F /* DialogUtility.m in Sources */,
+ 32DE818D0DF573200069A05C /* LynkCreationController.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 3279B9810C451A63008FE3FA /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 494BD4680C43ED0C00DB0A3A /* AFSMenuExtra */;
+ targetProxy = 3279B9800C451A63008FE3FA /* PBXContainerItemProxy */;
+ };
+ 494435690DC35D6F00C7A333 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 4998A6850DC33BEC00146652 /* LoginTimeDaemon */;
+ targetProxy = 494435680DC35D6F00C7A333 /* PBXContainerItemProxy */;
+ };
+ 49575C280C53CD9A00B3BC32 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 49683EE30C3446380093C7C8 /* afshlp */;
+ targetProxy = 49575C270C53CD9A00B3BC32 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 3223836A0C32A96F00380547 /* Localizable.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 3223836B0C32A96F00380547 /* English */,
+ );
+ name = Localizable.strings;
+ sourceTree = "<group>";
+ };
+ 324D67FB0DA13194007E1561 /* OpenAFSPreference.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 324D67FC0DA13194007E1561 /* English */,
+ );
+ name = OpenAFSPreference.xib;
+ sourceTree = "<group>";
+ };
+ 324D683B0DA133A3007E1561 /* IpPanel.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 324D683C0DA133A3007E1561 /* English */,
+ );
+ name = IpPanel.xib;
+ sourceTree = "<group>";
+ };
+ 324D68480DA133CF007E1561 /* CredentialPanel.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 324D68490DA133CF007E1561 /* English */,
+ );
+ name = CredentialPanel.xib;
+ sourceTree = "<group>";
+ };
+ 32DE81BC0DF57BDA0069A05C /* SymLinkEdit.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 32DE817D0DF571630069A05C /* English */,
+ );
+ name = SymLinkEdit.xib;
+ sourceTree = "<group>";
+ };
+ 49AF1F470C25B52A006A046E /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 089C167EFE841241C02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 1DBD214908BA80EA00186707 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = AFSCommander_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/PreferencePanes";
+ PRODUCT_NAME = OpenAFS;
+ WRAPPER_EXTENSION = prefPane;
+ ZERO_LINK = YES;
+ };
+ name = Debug;
+ };
+ 1DBD214A08BA80EA00186707 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = AFSCommander_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/PreferencePanes";
+ PRODUCT_NAME = OpenAFS;
+ WRAPPER_EXTENSION = prefPane;
+ };
+ name = Release;
+ };
+ 1DBD214D08BA80EA00186707 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ };
+ name = Debug;
+ };
+ 1DBD214E08BA80EA00186707 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ };
+ name = Release;
+ };
+ 32CF013D0C203C4900A8DC58 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INSTALL_PATH = "$(HOME)/bin";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = Test;
+ ZERO_LINK = YES;
+ };
+ name = Debug;
+ };
+ 32CF013E0C203C4900A8DC58 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INSTALL_PATH = "$(HOME)/bin";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = Test;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 494BD46D0C43ED0D00DB0A3A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+ );
+ FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"";
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INFOPLIST_FILE = "AFSMenuExtra-Info.plist";
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = AFSMenuExtra;
+ WRAPPER_EXTENSION = menu;
+ ZERO_LINK = YES;
+ };
+ name = Debug;
+ };
+ 494BD46E0C43ED0D00DB0A3A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+ );
+ FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INFOPLIST_FILE = "AFSMenuExtra-Info.plist";
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = AFSMenuExtra;
+ WRAPPER_EXTENSION = menu;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 49683EE80C34465D0093C7C8 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INSTALL_PATH = "$(HOME)/bin";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = afshlp;
+ ZERO_LINK = YES;
+ };
+ name = Debug;
+ };
+ 49683EE90C34465D0093C7C8 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INSTALL_PATH = "$(HOME)/bin";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = afshlp;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 4998A6880DC33BED00146652 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)";
+ ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386";
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INSTALL_PATH = /usr/local/bin;
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = LoginTimeDaemon;
+ };
+ name = Debug;
+ };
+ 4998A6890DC33BED00146652 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)";
+ ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386";
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ GCC_WARN_UNUSED_PARAMETER = NO;
+ INSTALL_PATH = /usr/local/bin;
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = LoginTimeDaemon;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DBD214808BA80EA00186707 /* Build configuration list for PBXNativeTarget "OpenAFS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DBD214908BA80EA00186707 /* Debug */,
+ 1DBD214A08BA80EA00186707 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DBD214C08BA80EA00186707 /* Build configuration list for PBXProject "OpenAFS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DBD214D08BA80EA00186707 /* Debug */,
+ 1DBD214E08BA80EA00186707 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 32CF013C0C203C4900A8DC58 /* Build configuration list for PBXNativeTarget "Test" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 32CF013D0C203C4900A8DC58 /* Debug */,
+ 32CF013E0C203C4900A8DC58 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 494BD46C0C43ED0D00DB0A3A /* Build configuration list for PBXNativeTarget "AFSMenuExtra" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 494BD46D0C43ED0D00DB0A3A /* Debug */,
+ 494BD46E0C43ED0D00DB0A3A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 49683EE70C34465D0093C7C8 /* Build configuration list for PBXNativeTarget "afshlp" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 49683EE80C34465D0093C7C8 /* Debug */,
+ 49683EE90C34465D0093C7C8 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4998A6A10DC33C2000146652 /* Build configuration list for PBXNativeTarget "LoginTimeDaemon" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4998A6880DC33BED00146652 /* Debug */,
+ 4998A6890DC33BED00146652 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 089C1669FE841209C02AAC07 /* Project object */;
+}
--- /dev/null
+//
+// PListManager.h
+// OpenAFS
+//
+// Created by Claudio Bisegni LNF - INFN on 25/04/08.
+// Copyright 2008 Infn. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+#define DELETE_IN_10_4 @"authinternal"
+#define DELETE_IN_10_5 @"builtin:authenticate,privileged"
+#define ADD_IN_PLIST @"builtin:krb5authnoverify,privileged"
+
+#define AUTH_FILE_DIR @"/etc"
+#define AUTH_FILE @"/etc/authorization"
+#define AUTH_FILE_BK @"/etc/authorization_bk"
+#define TMP_FILE @"/tmp/authorization"
+
+#define HOME_LAUNCHD_AGENT_FOLDER @"~/Library/LaunchAgents"
+#define AKLOG_LAUNCHD_CONTROL_FILE @"~/Library/LaunchAgents/it.infn.lnf.afslogintimedaemon.plist"
+#define AKLOG_LAUNCHD_TMP_CONTROL_FILE @"/tmp/it.infn.lnf.afslogintimedaemon.plist"
+#define LOGIN_TIME_DAEMON_NAME @"LoginTimeDaemon"
+
+#define LAUNCHD_DAEMON_FOLDER @"/Library/LaunchDaemons"
+#define AFS_STARTUP_TMP_CONTROL_FILE @"/tmp/it.infn.lnf.afsstartup.plist"
+#define AFS_STARTUP_CONTROL_FILE @"/Library/LaunchDaemons/it.infn.lnf.afsstartup.plist"
+
+/*!
+ @class PListManager
+ @abstract Utility class for modify the plist used by sistem for make login
+ @discussion <#(comprehensive description)#>
+*/
+
+@interface PListManager : NSObject {
+
+}
+/*!
+ @method krb5TiketAtLoginTime
+ @abstract Enable or disable the system to get kerberos ticket at login time
+ @discussion <#(comprehensive description)#>
+ */
++(void) krb5TiketAtLoginTime:(BOOL)enable;
+
+/*!
+ @method checkKrb5AtLoginTimeLaunchdEnable
+ @abstract check if the system is configured to ket krb5 ticket at login
+ @discussion <#(comprehensive description)#>
+ */
++(BOOL) checkKrb5AtLoginTimeLaunchdEnable;
+
+/*!
+ @method installLaunchdFile
+ @abstract Install the afs agent launchd config file
+ @discussion <#(comprehensive description)#>
+ */
++(void) installLaunchdFile:(BOOL)install resourcePath:(NSString*) rsrcPath;
+/*!
+ @method checkAklogAtLoginTimeLaunchdEnable
+ @abstract check if the user has installed or enabled the afs agent
+ @discussion <#(comprehensive description)#>
+ */
++(BOOL) checkAklogAtLoginTimeLaunchdEnable;
+
+/*!
+ @method installAfsStartupLaunchdFile
+ @abstract Install the afs daemon launchd config file for startup afs at boot
+ @discussion <#(comprehensive description)#>
+ */
++(void) manageAfsStartupLaunchdFile:(BOOL)enable afsStartupScript:(NSString*)afsStartupScript afsBasePath:(NSString*)afsBasePath afsdPath:(NSString*)afsdPath;
+@end
--- /dev/null
+//
+// PListManager.m
+// OpenAFS
+//
+// Created by Claudio Bisegni on 25/04/08.
+// Copyright 2008 Infn. All rights reserved.
+//
+
+#import "PListManager.h"
+#import "FileUtil.h"
+#import "TaskUtil.h"
+
+@implementation PListManager
+// -------------------------------------------------------------------------------
+// krb5TiketAtLoginTime:
+// -------------------------------------------------------------------------------
++(void) krb5TiketAtLoginTime:(BOOL)enable{
+ NSData *plistData = nil;
+ NSString *error = nil;
+ NSString *toRemove = nil;
+ NSString *toAdd = nil;
+ NSPropertyListFormat format;
+ NSMutableDictionary *plist = nil;
+ SInt32 osxMJVers = 0;
+ SInt32 osxMnVers = 0;
+ FileUtil *futil = nil;
+
+ //check system
+ if (Gestalt(gestaltSystemVersionMajor, &osxMJVers) != noErr || Gestalt(gestaltSystemVersionMinor, &osxMnVers) != noErr) @throw [NSException exceptionWithName:@"PListManager:krb5TiketAtLoginTime"
+ reason:@"Error getting system version"
+ userInfo:nil];
+ //get auth plist file
+ plistData = [NSData dataWithContentsOfFile:AUTH_FILE];
+
+ //Get plist for updating with NSPropertyListMutableContainersAndLeaves
+ plist = [NSPropertyListSerialization propertyListFromData:plistData
+ mutabilityOption:NSPropertyListMutableContainersAndLeaves
+ format:&format
+ errorDescription:&error];
+ if(!plist) {
+ @throw [NSException exceptionWithName:@"PListManager:krb5TiketAtLoginTime"
+ reason:error
+ userInfo:nil];
+
+ }
+
+ //Get "rights" dic
+ NSMutableDictionary *rightsDic = [plist objectForKey:@"rights"];
+
+ //Get "system.login.console" dic
+ NSMutableDictionary *loginConsoleDic = [rightsDic objectForKey:@"system.login.console"];
+
+ //Get "mechanisms" dic
+ NSMutableArray *mechanismsArray = [loginConsoleDic objectForKey:@"mechanisms"];
+ switch(osxMnVers){
+ case 4:
+ if(enable){
+ //remove
+ toRemove = DELETE_IN_10_4;
+ toAdd = ADD_IN_PLIST;
+ } else {
+ toRemove = ADD_IN_PLIST;
+ toAdd = DELETE_IN_10_4;
+ }
+ break;
+
+ case 5:
+ if(enable){
+ //remove
+ toRemove = DELETE_IN_10_5;
+ toAdd = ADD_IN_PLIST;
+ } else {
+ toRemove = ADD_IN_PLIST;
+ toAdd = DELETE_IN_10_5;
+ }
+
+ break;
+ }
+
+ //Make change
+ [mechanismsArray removeObject:toRemove];
+ [mechanismsArray addObject:toAdd];
+ //write plist
+ plistData = [NSPropertyListSerialization dataFromPropertyList:plist
+ format:NSPropertyListXMLFormat_v1_0
+ errorDescription:&error];
+ if(!plistData) {
+ @throw [NSException exceptionWithName:@"PListManager:krb5TiketAtLoginTime"
+ reason:error
+ userInfo:nil];
+
+ }
+ if(![plistData writeToFile:TMP_FILE atomically:NO]) {
+ @throw [NSException exceptionWithName:@"PListManager:krb5TiketAtLoginTime"
+ reason:@"Temp file write error"
+ userInfo:nil];
+
+ }
+
+ //now we can move the file
+ futil = [[FileUtil alloc] init];
+ if([futil startAutorization] == noErr) {
+ if(![[NSFileManager defaultManager] fileExistsAtPath:AUTH_FILE_BK]) {
+ //bk file doesn't exist so make it
+ [futil autorizedCopy:AUTH_FILE toPath:AUTH_FILE_BK];
+ }
+ // chmod on tmp file
+ [futil autorizedChown:TMP_FILE owner:@"root" group:@"wheel"];
+ //mov ethe file
+ [futil autorizedMoveFile:TMP_FILE toPath:AUTH_FILE_DIR];
+ }
+ [futil release];
+}
+
+// -------------------------------------------------------------------------------
+// checkAklogAtLoginTimeLaunchdEnable:
+// -------------------------------------------------------------------------------
++(BOOL) checkKrb5AtLoginTimeLaunchdEnable {
+ BOOL result = false;
+ NSString *authFileContent = nil;
+ authFileContent = [NSString stringWithContentsOfFile:AUTH_FILE];
+ if(authFileContent) {
+ result = [authFileContent rangeOfString:ADD_IN_PLIST].location != NSNotFound;
+ }
+ return result;
+}
+
+
+// -------------------------------------------------------------------------------
+// installLaunchdFile:
+// -------------------------------------------------------------------------------
++(void) installLaunchdFile:(BOOL)install resourcePath:(NSString*) rsrcPath {
+ NSData *plistData = nil;
+ NSMutableDictionary *launchdDic = nil;
+ NSString *error = nil;
+ NSString *daemonPath = [[rsrcPath stringByAppendingString:@"/"] stringByAppendingString:LOGIN_TIME_DAEMON_NAME];
+
+
+ if(![[NSFileManager defaultManager] fileExistsAtPath:[HOME_LAUNCHD_AGENT_FOLDER stringByExpandingTildeInPath]]) {
+ @throw [NSException exceptionWithName:@"PListManager:installLaunchdFile"
+ reason:@"The folder ~/Library/LaunchAgent doesn't exist!"
+ userInfo:[NSNumber numberWithInt:1]];
+ }
+
+ if(install) {
+ if(![[NSFileManager defaultManager] fileExistsAtPath:[AKLOG_LAUNCHD_CONTROL_FILE stringByExpandingTildeInPath]]) {
+ launchdDic = [[NSMutableDictionary alloc] init];
+
+ [launchdDic setObject:@"it.infn.lnf.afslogintimedaemon"
+ forKey:@"Label"];
+
+ [launchdDic setObject:@"Aqua"
+ forKey:@"LimitLoadToSessionType"];
+
+ [launchdDic setObject:[NSArray arrayWithObject:daemonPath]
+ forKey:@"ProgramArguments"];
+
+ [launchdDic setObject:[NSNumber numberWithBool:YES]
+ forKey:@"RunAtLoad"];
+
+ plistData = [NSPropertyListSerialization dataFromPropertyList:launchdDic
+ format:NSPropertyListXMLFormat_v1_0
+ errorDescription:&error];
+
+ if(!plistData) {
+ @throw [NSException exceptionWithName:@"PListManager:installLaunchdFile"
+ reason:error
+ userInfo:nil];
+
+ }
+
+ if(![plistData writeToFile:AKLOG_LAUNCHD_TMP_CONTROL_FILE atomically:NO]) {
+ @throw [NSException exceptionWithName:@"PListManager:installLaunchdFile"
+ reason:@"Temp file write error"
+ userInfo:nil];
+
+ }
+
+ //now we can move the file
+ [TaskUtil executeTaskSearchingPath:@"mv" args:[NSArray arrayWithObjects:AKLOG_LAUNCHD_TMP_CONTROL_FILE, [HOME_LAUNCHD_AGENT_FOLDER stringByExpandingTildeInPath], nil]];
+ }
+ } else {
+ // delete launchd configuration file
+ [TaskUtil executeTaskSearchingPath:@"rm" args:[NSArray arrayWithObjects:[AKLOG_LAUNCHD_CONTROL_FILE stringByExpandingTildeInPath], nil]];
+ }
+
+}
+
+// -------------------------------------------------------------------------------
+// checkAklogAtLoginTimeLaunchdEnable:
+// -------------------------------------------------------------------------------
++(BOOL) checkAklogAtLoginTimeLaunchdEnable {
+ BOOL result = [[NSFileManager defaultManager] fileExistsAtPath:[AKLOG_LAUNCHD_CONTROL_FILE stringByExpandingTildeInPath]];
+ return result;
+}
+
+// -------------------------------------------------------------------------------
+// installAfsStartupLaunchdFile:
+// -------------------------------------------------------------------------------
++(void) manageAfsStartupLaunchdFile:(BOOL)enable
+ afsStartupScript:(NSString*)afsStartupScript
+ afsBasePath:(NSString*)afsBasePath
+ afsdPath:(NSString*)afsdPath {
+ NSData *plistData = nil;
+ NSMutableDictionary *launchdDic = nil;
+ NSMutableArray *argDic = nil;
+ NSString *error = nil;
+ OSErr status = noErr;
+
+
+ if(![[NSFileManager defaultManager] fileExistsAtPath:[LAUNCHD_DAEMON_FOLDER stringByExpandingTildeInPath]]) {
+ @throw [NSException exceptionWithName:@"PListManager:installAfsStartupLaunchdFile"
+ reason:@"The folder /Library/LaunchDaemon doesn't exist!"
+ userInfo:nil];
+ }
+
+ status = [[AuthUtil shared] autorize];
+ if(status != noErr)@throw [NSException exceptionWithName:@"PListManager:installAfsStartupLaunchdFile"
+ reason:@"Autorization Error"
+ userInfo:nil];
+
+ if(enable) {
+ //Check first if the launchd configuration file for startup is present
+ if(![[NSFileManager defaultManager] fileExistsAtPath:[AFS_STARTUP_CONTROL_FILE stringByExpandingTildeInPath]]) {
+ launchdDic = [[NSMutableDictionary alloc] init];
+ //argDic = [[NSMutableArray alloc] init];
+
+ [launchdDic setObject:@"it.infn.lnf.afsstartup"
+ forKey:@"Label"];
+
+ //[argDic addObject:afsStartupScript];
+ //[argDic addObject:afsBasePath/*"/var/db/openafs"*/];
+ //[argDic addObject:afsdPath/*"/usr/sbin/afsd"*/];
+
+ [launchdDic setObject:[NSArray arrayWithObjects:afsStartupScript, afsBasePath, afsdPath, nil]
+ forKey:@"ProgramArguments"];
+
+ [launchdDic setObject:[NSNumber numberWithBool:YES]
+ forKey:@"RunAtLoad"];
+
+ plistData = [NSPropertyListSerialization dataFromPropertyList:launchdDic
+ format:NSPropertyListXMLFormat_v1_0
+ errorDescription:&error];
+
+ if(!plistData) {
+ @throw [NSException exceptionWithName:@"PListManager:installLaunchdFile"
+ reason:error
+ userInfo:nil];
+
+ }
+
+ if(![plistData writeToFile:AFS_STARTUP_TMP_CONTROL_FILE atomically:NO]) {
+ @throw [NSException exceptionWithName:@"PListManager:installLaunchdFile"
+ reason:@"Temp file write error"
+ userInfo:nil];
+
+ }
+
+ //now we can move the file
+ [TaskUtil executeTaskSearchingPath:@"mv" args:[NSArray arrayWithObjects:AFS_STARTUP_TMP_CONTROL_FILE, [LAUNCHD_DAEMON_FOLDER stringByExpandingTildeInPath], nil]];
+ }
+ }
+
+}
+
+@end
--- /dev/null
+/*
+ * Generated by class-dump 3.1.1.
+ *
+ * class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard.
+ */
+#import <AppKit/AppKit.h>
+
+@interface NSMenuExtra : NSStatusItem
+{
+ NSBundle *_bundle;
+ NSMenu *_menu;
+ NSView *_view;
+ float _length;
+ struct {
+ unsigned int customView:1;
+ unsigned int menuDown:1;
+ unsigned int reserved:30;
+ } _flags;
+ id _controller;
+}
+
+- (id)initWithBundle:(id)fp8;
+- (id)initWithBundle:(id)fp8 data:(id)fp12;
+- (void)willUnload;
+- (void)dealloc;
+- (id)bundle;
+- (float)length;
+- (void)setLength:(float)fp8;
+- (id)image;
+- (void)setImage:(id)fp8;
+- (id)alternateImage;
+- (void)setAlternateImage:(id)fp8;
+- (id)menu;
+- (void)setMenu:(id)fp8;
+- (id)toolTip;
+- (void)setToolTip:(id)fp8;
+- (id)view;
+- (void)setView:(id)fp8;
+- (BOOL)isMenuDown;
+- (void)drawMenuBackground:(BOOL)fp8;
+- (void)popUpMenu:(id)fp8;
+- (void)unload;
+- (id)statusBar;
+- (SEL)action;
+- (void)setAction:(SEL)fp8;
+- (id)target;
+- (void)setTarget:(id)fp8;
+- (id)title;
+- (void)setTitle:(id)fp8;
+- (id)attributedTitle;
+- (void)setAttributedTitle:(id)fp8;
+- (BOOL)isEnabled;
+- (void)setEnabled:(BOOL)fp8;
+- (void)setHighlightMode:(BOOL)fp8;
+- (BOOL)highlightMode;
+- (void)sendActionOn:(int)fp8;
+- (id)_initInStatusBar:(id)fp8 withLength:(float)fp12 withPriority:(int)fp16;
+- (id)_window;
+- (id)_button;
+- (void)_adjustLength;
+
+@end
+
+@interface NSMenuExtra (NSMenuExtraPrivate)
++ (unsigned int)defaultLength;
+- (void)setController:(id)fp8;
+- (id)controller;
+- (void)setMenuDown:(BOOL)fp8;
+- (float)defaultLength;
+- (id)accessibilityAttributeNames;
+- (id)accessibilityAttributeValue:(id)fp8;
+- (BOOL)accessibilityIsAttributeSettable:(id)fp8;
+- (void)accessibilitySetValue:(id)fp8 forAttribute:(id)fp12;
+- (id)accessibilityActionNames;
+- (id)accessibilityActionDescription:(id)fp8;
+- (void)accessibilityPerformAction:(id)fp8;
+- (BOOL)accessibilityIsIgnored;
+- (id)accessibilityHitTest:(struct _NSPoint)fp8;
+- (id)accessibilityFocusedUIElement;
+- (id)AXRole;
+- (id)AXRoleDescription;
+- (id)AXSubrole;
+- (id)AXDescription;
+- (id)AXChildren;
+- (id)AXParent;
+- (id)AXTitle;
+- (id)AXValue;
+- (id)AXEnabled;
+- (id)AXSelected;
+- (BOOL)isAXSelectedSettable;
+- (void)setAXSelected:(id)fp8;
+- (id)AXPosition;
+- (id)AXSize;
+- (void)performAXPress;
+- (void)performAXCancel;
+@end
+
+@interface NSDockExtra : NSObject
+{
+ NSBundle *_bundle;
+ unsigned int _id;
+ void *_nativeWindow;
+ id _controller;
+ struct {
+ unsigned int nativeWindow:1;
+ unsigned int reserved:31;
+ } _flags;
+ long _fReserved1;
+ long _fReserved2;
+ long _fReserved3;
+ long _fReserved4;
+}
+
+- (id)initWithBundle:(id)fp8;
+- (id)initWithBundle:(id)fp8 data:(id)fp12;
+- (void)dealloc;
+- (void)willUnload;
+- (id)bundle;
+- (id)menu;
+- (void)toggle;
+- (void)handleMenuCommand:(unsigned int)fp8 tag:(unsigned int)fp12;
+- (void)setDockLabel:(id)fp8;
+- (id)cocoaWindow;
+- (void *)carbonCGrafPtr;
+
+@end
+
+@interface NSDockExtra (NSDockExtraReallyPrivate)
+- (void)_releaseWindow;
+@end
+
+@interface NSDockExtra (NSDockExtraPrivate)
+- (id)initWithBundle:(id)fp8 identifier:(unsigned int)fp12 controller:(id)fp16;
+- (id)initWithBundle:(id)fp8 identifier:(unsigned int)fp12 data:(id)fp16 controller:(id)fp20;
+- (void *)cgWindow;
+@end
+
+@interface NSMutableArray (NSDockExtraMenu)
+- (void)insertItem:(id)fp8 atIndex:(int)fp12;
+- (void)addItem:(id)fp8;
+- (id)insertItemWithTitle:(id)fp8 action:(SEL)fp12 atIndex:(int)fp16;
+- (id)addItemWithTitle:(id)fp8 action:(SEL)fp12;
+- (void)removeItemAtIndex:(int)fp8;
+- (void)setSubmenu:(id)fp8 forItem:(id)fp12;
+- (int)indexOfItemWithTitle:(id)fp8;
+- (int)indexOfItemWithAction:(SEL)fp8;
+- (id)itemWithTitle:(id)fp8;
+- (id)itemWithAction:(SEL)fp8;
+@end
+
+@interface NSMutableDictionary (NSDockExtraMenuItem)
++ (id)separatorItem;
++ (id)itemWithTitle:(id)fp8 action:(SEL)fp12;
+- (BOOL)hasSubmenu;
+- (void)setSubmenu:(id)fp8;
+- (id)submenu;
+- (void)setSubmenuSelectable:(BOOL)fp8;
+- (BOOL)isSubmenuSelectable;
+- (void)setTitle:(id)fp8;
+- (id)title;
+- (BOOL)isSeparatorItem;
+- (void)setEnabled:(BOOL)fp8;
+- (BOOL)isEnabled;
+- (void)setAction:(SEL)fp8;
+- (SEL)action;
+- (void)setTag:(int)fp8;
+- (int)tag;
+- (void)setMark:(int)fp8;
+- (int)mark;
+- (void)setMarkChar:(id)fp8;
+- (id)markChar;
+- (void)setHeader:(BOOL)fp8;
+- (BOOL)isHeader;
+- (void)setStyle:(int)fp8;
+- (int)style;
+- (void)setIndent:(unsigned short)fp8;
+- (unsigned short)indent;
+- (void)setDynamicMask:(int)fp8;
+- (int)dynamicMask;
+- (void)removeDynamicMask;
+- (void)setDynamicBreak:(BOOL)fp8;
+- (BOOL)dynamicBreak;
+- (void)setSystemIcon:(unsigned int)fp8;
+- (unsigned int)systemIcon;
+- (void)setResourceIcon:(id)fp8;
+- (id)resourceIcon;
+- (void)setIconEnabled:(BOOL)fp8;
+- (BOOL)isIconEnabled;
+@end
+
+@interface NSApplicationDockExtra : NSDockExtra
+{
+}
+
+- (void)applicationLaunched;
+- (void)applicationDied;
+- (void)setDockLabel:(id)fp8;
+
+@end
+
+@interface NSMenuExtraView : NSView
+{
+ NSMenu *_menu;
+ NSMenuExtra *_menuExtra;
+ NSImage *_image;
+ NSImage *_alternateImage;
+}
+
+- (id)initWithFrame:(NSRect)fp8 menuExtra:(id)fp24;
+- (void)dealloc;
+- (void)setMenu:(id)fp8;
+- (id)image;
+- (void)setImage:(id)fp8;
+- (id)alternateImage;
+- (void)setAlternateImage:(id)fp8;
+- (void)drawRect:(NSRect)fp8;
+- (void)mouseDown:(id)fp8;
+
+@end
+
--- /dev/null
+//
+// TaskUtil.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 25/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#include <Security/Authorization.h>
+#include <Security/AuthorizationTags.h>
+
+@interface TaskUtil : NSObject {
+}
++(NSString*) searchExecutablePath:(NSString*)unixCommand;
++(NSString*) executeTaskSearchingPath:(NSString*)unixCommand args:(NSArray*)args;
++(NSString*) executeTask:(NSString*) taskName arguments:(NSArray *)args;
++(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args authExtForm:(NSData*)auth;
+@end
--- /dev/null
+//
+// TaskUtil.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 25/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "TaskUtil.h"
+
+
+@implementation TaskUtil
+
+// -------------------------------------------------------------------------------
+// executeTaskSearchingPath:
+// -------------------------------------------------------------------------------
++(NSString*) executeTaskSearchingPath:(NSString*)unixCommand args:(NSArray*)args
+{
+ NSString *commResult = nil;
+ NSString *commPath = [self searchExecutablePath:unixCommand];
+ if(commPath != nil){
+ commResult = [self executeTask:commPath
+ arguments:args];
+ }
+ return commResult;
+}
+
+// -------------------------------------------------------------------------------
+// executeTask:
+// -------------------------------------------------------------------------------
++(NSString*) searchExecutablePath:(NSString*)unixCommand
+{
+ NSString *commPath = [self executeTask:@"/usr/bin/which" arguments:[NSArray arrayWithObjects:unixCommand, nil]];
+ return commPath;
+}
+
+// -------------------------------------------------------------------------------
+// executeTask:
+// -------------------------------------------------------------------------------
++(NSString*) executeTask:(NSString*) taskName arguments:(NSArray *)args{
+ NSLog(taskName);
+ NSString *result = nil;
+ int status = 0;
+ NSFileHandle *file = nil;
+ NSDictionary *environment = [NSDictionary dictionaryWithObjectsAndKeys: @"$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin",@"PATH",nil];
+
+ NSPipe *pipe = [NSPipe pipe];
+ NSTask *taskToRun = [[NSTask alloc] init];
+
+ [taskToRun setLaunchPath: taskName];
+ [taskToRun setArguments: args];
+ [taskToRun setEnvironment:environment];
+ [taskToRun setStandardOutput: pipe];
+ file = [pipe fileHandleForReading];
+ [taskToRun launch];
+ [taskToRun waitUntilExit];
+ status = [taskToRun terminationStatus];
+ if (status == 0){
+ NSLog(@"Task succeeded.");
+ NSData *data = [file readDataToEndOfFile];
+ // remove the \n character from unix command
+ if([data length] > 0){
+ NSData *realData = [NSData dataWithBytes:[data bytes]
+ length:[data length]-1];
+
+ [taskToRun release];
+ result = [[NSString alloc] initWithData: realData
+ encoding: NSUTF8StringEncoding];
+ NSLog(result);
+ }
+ } else {
+ NSLog(@"Task failed.");
+ }
+ return [result autorelease];
+}
+
+
+// -------------------------------------------------------------------------------
+// executeTask:
+// -------------------------------------------------------------------------------
++(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args authExtForm:(NSData*)auth {
+ NSLog(taskName);
+ NSString *result = nil;
+ int status = 0;
+ NSFileHandle *file = nil;
+ NSDictionary *environment = [NSDictionary dictionaryWithObjectsAndKeys: @"$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin",@"PATH",nil];
+
+ NSPipe *pipe = [NSPipe pipe];
+ NSPipe *pipeIn = [NSPipe pipe];
+ NSTask *taskToRun = [[NSTask alloc] init];
+
+ [taskToRun setLaunchPath: taskName];
+ [taskToRun setArguments: args];
+ [taskToRun setEnvironment:environment];
+ [taskToRun setStandardOutput: pipe];
+ [taskToRun setStandardInput: pipeIn];
+ file = [pipe fileHandleForReading];
+ //Write to standard in
+ [taskToRun launch];
+
+ NSFileHandle* taskInput = [[ taskToRun standardInput ] fileHandleForWriting ];
+ [taskInput writeData:auth];
+ [taskToRun waitUntilExit];
+ status = [taskToRun terminationStatus];
+ if (status == 0){
+ NSLog(@"Task succeeded.");
+ NSData *data = [file readDataToEndOfFile];
+ // remove the \n character from unix command
+ if([data length] > 0){
+ NSData *realData = [NSData dataWithBytes:[data bytes]
+ length:[data length]-1];
+
+ [taskToRun release];
+ result = [[NSString alloc] initWithData: realData
+ encoding: NSUTF8StringEncoding];
+ NSLog(result);
+ [result release];
+ }
+ } else {
+ NSLog(@"Task failed.");
+ }
+
+ return status;
+}
+
+@end
--- /dev/null
+
+#import "AFSPropertyManager.h"
+#import "FileUtil.h"
+#import "TaskUtil.h"
+#import "global.h"
+
+int CoreMenuExtraGetMenuExtra(CFStringRef identifier, void *menuExtra);
+int CoreMenuExtraAddMenuExtra(CFURLRef path, int position, int whoCares, int whoCares2, int whoCares3, int whoCares4);
+int CoreMenuExtraRemoveMenuExtra(void *menuExtra, int whoCares);
+void printNSArray(NSArray *array);
+
+int main(int argc, char *argv[])
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ /*AFSPropertyManager *propMan=[[AFSPropertyManager alloc] initWithAfsPath:@"/var/db/openafs"];
+ [propMan loadConfiguration];
+ [propMan saveCacheConfigurationFiles:true];
+ [propMan release];*/
+
+ //[AFSPropertyManager aklog];
+
+ NSAlert *alert = [[NSAlert alloc] init];
+ [alert setMessageText:@"test"];
+ [alert addButtonWithTitle:@"Yes"];
+ [alert addButtonWithTitle:@"No"];
+ int result = [alert runModal];
+
+ [pool release];
+}
+
+void printNSArray(NSArray *array) {
+ for(int idx = 0; idx < [array count]; idx++) {
+ NSLog([[array objectAtIndex:idx] description]);
+ }
+}
\ No newline at end of file
--- /dev/null
+//
+// TokenCredentialController.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 28/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface TokenCredentialController : NSObject {
+ @public
+ id credentialPanel;
+
+ @protected
+ id afsCommanderPref;
+ id textEditUserName;
+ id textEditPassword;
+
+ BOOL taken;
+ NSString *uName;
+ NSString *uPwd;
+
+}
+
+- (IBAction) getToken:(id) sender;
+- (IBAction) closePanel:(id) sender;
+- (BOOL) takenToken;
+- (NSString*) uName;
+- (NSString*) uPwd;
+@end
--- /dev/null
+//
+// TokenCredentialController.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 28/06/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "TokenCredentialController.h"
+#import "TaskUtil.h"
+
+@implementation TokenCredentialController
+// -------------------------------------------------------------------------------
+// awakeFromNib:
+// -------------------------------------------------------------------------------
+- (void)awakeFromNib
+{
+ NSLog(@"awakeFromNib");
+}
+
+
+// -------------------------------------------------------------------------------
+// getToken:
+// -------------------------------------------------------------------------------
+- (IBAction) getToken:(id) sender
+{
+ uName = [((NSTextField*) textEditUserName) stringValue];
+ uPwd = [((NSTextField*) textEditPassword) stringValue];
+ if(uName == @"" || uPwd == @"") return;
+ taken = YES;
+ [NSApp endSheet:credentialPanel];
+}
+
+
+// -------------------------------------------------------------------------------
+// closePanel:
+// -------------------------------------------------------------------------------
+- (IBAction) closePanel:(id) sender
+{
+ taken = NO;
+ [NSApp endSheet:credentialPanel];
+}
+
+
+// -------------------------------------------------------------------------------
+// takenToken:
+// -------------------------------------------------------------------------------
+- (BOOL) takenToken
+{
+ return taken;
+}
+
+// -------------------------------------------------------------------------------
+// takenToken:
+// -------------------------------------------------------------------------------
+- (NSString*) uName
+{
+ return uName;
+}
+
+// -------------------------------------------------------------------------------
+// takenToken:
+// -------------------------------------------------------------------------------
+- (NSString*) uPwd
+{
+ return uPwd;
+}
+
+@end
--- /dev/null
+//
+// ViewUtility.h
+// AFSCommander
+//
+// Created by Claudio Bisegni on 25/12/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface ViewUtility : NSObject {
+
+}
++(void) enbleDisableControlView: (NSView*)parentView controlState:(BOOL)controlState;
+@end
--- /dev/null
+//
+// ViewUtility.m
+// AFSCommander
+//
+// Created by Claudio Bisegni on 25/12/07.
+// Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
+//
+
+#import "ViewUtility.h"
+
+
+@implementation ViewUtility
++(void) enbleDisableControlView:(NSView*)parentView
+ controlState:(BOOL)controlState
+{
+ if(!parentView) return;
+ NSArray *views = [parentView subviews];
+
+ for(int idx = 0; idx < [views count]; idx++)
+ {
+ NSObject *obj = [views objectAtIndex:idx];
+ if([obj respondsToSelector:@selector(setEnabled:)])
+ {
+ //[obj setEnabled:controlState];
+ [obj performSelector:@selector(setEnabled:) withObject:controlState];
+ }
+ }
+
+}
+@end
--- /dev/null
+//
+// afshlp.m
+// AFSCommander
+//
+// Created by Claudio on 28/06/07.
+//
+
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <Security/Authorization.h>
+#include <Security/AuthorizationTags.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/fcntl.h>
+#include <sys/errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <asl.h>
+#include <sys/event.h>
+#import "TaskUtil.h"
+#import "AuthUtil.h"
+#import "PListManager.h"
+ void stopAfs(int argc, char *argv[]);
+ void getPath(char **selfPathPtr);
+ void selfRepair(char *selfPath);
+ void runWithSelfRepair(char *selfPath,int argc, char *argv[]);
+ void runCommand(int argc, char *argv[]);
+
+int main(int argc, char *argv[])
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ char *selfPath;
+
+ NSLog(@"num of arguments %d", argc);
+ int status = [[AuthUtil shared] autorize];
+ if(status != noErr) exit(-1);
+
+ // Get the path to the tool's executable
+ getPath(&selfPath);
+
+ //selfRepair(selfPath);
+ // All done with the executable path
+ if(selfPath) free(selfPath);
+
+ // Now do the real work of running the command.
+ runCommand(argc, argv);
+ [[AuthUtil shared] deautorize];
+ [pool release];
+
+ return 0;
+}
+
+//
+void runCommand(int argc, char *argv[])
+{
+ NSString *cmdString = [NSString stringWithCString:(const char *)argv[1] encoding:NSUTF8StringEncoding];
+
+ if(argc == 4 && [cmdString rangeOfString:@"stop_afs"].location!=NSNotFound ){
+ NSLog(@"Stop afs from helper");
+ stopAfs(argc, argv);
+ } else if(argc == 4 && [cmdString rangeOfString:@"start_afs"].location!=NSNotFound){
+ NSLog(@"Start afs from helper");
+ setuid(0);
+ const char *startArgs[] = {argv[2], argv[3], 0L};
+ [[AuthUtil shared] execUnixCommand:argv[1]
+ args:startArgs
+ output:nil];
+ } else if(argc == 4 && [cmdString rangeOfString:@"enable_krb5_startup"].location!=NSNotFound) {
+ NSLog(@"Manage KRB5 at login time with option %s from helper", argv[2]);
+ setuid(0);
+ int arg2 = atoi(argv[2]);
+ [PListManager krb5TiketAtLoginTime:[[NSNumber numberWithInt:arg2] boolValue]];
+
+ } else if(argc == 5 && [cmdString rangeOfString:@"start_afs_at_startup"].location!=NSNotFound){
+ setuid(0);
+ NSLog(@"Manage start_afs_at_startup with option %s from helper", argv[2]);
+ [PListManager manageAfsStartupLaunchdFile:YES
+ afsStartupScript:[NSString stringWithCString:argv[2]]
+ afsBasePath:[NSString stringWithCString:argv[4]]
+ afsdPath:[NSString stringWithCString:argv[3]]];
+ }
+}
+
+void stopAfs(int argc, char *argv[])
+{
+
+
+ setuid(0);
+ const char *umountArgs[] = {"-f", "/afs", 0L};
+ [[AuthUtil shared] execUnixCommand:"/sbin/umount"
+ args:umountArgs
+ output:nil];
+
+ const char *afsdArgs[] = {"-shutdown", 0L};
+ [[AuthUtil shared] execUnixCommand:argv[3]
+ args:afsdArgs
+ output:nil];
+
+ const char *kernelExtArgs[] = {argv[2], 0L};
+ [[AuthUtil shared] execUnixCommand:"/sbin/kextunload"
+ args:kernelExtArgs
+ output:nil];
+
+ [[AuthUtil shared] deautorize];
+}
+
+
+// Code to get the path to the executable using _NSGetExecutablePath.
+void getPath(char **selfPathPtr)
+{
+ uint32_t selfPathSize = MAXPATHLEN;
+ if(!(*selfPathPtr = malloc(selfPathSize)))
+ {
+ exit(-1);
+ }
+ if(_NSGetExecutablePath(*selfPathPtr, &selfPathSize) == -1)
+ {
+ // Try reallocating selfPath with the size returned by the function.
+ if(!(*selfPathPtr = realloc(*selfPathPtr, selfPathSize + 1)))
+ {
+ NSLog(@"Could not allocate memory to hold executable path.");
+ exit(-1);
+ }
+ if(_NSGetExecutablePath(*selfPathPtr, &selfPathSize) != 0)
+ {
+ NSLog(@"Could not get executable path.");
+ exit(-1);
+ }
+ }
+}
+
+// Self-repair code. Found somehwere in internet
+void selfRepair(char *selfPath)
+{
+ struct stat st;
+ int fdTool;
+ printf("selfRepair");
+
+// [[AuthUtil shared] autorize];
+
+ // Open tool exclusively, noone can touch it when we work on it, this idea i kepped somewhere in internet
+ fdTool = open(selfPath, O_NONBLOCK | O_RDONLY | O_EXLOCK, 0);
+
+ if(fdTool == -1)
+ {
+ NSLog(@"Open Filed: %d.", errno);
+ exit(-1);
+ }
+
+ if(fstat(fdTool, &st))
+ {
+ NSLog(@"fstat failed.");
+ exit(-1);
+ }
+
+ if(st.st_uid != 0)
+ {
+ fchown(fdTool, 0, st.st_gid);
+ } else NSLog(@"st_uid = 0");
+
+ // Disable group and world writability and make setuid root.
+ fchmod(fdTool, (st.st_mode & (~(S_IWGRP | S_IWOTH))) | S_ISUID);
+
+ close(fdTool);
+
+ NSLog(@"Self-repair done.");
+}
+
+
+// Code to execute the tool in self-repair mode.
+void runWithSelfRepair(char *selfPath, int argc, char *argv[])
+{
+ int status;
+ int pid;
+
+
+ // Make the qargs array for passing to child the same args of father
+ const char *arguments = {argv[1], argv[2], argv[3], "--self-repair", 0L};
+
+ // Get the privileged AuthorizationRef
+ [[AuthUtil shared] autorize];
+ [[AuthUtil shared] execUnixCommand:selfPath
+ args:arguments
+ output:nil];
+
+ pid = wait(&status);
+ if(pid == -1 || !WIFEXITED(status))
+ {
+ NSLog(@"Error returned from wait().");
+ exit(-1);
+ }
+
+ // Exit with the same exit code as the self-repair child
+ exit(WEXITSTATUS(status));
+}
\ No newline at end of file
--- /dev/null
+//
+// afsltd.m
+// OpenAFS
+//
+// Created by Claudio Bisegni LNF-INFN on 26/04/08.
+// Copyright 2008 Infn. All rights reserved.
+//
+#import "global.h"
+#import "AFSPropertyManager.h"
+#include <unistd.h>
+
+BOOL useAklog = NO;
+NSString *afsSysPath = nil;
+AFSPropertyManager *propManager = nil;
+
+void readPreferenceFile();
+void makeAFSPropertyManager();
+void callAKlog();
+
+int main(int argc, char *argv[])
+{
+
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSLog(@"Start AFS Preference Daemon");
+ // read the preference file
+ readPreferenceFile();
+
+ //check if base afs path is set
+ if(!afsSysPath) return 1;
+
+ //Sleep ten seconds
+ sleep(10);
+
+ //make the afs property manager and load all afs configuration
+ makeAFSPropertyManager();
+
+ //call aklog
+ callAKlog();
+ if(propManager) [propManager release];
+
+ [pool release];
+ return 0;
+}
+
+// -------------------------------------------------------------------------------
+// readPreferenceFile:
+// -------------------------------------------------------------------------------
+void readPreferenceFile()
+{
+ // read the preference for afs path
+ afsSysPath = (NSString*)CFPreferencesCopyAppValue((CFStringRef)PREFERENCE_AFS_SYS_PAT, (CFStringRef)afsCommanderID);
+
+
+ // read the preference for aklog use
+ NSNumber *useAklogPrefValue = (NSNumber*)CFPreferencesCopyAppValue((CFStringRef)PREFERENCE_USE_AKLOG, (CFStringRef)afsCommanderID);
+ useAklog = [useAklogPrefValue boolValue];
+
+}
+
+// -------------------------------------------------------------------------------
+// makeAFSPropertyManager:
+// -------------------------------------------------------------------------------
+void makeAFSPropertyManager() {
+ if(propManager) {
+ [propManager release];
+ }
+ propManager = [[AFSPropertyManager alloc] initWithAfsPath:afsSysPath];
+ [propManager loadConfiguration];
+}
+
+// -------------------------------------------------------------------------------
+// makeAFSPropertyManager:
+// -------------------------------------------------------------------------------
+void callAKlog() {
+ //call aklog for all selected cell, but first check if afs is up
+ if([propManager checkAfsStatus] && useAklog) {
+ [propManager getTokens:false
+ usr:nil
+ pwd:nil];
+
+ // send notification to
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * global.h
+ * AFSCommander
+ *
+ * Created by Claudio on 13/07/07.
+ * Copyright 2007 INFN. All rights reserved.
+ *
+ */
+
+#define kMenuBarHeight 22
+#define TOKENS_REFRESH_TIME_IN_SEC 60
+
+// Localized string
+#define kDevelopInfo NSLocalizedStringFromTableInBundle(@"DevelopInfo",nil,[NSBundle bundleForClass:[self class]],@"DevelopInfo")
+#define kConfigurationSaved NSLocalizedStringFromTableInBundle(@"ConfigurationSaved",nil,[NSBundle bundleForClass:[self class]],@"ConfigurationSaved")
+#define kSavedCacheConfiguration NSLocalizedStringFromTableInBundle(@"SavedCacheConfiguration",nil,[NSBundle bundleForClass:[self class]],@"SavedCacheConfiguration")
+#define kAfsOn NSLocalizedStringFromTableInBundle(@"AfsOn",nil,[NSBundle bundleForClass:[self class]],@"AfsOn")
+#define kAfsOff NSLocalizedStringFromTableInBundle(@"AfsOff",nil,[NSBundle bundleForClass:[self class]],@"AfsOff")
+#define kAfsButtonShutdown NSLocalizedStringFromTableInBundle(@"AfsButtonShutdown",nil,[NSBundle bundleForClass:[self class]],@"AfsButtonShutdown")
+#define kAfsButtonStartup NSLocalizedStringFromTableInBundle(@"AfsButtonStartup",nil,[NSBundle bundleForClass:[self class]],@"AfsButtonStartup")
+#define kNewCellName NSLocalizedStringFromTableInBundle(@"NewCellName",nil,[NSBundle bundleForClass:[self class]],@"NewCellName")
+#define kNewCellComment NSLocalizedStringFromTableInBundle(@"NewCellComment",nil,[NSBundle bundleForClass:[self class]],@"NewCellComment")
+#define kMenuLogin NSLocalizedStringFromTableInBundle(@"MenuLogin",nil,[NSBundle bundleForClass:[self class]],@"MenuLogin")
+#define kMenuUnlog NSLocalizedStringFromTableInBundle(@"MenuUnlog",nil,[NSBundle bundleForClass:[self class]],@"MenuUnlog")
+#define kBadAfsRootMountPoint NSLocalizedStringFromTableInBundle(@"BadAfsRootMountPoint",nil,[NSBundle bundleForClass:[self class]],@"BadAfsRootMountPoint")
+#define kDoYouWantCreateTheDirectory NSLocalizedStringFromTableInBundle(@"DoYouWantCreateTheDirectory",nil,[NSBundle bundleForClass:[self class]],@"DoYouWantCreateTheDirectory")
+#define kDirectoryCreated NSLocalizedStringFromTableInBundle(@"DirectoryCreated",nil,[NSBundle bundleForClass:[self class]],@"DirectoryCreated")
+#define kErrorCreatingDirectory NSLocalizedStringFromTableInBundle(@"ErrorCreatingDirectory",nil,[NSBundle bundleForClass:[self class]],@"ErrorCreatingDirectory")
+#define kErrorGettongSystemVersion NSLocalizedString(@"ErrorGettongSystemVersion",@"ErrorGettongSystemVersion");
+
+
+// PREFERENCE KEY
+#define PREFERENCE_AFS_SYS_PAT @"PREFERENCE_AFS_SYS_PAT"
+#define PREFERENCE_AFS_SYS_PAT_STATIC @"/var/db/openafs"
+#define PREFERENCE_USE_AKLOG @"PREFERENCE_USE_AKLOG"
+#define PREFERENCE_START_AFS_AT_STARTUP @"PREFERENCE_START_AFS_AT_STARTUP"
+
+// AFSMENUEXTRA INFO
+#define kAFSMenuExtra [NSURL fileURLWithPath:[[self bundle] pathForResource:@"AFSMenuExtra" ofType:@"menu" inDirectory:@""]]
+#define kMenuCrakerMenuExtra [NSURL fileURLWithPath:[[self bundle] pathForResource:@"MenuCracker" ofType:@"menu" inDirectory:@""]]
+#define kAFSMenuExtraID @"it.infn.lnf.network.AFSMenuExtra"
+#define kMenuCrakerMenuExtraID @"net.sourceforge.menucracker2"
+
+
+//Application id
+#define afsCommanderID @"it.infn.lnf.network.openafs"
+// Changed preference notification key
+#define kPrefChangeNotification @"preference_changed"
+//KLog menuextra window close
+#define kLogWindowClosed @"klog_window_closed"
+//Fired when some work as appened in AFSMenuExtra
+#define kMenuExtraEventOccured @"menu_extra_event_occured"
+// Changed preference notification key
+#define kMExtraClosedNotification @"preference_changed"
+// Update MenuExtra AfsState notification key
+#define kMExtraAFSStateChange @"menu_extra_afs_state_change"
+
--- /dev/null
+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf270
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\vieww17520\viewh9920\viewkind0
+\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\sl360\slmult1\pardirnatural
+
+\f0\fs24 \cf0 AFSCommander \CocoaLigature0 0.9b\CocoaLigature1 \
+developed by Claudio Bisegni\
+Frascati National Laboratory\
+National Institute of Nuclear Physics, Italy\
+For MenuExtra is used MenuCracker you can get it at http://sourceforge.net/projects/menucracker}
\ No newline at end of file
--- /dev/null
+#!/bin/sh
+
+# start_afs.sh
+#
+#
+# Created by Claudio Bisegni on 24/06/07.
+# Copyright 2007 INFN. All rights reserved.
+#
+# Portions Copyright (c) 2003 Apple Computer, Inc.
+#
+# Updated to match standard service scripts
+# Phil Holland <hollandp@umich.edu>
+
+. /etc/rc.common
+
+CheckForNetwork
+
+VICEETC=$1/etc
+AFSD=$2
+
+CONFIG=$VICEETC/config
+AFSDOPT=$CONFIG/afsd.options
+PACKAGE=$CONFIG/package.options
+VERBOSE=
+if [ -x /usr/sbin/kextstat ]; then KMODSTAT=/usr/sbin/kextstat; fi
+if [ -x /usr/sbin/kmodstat ]; then KMODSTAT=/usr/sbin/kmodstat; fi
+
+
+if [ -f $CONFIG/afs.conf ]; then
+ . $CONFIG/afs.conf
+fi
+
+# Check this file second so that if users have altered the file, it will
+# override the default options
+if [ -f $AFSDOPT ]; then
+ OPTIONS=`cat $AFSDOPT`
+fi
+
+ echo "Starting OpenAFS"
+
+ if [ -z "$OPTIONS" ] || [ "$OPTIONS" = "AUTOMATIC" ] ; then
+ AFSD_OPTIONS="$VERBOSE"
+ else
+ AFSD_OPTIONS="$OPTIONS $VERBOSE"
+ fi
+
+ if [ "${NETWORKUP}" = "-NO-" ]; then
+ echo $AFSD_OPTIONS | grep -e '-dynroot' || exit
+ fi
+
+# Need the commands ps, awk, kill, sleep
+ PATH=${PATH}${PATH:+:}/sbin:/bin:/usr/bin
+
+ if [ -d $VICEETC/afs.kext ]; then
+ echo "Loading AFS kernel extensions"
+ kextload $VICEETC/afs.kext
+ else
+ echo "$VICEETC/afs.kext does not exist. Skipping AFS startup."
+ exit 1
+ fi
+
+ if $KMODSTAT | perl -e 'exit not grep /openafs/, <>' ; then
+ :
+ else
+ echo "AFS kernel extensions failed to initialize. Skipping AFS startup."
+ exit 1
+ fi
+
+#
+# Check that all of the client configuration files exist
+#
+
+ for file in $AFSD $VICEETC/cacheinfo \
+ $VICEETC/ThisCell $VICEETC/CellServDB
+ do
+ if [ ! -f ${file} ]; then
+ echo "${file} does not exist. Not starting AFS client."
+ exit 1
+ fi
+ done
+
+#
+# Check that the root directory for AFS (/afs)
+# and the cache directory (/usr/vice/cache) both exist
+#
+
+ for dir in `awk -F: '{print $1, $2}' $VICEETC/cacheinfo`
+ do
+ if [ ! -d ${dir} ]; then
+ echo "${dir} does not exist. Not starting AFS client."
+ exit 2
+ fi
+ done
+
+ echo "Starting afsd"
+ $AFSD $AFSD_OPTIONS
+
+#
+# From /var/db/openafs/etc/config/afs.conf, call a post-init function or
+# command if it's been defined
+#
+ $AFS_POST_INIT
+
+#
+# Call afssettings (if it exists) to set customizable parameters
+#
+ if [ -x $CONFIG/afssettings ]; then
+ sleep 2
+ $CONFIG/afssettings
+ fi
+
--- /dev/null
+#!/bin/sh
+
+# stop_afs.sh
+#
+#
+# Created by Claudio Bisegni on 24/06/07.
+# Copyright 2007 INFN. All rights reserved.
+
+VICEETC=$1/etc
+AFSD=$2
+echo "Stopping AFS"
+
+echo "Unmounting /afs"
+umount -f /afs 2>&1 > /dev/console
+
+echo "Shutting down afsd processes"
+$AFSD -shutdown 2>&1 > /dev/console
+
+echo "Unloading AFS kernel extensions"
+kextunload $VICEETC/afs.kext 2>&1 > /dev/console
+