From 377ec372573174a12643c76092c2079a3b8a57f2 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 30 Mar 2013 22:57:43 +0100 Subject: [PATCH 001/234] Fixed: In CPTrace, fixed error when an argument was not a cappuccino object. Arguments such as CGPoint, CGRect and functions are now correctly printed to the console. --- Tests/Manual/CPTrace.j | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Tests/Manual/CPTrace.j b/Tests/Manual/CPTrace.j index fa326fb2b..46b9c00a4 100644 --- a/Tests/Manual/CPTrace.j +++ b/Tests/Manual/CPTrace.j @@ -66,7 +66,7 @@ var objj_message = function(receiver, selector, args) rdesc = receiver ? [receiver description] : ""; while (c--) - sel.splice(c + 1, 0, ":" + [args[c] description] + " "); + sel.splice(c + 1, 0, ":" + Description(args[c], c) + " "); var joined = sel.join(""); @@ -76,6 +76,26 @@ var objj_message = function(receiver, selector, args) return ("[" + rdesc + " " + joined + "]"); }; +function Description(object, argn) +{ + if (object.isa) + return [object description]; + + var type = typeof(object); + + if (type === "function") + return "Function"; + else if (type !== "object") + return "Arg" + argn; + + var desc = []; + + for(var p in object) + desc.push(p + ":" + object[p]); + + return ("{" + desc.join(",") + "}"); +} + function CPTrace(aClassName, aSelector, displayFunction) { var aclass = CPClassFromString(aClassName); From 714da0ab3b5e8785c7084299b3c0a016b0fa3a8b Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 16 Mar 2013 17:35:27 +0100 Subject: [PATCH 002/234] New: -enumerateAvailableViewsUsingBlock: and private -_enumerateViewsInRows:columns:usingBlock: and -_enumerateViewsInRows:tableColumns:usingBlock: methods. New: preparedViewAtColumn:row: These methods allow to enumerate visible data views or data views in specified columns and rows. -enumerateAvailableViewsUsingBlock: is the counterpart of cocoa's -enumerateAvailableRowViewsUsingBlock: except that it enumerates data views instead of CPTableRowView and the block has an additional column parameter. This commit reverses the way views are stored and accessed in the table view: rows>columns instead of columns>rows. Applied the second method where it is relevant, making the code more compact and readable. --- AppKit/CPTableView.j | 603 ++++++++---------- Tests/Manual/CPTrace.j | 2 +- .../TableTest/TableCibTest/AppController.j | 9 + .../TableTest/ViewBasedCib/AppController.j | 9 + 4 files changed, 286 insertions(+), 337 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index e03b78802..cee884b5c 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -188,7 +188,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; CPIndexSet _exposedRows; CPIndexSet _exposedColumns; - Object _dataViewsForTableColumns; + Object _dataViewsForRows; Object _cachedDataViews; CPDictionary _archivedDataViews; Object _unavailable_custom_cibs; @@ -378,7 +378,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; _numberOfHiddenColumns = 0; _objectValues = { }; - _dataViewsForTableColumns = { }; + _dataViewsForRows = { }; _numberOfRows = 0; _exposedRows = [CPIndexSet indexSet]; _exposedColumns = [CPIndexSet indexSet]; @@ -1284,40 +1284,10 @@ NOT YET IMPLEMENTED */ - (void)_updateHighlightWithOldRows:(CPIndexSet)oldRows newRows:(CPIndexSet)newRows { - var firstExposedRow = [_exposedRows firstIndex], - exposedLength = [_exposedRows lastIndex] - firstExposedRow + 1, - deselectRows = [], - selectRows = [], - deselectRowIndexes = [oldRows copy], - selectRowIndexes = [newRows copy]; + [self _enumerateViewsInRows:oldRows columns:_exposedColumns usingBlock:_BlockDeselectView]; - [deselectRowIndexes removeMatches:selectRowIndexes]; - [deselectRowIndexes getIndexes:deselectRows maxCount:-1 inIndexRange:CPMakeRange(firstExposedRow, exposedLength)]; - [selectRowIndexes getIndexes:selectRows maxCount:-1 inIndexRange:CPMakeRange(firstExposedRow, exposedLength)]; - - var showsSelection = _selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone, - selectors = [@selector(unsetThemeState:), @selector(setThemeState:)], - selectInfo = [ - { rows:deselectRows, selectorIndex:0 }, - { rows:selectRows, selectorIndex:showsSelection ? 1 : 0 } - ]; - - for (var identifier in _dataViewsForTableColumns) - { - var dataViewsInTableColumn = _dataViewsForTableColumns[identifier] - - for (var i = 0; i < selectInfo.length; ++i) - { - var info = selectInfo[i], - count = info.rows.length; - - while (count--) - { - var view = dataViewsInTableColumn[info.rows[count]]; - [view performSelector:selectors[info.selectorIndex] withObject:CPThemeStateSelectedDataView]; - } - } - } + if (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone) + [self _enumerateViewsInRows:newRows columns:_exposedColumns usingBlock:_BlockSelectView]; } /*! @@ -1325,64 +1295,25 @@ NOT YET IMPLEMENTED */ - (void)_updateHighlightWithOldColumns:(CPIndexSet)oldColumns newColumns:(CPIndexSet)newColumns { - var firstExposedColumn = [_exposedColumns firstIndex], - exposedLength = [_exposedColumns lastIndex] - firstExposedColumn +1, - deselectColumns = [], - selectColumns = [], - deselectColumnIndexes = [oldColumns copy], - selectColumnIndexes = [newColumns copy], - selectRows = []; - - [deselectColumnIndexes removeMatches:selectColumnIndexes]; - [deselectColumnIndexes getIndexes:deselectColumns maxCount:-1 inIndexRange:CPMakeRange(firstExposedColumn, exposedLength)]; - [selectColumnIndexes getIndexes:selectColumns maxCount:-1 inIndexRange:CPMakeRange(firstExposedColumn, exposedLength)]; - [_exposedRows getIndexes:selectRows maxCount:-1 inIndexRange:nil]; - - var showsSelection = _selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone, - selectors = [@selector(unsetThemeState:), @selector(setThemeState:)], - - // Rows do not show selection with CPTableViewSelectionHighlightStyleNone, but headers do - selectInfo = [ - { - columns:deselectColumns, - rowSelectorIndex:0, - headerSelectorIndex:0 - }, - { - columns:selectColumns, - rowSelectorIndex:showsSelection ? 1 : 0, - headerSelectorIndex:1 - } - ], - rowsCount = selectRows.length; - - for (var selectIndex = 0; selectIndex < selectInfo.length; ++selectIndex) + var blockDeselectHeader = function(column, stop) { - var info = selectInfo[selectIndex], - count = info.columns.length, - rowSelector = selectors[info.rowSelectorIndex], - headerSelector = selectors[info.headerSelectorIndex]; + var headerView = [_tableColumns[column] headerView]; + [headerView unsetThemeState:CPThemeStateSelected]; + }; - while (count--) + var showSelection = _selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone; + + [self _enumerateViewsInRows:_exposedRows columns:oldColumns usingBlock:_BlockDeselectView]; + [oldColumns enumerateIndexesUsingBlock:blockDeselectHeader]; + + if (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone) + { + [self _enumerateViewsInRows:_exposedRows columns:newColumns usingBlock:_BlockSelectView]; + [newColumns enumerateIndexesUsingBlock:function(column, stop) { - var columnIndex = info.columns[count], - identifier = [_tableColumns[columnIndex] UID], - dataViewsInTableColumn = _dataViewsForTableColumns[identifier]; - - for (var i = 0; i < rowsCount; i++) - { - var rowIndex = selectRows[i], - dataView = dataViewsInTableColumn[rowIndex]; - - [dataView performSelector:rowSelector withObject:CPThemeStateSelectedDataView]; - } - - if (_headerView) - { - var headerView = [_tableColumns[columnIndex] headerView]; - [headerView performSelector:headerSelector withObject:CPThemeStateSelected]; - } - } + var headerView = [_tableColumns[column] headerView]; + [headerView setThemeState:CPThemeStateSelected]; + }]; } } @@ -1573,7 +1504,7 @@ NOT YET IMPLEMENTED if (_isViewBased) { var identifier = [_tableColumns[columnIndex] UID], - view = _dataViewsForTableColumns[identifier][rowIndex]; + view = _dataViewsForRows[rowIndex][identifier]; [[self window] makeFirstResponder:view]; } @@ -2001,7 +1932,11 @@ NOT YET IMPLEMENTED */ - (CPInteger)rowForView:(CPView)aView { - return [self rowNotColumn:YES forView:aView]; + var row; + + [self getColumn:nil row:@ref(row) forView:aView]; + + return row; } /*! @@ -2014,66 +1949,68 @@ NOT YET IMPLEMENTED */ - (CPInteger)columnForView:(CPView)aView { - return [self rowNotColumn:NO forView:aView]; + var column; + + [self getColumn:@ref(column) row:nil forView:aView]; + + return column; } /*! @ignore */ -- (CPInteger)rowNotColumn:(BOOL)isRow forView:(CPView)aView +- (void)getColumn:(Function)columnRef row:(Function)rowRef forView:(CPView)aView { - if (![aView isKindOfClass:[CPView class]]) - return -1; + var columnResult = -1, + rowResult = -1, + found = YES; - var cellView = aView, - contentView = [[self window] contentView], - max_rec = 100; - - while (max_rec--) + if (aView && [aView isKindOfClass:[CPView class]]) { - if (!cellView || cellView === contentView) - { - return -1; - } - else - { - var superview = [cellView superview]; + var cellView = aView, + contentView = [[self window] contentView], + max_rec = 100; - if ([superview isKindOfClass:[CPTableView class]]) + while (max_rec) + { + if (!cellView || cellView === contentView) { + found = NO; break; } + else + { + var superview = [cellView superview]; - cellView = superview; + if ([superview isKindOfClass:[CPTableView class]]) + { + break; + } + + cellView = superview; + } } - } - var exposedRows = [], - exposedColumns = []; - - [_exposedRows getIndexes:exposedRows maxCount:-1 inIndexRange:nil]; - [_exposedColumns getIndexes:exposedColumns maxCount:-1 inIndexRange:nil]; - - var colcount = exposedColumns.length, - countOfRows = exposedRows.length; - - while (colcount--) - { - var column = exposedColumns[colcount], - tableColumnUID = [_tableColumns[column] UID], - dataViewsInTableColumn = _dataViewsForTableColumns[tableColumnUID], - rowcount = countOfRows; - - while (rowcount--) + if (found) { - var row = exposedRows[rowcount]; + [self _enumerateViewsInRows:_exposedRows columns:_exposedColumns usingBlock:function(view, row, column, stop) + { - if (cellView == dataViewsInTableColumn[row]) - return isRow ? row : column; + if (view === cellView) + { + columnResult = column; + rowResult = row; + stop(YES); + } + }]; } } - return -1; + if (columnRef) + columnRef(columnResult); + + if (rowRef) + rowRef(rowResult); } /*! @@ -3081,38 +3018,26 @@ Your delegate can implement this method to avoid subclassing the tableview to ad - (CPView)dragViewForRowsWithIndexes:(CPIndexSet)theDraggedRows tableColumns:(CPArray)theTableColumns event:(CPEvent)theDragEvent offset:(CGPoint)dragViewOffset { var bounds = [self bounds], - view = [[CPView alloc] initWithFrame:bounds]; + dragView = [[CPView alloc] initWithFrame:bounds]; - [view setAlphaValue:0.7]; + [dragView setAlphaValue:0.7]; // We have to fetch all the data views for the selected rows and columns // After that we can copy these add them to a transparent drag view and use that drag view // to make it appear we are dragging images of those rows (as you would do in regular Cocoa) - var columnIndex = [theTableColumns count]; - while (columnIndex--) + [self _enumerateViewsInRows:theDraggedRows tableColumns:theTableColumns usingBlock:function(v, row, tableColumn, stop) { - var tableColumn = [theTableColumns objectAtIndex:columnIndex], - row = [theDraggedRows firstIndex]; + var column = [_tableColumns indexOfObjectIdenticalTo:tableColumn], + newDataView = [self preparedViewAtColumn:column row:row]; - while (row !== CPNotFound) - { - var dataView = [self _newDataViewForRow:row tableColumn:tableColumn]; - - [dataView setFrame:[self frameOfDataViewAtColumn:columnIndex row:row]]; - - [self _setObjectValueForTableColumn:tableColumn row:row forView:dataView]; - [view addSubview:dataView]; - [_draggingViews addObject:dataView]; - - row = [theDraggedRows indexGreaterThanIndex:row]; - } - } + [dragView addSubview:newDataView]; + }]; var dragPoint = [self convertPoint:[theDragEvent locationInWindow] fromView:nil]; dragViewOffset.x = CGRectGetWidth(bounds) / 2 - dragPoint.x; dragViewOffset.y = CGRectGetHeight(bounds) / 2 - dragPoint.y; - return view; + return dragView; } /*! @@ -3458,164 +3383,141 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [column setHidden:data.shouldBeHidden]; [_tableColumns removeObject:column]; } + [_differedColumnDataToRemove removeAllObjects]; } - } /*! @ignore */ -- (void)_unloadDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns +- (void)_unloadDataViewsInRows:(CPIndexSet)rowIndexes columns:(CPIndexSet)columnIndexes { - if (![rows count] || ![columns count]) + if (![rowIndexes count] || ![columnIndexes count]) return; - var rowArray = [], - columnArray = []; + // If and edited view is about to be unloaded, cleanup its state before enqueuing. + if ([columnIndexes containsIndex:_editingColumn] && [rowIndexes containsIndex:_editingRow]) + [self _resignEditedView]; - [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; - [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; - - var columnIndex = 0, - columnsCount = columnArray.length; - - for (; columnIndex < columnsCount; ++columnIndex) + var tableColumns = [_tableColumns objectsAtIndexes:columnIndexes]; + [self _enumerateViewsInRows:rowIndexes tableColumns:tableColumns usingBlock:function(dataView, row, tableColumn, stop) { - var column = columnArray[columnIndex], - tableColumn = _tableColumns[column], - tableColumnUID = [tableColumn UID], - rowIndex = 0, - rowsCount = rowArray.length; + var dataViewsForRows = _dataViewsForRows[row], + tableColumnUID = [tableColumn UID]; - for (; rowIndex < rowsCount; ++rowIndex) - { - var row = rowArray[rowIndex], - dataViews = _dataViewsForTableColumns[tableColumnUID]; + delete (dataViewsForRows[tableColumnUID]); - if (!dataViews || row >= dataViews.length) - continue; - - if (row === _editingRow && column === _editingColumn) - [[self window] makeFirstResponder:self]; - - var dataView = [dataViews objectAtIndex:row]; - - [dataViews replaceObjectAtIndex:row withObject:nil]; - - [self _enqueueReusableDataView:dataView]; - } - } + [self _enqueueReusableDataView:dataView]; + }]; } /*! @ignore */ -- (void)_loadDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns +- (void)_loadDataViewsInRows:(CPIndexSet)rowIndexes columns:(CPIndexSet)columnIndexes { - if (![rows count] || ![columns count]) + if (![rowIndexes count] || ![columnIndexes count]) return; - var rowArray = [], - rowRects = [], - columnArray = []; - - [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; - [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; - UPDATE_COLUMN_RANGES_IF_NECESSARY(); - var columnIndex = 0, - columnsCount = columnArray.length; - - for (; columnIndex < columnsCount; ++columnIndex) - { - var column = columnArray[columnIndex], - tableColumn = _tableColumns[column]; - - if ([tableColumn isHidden] || tableColumn === _draggedColumn) - continue; - - var tableColumnUID = [tableColumn UID]; - - if (!_dataViewsForTableColumns[tableColumnUID]) - _dataViewsForTableColumns[tableColumnUID] = []; - - var rowIndex = 0, - rowsCount = rowArray.length, - isColumnSelected = [_selectedColumnIndexes containsIndex:column]; - - for (; rowIndex < rowsCount; ++rowIndex) + if (_numberOfHiddenColumns > 0) + columnIndexes = [columnIndexes indexesPassingTest:function(idx, stop) { - var row = rowArray[rowIndex], - dataView = [self _newDataViewForRow:row tableColumn:tableColumn], - isButton = [dataView isKindOfClass:[CPButton class]], - isTextField = [dataView isKindOfClass:[CPTextField class]]; + return ![_tableColumns[idx] isHidden]; + }]; - [dataView setFrame:[self frameOfDataViewAtColumn:column row:row]]; + [rowIndexes enumerateIndexesUsingBlock:function(rowIndex, stopRow) + { + if (!_dataViewsForRows[rowIndex]) + _dataViewsForRows[rowIndex] = {}; - [self _setObjectValueForTableColumn:tableColumn row:row forView:dataView]; + var dataViewsForRow = _dataViewsForRows[rowIndex], + isRowSelected = [self isRowSelected:rowIndex], + row = rowIndex; - if ((_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone) && - (isColumnSelected || [self isRowSelected:row])) - { - [dataView setThemeState:CPThemeStateSelectedDataView]; - } - else - [dataView unsetThemeState:CPThemeStateSelectedDataView]; - - // FIX ME: for performance reasons we might consider diverging from cocoa and moving this to the reloadData method - if (_implementedDelegateMethods & CPTableViewDelegate_tableView_isGroupRow_) - { - if ([_delegate tableView:self isGroupRow:row]) - { - [_groupRows addIndex:row]; - [dataView setThemeState:CPThemeStateGroupRow]; - } - else - { - [_groupRows removeIndexesInRange:CPMakeRange(row, 1)]; - [dataView unsetThemeState:CPThemeStateGroupRow]; - } - - [self setNeedsDisplay:YES]; - } - - if (_implementedDelegateMethods & CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_) - [_delegate tableView:self willDisplayView:dataView forTableColumn:tableColumn row:row]; + [columnIndexes enumerateIndexesUsingBlock:function(columnIndex, stopCol) + { + var tableColumn = _tableColumns[columnIndex], + dataView = [self _preparedViewAtColumn:columnIndex row:row isRowSelected:isRowSelected]; if ([dataView superview] !== self) [self addSubview:dataView]; - _dataViewsForTableColumns[tableColumnUID][row] = dataView; + dataViewsForRow[[tableColumn UID]] = dataView; + }]; + }]; +} - if (_isViewBased) - continue; +- (CPView)preparedViewAtColumn:(CPInteger)column row:(CPInteger)row +{ + return [self _preparedViewAtColumn:column row:row isRowSelected:[self isRowSelected:row]]; +} - if (isButton || (_editingCellIndex && _editingCellIndex.x === column && _editingCellIndex.y === row)) - { - if (isTextField) - { - [dataView setEditable:YES]; - [dataView setSendsActionOnEndEditing:YES]; - [dataView setSelectable:YES]; - [dataView selectText:nil]; - [dataView setBezeled:YES]; - [dataView setDelegate:self]; - } +- (CPView)_preparedViewAtColumn:(CPInteger)column row:(CPInteger)row isRowSelected:(BOOL)isRowSelected +{ + var tableColumn = _tableColumns[column], + tableColumnUID = [tableColumn UID], + dataView = [self _newDataViewForRow:row tableColumn:tableColumn], + isButton = [dataView isKindOfClass:[CPButton class]], + isTextField = [dataView isKindOfClass:[CPTextField class]]; - [dataView setTarget:self]; - [dataView setAction:@selector(_commitDataViewObjectValue:)]; - dataView.tableViewEditedColumnObj = tableColumn; - dataView.tableViewEditedRowIndex = row; - } - else if (isTextField) - { - [dataView setEditable:NO]; - [dataView setSelectable:NO]; - } + [dataView setFrame:[self frameOfDataViewAtColumn:column row:row]]; + + [self _setObjectValueForTableColumn:tableColumn row:row forView:dataView]; + + var applyThemeStateBlock = (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone && (isRowSelected || [self isColumnSelected:column])) ? _BlockSelectView : _BlockDeselectView; + + applyThemeStateBlock(dataView, row, column); + + // FIX ME: for performance reasons we might consider diverging from cocoa and moving this to the reloadData method + if (_implementedDelegateMethods & CPTableViewDelegate_tableView_isGroupRow_) + { + if ([_delegate tableView:self isGroupRow:row]) + { + [_groupRows addIndex:row]; + [dataView setThemeState:CPThemeStateGroupRow]; } + else + { + [_groupRows removeIndexesInRange:CPMakeRange(row, 1)]; + [dataView unsetThemeState:CPThemeStateGroupRow]; + } + + [self setNeedsDisplay:YES]; } + + if (_implementedDelegateMethods & CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_) + [_delegate tableView:self willDisplayView:dataView forTableColumn:tableColumn row:row]; + + if (_isViewBased) + return dataView; + + if (isButton || (_editingCellIndex && _editingCellIndex.x === column && _editingCellIndex.y === row)) + { + if (isTextField) + { + [dataView setEditable:YES]; + [dataView setSendsActionOnEndEditing:YES]; + [dataView setSelectable:YES]; + [dataView selectText:nil]; + [dataView setBezeled:YES]; + [dataView setDelegate:self]; + } + + [dataView setTarget:self]; + [dataView setAction:@selector(_commitDataViewObjectValue:)]; + dataView.tableViewEditedColumnObj = tableColumn; + dataView.tableViewEditedRowIndex = row; + } + else if (isTextField) + { + [dataView setEditable:NO]; + [dataView setSelectable:NO]; + } + + return dataView; } - (void)_setObjectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRow forView:(CPView)aDataView @@ -3645,37 +3547,14 @@ Your delegate can implement this method to avoid subclassing the tableview to ad /*! @ignore */ -- (void)_layoutDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns +- (void)_layoutDataViewsInRows:(CPIndexSet)rowIndexes columns:(CPIndexSet)columnIndexes { - var rowArray = [], - columnArray = []; - - [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; - [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; - - var columnIndex = 0, - columnsCount = columnArray.length; - - for (; columnIndex < columnsCount; ++columnIndex) + var blockUpdateFrame = function(view, row, column, stop) { - var column = columnArray[columnIndex], - tableColumn = _tableColumns[column], - tableColumnUID = [tableColumn UID], - dataViewsForTableColumn = _dataViewsForTableColumns[tableColumnUID], - rowIndex = 0, - rowsCount = rowArray.length; + [view setFrame:[self frameOfDataViewAtColumn:column row:row]]; + }; - if (dataViewsForTableColumn) - { - for (; rowIndex < rowsCount; ++rowIndex) - { - var row = rowArray[rowIndex], - dataView = dataViewsForTableColumn[row]; - - [dataView setFrame:[self frameOfDataViewAtColumn:column row:row]]; - } - } - } + [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:blockUpdateFrame]; } /*! @@ -3864,6 +3743,80 @@ Your delegate can implement this method to avoid subclassing the tableview to ad _isViewBased = (_viewForTableColumnRowSelector !== nil || _archivedDataViews !== nil); } +/*! + Allows the enumeration of all the table views that are known to the table view. + + @param handler The function to apply to elements in the set. + + The function takes three arguments: + + @param dataView + The view for the column and row. + @param column + The column index of the view. + @param row + The row index of the view. +*/ + +- (void)enumerateAvailableViewsUsingBlock:(Function/*CPView *dataView, CPInteger row, CPInteger column*, @ref stop*/)handler +{ + [self _enumerateViewsInRows:_exposedRows columns:_exposedColumns usingBlock:handler]; +} + +/*! + @ignore +*/ + +- (void)_enumerateViewsInRows:(CPIndexSet)rowIndexes columns:(CPIndexSet)columnIndexes usingBlock:(Function/*CPView dataView, CPInteger row, CPInteger column, @ref stop*/)handler +{ + [rowIndexes enumerateIndexesUsingBlock:function(rowIndex, stopRow) + { + var dataViewsForRow = _dataViewsForRows[rowIndex]; + + if (!dataViewsForRow) + return; + + var row = rowIndex; + + [columnIndexes enumerateIndexesUsingBlock:function(columnIndex, stopCol) + { + var tableColumnUID = [_tableColumns[columnIndex] UID], + view = dataViewsForRow[tableColumnUID]; + + if (view) + handler(view, row, columnIndex, stopCol); + + if (stopCol()) + stopRow(YES); + }]; + }]; +} + +- (void)_enumerateViewsInRows:(CPIndexSet)rowIndexes tableColumns:(CPArray)tableColumns usingBlock:(Function/*CPView dataView, CPInteger row, CPtableColumn tableColumn, CPInteger column, @ref stop*/)handler +{ + [rowIndexes enumerateIndexesUsingBlock:function(rowIndex, stopRow) + { + var dataViewsForRow = _dataViewsForRows[rowIndex]; + + if (!dataViewsForRow) + return; + + var row = rowIndex; + + [tableColumns enumerateObjectsUsingBlock:function(tableColumn, idx, stopCol) + { + var tableColumnUID = [tableColumn UID], + view = dataViewsForRow[tableColumnUID]; + + if (view) + handler(view, row, tableColumn, stopCol); + + if (stopCol()) + stopRow(YES); + }]; + }]; +} + /*! @ignore */ @@ -5092,14 +5045,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad - (void)_firstResponderDidChange:(CPNotification)aNotification { - var responder = [[self window] firstResponder]; - - if (![responder isKindOfClass:[CPView class]] || ![responder isDescendantOf:self]) - { - _editingRow = CPNotFound; - _editingColumn = CPNotFound; - return; - } + var responder = [[self window] firstResponder], + column, + row; _editingRow = [self rowForView:responder]; _editingColumn = [self columnForView:responder]; @@ -5475,33 +5423,6 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", @end - -@implementation CPIndexSet (tableview) - -- (void)removeMatches:(CPIndexSet)otherSet -{ - var firstindex = [self firstIndex], - index = MIN(firstindex, [otherSet firstIndex]), - switchFlag = (index == firstindex); - - while (index != CPNotFound) - { - var indexSet = (switchFlag) ? otherSet : self, - otherIndex = [indexSet indexGreaterThanOrEqualToIndex:index]; - - if (otherIndex == index) - { - [self removeIndex:index]; - [otherSet removeIndex:index]; - } - - index = otherIndex; - switchFlag = !switchFlag; - } -} - -@end - @implementation _CPDropOperationDrawingView : CPView { unsigned dropOperation @accessors; @@ -5688,3 +5609,13 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", } @end + +var _BlockDeselectView = function(view, column, row) +{ + [view unsetThemeState:CPThemeStateSelectedDataView]; +}; + +var _BlockSelectView = function(view, column, row) +{ + [view setThemeState:CPThemeStateSelectedDataView]; +}; diff --git a/Tests/Manual/CPTrace.j b/Tests/Manual/CPTrace.j index 46b9c00a4..0044ec218 100644 --- a/Tests/Manual/CPTrace.j +++ b/Tests/Manual/CPTrace.j @@ -240,7 +240,7 @@ var getMethodNoSuper = function(cls, sel) /* Utility for moving average */ -var moving_averager = function(period) +function moving_averager(period) { var nums = []; diff --git a/Tests/Manual/TableTest/TableCibTest/AppController.j b/Tests/Manual/TableTest/TableCibTest/AppController.j index f7ac67c3f..ebe8cdd8c 100644 --- a/Tests/Manual/TableTest/TableCibTest/AppController.j +++ b/Tests/Manual/TableTest/TableCibTest/AppController.j @@ -7,6 +7,7 @@ */ @import +@import "../../CPTrace.j" CPLogRegister(CPLogConsole); @@ -20,6 +21,14 @@ CPLogRegister(CPLogConsole); { // This is called when the application is done loading. iconImage = [[CPImage alloc] initWithContentsOfFile:"http://cappuccino-project.org/img/favicon.ico" size:CGSizeMake(16,16)]; + + var averager = moving_averager(50); + + CPTrace("CPTableView", "load", function(receiver, selector, args, duration) + { + if (duration) + console.log(receiver + " " + selector + " in " + averager(duration)); + }); } - (void)awakeFromCib diff --git a/Tests/Manual/TableTest/ViewBasedCib/AppController.j b/Tests/Manual/TableTest/ViewBasedCib/AppController.j index 4d422d33b..7fe537fc5 100644 --- a/Tests/Manual/TableTest/ViewBasedCib/AppController.j +++ b/Tests/Manual/TableTest/ViewBasedCib/AppController.j @@ -8,6 +8,7 @@ @import @import +@import "../../CPTrace.j" var TABLE_DRAG_TYPE = @"TABLE_DRAG_TYPE"; @@ -35,6 +36,14 @@ CPLogRegister(CPLogConsole) connection = [CPURLConnection connectionWithRequest:request delegate:self]; [tableView registerForDraggedTypes:[CPArray arrayWithObject:TABLE_DRAG_TYPE]]; + + var averager = moving_averager(50); + + CPTrace("CPTableView", "load", function(receiver, selector, args, duration) + { + if (duration) + console.log(receiver + " " + selector + " in " + averager(duration)); + }); } - (void)awakeFromCib From a6c143a1c76371e47d07255f0020c10a14aba108 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 22 Mar 2013 10:08:34 +0100 Subject: [PATCH 003/234] Fixed: -reloadDataForRowsIndexes:columnIndexes: behavior. Fixed: Column dragging performance, content binding performance. After this commit, -reloadDataForRowsIndexes:columnIndexes: reloads the data and the data only. The -reloadData method no longer tries to reuse the views, instead it just reloads the data for visible views. To flush and reload the views cache for visible rows, use _reloadDataViews. To internaly layout the views geometry, use _layouViewsForRowIndexes:columnIndexes: In CPTableView dragging column code, relayout the views whose frame changed instead of reloading everything. --- AppKit/CPTableColumn.j | 2 +- AppKit/CPTableView.j | 78 +++++++++++++++++++++++++----------------- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 823fdc73a..ba7d50733 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -181,7 +181,7 @@ CPTableColumnUserResizingMask = 1 << 1; columns = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(index, [tableView._exposedColumns lastIndex] - index + 1)]; // FIXME: Would be faster with some sort of -setNeedsDisplayInColumns: that updates a dirtyTableColumnForDisplay cache; then marked columns would relayout their data views at display time. - [tableView _layoutDataViewsInRows:rows columns:columns]; + [tableView _layoutViewsForRowIndexes:rows columnIndexes:columns]; [tableView tile]; if (!_disableResizingPosting) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index cee884b5c..29ddaa22d 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -182,6 +182,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; CPInteger _numberOfHiddenColumns; BOOL _reloadAllRows; + BOOL _invalidateObjectValuesCache; Object _objectValues; CGRect _exposedRect; @@ -378,6 +379,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; _numberOfHiddenColumns = 0; _objectValues = { }; + _invalidateObjectValuesCache = NO; _dataViewsForRows = { }; _numberOfRows = 0; _exposedRows = [CPIndexSet indexSet]; @@ -516,7 +518,7 @@ NOT YET IMPLEMENTED if ([_dataSource respondsToSelector:@selector(tableView:sortDescriptorsDidChange:)]) _implementedDataSourceMethods |= CPTableViewDataSource_tableView_sortDescriptorsDidChange_; - [self reloadData]; + [self _reloadDataViews]; } /*! @@ -528,6 +530,14 @@ NOT YET IMPLEMENTED } //Loading Data +/*! + Reloads the data for visible data views. +*/ +- (void)reloadData +{ + _objectValues = { }; + [self reloadDataForRowIndexes:_exposedRows columnIndexes:_exposedColumns]; +} /*! Reloads the data for only the specified rows and columns. @@ -536,15 +546,18 @@ NOT YET IMPLEMENTED */ - (void)reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes { - [self reloadData]; -// [_previouslyExposedRows removeIndexes:rowIndexes]; -// [_previouslyExposedColumns removeIndexes:columnIndexes]; + var oldnumberOfRows = _numberOfRows; + + if (oldnumberOfRows == 0 || oldnumberOfRows !== [self numberOfRows]) + [self _reloadDataViews]; + else + [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop) + { + [self _setObjectValueForTableColumn:_tableColumns[column] row:row forView:view useCache:NO]; + }]; } -/*! - Reloads the data for all rows and columns. -*/ -- (void)reloadData +- (void)_reloadDataViews { //if (!_dataSource) // return; @@ -708,11 +721,10 @@ NOT YET IMPLEMENTED _dirtyTableColumnRangeIndex = 0; // so that _recalculateTableColumnRanges will work [self _recalculateTableColumnRanges]; - [self setNeedsLayout]; [_headerView setNeedsDisplay:YES]; [_headerView setNeedsLayout]; - [self reloadData]; + [self _reloadDataViews]; } /*! @@ -1060,11 +1072,11 @@ NOT YET IMPLEMENTED // if a column is currently being dragged, update that column (removing data views) if (aColumn) - [self reloadDataForRowIndexes:_exposedRows columnIndexes:[CPIndexSet indexSetWithIndex:[_tableColumns indexOfObject:aColumn]]]; + [self _layoutViewsForRowIndexes:_exposedRows columnIndexes:[CPIndexSet indexSetWithIndex:[_tableColumns indexOfObject:aColumn]]]; // when the column is dropped, we should also update it. if (previouslyDraggedColumn) - [self reloadDataForRowIndexes:_exposedRows columnIndexes:[CPIndexSet indexSetWithIndex:[_tableColumns indexOfObject:previouslyDraggedColumn]]]; + [self _layoutViewsForRowIndexes:_exposedRows columnIndexes:[CPIndexSet indexSetWithIndex:[_tableColumns indexOfObject:previouslyDraggedColumn]]]; } /* @@ -1093,11 +1105,10 @@ NOT YET IMPLEMENTED [[self headerView] setNeedsLayout]; [[self headerView] setNeedsDisplay:YES]; - var rowIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])], - columnIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(fromIndex, toIndex)]; - - [self reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndexes]; + var range = CPMakeRange(MIN(fromIndex, toIndex), ABS(fromIndex - toIndex) + 1); + var columnIndexes = [CPIndexSet indexSetWithIndexesInRange:range]; + [self _layoutViewsForRowIndexes:_exposedRows columnIndexes:columnIndexes]; // Notify even if programmatically moving a column as in Cocoa. // TODO Only notify when a column drag operation ends, not each time a column reaches a new slot? [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewColumnDidMoveNotification @@ -1133,7 +1144,7 @@ NOT YET IMPLEMENTED [[self headerView] setNeedsDisplay:YES]; var rowIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])]; - [self reloadDataForRowIndexes:rowIndexes columnIndexes:[CPIndexSet indexSetWithIndex:columnIndex]]; + [self _layoutViewsForRowIndexes:rowIndexes columnIndexes:[CPIndexSet indexSetWithIndex:columnIndex]]; } /*! @@ -1521,8 +1532,7 @@ NOT YET IMPLEMENTED _editingCellIndex = CGPointMake(columnIndex, rowIndex); _editingCellIndex._shouldSelect = flag; - [self reloadDataForRowIndexes:[CPIndexSet indexSetWithIndex:rowIndex] - columnIndexes:[CPIndexSet indexSetWithIndex:columnIndex]]; + [self _reloadDataViews]; } } @@ -3258,8 +3268,10 @@ Your delegate can implement this method to avoid subclassing the tableview to ad /*! @ignore */ -- (id)_objectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex +- (id)_objectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRowIndex useCache:(BOOL)useCache { + var objectValue; + var tableColumnUID = [aTableColumn UID], tableColumnObjectValues = _objectValues[tableColumnUID]; @@ -3269,7 +3281,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad _objectValues[tableColumnUID] = tableColumnObjectValues; } - var objectValue = tableColumnObjectValues[aRowIndex]; + if (useCache) + objectValue = tableColumnObjectValues[aRowIndex]; // tableView:objectValueForTableColumn:row: is optional if content bindings are in place. if (objectValue === undefined) @@ -3521,9 +3534,14 @@ Your delegate can implement this method to avoid subclassing the tableview to ad } - (void)_setObjectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRow forView:(CPView)aDataView +{ + [self _setObjectValueForTableColumn:aTableColumn row:aRow forView:aDataView useCache:!_invalidateObjectValuesCache]; +} + +- (void)_setObjectValueForTableColumn:(CPTableColumn)aTableColumn row:(CPInteger)aRow forView:(CPView)aDataView useCache:(BOOL)useCache { if (_implementedDataSourceMethods & CPTableViewDataSource_tableView_objectValueForTableColumn_row_) - [aDataView setObjectValue:[self _objectValueForTableColumn:aTableColumn row:aRow]]; + [aDataView setObjectValue:[self _objectValueForTableColumn:aTableColumn row:aRow useCache:useCache]]; // This gives the table column an opportunity to apply its bindings. // It will override the value set above if there is a binding. @@ -3547,14 +3565,14 @@ Your delegate can implement this method to avoid subclassing the tableview to ad /*! @ignore */ -- (void)_layoutDataViewsInRows:(CPIndexSet)rowIndexes columns:(CPIndexSet)columnIndexes +- (void)_layoutViewsForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes { - var blockUpdateFrame = function(view, row, column, stop) + [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop) { [view setFrame:[self frameOfDataViewAtColumn:column row:row]]; - }; + }]; - [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:blockUpdateFrame]; + [self setNeedsDisplay:YES]; } /*! @@ -3590,11 +3608,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if ([sender isKindOfClass:[CPTextField class]]) [sender setBezeled:NO]; - [self reloadDataForRowIndexes:[CPIndexSet indexSetWithIndex:sender.tableViewEditedRowIndex] - columnIndexes:[CPIndexSet indexSetWithIndex:[_tableColumns indexOfObject:sender.tableViewEditedColumnObj]]]; + [self _reloadDataViews]; [[self window] makeFirstResponder:self]; - } /*! @@ -4831,7 +4847,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad */ - (void)concludeDragOperation:(id)sender { - [self reloadData]; + [self _reloadDataViews]; } /* @@ -5301,7 +5317,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad _content = [destination valueForKey:keyPath]; - [_source reloadData]; + [_source _reloadDataViews]; } @end From 7c6765b969619a961e7547649358aa7bd3f99421 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 22 Mar 2013 20:41:24 +0100 Subject: [PATCH 004/234] Fixed: After drag, views were cached. This commit reverts #1478. It appears it is a bad idea to enqueue visible views. The views generally stay in the cache forever and they are repeatedly asked to be removed from the table at each load, causing a performance penalty. --- AppKit/CPTableHeaderView.j | 2 -- AppKit/CPTableView.j | 14 -------------- 2 files changed, 16 deletions(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index 25c14845a..e74b02c0d 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -564,8 +564,6 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal [self stopTrackingTableColumn:_activeColumn at:aLocation]; [self setNeedsDisplay:YES]; - - [_tableView _enqueueDraggingViews]; } - (BOOL)shouldResizeTableColumn:(int)aColumnIndex at:(CGPoint)aPoint diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 29ddaa22d..33731d1fc 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -259,7 +259,6 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; CPDragOperation _dragOperationDefaultMask; int _retargetedDropRow; CPDragOperation _retargetedDropOperation; - CPArray _draggingViews; BOOL _disableAutomaticResizing @accessors(property=disableAutomaticResizing); BOOL _lastColumnShouldSnap; @@ -397,7 +396,6 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; [self addSubview:_tableDrawView]; _draggedColumn = nil; - _draggingViews = [CPArray array]; _editingRow = CPNotFound; _editingColumn = CPNotFound; @@ -3082,7 +3080,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self _setObjectValueForTableColumn:tableColumn row:row forView:dataView]; [dragView addSubview:dataView]; - [_draggingViews addObject:dataView]; row = [_exposedRows indexGreaterThanIndex:row]; } @@ -4680,7 +4677,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad _retargetedDropRow = nil; _draggedRowIndexes = [CPIndexSet indexSet]; [_dropOperationFeedbackView removeFromSuperview]; - [self _enqueueDraggingViews]; } /* @@ -4869,16 +4865,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self draggedImage:aView endedAt:aLocation operation:anOperation]; } -- (void)_enqueueDraggingViews -{ - [_draggingViews enumerateObjectsUsingBlock:function(dataView, idx) - { - [self _enqueueReusableDataView:dataView]; - }]; - - [_draggingViews removeAllObjects]; -} - /*! @ignore */ From eae9a10a7dfb2bc096aa211078eaf6a0e4f35037 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 23 Mar 2013 17:57:40 +0100 Subject: [PATCH 005/234] Fixed: editingColumn and editingRow return the correct index in view based tables Fixed: An edited view no longer send its action (view-based) or commit its object value (cell-based) when unexposed. Fixed: Cell based tables support for editing any control, not just textfield and buttons. --- AppKit/CPOutlineView.j | 8 + AppKit/CPTableView.j | 320 +++++++++--------- .../Manual/TableTest/Editing/AppController.j | 10 +- 3 files changed, 173 insertions(+), 165 deletions(-) diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index bc69b5d3f..00e82f7f0 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -1565,6 +1565,14 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, return _implementedOutlineViewDelegateMethods & CPOutlineViewDelegate_outlineView_dataViewForTableColumn_item_; } +- (id)_hitTest:(CPView)aView +{ + if ([aView isKindOfClass:[CPDisclosureButton class]]) + return aView; + + return [super _hitTest:aView]; +} + @end // FIX ME: We're using with() here because Safari fails if we use anOutlineView._itemInfosForItems or whatever... diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 33731d1fc..43e337b51 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -236,7 +236,6 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; CGPoint _startTrackingPoint; CPDate _startTrackingTimestamp; BOOL _trackingPointMovedOutOfClickSlop; - CGPoint _editingCellIndex; CPInteger _editingRow; CPInteger _editingColumn; @@ -1497,64 +1496,6 @@ NOT YET IMPLEMENTED return _numberOfRows; } -/*! - Edits the dataview at a given row and column. This method is usually invoked automatically and should rarely be invoked directly - The row at supplied rowIndex must be selected otherwise an exception is thrown. - - @param columnIndex the index of the column to edit - @param rowIndex the index of the row to edit - @param theEvent the mouse event which triggers the edit, you can pass nil - @param flag YES if the dataview text should be selected, otherwise NO. (NOT YET IMPLEMENTED) -*/ -- (void)editColumn:(CPInteger)columnIndex row:(CPInteger)rowIndex withEvent:(CPEvent)theEvent select:(BOOL)flag -{ - // FIX ME: Cocoa documentation says all this should be called in THIS method: - // sets up the field editor, and sends selectWithFrame:inView:editor:delegate:start:length: and editWithFrame:inView:editor:delegate:event: to the field editor's NSCell object with the NSTableView as the text delegate. - if (_isViewBased) - { - var identifier = [_tableColumns[columnIndex] UID], - view = _dataViewsForRows[rowIndex][identifier]; - - [[self window] makeFirstResponder:view]; - } - else - { - if (![self isRowSelected:rowIndex]) - [[CPException exceptionWithName:@"Error" reason:@"Attempt to edit row="+rowIndex+" when not selected." userInfo:nil] raise]; - - [self scrollRowToVisible:rowIndex]; - [self scrollColumnToVisible:columnIndex]; - - // TODO Do something with flag. - - _editingCellIndex = CGPointMake(columnIndex, rowIndex); - _editingCellIndex._shouldSelect = flag; - - [self _reloadDataViews]; - } -} - -/*! - Returns the column of the currently edited cell, or CPNotFound if none. -*/ -- (CPInteger)editedColumn -{ - if (!_editingCellIndex) - return CPNotFound; - - return _editingCellIndex.x; -} - -/*! - Returns the row of the currently edited cell, or CPNotFound if none. -*/ -- (CPInteger)editedRow -{ - if (!_editingCellIndex) - return CPNotFound; - - return _editingCellIndex.y; -} /*! Returns the cornerview for the scrollview @@ -1979,7 +1920,7 @@ NOT YET IMPLEMENTED contentView = [[self window] contentView], max_rec = 100; - while (max_rec) + while (max_rec--) { if (!cellView || cellView === contentView) { @@ -3469,9 +3410,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad { var tableColumn = _tableColumns[column], tableColumnUID = [tableColumn UID], - dataView = [self _newDataViewForRow:row tableColumn:tableColumn], - isButton = [dataView isKindOfClass:[CPButton class]], - isTextField = [dataView isKindOfClass:[CPTextField class]]; + dataView = [self _newDataViewForRow:row tableColumn:tableColumn]; [dataView setFrame:[self frameOfDataViewAtColumn:column row:row]]; @@ -3501,32 +3440,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (_implementedDelegateMethods & CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_) [_delegate tableView:self willDisplayView:dataView forTableColumn:tableColumn row:row]; - if (_isViewBased) - return dataView; - - if (isButton || (_editingCellIndex && _editingCellIndex.x === column && _editingCellIndex.y === row)) - { - if (isTextField) - { - [dataView setEditable:YES]; - [dataView setSendsActionOnEndEditing:YES]; - [dataView setSelectable:YES]; - [dataView selectText:nil]; - [dataView setBezeled:YES]; - [dataView setDelegate:self]; - } - - [dataView setTarget:self]; - [dataView setAction:@selector(_commitDataViewObjectValue:)]; - dataView.tableViewEditedColumnObj = tableColumn; - dataView.tableViewEditedRowIndex = row; - } - else if (isTextField) - { - [dataView setEditable:NO]; - [dataView setSelectable:NO]; - } - return dataView; } @@ -3572,65 +3485,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self setNeedsDisplay:YES]; } -/*! - @ignore - The action for any dataview that supports editing. This will only be called when the value was changed. - The table view becomes the first responder after user is done editing a dataview. -*/ -- (void)_commitDataViewObjectValue:(id)sender -{ - /* - makeFirstResponder at the end of this method causes the dataview to resign. - If the dataview resigning triggers the action (as CPTextField does), we come right - back here and start an infinite loop. So we have to check this flag first. - */ - if ([sender respondsToSelector:@selector(sendsActionOnEndEditing)] && [sender sendsActionOnEndEditing] && _editingCellIndex === nil) - return; - - _editingCellIndex = nil; - - if (_implementedDataSourceMethods & CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_) - [_dataSource tableView:self setObjectValue:[sender objectValue] forTableColumn:sender.tableViewEditedColumnObj row:sender.tableViewEditedRowIndex]; - - // Allow the column binding to do a reverse set. Note that we do this even if the data source method above - // is implemented. - [sender.tableViewEditedColumnObj _reverseSetDataView:sender forRow:sender.tableViewEditedRowIndex]; - - if ([sender respondsToSelector:@selector(setEditable:)]) - [sender setEditable:NO]; - - if ([sender respondsToSelector:@selector(setSelectable:)]) - [sender setSelectable:NO]; - - if ([sender isKindOfClass:[CPTextField class]]) - [sender setBezeled:NO]; - - [self _reloadDataViews]; - - [[self window] makeFirstResponder:self]; -} - -/*! - @ignore - Blur notification handler for editing textfields. This will always be called when a textfield loses focus. - This method is responsible for restoring the dataview to its non editable state. -*/ -- (void)controlTextDidBlur:(CPNotification)theNotification -{ - var dataView = [theNotification object]; - - if ([dataView respondsToSelector:@selector(setEditable:)]) - [dataView setEditable:NO]; - - if ([dataView respondsToSelector:@selector(setSelectable:)]) - [dataView setSelectable:NO]; - - if ([dataView isKindOfClass:[CPTextField class]]) - [dataView setBezeled:NO]; - - _editingCellIndex = nil; -} - /*! @ignore */ @@ -3690,7 +3544,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (!anIdentifier) return nil; - var view, + var view = nil, // See if we have some reusable view available reusableViews = _cachedDataViews[anIdentifier]; @@ -3916,9 +3770,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad */ - (BOOL)_isFocused { - var isEditing = _editingRow !== CPNotFound || _editingCellIndex; - - return [[self window] isKeyWindow] && ([[self window] firstResponder] === self || isEditing); + return [[self window] isKeyWindow] && ([[self window] firstResponder] === self || _editingRow !== CPNotFound); } /*! @@ -5029,10 +4881,35 @@ Your delegate can implement this method to avoid subclassing the tableview to ad { var hit = [super hitTest:aPoint]; - if ([[CPApp currentEvent] type] == CPLeftMouseDown && [hit acceptsFirstResponder] && ![self isRowSelected:[self rowForView:hit]]) - return self; + if ([[CPApp currentEvent] type] !== CPLeftMouseDown) + return hit; - return hit; + return [self _hitTest:hit]; +} + +- (id)_hitTest:(CPView)aView +{ + var column, + row; + + if ([aView acceptsFirstResponder]) + { + [self getColumn:@ref(column) row:@ref(row) forView:aView]; + + if (![self isRowSelected:row]) + return self; + } + else if (!_isViewBased && _implementedDataSourceMethods & CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ && [aView isKindOfClass:[CPControl class]] && ![aView isKindOfClass:[CPTextField class]]) + { + [self getColumn:@ref(column) row:@ref(row) forView:aView]; + + _editingColumn = column; + _editingRow = row; + + [aView addObserver:self forKeyPath:@"objectValue" options:CPKeyValueObservingOptionOld|CPKeyValueObservingOptionNew context:"editing"]; + } + + return aView; } - (void)_startObservingFirstResponder @@ -5051,10 +4928,12 @@ Your delegate can implement this method to avoid subclassing the tableview to ad column, row; - _editingRow = [self rowForView:responder]; - _editingColumn = [self columnForView:responder]; + [self getColumn:@ref(column) row:@ref(row) forView:responder]; - if (_editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && ![responder isBezeled]) + _editingRow = row; + _editingColumn = column; + + if (_editingRow !== CPNotFound && _editingColumn !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && (!_isViewBased || ![responder isBezeled])) { [responder setBezeled:YES]; [self _registerForEndEditingNote:responder]; @@ -5078,11 +4957,42 @@ Your delegate can implement this method to avoid subclassing the tableview to ad var textField = [aNote object]; [self _unregisterForEndEditingNote:textField]; - [textField setBezeled:NO]; - var action = [self _disableActionIfExists:textField]; - [textField resignFirstResponder]; - [textField setAction:action]; + if (!_isViewBased) + { + [self _setEditingState:NO forView:textField]; + [self _commitDataViewObjectValue:textField]; + } + else + [textField setBezeled:NO]; + + [self _resignFirstResponderWithoutSendingAction:textField]; +} + +- (void)_resignFirstResponderWithoutSendingAction:(CPView)aView +{ + var action = [self _disableActionIfExists:aView]; + + [[self window] makeFirstResponder:self]; + + if (action) + [aView setAction:action]; +} + +- (void)_resignEditedView +{ + var view = [[self window] firstResponder]; + + if ([view respondsToSelector:@selector(selectText:)]) + [view selectText:nil]; + + if (!_isViewBased) + { + [self _unregisterForEndEditingNote:view]; + [self _setEditingState:NO forView:view]; + } + + [self _resignFirstResponderWithoutSendingAction:view]; } - (SEL)_disableActionIfExists:(CPView)aView @@ -5096,6 +5006,92 @@ Your delegate can implement this method to avoid subclassing the tableview to ad return action; } +/*! + @ignore + The action for any dataview that supports editing. This will only be called when the value was changed. + The table view becomes the first responder after user is done editing a dataview. +*/ +- (void)_commitDataViewObjectValue:(id)aDataView +{ + var editingTableColumn = _tableColumns[_editingColumn]; + + if (_implementedDataSourceMethods & CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_) + [_dataSource tableView:self setObjectValue:[aDataView objectValue] forTableColumn:editingTableColumn row:_editingRow]; + + // Allow the column binding to do a reverse set. Note that we do this even if the data source method above + // is implemented. + [editingTableColumn _reverseSetDataView:aDataView forRow:_editingRow]; + + [self reloadDataForRowIndexes:[CPIndexSet indexSetWithIndex:_editingRow] columnIndexes:[CPIndexSet indexSetWithIndex:_editingColumn]]; +} + +- (void)_setEditingState:(BOOL)editingState forView:(CPView)aView +{ + if ([aView respondsToSelector:@selector(setEditable:)]) + [aView setEditable:editingState]; + + if ([aView respondsToSelector:@selector(setSelectable:)]) + [aView setSelectable:editingState]; + + if ([aView isKindOfClass:[CPTextField class]]) + [aView setBezeled:editingState]; +} +/*! + Edits the dataview at a given row and column. This method is usually invoked automatically and should rarely be invoked directly + The row at supplied rowIndex must be selected otherwise an exception is thrown. + + @param columnIndex the index of the column to edit + @param rowIndex the index of the row to edit + @param theEvent the mouse event which triggers the edit, you can pass nil + @param flag YES if the dataview text should be selected, otherwise NO. (NOT YET IMPLEMENTED) +*/ +- (void)editColumn:(CPInteger)columnIndex row:(CPInteger)rowIndex withEvent:(CPEvent)theEvent select:(BOOL)flag +{ + if (![self isRowSelected:rowIndex]) + [[CPException exceptionWithName:@"Error" reason:@"Attempt to edit row " + rowIndex + " when not selected." userInfo:nil] raise]; + + [self scrollRowToVisible:rowIndex]; + [self scrollColumnToVisible:columnIndex]; + + // TODO Do something with flag. + + _editingRow = rowIndex; + _editingColumn = columnIndex; + + var editingTableColumnUID = [_tableColumns[_editingColumn] UID], + editingView = _dataViewsForRows[_editingRow][editingTableColumnUID]; + + [self _setEditingState:YES forView:editingView]; + [[self window] makeFirstResponder:editingView]; +} + +- (void)observeValueForKeyPath:(CPString)keyPath ofObject:(id)object change:(CPDictionary)change context:(void)context +{ + if (context === "editing" && [object superview] === self) + { + [object removeObserver:self forKeyPath:keyPath]; + [self _commitDataViewObjectValue:object]; + _editingRow = CPNotFound; + _editingColumn = CPNotFound; + } +} + +/*! + Returns the column of the currently edited cell, or CPNotFound if none. +*/ +- (CPInteger)editedColumn +{ + return _editingColumn; +} + +/*! + Returns the row of the currently edited cell, or CPNotFound if none. +*/ +- (CPInteger)editedRow +{ + return _editingRow; +} + /*! @ignore */ diff --git a/Tests/Manual/TableTest/Editing/AppController.j b/Tests/Manual/TableTest/Editing/AppController.j index c1db7c183..6b35dd8d3 100644 --- a/Tests/Manual/TableTest/Editing/AppController.j +++ b/Tests/Manual/TableTest/Editing/AppController.j @@ -10,12 +10,14 @@ @import @import +CPLogRegister(CPLogConsole); + @implementation AppController : CPObject { CPArray rowData; CPArray rowEdits; - Int numberOfRows; - Int numberOfEditsKept; + CPInteger numberOfRows; + CPInteger numberOfEditsKept; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification @@ -26,7 +28,7 @@ // Initialize data structures. - numberOfRows = 10; + numberOfRows = 100; numberOfEditsKept = 6; var i = numberOfRows; @@ -104,6 +106,7 @@ - (void)tableView:(CPTableView)tableView setObjectValue:(id)aValue forTableColumn:(CPTableColumn)tableColumn row:(int)aRow { +CPLog.debug(_cmd + tableColumn + aRow + aValue); var name = [tableColumn identifier]; switch(name) @@ -113,6 +116,7 @@ rowEdits[aRow].unshift(rowData[aRow]); rowEdits[aRow].pop; rowData[aRow] = aValue; + [tableView reloadData]; break; } } From 690ae1a7b6a2de0bd271559b3edb32fc116cef07 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 23 Mar 2013 21:08:49 +0100 Subject: [PATCH 006/234] Fixed: noteHeightOfRowsWithIndexesChanged: was not showing immediatly row height changes. Todo: instead of reloading everything we should be able to just relayout frames for visible views and then tile. --- AppKit/CPTableView.j | 24 ++++++++++++------- .../TableTest/ViewBasedCib/AppController.j | 7 +++++- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 43e337b51..2543b5076 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -2210,7 +2210,7 @@ NOT YET IMPLEMENTED // this line serves two purposes // 1. it updates the _numberOfRows cache with the -numberOfRows call // 2. it updates the row height cache if needed - [self noteHeightOfRowsWithIndexesChanged:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])]]; + [self _noteHeightOfRowsWithIndexesChanged:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])]]; // remove row indexes from the selection if they no longer exist var hangingSelections = oldNumberOfRows - _numberOfRows; @@ -2232,13 +2232,10 @@ NOT YET IMPLEMENTED [self tile]; } - -/*! - Informs the receiver that the rows specified in indexSet have changed height. - - @param anIndexSet an index set containing the indexes of the rows which changed height +/* + Like noteHeightOfRowsWithIndexesChanged: but without reloading the data views */ -- (void)noteHeightOfRowsWithIndexesChanged:(CPIndexSet)anIndexSet +- (void)_noteHeightOfRowsWithIndexesChanged:(CPIndexSet)anIndexSet { if (!(_implementedDelegateMethods & CPTableViewDelegate_tableView_heightOfRow_)) return; @@ -2261,6 +2258,17 @@ NOT YET IMPLEMENTED } } +/*! + Informs the receiver that the rows specified in indexSet have changed height. + + @param anIndexSet an index set containing the indexes of the rows which changed height +*/ +- (void)noteHeightOfRowsWithIndexesChanged:(CPIndexSet)anIndexSet +{ + [self _noteHeightOfRowsWithIndexesChanged:anIndexSet]; + [self _reloadDataViews]; +} + /*! Lays out the dataviews and resizes the tableview so that everything fits. */ @@ -2279,7 +2287,7 @@ NOT YET IMPLEMENTED { // if this is the fist run we need to populate the cache if ([self numberOfRows] !== _cachedRowHeights.length) - [self noteHeightOfRowsWithIndexesChanged:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])]]; + [self _noteHeightOfRowsWithIndexesChanged:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])]]; var heightObject = _cachedRowHeights[_cachedRowHeights.length - 1], height = heightObject.heightAboveRow + heightObject.height + _intercellSpacing.height; diff --git a/Tests/Manual/TableTest/ViewBasedCib/AppController.j b/Tests/Manual/TableTest/ViewBasedCib/AppController.j index 7fe537fc5..9bad2bb20 100644 --- a/Tests/Manual/TableTest/ViewBasedCib/AppController.j +++ b/Tests/Manual/TableTest/ViewBasedCib/AppController.j @@ -209,13 +209,18 @@ CPLogRegister(CPLogConsole) row = [table rowForView:sender]; [table noteHeightOfRowsWithIndexesChanged:[CPIndexSet indexSetWithIndex:row]]; - [table reloadData]; } // Action sent from a cellView subview to its target. CPLog.debug(_cmd + " value=" + [sender intValue]); } +- (void)setVariableRowHeight:(BOOL)flag +{ + variableRowHeight = flag; + [[self tableView] reloadData]; +} + - (IBAction)_textFieldNotBezeledAction:(id)sender { CPLog.debug(_cmd + " value=" + [sender stringValue]); From a4bf6c1f7a2d148872d9388129423d98d2e872f7 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 30 Mar 2013 22:55:06 +0100 Subject: [PATCH 007/234] Fixed: selectColumnIndexes:byExtendingSelection: returns early when there is no change in columns selection Before this change, rows could be unselected even if the columns selection did not change. --- AppKit/CPTableView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 2543b5076..ee3855335 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -1205,7 +1205,7 @@ NOT YET IMPLEMENTED - (void)selectColumnIndexes:(CPIndexSet)columns byExtendingSelection:(BOOL)shouldExtendSelection { // If we're out of range, just return - if (([columns firstIndex] != CPNotFound && [columns firstIndex] < 0) || [columns lastIndex] >= [self numberOfColumns]) + if (([columns firstIndex] != CPNotFound && [columns firstIndex] < 0) || [columns lastIndex] >= [self numberOfColumns] || (!shouldExtendSelection && [columns isEqualToIndexSet:_selectedColumnIndexes]) || (shouldExtendSelection && [columns count] === 0)) return; // We deselect all rows when selecting columns. From 984c7a67f5894938e3b9f892b7f4e6c369c85fa0 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Thu, 28 Mar 2013 14:36:59 +0100 Subject: [PATCH 008/234] Fixed: -moveColumn:to: now preserve selected columns Fixed: Starting a column drag is now faster. Fixed: When dragging a selected column, selection is now drawn on the dragging view and the cursor is the closed hand. Fixed: When dragging a table column, underlying columns were sliding according to the tracking location instead of the column lateral edges. Fixed: In CPTableView, the drop indicator for rows could appear when dragging a column. This commit creates directly the dragging column instead of relying on built-in drag&drop. Also fixes a bug where the drop indicator would appear when dragging a column if some rows were previously drag&dropped. --- AppKit/CPTableHeaderView.j | 749 ++++++++++-------- AppKit/CPTableView.j | 202 +++-- .../TableTest/TableCibTest/AppController.j | 2 + .../TableTest/ViewBasedCib/AppController.j | 2 + 4 files changed, 537 insertions(+), 418 deletions(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index e74b02c0d..1263ded29 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -20,19 +20,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -@import - -@import "CPCursor.j" -@import "CPPasteboard.j" @import "CPTableColumn.j" +@import "CPTableView.j" @import "CPView.j" +@import "CPCursor.j" @import "_CPImageAndTextView.j" -@class CPTableView - @global CPApp - @implementation _CPTableColumnHeaderView : CPView { _CPImageAndTextView _textField; @@ -69,13 +64,18 @@ - (void)_init { - _textField = [[_CPImageAndTextView alloc] initWithFrame:CGRectMakeZero()]; + _textField = [[_CPImageAndTextView alloc] initWithFrame: + CGRectMake(5.0, 0.0, CGRectGetWidth([self bounds]) - 10.0, CGRectGetHeight([self bounds]))]; - [_textField setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; + [_textField setAutoresizingMask:CPViewWidthSizable|CPViewHeightSizable]; [_textField setLineBreakMode:CPLineBreakByTruncatingTail]; + [_textField setTextColor:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0]]; + [_textField setFont:[CPFont boldSystemFontOfSize:12.0]]; [_textField setAlignment:CPLeftTextAlignment]; [_textField setVerticalAlignment:CPCenterVerticalTextAlignment]; + [_textField setTextShadowColor:[CPColor whiteColor]]; + [_textField setTextShadowOffset:CGSizeMake(0,1)]; [self addSubview:_textField]; } @@ -168,26 +168,49 @@ - (void)_setIndicatorImage:(CPImage)anImage { - if (anImage) - { - [_textField setImage:anImage]; - [_textField setImagePosition:CPImageRight]; - } - else - { - [_textField setImagePosition:CPNoImage]; - } + if (anImage) + { + [_textField setImage:anImage]; + [_textField setImagePosition:CPImageRight]; + } + else + { + [_textField setImagePosition:CPNoImage]; + } +} + +- (CPImage)_indicatorImage +{ + return [_textField imagePosition] === CPNoImage ? nil : [_textField image]; +} + +- (void)drawRect:(CGRect)aRect +{ + var bounds = [self bounds]; + + if (!CGRectIntersectsRect(aRect, bounds)) + return; + + var context = [[CPGraphicsContext currentContext] graphicsPort], + maxX = CGRectGetMaxX(bounds) - 0.5; + + CGContextSetLineWidth(context, 1); + CGContextSetStrokeColor(context, [CPColor colorWithWhite:192.0/255.0 alpha:1.0]); + + CGContextBeginPath(context); + + CGContextMoveToPoint(context, maxX, CGRectGetMinY(bounds)); + CGContextAddLineToPoint(context, maxX, CGRectGetMaxY(bounds)); + + CGContextStrokePath(context); } @end var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringValueKey", _CPTableColumnHeaderViewFontKey = @"_CPTableColumnHeaderViewFontKey", - _CPTableColumnHeaderViewTextColorKey = @"_CPTableColumnHeaderViewTextColorKey", - _CPTableColumnHeaderViewTextShadowColorKey = @"_CPTableColumnHeaderViewTextShadowColorKey", - _CPTableColumnHeaderViewAlignmentKey = @"_CPTableColumnHeaderViewAlignmentKey", - _CPTableColumnHeaderViewLineBreakModeKey = @"_CPTableColumnHeaderViewLineBreakModeKey", _CPTableColumnHeaderViewImageKey = @"_CPTableColumnHeaderViewImageKey"; + _CPTableColumnHeaderViewIsDraggingKey = @"_CPTableColumnHeaderViewIsDraggingKey"; @implementation _CPTableColumnHeaderView (CPCoding) @@ -199,10 +222,7 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal [self _setIndicatorImage:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewImageKey]]; [self setStringValue:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewStringValueKey]]; [self setFont:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewFontKey]]; - [self setTextColor:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewTextColorKey]]; - [self setTextShadowColor:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewTextShadowColorKey]]; - [self setAlignment:[aCoder decodeIntForKey:_CPTableColumnHeaderViewAlignmentKey]]; - [self setLineBreakMode:[aCoder decodeIntForKey:_CPTableColumnHeaderViewLineBreakModeKey]]; + [self setFont:[aCoder decodeObjectForKey:_CPTableColumnHeaderViewFontKey]]; } return self; @@ -214,30 +234,37 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal [aCoder encodeObject:[_textField text] forKey:_CPTableColumnHeaderViewStringValueKey]; [aCoder encodeObject:[_textField image] forKey:_CPTableColumnHeaderViewImageKey]; - [aCoder encodeObject:[self font] forKey:_CPTableColumnHeaderViewFontKey]; - [aCoder encodeObject:[self textColor] forKey:_CPTableColumnHeaderViewTextColorKey]; - [aCoder encodeObject:[self textShadowColor] forKey:_CPTableColumnHeaderViewTextShadowColorKey]; - [aCoder encodeInt:[self alignment] forKey:_CPTableColumnHeaderViewAlignmentKey]; - [aCoder encodeInt:[self lineBreakMode] forKey:_CPTableColumnHeaderViewLineBreakModeKey]; + [aCoder encodeObject:[_textField font] forKey:_CPTableColumnHeaderViewFontKey]; } @end +CPTableHeaderViewDragColumnHeaderTag = 1; + +var CPTableHeaderViewResizeZone = 3.0, + CPTableHeaderViewDragTolerance = 10.0; + @implementation CPTableHeaderView : CPView { - CGPoint _mouseDownLocation; - CGPoint _previousTrackingLocation; - int _activeColumn; - int _pressedColumn; + CGPoint _mouseDownLocation; + CGPoint _columnMouseDownLocation; + CGPoint _mouseEnterExitLocation; + CGPoint _previousTrackingLocation; - BOOL _isResizing; - BOOL _isDragging; - BOOL _isTrackingColumn; - BOOL _drawsColumnLines; + int _activeColumn; + int _pressedColumn; - float _columnOldWidth; + BOOL _isResizing; + BOOL _isDragging; + BOOL _canDragColumn; - CPTableView _tableView @accessors(property=tableView); + CPView _columnDragView; + CPView _columnDragHeaderView; + CPView _columnDragClipView; + + float _columnOldWidth; + + CPTableView _tableView @accessors(property=tableView); } + (CPString)defaultThemeClass @@ -256,14 +283,16 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal - (void)_init { _mouseDownLocation = CGPointMakeZero(); + _columnMouseDownLocation = CGPointMakeZero(); + _mouseEnterExitLocation = CGPointMakeZero(); _previousTrackingLocation = CGPointMakeZero(); + _activeColumn = -1; _pressedColumn = -1; _isResizing = NO; _isDragging = NO; - _isTrackingColumn = NO; - _drawsColumnLines = YES; + _canDragColumn = NO; _columnOldWidth = 0.0; @@ -280,14 +309,39 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal return self; } -- (int)columnAtPoint:(CGPoint)aPoint +// Checking Altered Columns + +- (CPInteger)draggedColumn { - return [_tableView columnAtPoint:CGPointMake(aPoint.x, aPoint.y)]; + return _isDragging ? _activeColumn : -1; } -- (CGRect)headerRectOfColumn:(int)aColumnIndex +- (float)draggedDistance { - var headerRect = CGRectMakeCopy([self bounds]), + if (_isDragging) + return (CGRectGetMinX(_columnDragClipView) - _columnMouseDownLocation.x); + else + return -1; +} + +- (CPInteger)resizedColumn +{ + if (_isResizing) + return _activeColumn; + else + return -1; +} + +// Utility Methods + +- (CPInteger)columnAtPoint:(CGPoint)aPoint +{ + return [_tableView columnAtPoint:aPoint]; +} + +- (CGRect)headerRectOfColumn:(CPInteger)aColumnIndex +{ + var headerRect = [self bounds], columnRect = [_tableView rectOfColumn:aColumnIndex]; headerRect.origin.x = CGRectGetMinX(columnRect); @@ -296,31 +350,163 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal return headerRect; } -- (void)setDrawsColumnLines:(BOOL)aFlag +// CPView Overrides + +- (void)viewDidMoveToWindow { - _drawsColumnLines = aFlag; + [super viewDidMoveToWindow]; + + [[self window] setAcceptsMouseMovedEvents:YES]; } -- (BOOL)drawsColumnLines +- (void)layoutSubviews { - return _drawsColumnLines; + var tableColumns = [_tableView tableColumns], + count = [tableColumns count]; + + for (var i = 0; i < count; i++) + { + var column = [tableColumns objectAtIndex:i], + headerView = [column headerView], + frame = [self headerRectOfColumn:i]; + + [headerView setFrame:frame]; + + if ([headerView superview] != self) + [self addSubview:headerView]; + } } -- (CGRect)_cursorRectForColumn:(int)column +// CPResponder Overrides + +- (void)mouseDown:(CPEvent)theEvent +{ + var currentLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil], + adjustedLocation = CGPointMake(MAX(currentLocation.x - CPTableHeaderViewResizeZone, 0.0), currentLocation.y), + columnIndex = [self columnAtPoint:adjustedLocation]; + + if (columnIndex === -1) + return; + + _mouseDownLocation = currentLocation; + _activeColumn = columnIndex; + _canDragColumn = YES; + + [_tableView _sendDelegateDidMouseDownInHeader:columnIndex]; + + if ([self _shouldResizeTableColumn:columnIndex at:currentLocation]) + [self _startResizingTableColumn:columnIndex at:currentLocation]; + else + [self _setPressedColumn:columnIndex]; +} + +- (void)mouseDragged:(CPEvent)theEvent +{ + var currentLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil], + adjustedLocation = CGPointMake(MAX(currentLocation.x - CPTableHeaderViewResizeZone, 0.0), currentLocation.y), + columnIndex = [self columnAtPoint:adjustedLocation]; + + if (_isResizing) + { + [self _autoscroll:theEvent localLocation:currentLocation]; + [self _continueResizingTableColumn:_activeColumn at:currentLocation]; + } + else if (_isDragging) + { + // Disable autoscrolling until it behaves correctly. + //[self _autoscroll:theEvent localLocation:currentLocation]; + [self _dragTableColumn:_activeColumn to:currentLocation]; + } + else // tracking a press, could become a drag + { + if (CGRectContainsPoint([self headerRectOfColumn:_activeColumn], currentLocation)) + { + if ([self _shouldDragTableColumn:columnIndex at:currentLocation]) + [self _startDraggingTableColumn:columnIndex at:currentLocation]; + else + [self _setPressedColumn:_activeColumn]; + } + else + [self _setPressedColumn:-1]; + } +} + +- (void)mouseUp:(CPEvent)theEvent +{ + if (_isResizing) + { + [self _stopResizingTableColumn:_activeColumn]; + } + else if (_isDragging) + { + [self _stopDraggingTableColumn:_activeColumn]; + } + else if (_activeColumn != -1) + { + var currentLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil]; + + if (CGRectContainsPoint([self headerRectOfColumn:_activeColumn], currentLocation)) + [_tableView _didClickTableColumn:_activeColumn modifierFlags:[theEvent modifierFlags]]; + } + + [self _setPressedColumn:-1]; + [self _updateResizeCursor:[CPApp currentEvent]]; + + _activeColumn = -1; +} + +- (void)mouseEntered:(CPEvent)theEvent +{ + var location = [theEvent globalLocation]; + + if (CGPointEqualToPoint(location, _mouseEnterExitLocation)) + return; + + _mouseEnterExitLocation = location; + + [self _updateResizeCursor:theEvent]; +} + +- (void)mouseMoved:(CPEvent)theEvent +{ + [self _updateResizeCursor:theEvent]; +} + +- (void)mouseExited:(CPEvent)theEvent +{ + var location = [theEvent globalLocation]; + + if (CGPointEqualToPoint(location, _mouseEnterExitLocation)) + return; + + _mouseEnterExitLocation = location; + + // FIXME: we should use CPCursor push/pop (if previous currentCursor != arrow). + [[CPCursor arrowCursor] set]; +} + +@end + +@implementation CPTableHeaderView (CPTableHeaderViewPrivate) + +- (CGRect)_cursorRectForColumn:(CPInteger)column { if (column == -1 || !([_tableView._tableColumns[column] resizingMask] & CPTableColumnUserResizingMask)) return CGRectMakeZero(); var rect = [self headerRectOfColumn:column]; - rect.origin.x = CGRectGetMaxX(rect) - 5; - rect.size.width = 20; + rect.origin.x = (CGRectGetMaxX(rect) - CPTableHeaderViewResizeZone) - 1.0; + rect.size.width = (CPTableHeaderViewResizeZone * 2.0) + 1.0; // + 1 for resize line return rect; } - (void)_setPressedColumn:(CPInteger)column { + if (_pressedColumn === column) + return; + if (_pressedColumn != -1) { var headerView = [_tableView._tableColumns[_pressedColumn] headerView]; @@ -331,131 +517,37 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal { var headerView = [_tableView._tableColumns[column] headerView]; [headerView setThemeState:CPThemeStateHighlighted]; - - if (_tableView._editingColumn == column) - [[self window] makeFirstResponder:_tableView]; + } + else + { + // Once the mouse leaves the pressed column, it can no longer drag + _canDragColumn = NO; } _pressedColumn = column; } -- (void)mouseDown:(CPEvent)theEvent +- (BOOL)_shouldDragTableColumn:(CPInteger)aColumnIndex at:(CGPoint)aPoint { - [self trackMouse:theEvent]; + return _canDragColumn && [_tableView allowsColumnReordering] && ABS(aPoint.x - _mouseDownLocation.x) >= CPTableHeaderViewDragTolerance; } -- (void)trackMouse:(CPEvent)theEvent +- (void)_autoscroll:(CPEvent)theEvent localLocation:(CGPoint)theLocation { - var type = [theEvent type], - currentLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil]; + // Constrain the y coordinate so we don't autoscroll vertically + var constrainedLocation = CGPointMake(theLocation.x, CGRectGetMinY([_tableView visibleRect])), + constrainedEvent = [CPEvent mouseEventWithType:CPLeftMouseDragged + location:[self convertPoint:constrainedLocation toView:nil] + modifierFlags:[theEvent modifierFlags] + timestamp:[theEvent timestamp] + windowNumber:[theEvent windowNumber] + context:nil + eventNumber:0 + clickCount:[theEvent clickCount] + pressure:[theEvent pressure]]; - // Take the right columns resize tracking area into account - currentLocation.x -= 5.0; - - var columnIndex = [self columnAtPoint:currentLocation], - shouldResize = [self shouldResizeTableColumn:columnIndex at:CGPointMake(currentLocation.x + 5.0, currentLocation.y)]; - - if (type === CPLeftMouseUp) - { - if (shouldResize) - [self stopResizingTableColumn:_activeColumn at:currentLocation]; - else if ([self _shouldStopTrackingTableColumn:columnIndex at:currentLocation]) - { - [_tableView _didClickTableColumn:columnIndex modifierFlags:[theEvent modifierFlags]]; - [self stopTrackingTableColumn:columnIndex at:currentLocation]; - - _isTrackingColumn = NO; - } - - [self _updateResizeCursor:[CPApp currentEvent]]; - - _activeColumn = CPNotFound; - return; - } - - if (type === CPLeftMouseDown) - { - if (columnIndex === -1) - return; - - _mouseDownLocation = currentLocation; - _activeColumn = columnIndex; - - [_tableView _sendDelegateDidMouseDownInHeader:columnIndex]; - - if (shouldResize) - [self startResizingTableColumn:columnIndex at:currentLocation]; - else - { - [self startTrackingTableColumn:columnIndex at:currentLocation]; - _isTrackingColumn = YES; - } - } - else if (type === CPLeftMouseDragged) - { - if (shouldResize) - [self continueResizingTableColumn:_activeColumn at:currentLocation]; - else - { - if (_activeColumn === columnIndex && CGRectContainsPoint([self headerRectOfColumn:columnIndex], currentLocation)) - { - if (_isTrackingColumn && _pressedColumn !== -1) - { - if (![self continueTrackingTableColumn:columnIndex at:currentLocation]) - return; // Stop tracking the column, because it's being dragged - } else - [self startTrackingTableColumn:columnIndex at:currentLocation]; - - } else if (_isTrackingColumn && _pressedColumn !== -1) - [self stopTrackingTableColumn:_activeColumn at:currentLocation]; - } - } - - _previousTrackingLocation = currentLocation; - [CPApp setTarget:self selector:@selector(trackMouse:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES]; -} - -- (void)startTrackingTableColumn:(int)aColumnIndex at:(CGPoint)aPoint -{ - [self _setPressedColumn:aColumnIndex]; -} - -- (BOOL)continueTrackingTableColumn:(int)aColumnIndex at:(CGPoint)aPoint -{ - if ([self _shouldDragTableColumn:aColumnIndex at:aPoint]) - { - var columnRect = [self headerRectOfColumn:aColumnIndex], - offset = CGPointMakeZero(), - view = [_tableView _dragViewForColumn:aColumnIndex event:[CPApp currentEvent] offset:offset], - viewLocation = CGPointMakeZero(); - - viewLocation.x = ( CGRectGetMinX(columnRect) + offset.x ) + ( aPoint.x - _mouseDownLocation.x ); - viewLocation.y = CGRectGetMinY(columnRect) + offset.y; - - [self dragView:view at:viewLocation offset:CGSizeMakeZero() event:[CPApp currentEvent] - pasteboard:[CPPasteboard pasteboardWithName:CPDragPboard] source:self slideBack:YES]; - - return NO; - } - - return YES; -} - -- (BOOL)_shouldStopTrackingTableColumn:(int)aColumnIndex at:(CGPoint)aPoint -{ - return _isTrackingColumn && _activeColumn === aColumnIndex && - CGRectContainsPoint([self headerRectOfColumn:aColumnIndex], aPoint); -} - -- (void)stopTrackingTableColumn:(int)aColumnIndex at:(CGPoint)aPoint -{ - [self _setPressedColumn:CPNotFound]; - [self _updateResizeCursor:[CPApp currentEvent]]; -} - -- (BOOL)_shouldDragTableColumn:(int)aColumnIndex at:(CGPoint)aPoint -{ - return [_tableView allowsColumnReordering] && ABS(aPoint.x - _mouseDownLocation.x) >= 10.0; + [self autoscroll:constrainedEvent]; + [_tableView autoscroll:constrainedEvent]; } - (CGRect)_headerRectOfLastVisibleColumn @@ -474,143 +566,203 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal return nil; } -- (void)_constrainDragView:(CPView)theDragView at:(CGPoint)aPoint +- (CGPoint)_constrainDragPoint:(CGPoint)aPoint { - var tableColumns = [_tableView tableColumns], + // This effectively clamps the value between the minimum and maximum + var visibleRect = [_tableView visibleRect], lastColumnRect = [self _headerRectOfLastVisibleColumn], activeColumnRect = [self headerRectOfColumn:_activeColumn], - dragWindow = [theDragView window], - frame = [dragWindow frame]; + maxX = CGRectGetMaxX(lastColumnRect) - CGRectGetWidth(activeColumnRect) - CGRectGetMinX(visibleRect), + point = CGPointMake(MAX(MIN(aPoint.x, maxX), -CGRectGetMinX(visibleRect)), aPoint.y); - // Convert the frame origin from the global coordinate system to the windows' coordinate system - frame.origin = [[self window] convertGlobalToBase:frame.origin]; - // the from the window to the view - frame.origin = [self convertPoint:frame.origin fromView:nil]; - - // This effectively clamps the value between the minimum and maximum - frame.origin.x = MAX(0.0, MIN(CGRectGetMinX(frame), CGRectGetMaxX(lastColumnRect) - CGRectGetWidth(activeColumnRect))); - - // Make sure the column cannot move vertically - frame.origin.y = CGRectGetMinY(lastColumnRect); - - // Convert the calculated origin back to the window coordinate system - frame.origin = [self convertPoint:frame.origin toView:nil]; - // Then back to the global coordinate system - frame.origin = [[self window] convertBaseToGlobal:frame.origin]; - - [dragWindow setFrame:frame]; + return point; } -- (void)_moveColumn:(int)aFromIndex toColumn:(int)aToIndex +- (void)_moveColumn:(CPInteger)aFromIndex toColumn:(CPInteger)aToIndex { [_tableView moveColumn:aFromIndex toColumn:aToIndex]; _activeColumn = aToIndex; _pressedColumn = _activeColumn; -} -- (void)draggedView:(CPView)aView beganAt:(CGPoint)aPoint -{ - _isDragging = YES; - - var column = [[_tableView tableColumns] objectAtIndex:_activeColumn]; - - [[column headerView] setHidden:YES]; - [_tableView _setDraggedColumn:column]; + [_tableView _setDraggedColumn:_activeColumn]; [self setNeedsDisplay:YES]; } -- (void)draggedView:(CPView)aView movedTo:(CGPoint)aPoint +- (BOOL)isDragging { - [self _constrainDragView:aView at:aPoint]; + return _isDragging; +} - var dragWindow = [aView window], - dragWindowFrame = [dragWindow frame]; +- (void)_startDraggingTableColumn:(CPInteger)aColumnIndex at:(CGPoint)aPoint +{ + _isDragging = YES; + _columnDragView = [_tableView _dragViewForColumn:aColumnIndex]; + _previousTrackingLocation = aPoint; - var hoverPoint = CGPointCreateCopy(aPoint); + // Create a new clip view for the drag view that clips to the header + visible content + var headerHeight = CGRectGetHeight([self frame]), + scrollView = [self enclosingScrollView], + contentFrame = [[scrollView contentView] frame]; - if (aPoint.x < _previousTrackingLocation.x) - hoverPoint = CGPointMake(CGRectGetMinX(dragWindowFrame), CGRectGetMinY(dragWindowFrame)); - else if (aPoint.x > _previousTrackingLocation.x) - hoverPoint = CGPointMake(CGRectGetMaxX(dragWindowFrame), CGRectGetMinY(dragWindowFrame)); + contentFrame.origin.y -= headerHeight; + contentFrame.size.height += headerHeight; - // Convert the hover point from the global coordinate system to windows' coordinate system - hoverPoint = [[self window] convertGlobalToBase:hoverPoint]; - // then to the view - hoverPoint = [self convertPoint:hoverPoint fromView:nil]; + _columnDragClipView = [[CPView alloc] initWithFrame:contentFrame]; - var hoveredColumn = [self columnAtPoint:hoverPoint]; + [_columnDragClipView addSubview:_columnDragView]; - if (hoveredColumn !== -1) + // Insert the clip view above the table header (and content) + [scrollView addSubview:_columnDragClipView positioned:CPWindowAbove relativeTo:self]; + + // Hide the underlying column header subviews, we just want to draw the chrome + var headerView = [[[_tableView tableColumns] objectAtIndex:aColumnIndex] headerView]; + + [[headerView subviews] makeObjectsPerformSelector:@selector(setHidden:) withObject:YES]; + + // The underlying column header shows normal state + [headerView unsetThemeState:CPThemeStateHighlighted | CPThemeStateSelected]; + + // Keep track of the location within the column header where the original mousedown occurred + _columnDragHeaderView = [_columnDragView viewWithTag:CPTableHeaderViewDragColumnHeaderTag]; + + _columnMouseDownLocation = [self convertPoint:_mouseDownLocation toView:_columnDragHeaderView]; + + [_tableView _setDraggedColumn:aColumnIndex]; + + [[CPCursor closedHandCursor] set]; + + [self setNeedsDisplay:YES]; +} + +- (void)_dragTableColumn:(CPInteger)aColumnIndex to:(CGPoint)aPoint +{ + var delta = aPoint.x - _previousTrackingLocation.x, + columnPoint = [_columnDragHeaderView convertPoint:aPoint fromView:self]; + + // Only move if the mouse is past the original click point in the direction of movement + if ((delta > 0 && columnPoint.x > _columnMouseDownLocation.x) || (delta < 0 && columnPoint.x < _columnMouseDownLocation.x)) { - var columnRect = [self headerRectOfColumn:hoveredColumn], - columnCenterPoint = [self convertPoint:CGPointMake(CGRectGetMidX(columnRect), CGRectGetMidY(columnRect)) fromView:self]; - if (hoveredColumn < _activeColumn && hoverPoint.x < columnCenterPoint.x) - [self _moveColumn:_activeColumn toColumn:hoveredColumn]; - else if (hoveredColumn > _activeColumn && hoverPoint.x > columnCenterPoint.x) - [self _moveColumn:_activeColumn toColumn:hoveredColumn]; + var dragFrame = [_columnDragView frame], + newOrigin = [self _constrainDragPoint:CGPointMake(CGRectGetMinX(dragFrame) + delta, CGRectGetMinY(dragFrame))]; + + [_columnDragView setFrameOrigin:newOrigin]; + + // When the edge of the dragged column passes the midpoint of an adjacent column, they swap + var hoverPoint = CGPointMakeCopy(aPoint); + + // The drag frame is in content view coordinates, we need it to be in our coordinates + dragFrame = [self convertRect:dragFrame fromView:[_columnDragView superview]]; + + if (delta > 0) + hoverPoint.x = CGRectGetMaxX(dragFrame); + else + hoverPoint.x = CGRectGetMinX(dragFrame); + + var hoveredColumn = [self columnAtPoint:hoverPoint]; + + if (hoveredColumn !== -1) + { + var columnRect = [self headerRectOfColumn:hoveredColumn], + columnCenterPoint = CGPointMake(CGRectGetMidX(columnRect), CGRectGetMidY(columnRect)); + + if (hoveredColumn < _activeColumn && hoverPoint.x < columnCenterPoint.x) + [self _moveColumn:_activeColumn toColumn:hoveredColumn]; + else if (hoveredColumn > _activeColumn && hoverPoint.x > columnCenterPoint.x) + [self _moveColumn:_activeColumn toColumn:hoveredColumn]; + } } _previousTrackingLocation = aPoint; } -- (void)draggedView:(CPImage)aView endedAt:(CGPoint)aLocation operation:(CPDragOperation)anOperation +- (void)_stopDraggingTableColumn:(CPInteger)aColumnIndex { _isDragging = NO; - _isTrackingColumn = NO; // We need to do this explicitly because the mouse up section of trackMouse is never reached - [_tableView _setDraggedColumn:nil]; - [[[[_tableView tableColumns] objectAtIndex:_activeColumn] headerView] setHidden:NO]; - [self stopTrackingTableColumn:_activeColumn at:aLocation]; + [_columnDragClipView removeFromSuperview]; + [_tableView _setDraggedColumn:-1]; - [self setNeedsDisplay:YES]; + var headerView = [[[_tableView tableColumns] objectAtIndex:aColumnIndex] headerView]; + + [[headerView subviews] makeObjectsPerformSelector:@selector(setHidden:) withObject:NO]; + + if (_tableView._draggedColumnIsSelected) + [headerView setThemeState:CPThemeStateSelected]; + + var columnRect = [_tableView rectOfColumn:aColumnIndex]; + + [_tableView _reloadDataViews]; + [[_tableView headerView] setNeedsLayout]; + + [[CPCursor arrowCursor] set]; } -- (BOOL)shouldResizeTableColumn:(int)aColumnIndex at:(CGPoint)aPoint +- (BOOL)_shouldResizeTableColumn:(CPInteger)aColumnIndex at:(CGPoint)aPoint { if (_isResizing) return YES; - if (_isTrackingColumn) - return NO; - return [_tableView allowsColumnResizing] && CGRectContainsPoint([self _cursorRectForColumn:aColumnIndex], aPoint); } -- (void)startResizingTableColumn:(int)aColumnIndex at:(CGPoint)aPoint +- (void)_startResizingTableColumn:(CPInteger)aColumnIndex at:(CGPoint)aPoint { _isResizing = YES; + _previousTrackingLocation = aPoint; + _activeColumn = aColumnIndex; var tableColumn = [[_tableView tableColumns] objectAtIndex:aColumnIndex]; + _columnOldWidth = [tableColumn width]; + [tableColumn setDisableResizingPosting:YES]; [_tableView setDisableAutomaticResizing:YES]; } -- (void)continueResizingTableColumn:(int)aColumnIndex at:(CGPoint)aPoint +- (void)_continueResizingTableColumn:(CPInteger)aColumnIndex at:(CGPoint)aPoint { var tableColumn = [[_tableView tableColumns] objectAtIndex:aColumnIndex], - newWidth = [tableColumn width] + aPoint.x - _previousTrackingLocation.x; + delta = aPoint.x - _previousTrackingLocation.x, + spacing = [_tableView intercellSpacing].width, + newWidth = [tableColumn width] + spacing + delta, + minWidth = [tableColumn minWidth] + spacing, + maxWidth = [tableColumn maxWidth] + spacing; - if (newWidth < [tableColumn minWidth]) + if (newWidth <= minWidth) [[CPCursor resizeRightCursor] set]; - else if (newWidth > [tableColumn maxWidth]) + else if (newWidth >= maxWidth) [[CPCursor resizeLeftCursor] set]; else - { - _tableView._lastColumnShouldSnap = NO; - [tableColumn setWidth:newWidth]; - [[CPCursor resizeLeftRightCursor] set]; + + var columnRect = [_tableView rectOfColumn:aColumnIndex], + columnWidth = CGRectGetWidth(columnRect); + + if ((delta > 0 && columnWidth == maxWidth) || (delta < 0 && columnWidth == minWidth)) + return; + + var columnMinX = CGRectGetMinX(columnRect), + columnMaxX = CGRectGetMaxX(columnRect); + + if ((delta > 0 && aPoint.x > columnMaxX) || (delta < 0 && aPoint.x < columnMaxX)) + { + [tableColumn setWidth:newWidth - spacing]; + [self setNeedsLayout]; [self setNeedsDisplay:YES]; } + + _previousTrackingLocation = aPoint; } -- (void)stopResizingTableColumn:(int)aColumnIndex at:(CGPoint)aPoint +- (void)_stopResizingTableColumn:(CPInteger)aColumnIndex { var tableColumn = [[_tableView tableColumns] objectAtIndex:aColumnIndex]; - [tableColumn _postDidResizeNotificationWithOldWidth:_columnOldWidth]; + + if ([tableColumn width] != _columnOldWidth) + [tableColumn _postDidResizeNotificationWithOldWidth:_columnOldWidth]; + [tableColumn setDisableResizingPosting:NO]; [_tableView setDisableAutomaticResizing:NO]; @@ -627,17 +779,18 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal } var mouseLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil], - mouseOverLocation = CGPointMake(mouseLocation.x - 5, mouseLocation.y), + mouseOverLocation = CGPointMake(MAX(mouseLocation.x - CPTableHeaderViewResizeZone, 0.0), mouseLocation.y), overColumn = [self columnAtPoint:mouseOverLocation]; if (overColumn >= 0 && CGRectContainsPoint([self _cursorRectForColumn:overColumn], mouseLocation)) { var tableColumn = [[_tableView tableColumns] objectAtIndex:overColumn], + spacing = [_tableView intercellSpacing].width, width = [tableColumn width]; - if (width == [tableColumn minWidth]) + if (width <= [tableColumn minWidth]) [[CPCursor resizeRightCursor] set]; - else if (width == [tableColumn maxWidth]) + else if (width >= [tableColumn maxWidth]) [[CPCursor resizeLeftCursor] set]; else [[CPCursor resizeLeftRightCursor] set]; @@ -646,99 +799,9 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal [[CPCursor arrowCursor] set]; } -- (void)mouseEntered:(CPEvent)theEvent -{ - [self _updateResizeCursor:theEvent]; -} +@end // CPTableView (CPTableViewPrivate) -- (void)mouseMoved:(CPEvent)theEvent -{ - [self _updateResizeCursor:theEvent]; -} - -- (void)mouseExited:(CPEvent)theEvent -{ - // FIXME: we should use CPCursor push/pop (if previous currentCursor != arrow). - [[CPCursor arrowCursor] set]; -} - -- (void)layoutSubviews -{ - var tableColumns = [_tableView tableColumns], - count = [tableColumns count]; - - for (var i = 0; i < count; i++) - { - var column = [tableColumns objectAtIndex:i], - headerView = [column headerView], - frame = [self headerRectOfColumn:i]; - - // Make space for the gridline on the right. - frame.origin.x -= 0.5; - frame.size.width -= 1.0; - frame.size.height -= 0.5; - // Note: we're not adding in intercell spacing here. This setting only affects the regular - // table cell data views, not the header. Verified in Cocoa on March 29th, 2011. - - [headerView setFrame:frame]; - - if ([headerView superview] != self) - [self addSubview:headerView]; - } - - [self setBackgroundColor:[self currentValueForThemeAttribute:@"background-color"]]; -} - -- (void)drawRect:(CGRect)aRect -{ - if (!_tableView || ![self drawsColumnLines]) - return; - - var context = [[CPGraphicsContext currentContext] graphicsPort], - exposedColumnIndexes = [_tableView columnIndexesInRect:aRect], - columnsArray = [], - tableColumns = [_tableView tableColumns], - exposedTableColumns = _tableView._exposedColumns, - firstIndex = [exposedTableColumns firstIndex], - exposedRange = CPMakeRange(firstIndex, [exposedTableColumns lastIndex] - firstIndex + 1); - - CGContextSetLineWidth(context, 1); - CGContextSetStrokeColor(context, [self currentValueForThemeAttribute:@"divider-color"]); - - [exposedColumnIndexes getIndexes:columnsArray maxCount:-1 inIndexRange:exposedRange]; - - var columnArrayIndex = 0, - columnArrayCount = columnsArray.length, - columnMaxX; - - CGContextBeginPath(context); - - for (; columnArrayIndex < columnArrayCount; columnArrayIndex++) - { - // grab each column rect and add vertical lines - var columnIndex = columnsArray[columnArrayIndex], - columnToStroke = [self headerRectOfColumn:columnIndex]; - - columnMaxX = CGRectGetMaxX(columnToStroke); - - CGContextMoveToPoint(context, FLOOR(columnMaxX) - 0.5, ROUND(CGRectGetMinY(columnToStroke))); - CGContextAddLineToPoint(context, FLOOR(columnMaxX) - 0.5, ROUND(CGRectGetMaxY(columnToStroke)) - 1.0); - } - - CGContextClosePath(context); - CGContextStrokePath(context); - - /*if (_isDragging) - { - CGContextSetFillColor(context, [CPColor grayColor]); - CGContextFillRect(context, [self headerRectOfColumn:_activeColumn]) - }*/ -} - -@end - -var CPTableHeaderViewTableViewKey = @"CPTableHeaderViewTableViewKey", - CPTableHeaderViewDrawsColumnLines = @"CPTableHeaderViewDrawsColumnLines"; +var CPTableHeaderViewTableViewKey = @"CPTableHeaderViewTableViewKey"; @implementation CPTableHeaderView (CPCoding) @@ -748,15 +811,6 @@ var CPTableHeaderViewTableViewKey = @"CPTableHeaderViewTableViewKey", { [self _init]; _tableView = [aCoder decodeObjectForKey:CPTableHeaderViewTableViewKey]; - - // FIX ME: Take this out before 1.0 - if ([aCoder containsValueForKey:CPTableHeaderViewDrawsColumnLines]) - _drawsColumnLines = [aCoder decodeBoolForKey:CPTableHeaderViewDrawsColumnLines]; - else - { - _drawsColumnLines = YES; - CPLog.warn("The tableview header being decoded is using an old cib. Please run Nib2Cib."); - } } return self; @@ -766,7 +820,6 @@ var CPTableHeaderViewTableViewKey = @"CPTableHeaderViewTableViewKey", { [super encodeWithCoder:aCoder]; [aCoder encodeObject:_tableView forKey:CPTableHeaderViewTableViewKey]; - [aCoder encodeBool:_drawsColumnLines forKey:CPTableHeaderViewDrawsColumnLines]; } -@end +@end \ No newline at end of file diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index ee3855335..51001d984 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -40,6 +40,7 @@ @class CPClipView @class CPUserDefaults @class CPTableHeaderView +@class _CPTableColumnHeaderView @class CPClipView @class CPButton @@ -267,7 +268,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; SEL _viewForTableColumnRowSelector; - CPTableColumn _draggedColumn; + CPInteger _draggedColumnIndex; + BOOL _draggedColumnIsSelected; CPArray _differedColumnDataToRemove; } @@ -394,7 +396,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; [_tableDrawView setBackgroundColor:[CPColor clearColor]]; [self addSubview:_tableDrawView]; - _draggedColumn = nil; + _draggedColumnIndex = -1; + _draggedColumnIsSelected = NO; _editingRow = CPNotFound; _editingColumn = CPNotFound; @@ -1059,21 +1062,16 @@ NOT YET IMPLEMENTED @ignore Internally used to set a column that will be dragged */ -- (void)_setDraggedColumn:(CPTableColumn)aColumn +- (void)_setDraggedColumn:(CPInteger)columnIndex { - if (_draggedColumn === aColumn) + if (_draggedColumnIndex === columnIndex) return; - var previouslyDraggedColumn = _draggedColumn; - _draggedColumn = aColumn; + // If ending a column drag, reselect the column if it was selected before the drag + if (columnIndex === -1 && _draggedColumnIsSelected) + [_selectedColumnIndexes addIndex:_draggedColumnIndex]; - // if a column is currently being dragged, update that column (removing data views) - if (aColumn) - [self _layoutViewsForRowIndexes:_exposedRows columnIndexes:[CPIndexSet indexSetWithIndex:[_tableColumns indexOfObject:aColumn]]]; - - // when the column is dropped, we should also update it. - if (previouslyDraggedColumn) - [self _layoutViewsForRowIndexes:_exposedRows columnIndexes:[CPIndexSet indexSetWithIndex:[_tableColumns indexOfObject:previouslyDraggedColumn]]]; + _draggedColumnIndex = columnIndex; } /* @@ -1094,7 +1092,8 @@ NOT YET IMPLEMENTED else _dirtyTableColumnRangeIndex = MIN(fromIndex, toIndex, _dirtyTableColumnRangeIndex); - var tableColumn = _tableColumns[fromIndex]; + var tableColumn = _tableColumns[fromIndex], + selectedTableColumns = [_tableColumns objectsAtIndexes:_selectedColumnIndexes]; [_tableColumns removeObjectAtIndex:fromIndex]; [_tableColumns insertObject:tableColumn atIndex:toIndex]; @@ -1102,10 +1101,25 @@ NOT YET IMPLEMENTED [[self headerView] setNeedsLayout]; [[self headerView] setNeedsDisplay:YES]; - var range = CPMakeRange(MIN(fromIndex, toIndex), ABS(fromIndex - toIndex) + 1); - var columnIndexes = [CPIndexSet indexSetWithIndexesInRange:range]; + var range = CPMakeRange(MIN(fromIndex, toIndex), ABS(fromIndex - toIndex) + 1), + layoutColumnIndexes = [CPIndexSet indexSetWithIndexesInRange:range], + selectedColumnIndexes = [CPIndexSet indexSet]; + + [_tableColumns enumerateObjectsUsingBlock:function(tableColumn, idx, stop) + { + if ([selectedTableColumns containsObjectIdenticalTo:tableColumn]) + [selectedColumnIndexes addIndex:idx]; + }]; + + if ([_selectedColumnIndexes containsIndex:fromIndex]) + [selectedColumnIndexes addIndex:toIndex]; + + if (_draggedColumnIndex !== -1) + [layoutColumnIndexes removeIndex:toIndex]; + + [self _layoutViewsForRowIndexes:_exposedRows columnIndexes:layoutColumnIndexes]; + [self selectColumnIndexes:selectedColumnIndexes byExtendingSelection:NO]; - [self _layoutViewsForRowIndexes:_exposedRows columnIndexes:columnIndexes]; // Notify even if programmatically moving a column as in Cocoa. // TODO Only notify when a column drag operation ends, not each time a column reaches a new slot? [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewColumnDidMoveNotification @@ -2997,48 +3011,74 @@ Your delegate can implement this method to avoid subclassing the tableview to ad return dragView; } -/*! - @ignore - // Fetches all the data views (from the datasource) for the column and it's visible rows - // Copy the dataviews add them to a transparent drag view and use that drag view - // to make it appear we are dragging images of those rows (as you would do in regular Cocoa) -*/ -- (CPView)_dragViewForColumn:(int)theColumnIndex event:(CPEvent)theDragEvent offset:(CGPoint)theDragViewOffset +- (CPView)_dragViewForColumn:(CPInteger)columnIndex { - var dragView = [[_CPColumnDragView alloc] initWithLineColor:[self gridColor]], - tableColumn = [[self tableColumns] objectAtIndex:theColumnIndex], - defaultRowHeight = [self valueForThemeAttribute:@"default-row-height"], - bounds = CGRectMake(0.0, 0.0, [tableColumn width], CGRectGetHeight([self exposedRect]) + defaultRowHeight), - columnRect = [self rectOfColumn:theColumnIndex], - headerView = [tableColumn headerView], - row = [_exposedRows firstIndex]; + var headerFrame = [_headerView frame], + visibleRect = [self visibleRect], + visibleRows = [self rowsInRect:visibleRect], + columnRect = [self rectOfColumn:columnIndex], + tableColumn = [[self tableColumns] objectAtIndex:columnIndex], + tableColumnUID = [tableColumn UID], + columnHeaderView = [tableColumn headerView], + columnHeaderFrame = [columnHeaderView frame], + frame = CGRectMake(MAX(CGRectGetMinX(columnRect) - CGRectGetMinX(visibleRect), 0.0), + 0.0, + CGRectGetWidth(columnHeaderFrame), + CGRectGetHeight(visibleRect) + CGRectGetHeight(headerFrame)); - [dragView setFrame:bounds]; + // We need a wrapper view around the header and column, this is what will be dragged + var dragView = [[_CPColumnDragDrawingView alloc] initWithFrame:frame]; - while (row !== CPNotFound) + [dragView setTableView:self]; + [dragView setColumnIndex:columnIndex]; + [dragView setBackgroundColor:[CPColor clearColor]]; + [dragView setAlphaValue:0.6]; + + // Now a view that clips the column data views, which itself is clipped to the content view + var columnVisRect = CGRectIntersection(columnRect, visibleRect); + + frame = CGRectMake(0.0, CGRectGetHeight(headerFrame), CGRectGetWidth(columnVisRect), CGRectGetHeight(columnVisRect)); + + var columnClipView = [[CPView alloc] initWithFrame:frame]; + + [dragView addSubview:columnClipView]; + [dragView setColumnClipView:columnClipView]; + _draggedColumnIsSelected = [self isColumnSelected:columnIndex]; + + var columnLeft = CGRectGetMinX(columnRect); + + [self _enumerateViewsInRows:_exposedRows columns:[CPIndexSet indexSetWithIndex:columnIndex] usingBlock:function(dataView, row, column, stop) { - var dataView = [self _newDataViewForRow:row tableColumn:tableColumn], - dataViewFrame = [self frameOfDataViewAtColumn:theColumnIndex row:row]; + var dataViewFrame = [self frameOfDataViewAtColumn:column row:row]; - // Only one column is ever dragged so we just place the view at - dataViewFrame.origin.x = 0.0; + dataViewFrame.origin.x -= columnLeft; // Offset by table header height - scroll position - dataViewFrame.origin.y = ( CGRectGetMinY(dataViewFrame) - CGRectGetMinY([self exposedRect]) ) + defaultRowHeight; + dataViewFrame.origin.y -= CGRectGetMinY(visibleRect); [dataView setFrame:dataViewFrame]; - [self _setObjectValueForTableColumn:tableColumn row:row forView:dataView]; - [dragView addSubview:dataView]; + [columnClipView addSubview:dataView]; - row = [_exposedRows indexGreaterThanIndex:row]; - } + delete (_dataViewsForRows[row][tableColumnUID]); + }]; - // Add a copy of the header view. - var columnHeaderView = [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:headerView]]; - [dragView addSubview:columnHeaderView]; + // Add the column header view + columnHeaderFrame.origin = CGPointMakeZero(); - [dragView setBackgroundColor:[CPColor whiteColor]]; - [dragView setAlphaValue:0.7]; + var dragColumnHeaderView = [[_CPTableColumnHeaderView alloc] initWithFrame:columnHeaderFrame], + image = [columnHeaderView _indicatorImage]; + + [dragColumnHeaderView setStringValue:[columnHeaderView stringValue]]; + [dragColumnHeaderView setThemeState:[columnHeaderView themeState]]; + [dragColumnHeaderView _setIndicatorImage:image]; + + // Give it a tag so it can be found later + [dragColumnHeaderView setTag:1]; + + [dragView addSubview:dragColumnHeaderView]; + + // While dragging, the column is deselected in the table view + [_selectedColumnIndexes removeIndex:columnIndex]; return dragView; } @@ -5534,45 +5574,67 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", @end -@implementation _CPColumnDragView : CPView +@implementation _CPColumnDragDrawingView : CPView { - CPColor _lineColor; + CPTableView tableView @accessors; + int columnIndex @accessors; + CPView columnClipView @accessors; } -- (id)initWithLineColor:(CPColor)aColor +- (void)drawRect:(CGRect)dirtyRect { - self = [super initWithFrame:CGRectMakeZero()]; + var context = [[CPGraphicsContext currentContext] graphicsPort], + columnRect = [tableView rectOfColumn:columnIndex], + headerHeight = CGRectGetHeight([[tableView headerView] frame]), + bounds = [columnClipView bounds], + visibleRect = [tableView visibleRect], + xScroll = CGRectGetMinX(visibleRect), + yScroll = CGRectGetMinY(visibleRect); - if (self) - _lineColor = aColor; + // Because we are sharing drawing code with regular table drawing, + // we have to play a few tricks to fool the drawing code into thinking + // our drag column is in the same place as the real column. - return self; -} + // Shift the bounds origin to align with the column rect, and extend it vertically to ensure + // it reaches the bottom of the tableView when scrolled. + bounds.origin.x = CGRectGetMinX(columnRect) - xScroll; + bounds.size.height += yScroll; -- (void)drawRect:(CGRect)aRect -{ - var context = [[CPGraphicsContext currentContext] graphicsPort]; + // Fix up the CTM to account for the header and scroll + CGContextTranslateCTM(context, -bounds.origin.x, headerHeight - yScroll); - CGContextSetStrokeColor(context, _lineColor); + //[tableView drawBackgroundInClipRect:bounds]; - var points = [ - CGPointMake(0.5, 0), - CGPointMake(0.5, aRect.size.height) - ]; + if (tableView._draggedColumnIsSelected) + { + CGContextSetFillColor(context, [tableView selectionHighlightColor]); + CGContextFillRect(context, bounds); + } + else + [tableView highlightSelectionInClipRect:bounds]; - CGContextStrokeLineSegments(context, points, 2); + //[tableView _drawHorizontalGridInClipRect:bounds]; - points = [ - CGPointMake(aRect.size.width - 0.5, 0), - CGPointMake(aRect.size.width - 0.5, aRect.size.height) - ]; + var minX = CGRectGetMinX(bounds) + 0.5, + maxX = CGRectGetMaxX(bounds) - 0.5; - CGContextStrokeLineSegments(context, points, 2); + CGContextSetLineWidth(context, 1.0); + CGContextSetAlpha(context, 1.0); + CGContextSetStrokeColor(context, [tableView gridColor]); + + CGContextBeginPath(context); + + CGContextMoveToPoint(context, minX, CGRectGetMinY(bounds)); + CGContextAddLineToPoint(context, minX, CGRectGetMaxY(bounds)); + + CGContextMoveToPoint(context, maxX, CGRectGetMinY(bounds)); + CGContextAddLineToPoint(context, maxX, CGRectGetMaxY(bounds)); + + CGContextStrokePath(context); } @end - @implementation CPTableCellView : CPView { id _objectValue @accessors(property=objectValue); diff --git a/Tests/Manual/TableTest/TableCibTest/AppController.j b/Tests/Manual/TableTest/TableCibTest/AppController.j index ebe8cdd8c..afd730b7c 100644 --- a/Tests/Manual/TableTest/TableCibTest/AppController.j +++ b/Tests/Manual/TableTest/TableCibTest/AppController.j @@ -29,6 +29,8 @@ CPLogRegister(CPLogConsole); if (duration) console.log(receiver + " " + selector + " in " + averager(duration)); }); + + CPTrace("CPTableHeaderView", "_startDraggingTableColumn:at:"); } - (void)awakeFromCib diff --git a/Tests/Manual/TableTest/ViewBasedCib/AppController.j b/Tests/Manual/TableTest/ViewBasedCib/AppController.j index 9bad2bb20..22e48e283 100644 --- a/Tests/Manual/TableTest/ViewBasedCib/AppController.j +++ b/Tests/Manual/TableTest/ViewBasedCib/AppController.j @@ -44,6 +44,8 @@ CPLogRegister(CPLogConsole) if (duration) console.log(receiver + " " + selector + " in " + averager(duration)); }); + + CPTrace("CPTableHeaderView", "_startDraggingTableColumn:at:"); } - (void)awakeFromCib From be7f6ae7d13aec13e54b1b15f41eec6b02234e06 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sun, 31 Mar 2013 22:29:05 +0200 Subject: [PATCH 009/234] Fixed CPOutlineView -reloadData and _layoutViewsForRowIndexes:columnIndexes: subclassing. --- AppKit/CPOutlineView.j | 57 +++++++++++++----------------------------- 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index 00e82f7f0..8fd99057f 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -268,7 +268,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, if ([_outlineViewDataSource respondsToSelector:@selector(outlineView:sortDescriptorsDidChange:)]) _implementedOutlineViewDataSourceMethods |= CPOutlineViewDataSource_outlineView_sortDescriptorsDidChange_; - [self reloadData]; + [self _reloadDataViews]; } /*! @@ -506,7 +506,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, else _reloadItem(self, anItem); - [super reloadData]; + [super _reloadDataViews]; } /*! @@ -553,7 +553,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, _outlineTableColumn = aTableColumn; // FIXME: efficiency. - [self reloadData]; + [self _reloadDataViews]; } /*! @@ -612,7 +612,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, _indentationPerLevel = anIndentationWidth; // FIXME: efficiency!!!! - [self reloadData]; + [self _reloadDataViews]; } /*! @@ -640,7 +640,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, _indentationMarkerFollowsDataView = indentationMarkerShouldFollowDataView; // !!!! - [self reloadData]; + [self _reloadDataViews]; } /*! @@ -1004,13 +1004,13 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, _disclosureControlQueue = []; // FIXME: really? - [self reloadData]; + [self _reloadDataViews]; } /*! Reloads all the data of the outlineview. */ -- (void)reloadData +- (void)_reloadDataViews { [self reloadItem:nil reloadChildren:YES]; } @@ -1241,43 +1241,22 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, @ignore We need to move the disclosure control too. */ -- (void)_layoutDataViewsInRows:(CPIndexSet)rows columns:(CPIndexSet)columns +- (void)_layoutViewsForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes { - var rowArray = [], - columnArray = []; - - [rows getIndexes:rowArray maxCount:-1 inIndexRange:nil]; - [columns getIndexes:columnArray maxCount:-1 inIndexRange:nil]; - - var columnIndex = 0, - columnsCount = columnArray.length; - - for (; columnIndex < columnsCount; ++columnIndex) + [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop) { - var column = columnArray[columnIndex], - tableColumn = _tableColumns[column], - tableColumnUID = [tableColumn UID], - dataViewsForTableColumn = _dataViewsForTableColumns[tableColumnUID], - rowIndex = 0, - rowsCount = rowArray.length; + var control; - for (; rowIndex < rowsCount; ++rowIndex) + [view setFrame:[self frameOfDataViewAtColumn:column row:row]]; + + if (_tableColumns[column] === _outlineTableColumn && (control = _disclosureControlsForRows[row])) { - var row = rowArray[rowIndex], - dataView = dataViewsForTableColumn[row], - dataViewFrame = [self frameOfDataViewAtColumn:column row:row]; - - [dataView setFrame:dataViewFrame]; - - if (tableColumn === _outlineTableColumn) - { - var control = _disclosureControlsForRows[row], - frame = [self frameOfOutlineDisclosureControlAtRow:row]; - - [control setFrame:frame]; - } + var frame = [self frameOfOutlineDisclosureControlAtRow:row]; + [control setFrame:frame]; } - } + }]; + + [self setNeedsDisplay:YES]; } /*! From ba3c6023a8d5ba72c688edebc48c2cd0a9aea13a Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sun, 31 Mar 2013 22:35:12 +0200 Subject: [PATCH 010/234] Fixed CPOutlineView subclassing when settting CPThemeStateSelectedDataView --- AppKit/CPOutlineView.j | 30 ++++++++++++++++-------------- AppKit/CPTableView.j | 28 ++++++++++++++++++---------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index 8fd99057f..cc80df633 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -167,6 +167,22 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, return self; } + +- (void)_initSubclass +{ + _BlockDeselectView = function(view, row, column) + { + [view unsetThemeState:CPThemeStateSelectedDataView]; + [_disclosureControlsForRows[row] unsetThemeState:CPThemeStateSelected]; + }; + + _BlockSelectView = function(view, row, column) + { + [view setThemeState:CPThemeStateSelectedDataView]; + [_disclosureControlsForRows[row] setThemeState:CPThemeStateSelected]; + }; +} + /*! In addition to standard delegation, the outline view also supports data source delegation. This method sets the data source object. Just like the @@ -719,20 +735,6 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, return frame; } -/*! - @ignore - Select or deselect rows, this is overridden because we need to change the color or the outline control. -*/ -- (void)_performSelection:(BOOL)select forRow:(CPInteger)rowIndex context:(id)context -{ - [super _performSelection:select forRow:rowIndex context:context]; - - var control = _disclosureControlsForRows[rowIndex], - selector = select ? @"setThemeState:" : @"unsetThemeState:"; - - [control performSelector:CPSelectorFromString(selector) withObject:CPThemeStateSelected]; -} - /*! Sets the delegate for the outlineview. diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 51001d984..c07e335d4 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -271,6 +271,9 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; CPInteger _draggedColumnIndex; BOOL _draggedColumnIsSelected; CPArray _differedColumnDataToRemove; + + Function _BlockDeselectView; + Function _BlockSelectView; } /*! @@ -413,9 +416,24 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; if (!_sortDescriptors) _sortDescriptors = []; + [self _initSubclass]; + [self _startObservingFirstResponder]; } +- (void)_initSubclass +{ + _BlockDeselectView = function(view, row, column) + { + [view unsetThemeState:CPThemeStateSelectedDataView]; + }; + + _BlockSelectView = function(view, row, column) + { + [view setThemeState:CPThemeStateSelectedDataView]; + }; +} + /*! @anchor setdatasource Sets the receiver's data source to a given object. @@ -5677,13 +5695,3 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", } @end - -var _BlockDeselectView = function(view, column, row) -{ - [view unsetThemeState:CPThemeStateSelectedDataView]; -}; - -var _BlockSelectView = function(view, column, row) -{ - [view setThemeState:CPThemeStateSelectedDataView]; -}; From 44b6136ce24e4adb3d929179947f6d2b50f06730 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sun, 31 Mar 2013 22:36:24 +0200 Subject: [PATCH 011/234] Fixed CPOutlineView dragging column subclassing --- AppKit/CPOutlineView.j | 82 +++++++++++------------------------------- AppKit/CPTableView.j | 28 +++++++++------ 2 files changed, 37 insertions(+), 73 deletions(-) diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index cc80df633..46e8f2d37 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -1044,6 +1044,25 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, else [super removeTableColumn:aTableColumn]; } + +- (void)_addDraggedDataView:(CPView)aDataView toView:(CPView)aSuperview forColumn:(CPInteger)column row:(CPInteger)row offset:(CGPoint)offset +{ + var control; + + [super _addDraggedDataView:aDataView toView:aSuperview forColumn:column row:row offset:offset]; + + if (_tableColumns[column] === _outlineTableColumn && (control = _disclosureControlsForRows[row])) + { + var controlFrame = [self frameOfOutlineDisclosureControlAtRow:row]; + + controlFrame.origin.x -= offset.x; + controlFrame.origin.y -= offset.y; + + [control setFrame:controlFrame]; + [aSuperview addSubview:control]; + } +} + /*! @ignore We override this because we need a special behavior for the outline @@ -1059,67 +1078,6 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, return [super frameOfDataViewAtColumn:aColumn row:aRow]; } -/*! - @ignore - We need to offset the dataview and add the disclosure triangle. -*/ -- (CPView)_dragViewForColumn:(int)theColumnIndex event:(CPEvent)theDragEvent offset:(CGPoint)theDragViewOffset -{ - var dragView = [[_CPColumnDragView alloc] initWithLineColor:[self gridColor]], - tableColumn = [[self tableColumns] objectAtIndex:theColumnIndex], - defaultRowHeight = [self valueForThemeAttribute:@"default-row-height"], - bounds = CGRectMake(0.0, 0.0, [tableColumn width], CGRectGetHeight([self exposedRect]) + defaultRowHeight), - columnRect = [self rectOfColumn:theColumnIndex], - headerView = [tableColumn headerView], - row = [_exposedRows firstIndex]; - - while (row !== CPNotFound) - { - var dataView = [self _newDataViewForRow:row tableColumn:tableColumn], - dataViewFrame = [self frameOfDataViewAtColumn:theColumnIndex row:row]; - - // Only one column is ever dragged so we just place the view at - dataViewFrame.origin.x = 0.0; - - // Offset by table header height - scroll position - dataViewFrame.origin.y = (CGRectGetMinY(dataViewFrame) - CGRectGetMinY([self exposedRect])) + defaultRowHeight; - [dataView setFrame:dataViewFrame]; - - [dataView setObjectValue:[self _objectValueForTableColumn:tableColumn row:row]]; - - - if (tableColumn === _outlineTableColumn) - { - // first inset the dragview - var indentationWidth = ([self levelForRow:row] + 1) * [self indentationPerLevel]; - - dataViewFrame.origin.x += indentationWidth; - dataViewFrame.size.width -= indentationWidth; - - [dataView setFrame:dataViewFrame]; - } - - [dragView addSubview:dataView]; - - row = [_exposedRows indexGreaterThanIndex:row]; - } - - // Add the column header view - var headerFrame = [headerView frame]; - headerFrame.origin = CGPointMakeZero(); - - var columnHeaderView = [[_CPTableColumnHeaderView alloc] initWithFrame:headerFrame]; - [columnHeaderView setStringValue:[headerView stringValue]]; - [columnHeaderView setThemeState:[headerView themeState]]; - [dragView addSubview:columnHeaderView]; - - [dragView setBackgroundColor:[CPColor whiteColor]]; - [dragView setAlphaValue:0.7]; - [dragView setFrame:bounds]; - - return dragView; -} - /*! Retargets the drop item for the outlineview. @@ -1270,7 +1228,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, var outlineColumn = [[self tableColumns] indexOfObjectIdenticalTo:[self outlineTableColumn]]; - if (![columns containsIndex:outlineColumn] || [self outlineTableColumn] === _draggedColumn) + if (![columns containsIndex:outlineColumn] || outlineColumn === _draggedColumnIndex) return; var rowArray = []; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index c07e335d4..cd7e7f4d5 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -3063,19 +3063,12 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [dragView setColumnClipView:columnClipView]; _draggedColumnIsSelected = [self isColumnSelected:columnIndex]; - var columnLeft = CGRectGetMinX(columnRect); + var columnLeft = CGRectGetMinX(columnRect), + offset = CGPointMake(columnLeft, CGRectGetMinY(visibleRect)); - [self _enumerateViewsInRows:_exposedRows columns:[CPIndexSet indexSetWithIndex:columnIndex] usingBlock:function(dataView, row, column, stop) + [self _enumerateViewsInRows:_exposedRows columns:[CPIndexSet indexSetWithIndex:columnIndex] usingBlock:function(dataView, row, column, stop) { - var dataViewFrame = [self frameOfDataViewAtColumn:column row:row]; - - dataViewFrame.origin.x -= columnLeft; - - // Offset by table header height - scroll position - dataViewFrame.origin.y -= CGRectGetMinY(visibleRect); - [dataView setFrame:dataViewFrame]; - - [columnClipView addSubview:dataView]; + [self _addDraggedDataView:dataView toView:columnClipView forColumn:column row:row offset:offset]; delete (_dataViewsForRows[row][tableColumnUID]); }]; @@ -3101,6 +3094,19 @@ Your delegate can implement this method to avoid subclassing the tableview to ad return dragView; } +- (void)_addDraggedDataView:(CPView)aDataView toView:(CPView)aSuperview forColumn:(CPInteger)column row:(CPInteger)row offset:(CGPoint)offset +{ + var dataViewFrame = [self frameOfDataViewAtColumn:column row:row]; + + dataViewFrame.origin.x -= offset.x; + // Offset by table header height - scroll position + dataViewFrame.origin.y -= offset.y; + + [aDataView setFrame:dataViewFrame]; + + [aSuperview addSubview:aDataView]; +} + /*! Sets the default operation mask for the drag behavior of the table view. @note isLocal is not implemented. From 0a1d215560ac85869a50ba63cdc6a3e46a250e32 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Thu, 4 Apr 2013 20:00:56 +0200 Subject: [PATCH 012/234] Fixed: -reloadData: was not reloading views after a change in model rows count --- AppKit/CPTableView.j | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index cd7e7f4d5..64684a730 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -564,9 +564,7 @@ NOT YET IMPLEMENTED */ - (void)reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes { - var oldnumberOfRows = _numberOfRows; - - if (oldnumberOfRows == 0 || oldnumberOfRows !== [self numberOfRows]) + if ([self _numberOfRowsDidChange]) [self _reloadDataViews]; else [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop) @@ -575,6 +573,15 @@ NOT YET IMPLEMENTED }]; } +- (BOOL)_numberOfRowsDidChange +{ + var oldnumberOfRows = _numberOfRows; + + _numberOfRows = nil; + + return (oldnumberOfRows !== [self numberOfRows]); +} + - (void)_reloadDataViews { //if (!_dataSource) From b42b41216b4018cebb0227e42a91eb3698864f72 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 12 Apr 2013 19:08:27 +0200 Subject: [PATCH 013/234] Remove old code. Adds Equality check in -setDataView: --- AppKit/CPTableColumn.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index ba7d50733..1bfb108b5 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -394,8 +394,8 @@ CPTableColumnUserResizingMask = 1 << 1; */ - (void)setDataView:(CPView)aView { - if (_dataView) - _dataViewData = nil; + if (_dataView === aView) + return; [aView setThemeState:CPThemeStateTableDataView]; From 06391c9de6e4793f8e182929d29450cfbe079863 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 12 Apr 2013 19:21:16 +0200 Subject: [PATCH 014/234] Fixed: data views were not reloaded after a CPTableColumn setDataView: Cell-based table views with no identifier set for the table column: Before this commit, the caching system was asking for a view identified by the tableColumn UID. If the table column data view was changed externaly, the previoulsy cached data views were loaded instead of the new ones. The views are now identified by the -dataview UID. Test: AppKit/TableTest -testLayout were a custom data view is set. --- AppKit/CPTableView.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 64684a730..786ee3b21 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -3591,9 +3591,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad { var columnIdentifier = [aTableColumn identifier]; - // For Pre-Lion nibs, there is no automatic identifier for table column; use UID as identifier. + // For cell-based tables, use the dataView prototype identifier. if (!columnIdentifier) - columnIdentifier = [aTableColumn UID]; + columnIdentifier = [[aTableColumn dataView] UID]; view = [self makeViewWithIdentifier:columnIdentifier owner:_delegate]; From 87acd9d7ee93fc7dbfa1dca1c4a00cfea7c65eb3 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 12 Apr 2013 19:23:51 +0200 Subject: [PATCH 015/234] Fixed: in some circumstances, table views binded with the content binding were not correctly reloading the data. Test: AppKit/WithOrWithoutbinding --- AppKit/CPTableView.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 786ee3b21..e4df1797a 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -5357,10 +5357,10 @@ Your delegate can implement this method to avoid subclassing the tableview to ad - (void)bind:(CPString)aBinding toObject:(id)anObject withKeyPath:(CPString)aKeyPath options:(CPDictionary)options { - [super bind:aBinding toObject:anObject withKeyPath:aKeyPath options:options]; - if (aBinding == @"content") _contentBindingExpicitelySet = YES; + + [super bind:aBinding toObject:anObject withKeyPath:aKeyPath options:options]; } @end From 8d69c3764d109162f4af688c6085546d1e898fa0 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 12 Apr 2013 19:35:03 +0200 Subject: [PATCH 016/234] Fixed: The data views were not loaded immediately When reloading the table view, the actual loading (-load) is defered until layout is needed (generally in the next run loop). This is an advantage because it minimize reloads but in some case it is necessary to force a reload, for example when we need to access data views, or manually edit a view, or when we explicitely ask for a reload. This commit adds _reloadDataViewsImmediately and make use of it when necessary. Tests: AppKit/CPTableViewTest -> -testEditCell --- AppKit/CPTableView.j | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index e4df1797a..41780525d 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -565,7 +565,7 @@ NOT YET IMPLEMENTED - (void)reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes { if ([self _numberOfRowsDidChange]) - [self _reloadDataViews]; + [self _reloadDataViewsImmediately]; else [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop) { @@ -603,6 +603,13 @@ NOT YET IMPLEMENTED [self setNeedsDisplay:YES]; } +// reload data views and process events to force a -load +- (void)_reloadDataViewsImmediately +{ + [self _reloadDataViews]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +} + //Target-action Behavior /*! Sets the message sent to the target when the user double-clicks an @@ -3470,12 +3477,13 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [columnIndexes enumerateIndexesUsingBlock:function(columnIndex, stopCol) { var tableColumn = _tableColumns[columnIndex], + tableColumnUID = [tableColumn UID], dataView = [self _preparedViewAtColumn:columnIndex row:row isRowSelected:isRowSelected]; if ([dataView superview] !== self) [self addSubview:dataView]; - dataViewsForRow[[tableColumn UID]] = dataView; + dataViewsForRow[tableColumnUID] = dataView; }]; }]; } @@ -3706,6 +3714,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad - (void)enumerateAvailableViewsUsingBlock:(Function/*CPView *dataView, CPInteger row, CPInteger column*, @ref stop*/)handler { + [self _reloadDataViewsImmediately]; [self _enumerateViewsInRows:_exposedRows columns:_exposedColumns usingBlock:handler]; } @@ -5129,6 +5138,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (![self isRowSelected:rowIndex]) [[CPException exceptionWithName:@"Error" reason:@"Attempt to edit row " + rowIndex + " when not selected." userInfo:nil] raise]; + [self _reloadDataViewsImmediately]; + [self scrollRowToVisible:rowIndex]; [self scrollColumnToVisible:columnIndex]; From 7b1c696810aac537801ac54b9941296281e15f1b Mon Sep 17 00:00:00 2001 From: cacaodev Date: Fri, 12 Apr 2013 19:38:22 +0200 Subject: [PATCH 017/234] Fixed: CPTableViewTest: -deselectAll should send 1 CPtableViewSelectionDidChangeNotification, not 2. Checked in cocoa. Moved a failing test to the end of the method so it does not shadow other tests. --- Tests/AppKit/CPTableViewTest.j | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/Tests/AppKit/CPTableViewTest.j b/Tests/AppKit/CPTableViewTest.j index a103507dd..432bc233c 100644 --- a/Tests/AppKit/CPTableViewTest.j +++ b/Tests/AppKit/CPTableViewTest.j @@ -96,19 +96,15 @@ [self assert:0 equals:selectionIsChangingNotificationsReceived message:"no isChanging notifications when programmatically selecting rows"]; [self assert:1 equals:selectionDidChangeNotificationsReceived message:"didChange notifications when selecting rows"]; - // If we remove the last row, the selection should change and we should be notified. - [[dataSource tableEntries] removeObjectAtIndex:2]; - [tableView reloadData]; - - [self assert:0 equals:selectionIsChangingNotificationsReceived message:"no isChanging notifications when selected rows disappear"]; - [self assert:2 equals:selectionDidChangeNotificationsReceived message:"didChange notifications when selected rows disappear"]; + selectionIsChangingNotificationsReceived = 0; + selectionDidChangeNotificationsReceived = 0; [tableView selectRowIndexes:[CPIndexSet indexSetWithIndex:0] byExtendingSelection:NO]; - [self assert:selectionDidChangeNotificationsReceived equals:3 message:"CPTableViewSelectionDidChangeNotification expected when selecting rows"]; + [self assert:selectionDidChangeNotificationsReceived equals:1 message:"CPTableViewSelectionDidChangeNotification expected when selecting rows"]; [[dataSource tableEntries] removeObjectAtIndex:1]; [tableView reloadData]; - [self assert:selectionDidChangeNotificationsReceived equals:3 message:"no CPTableViewSelectionDidChangeNotification expected when removing a row which does not change the selection"]; + [self assert:selectionDidChangeNotificationsReceived equals:1 message:"no CPTableViewSelectionDidChangeNotification expected when removing a row which does not change the selection"]; // Reset everything. [dataSource setTableEntries:["A", "B", "C"]]; @@ -123,7 +119,18 @@ selectionIsChangingNotificationsReceived = 0; selectionDidChangeNotificationsReceived = 0; [tableView deselectAll]; - [self assert:selectionDidChangeNotificationsReceived equals:2 message:"notification for deselect all"]; + [self assert:1 equals:selectionDidChangeNotificationsReceived message:"notification for deselect all"]; + + + [tableView selectRowIndexes:[CPIndexSet indexSetWithIndex:2] byExtendingSelection:NO]; + selectionIsChangingNotificationsReceived = 0; + selectionDidChangeNotificationsReceived = 0; + // If we remove the last row, the selection should change and we should be notified. + [[dataSource tableEntries] removeObjectAtIndex:2]; + [tableView reloadData]; + + [self assert:0 equals:selectionIsChangingNotificationsReceived message:"no isChanging notifications when selected rows disappear"]; + [self assert:1 equals:selectionDidChangeNotificationsReceived message:"didChange notifications when selected rows disappear"]; } - (void)selectionIsChanging:(CPNotification)aNotification @@ -156,10 +163,10 @@ // Now some text field should be the first responder. var fieldEditor = [theWindow firstResponder]; - [self assert:[fieldEditor class] equals:CPTextField message:"table cell editor should be a text field"]; + [self assert:CPTextField equals:[fieldEditor class] message:"table cell editor should be a text field"]; [fieldEditor setStringValue:"edited text"]; - [fieldEditor performClick:nil]; + [theWindow makeFirstResponder:tableView]; [self assert:"edited text" equals:[dataSource tableEntries][1] message:"table cell edit should propagate to model"] @@ -198,6 +205,7 @@ [tableColumn setDataView:[CustomTextView0 new]]; [tableColumn1 setDataView:[CustomTextView1 new]]; + // Process all events immediately to make sure table data views are reloaded. [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; [self assert:50 equals:[tableView numberOfRows] message:"tableView numberOfRows should reflect content array length"]; From 43f0f2a0fd6c507a1c4a00ec9d2acd5e7e84e2b0 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 13 Apr 2013 11:38:47 +0200 Subject: [PATCH 018/234] Simplified -numberOfRows Added -_numberOfRows that computes the new number of rows. Removed the nil check. All tests in AppKit/CPTableViewTest are now passing with success. --- AppKit/CPTableView.j | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 41780525d..f133231a4 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -575,11 +575,7 @@ NOT YET IMPLEMENTED - (BOOL)_numberOfRowsDidChange { - var oldnumberOfRows = _numberOfRows; - - _numberOfRows = nil; - - return (oldnumberOfRows !== [self numberOfRows]); + return (_numberOfRows !== [self _numberOfRows]); } - (void)_reloadDataViews @@ -1518,28 +1514,31 @@ NOT YET IMPLEMENTED */ - (int)numberOfRows { - if (_numberOfRows !== nil) - return _numberOfRows; + return _numberOfRows; +} - var contentBindingInfo = [self infoForBinding:@"content"]; +- (int)_numberOfRows +{ + var numberOfRows, + contentBindingInfo = [self infoForBinding:@"content"]; if (contentBindingInfo) { var destination = [contentBindingInfo objectForKey:CPObservedObjectKey], keyPath = [contentBindingInfo objectForKey:CPObservedKeyPathKey]; - _numberOfRows = [[destination valueForKeyPath:keyPath] count]; + numberOfRows = [[destination valueForKeyPath:keyPath] count]; } else if (_dataSource && (_implementedDataSourceMethods & CPTableViewDataSource_numberOfRowsInTableView_)) - _numberOfRows = [_dataSource numberOfRowsInTableView:self] || 0; + numberOfRows = [_dataSource numberOfRowsInTableView:self] || 0; else { if (_dataSource) CPLog(@"no content binding established and data source " + [_dataSource description] + " does not implement numberOfRowsInTableView:"); - _numberOfRows = 0; + numberOfRows = 0; } - return _numberOfRows; + return numberOfRows; } @@ -2250,20 +2249,20 @@ NOT YET IMPLEMENTED { var oldNumberOfRows = _numberOfRows; - _numberOfRows = nil; + _numberOfRows = [self _numberOfRows]; + _cachedRowHeights = []; // this line serves two purposes // 1. it updates the _numberOfRows cache with the -numberOfRows call // 2. it updates the row height cache if needed - [self _noteHeightOfRowsWithIndexesChanged:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])]]; + [self _noteHeightOfRowsWithIndexesChanged:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, _numberOfRows)]]; // remove row indexes from the selection if they no longer exist var hangingSelections = oldNumberOfRows - _numberOfRows; if (hangingSelections > 0) { - var previousSelectionCount = [_selectedRowIndexes count]; [_selectedRowIndexes removeIndexesInRange:CPMakeRange(_numberOfRows, hangingSelections)]; From e53337bcdc0ce9fc593488b06e0ca63a4a1306e5 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 13 Apr 2013 21:39:20 +0200 Subject: [PATCH 019/234] Remove check in -hitTest: that was preventing reverse set binding --- AppKit/CPTableView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 955bc5594..7e9c96a30 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -4986,7 +4986,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (![self isRowSelected:row]) return self; } - else if (!_isViewBased && _implementedDataSourceMethods & CPTableViewDataSource_tableView_setObjectValue_forTableColumn_row_ && [aView isKindOfClass:[CPControl class]] && ![aView isKindOfClass:[CPTextField class]]) + else if (!_isViewBased && [aView isKindOfClass:[CPControl class]] && ![aView isKindOfClass:[CPTextField class]]) { [self getColumn:@ref(column) row:@ref(row) forView:aView]; From 4d8f7c67d44a9891f733fa5eaeedb708e6b19e94 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Thu, 2 May 2013 19:39:27 +0200 Subject: [PATCH 020/234] Fixed removeTableColumn: was not reloading views immediatly. Added test for issue 1913 in Manual/TableTest/TestTableColumn. Throws an exception when you click the button twice --- AppKit/CPTableView.j | 2 +- .../TableTest/TestTableColumn/AppController.j | 76 + .../TableTest/TestTableColumn/Info.plist | 14 + .../Manual/TableTest/TestTableColumn/Jakefile | 93 + .../TestTableColumn/Resources/MainMenu.cib | 1 + .../TestTableColumn/Resources/MainMenu.xib | 1994 +++++++++++++++++ .../TestTableColumn/Resources/spinner.gif | Bin 0 -> 1434 bytes .../TestTableColumn.xcodeproj/project.pbxproj | 550 +++++ .../contents.xcworkspacedata | 7 + .../TestTableColumn/index-debug.html | 112 + .../TableTest/TestTableColumn/index.html | 82 + Tests/Manual/TableTest/TestTableColumn/main.j | 18 + 12 files changed, 2948 insertions(+), 1 deletion(-) create mode 100644 Tests/Manual/TableTest/TestTableColumn/AppController.j create mode 100644 Tests/Manual/TableTest/TestTableColumn/Info.plist create mode 100644 Tests/Manual/TableTest/TestTableColumn/Jakefile create mode 100644 Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.cib create mode 100644 Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.xib create mode 100644 Tests/Manual/TableTest/TestTableColumn/Resources/spinner.gif create mode 100644 Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.pbxproj create mode 100644 Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Tests/Manual/TableTest/TestTableColumn/index-debug.html create mode 100644 Tests/Manual/TableTest/TestTableColumn/index.html create mode 100644 Tests/Manual/TableTest/TestTableColumn/main.j diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 7e9c96a30..9768e21de 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -1083,7 +1083,7 @@ NOT YET IMPLEMENTED else _dirtyTableColumnRangeIndex = MIN(index, _dirtyTableColumnRangeIndex); - [self setNeedsLayout]; + [self _reloadDataViewsImmediately]; } /*! diff --git a/Tests/Manual/TableTest/TestTableColumn/AppController.j b/Tests/Manual/TableTest/TestTableColumn/AppController.j new file mode 100644 index 000000000..6b7aeecb9 --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/AppController.j @@ -0,0 +1,76 @@ +/* + * AppController.j + * TestTableColumn + * + * Created by You on April 16, 2013. + * Copyright 2013, Your Company All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + @outlet CPTableView tableView; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. +} + +- (void)awakeFromCib +{ + // This is called when the cib is done loading. + // You can implement this method on any object instantiated from a Cib. + // It's a useful hook for setting up current UI values, and other things. + + // In this case, we want the window from Cib to become our full browser window + [theWindow setFullPlatformWindow:YES]; + + [self _initializeSpreadSheetColumns]; +} + +- (void)_initializeSpreadSheetColumns +{ + var itemIndex = 0, + items = [@"Colonne1", @"Colonne2", @"Colonne3", @"Colonne4"]; + + for (itemIndex ; itemIndex < [items count]; itemIndex++) + { + var item = [items objectAtIndex:itemIndex], + column = [[CPTableColumn alloc] initWithIdentifier:itemIndex]; + [column setEditable:YES]; + [column setMinWidth:50]; + [[column headerView] setStringValue:item]; + [tableView addTableColumn:column]; + } +} + +- (@action)click:(id)sender +{ + var i = 0; + console.log("Before NUmberColumn : " + [[tableView tableColumns] count]); + + [tableView removeTableColumn:[[tableView tableColumns] firstObject]]; + + while (i < 10000000) + i++; + + console.log("After NUmberColumn : " + [[tableView tableColumns] count]); +} + +- (int)numberOfRowsInTableView:(CPTableView)aTableView +{ + return 15; +} + +- (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRowIndex +{ + console.log([[aTableView tableColumns] count]); + return 10; +} + +@end diff --git a/Tests/Manual/TableTest/TestTableColumn/Info.plist b/Tests/Manual/TableTest/TestTableColumn/Info.plist new file mode 100644 index 000000000..a14c83a4b --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + TestTableColumn + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2013, Your Company All rights reserved. + + diff --git a/Tests/Manual/TableTest/TestTableColumn/Jakefile b/Tests/Manual/TableTest/TestTableColumn/Jakefile new file mode 100644 index 000000000..b1182c445 --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/Jakefile @@ -0,0 +1,93 @@ +/* + * Jakefile + * TestTableColumn + * + * Created by You on April 16, 2013. + * Copyright 2013, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("TestTableColumn", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "TestTableColumn.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("TestTableColumn"); + task.setIdentifier("com.yourcompany.TestTableColumn"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("TestTableColumn"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["TestTableColumn"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "TestTableColumn", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "TestTableColumn", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "TestTableColumn")); + OS.system(["press", "-f", FILE.join("Build", "Release", "TestTableColumn"), FILE.join("Build", "Deployment", "TestTableColumn")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "TestTableColumn")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "TestTableColumn"), FILE.join("Build", "Desktop", "TestTableColumn", "TestTableColumn.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "TestTableColumn", "TestTableColumn.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "TestTableColumn")); + print("----------------------------"); +} diff --git a/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.cib b/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.cib new file mode 100644 index 000000000..53b6da934 --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;139E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;140E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;141E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;139E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;131E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;125E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;139E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;139E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;111E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;74E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;55E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;96E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;139E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;179E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;140E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;180E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;181E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;182E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;60E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;183E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;186E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;194E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;66E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;195E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;196E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;197E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;200E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;201E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;73E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;203E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;205E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;207E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;76E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;207E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;209E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;210E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;211E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;212E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;213E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;214E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;215E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;216E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;217E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;218E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;219E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;220E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;221E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;223E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;223E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;227E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;228E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;233E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;234E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;236E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;237E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;94E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;239E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;241E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;94E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;94E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;243E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;94E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;245E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;94E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;247E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;249E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;251E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;104E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;251E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;237E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;234E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;255E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;227E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;256E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;109E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;256E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;260E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;261E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;262E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;263E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;265E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;266E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;266E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;267E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;269E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;271E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;272E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;273E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;273E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;275E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;276E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;124E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;279E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;280E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;281E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;282E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;283E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;231E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;183E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;127E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;285E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;286E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;128E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;288E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;289E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;290E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;127E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;291E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;292E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;294E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;295E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;136E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;133E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;296E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;296E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;296E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;296E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;188E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;188E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;188E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;297E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;234E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;284E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;294E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;298E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;294E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;301E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;12;$agrid-colorD;K;6;CP$UIDd;3;302E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;303E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;304E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;305E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;284E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;303E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;190E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;188E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;188E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;188E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;188E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;306E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;302E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;284E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;190E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;308E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;135E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;309E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;310E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;311E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;314E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;284E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;129E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;315E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;303E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;284E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;190E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;316E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;295E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;317E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;317E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;318E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;131E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;319E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;320E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;311E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;314E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;284E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;129E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;321E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;303E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;284E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;188E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;322E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;323E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;127E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;291E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;326E;K;11;$aalignmentD;K;6;CP$UIDd;3;234E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;284E;K;6;$afontD;K;6;CP$UIDd;3;328E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;284E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;303E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;329E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;189E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;190E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;330E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;284E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;188E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;234E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;284E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;331E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;E;E;S;8;delegateS;9;tableViewS;9;theWindowS;10;dataSourceS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;6;click:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;72E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;68E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;74E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;99E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;89E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;98E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;101E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;119E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{335, 62}, {517, 426}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {517, 426}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;138E;E;E;S;6;normalS;22;{{25, 20}, {435, 322}}S;20;{{0, 0}, {435, 322}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;297E;E;E;d;2;36S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;332E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;311E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;335E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;336E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;337E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;338E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;311E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;339E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;135E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;126E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;340E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;340E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;E;S;20;{{0, 0}, {433, 304}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;299E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;341E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;299E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;342E;E;d;1;4d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;307E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;343E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;344E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;345E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;346E;E;S;19;{{1, 2}, {433, 15}}S;19;{{0, 0}, {433, 15}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:f;18;0.9622222222222222S;19;{{0, 0}, {433, 25}}S;14;tableHeaderRowS;23;{{224, 203}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;27;_verticalScrollerDidScroll:f;18;0.9506578947368421S;22;{{382, 376}, {70, 25}}S;18;{{0, 0}, {70, 25}}S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;327E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;347E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;348E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;188E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;190E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;188E;E;S;6;Buttond;2;14S;13;AppControllerS;20;{{1, 1}, {433, 304}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;131E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;299E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;349E;E;S;6;_NS:11S;21;{{1, 305}, {433, 17}}S;19;{{0, 0}, {433, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;E;E;S;6;_NS:15S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;237E;E;E;S;20;{{224, 0}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewS;6;_NS:19S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;E;E;f;3;0.8E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.xib b/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.xib new file mode 100644 index 000000000..c943f759d --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.xib @@ -0,0 +1,1994 @@ + + + + 1050 + 12D78 + 3084 + 1187.37 + 626.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + YES + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSScrollView + NSScroller + NSTableHeaderView + NSTableView + NSView + NSWindowTemplate + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 7 + 2 + {{335, 390}, {517, 426}} + 1946157056 + Window + NSWindow + + + + + 256 + + YES + + + 268 + + YES + + + 2304 + + YES + + + 256 + {433, 304} + + + + _NS:13 + YES + NO + YES + + + 256 + {433, 17} + + + + _NS:16 + + + + + -2147483392 + {{224, 0}, {16, 17}} + + _NS:19 + + + YES + + 3 + 2 + + 3 + MQA + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + -698351616 + + + 4 + 15 + 0 + YES + 0 + 1 + + + {{1, 17}, {433, 304}} + + + + _NS:11 + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + _NS:58 + NO + + _doScroller: + 0.95065789473684215 + + + + -2147483392 + {{1, 305}, {433, 16}} + + + + _NS:60 + NO + 1 + + _doScroller: + 0.9622222222222222 + + + + 2304 + + YES + + + {{1, 0}, {433, 17}} + + + + _NS:15 + + + 4 + + + {{25, 84}, {435, 322}} + + + + _NS:9 + 133682 + + + + + QSAAAEEgAABBmAAAQZgAAA + 0.25 + 4 + 1 + + + + 268 + {{376, 19}, {82, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Button + + LucidaGrande + 13 + 1044 + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {517, 426} + + + + + {{0, 0}, {1440, 878}} + {10000000000000, 10000000000000} + YES + + + AppController + + + + + YES + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + theWindow + + + + 459 + + + + tableView + + + + 469 + + + + click: + + + + 472 + + + + dataSource + + + + 483 + + + + delegate + + + + 484 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + 75 + + + + + 80 + + + + + 72 + + + + + 82 + + + + + 124 + + + YES + + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + + + 111 + + + + + 57 + + + YES + + + + + + + + + + 58 + + + + + 136 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + YES + + + + + + 372 + + + YES + + + + + + + 450 + + + + + 460 + + + YES + + + + + + + + + 461 + + + YES + + + + + 462 + + + + + 463 + + + + + 464 + + + + + 470 + + + YES + + + + + + 471 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 106.IBPluginDependency + 111.IBPluginDependency + 112.IBPluginDependency + 124.IBPluginDependency + 125.IBPluginDependency + 126.IBPluginDependency + 129.IBPluginDependency + 136.IBPluginDependency + 143.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 371.IBPluginDependency + 371.IBWindowTemplateEditedContentRect + 371.NSWindowTemplate.visibleAtLaunch + 372.IBPluginDependency + 450.IBPluginDependency + 460.IBPluginDependency + 461.IBPluginDependency + 462.IBPluginDependency + 463.IBPluginDependency + 464.IBPluginDependency + 470.IBPluginDependency + 471.IBPluginDependency + 5.IBPluginDependency + 56.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 72.IBPluginDependency + 73.IBPluginDependency + 75.IBPluginDependency + 79.IBPluginDependency + 80.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 484 + + + + YES + + AppController + NSObject + + click: + id + + + click: + + click: + id + + + + YES + + YES + tableView + theWindow + + + YES + NSTableView + NSWindow + + + + YES + + YES + tableView + theWindow + + + YES + + tableView + NSTableView + + + theWindow + NSWindow + + + + + IBProjectSource + ./Classes/AppController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {11, 11} + {10, 3} + + + + diff --git a/Tests/Manual/TableTest/TestTableColumn/Resources/spinner.gif b/Tests/Manual/TableTest/TestTableColumn/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..a5e705f6cbdf914e5e714c35a8dfef807f19e3c2 GIT binary patch literal 1434 zcmZvbdrVVj7{t$-UNOu86#VHu^|s&3rWfwHBbPG_8{SrlB{Tv1uvvj4t6zP!)#d!Ogc zP^62J^$0+~?-ZcXXpBaq%jFsw8L`=H2?+@R02Yg-*Xw;gACBV^i3CMahr>Z667S!? zk3LDe>VLEsU;sWo$Py~o!gWuaIAnaG3Sv``&tvc+8DJO!| zt4fcbQ8tW}a&xZfgtQ9BnFYLvGG|PvCNlg&uh@Q^w9Pz}+I^hCj`vu9JQADPqdkyk zR40xycD9geUgJu1e;$L`Fpa)?Wl-2&6hO@U*KrPqK(I1H=1h?2fce}6GhhP1oBZC# z1e@gt-qFa6lZrl%s1>bdxg*W)Ebt__O(4sj6(*2X@ciUClwHH#U(NRM7XAjS z+scDZ32J*PCoslsgS~#ZlCCGo`r>S6F)Ghw5wVlqHioFaw?ucD(XoLJ0j;28oPoPV z9A}dR$0SKn>uExfkl#j09o;v$BZ909R=*p{ATNq8BJW;YduX2QMOU7$a$_L5e!G^g zpbkx5G4&FZ%7m14rTN}5YB(;x7$5XOc_hf3E|Hw$TVg)P#qf~}nOn03uqsp>UG>vi zWThIoO)-1Q#@u#O;fMC#WAf@Xj70-0g9YZ;dA$HH1fW1q=9-c>>_yA0S$7M*5?}vi z)8MU`Q%P!7sEBBnd$DrKgFQ2?O%6LpdaC%F8Pn-)EC2t=j~ zoaLamla$FX!GQqWi!%s>sj-#5SJX0IF!TP=r21Z}s)k#btN0?=I7uD9C)Gb$fZ#sm zaVq7g`LwZ%PfNpN^_N-IGLHj@AV`s#4&va7_{Hw63G6BkSGXHdogTZ%QOiRb bDpZ@qYcJKM>x%b%*HX74c8MnqfHi*u-bC?g literal 0 HcmV?d00001 diff --git a/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.pbxproj b/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.pbxproj new file mode 100644 index 000000000..00dccea7d --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.pbxproj @@ -0,0 +1,550 @@ + + + + + archiveVersion + 1 + classes + + objectVersion + 46 + objects + + 1B5E4D17B25C5B28B6462407 + + fileRef + A6B54A31A8533D688FE9F3A2 + isa + PBXBuildFile + + 1FE84B6FB2325D44BD26AE65 + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + _Users_serafin_Desktop_TestTableColumn_AppController.h + path + .XcodeSupport/_Users_serafin_Desktop_TestTableColumn_AppController.h + sourceTree + SOURCE_ROOT + + 392441AC9EC523C7D8BA9308 + + isa + PBXFileReference + lastKnownFileType + ? + name + AppController.j + path + AppController.j + sourceTree + SOURCE_ROOT + + 525F4427B3396B9F8FB42176 + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + _Users_serafin_Desktop_TestTableColumn_AppController.m + path + .XcodeSupport/_Users_serafin_Desktop_TestTableColumn_AppController.m + sourceTree + SOURCE_ROOT + + 61A941CF8C8385DBF46059E5 + + children + + 392441AC9EC523C7D8BA9308 + C2E9451D931720F5C6B6C688 + + isa + PBXGroup + name + Sources + sourceTree + <group> + + 75F04D4595E73A1C6E597923 + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + _Users_alexandrewilhelm_Desktop_TestTableColumn_AppController.h + path + .XcodeSupport/_Users_alexandrewilhelm_Desktop_TestTableColumn_AppController.h + sourceTree + SOURCE_ROOT + + 8B0D4BCFB75C55BAA8372871 + + fileRef + 525F4427B3396B9F8FB42176 + isa + PBXBuildFile + + 9E484D7D889CBAC1447F240A + + children + + D4A44EE5BDA177F42FC5D011 + 75F04D4595E73A1C6E597923 + A6B54A31A8533D688FE9F3A2 + 1FE84B6FB2325D44BD26AE65 + 525F4427B3396B9F8FB42176 + + isa + PBXGroup + name + Classes + sourceTree + <group> + + 9EEC4488135749D200615446 + + children + + 9EEC44CB13574A0B00615446 + 9EEC4496135749D200615446 + 9E484D7D889CBAC1447F240A + 61A941CF8C8385DBF46059E5 + + isa + PBXGroup + sourceTree + <group> + + 9EEC448A135749D200615446 + + attributes + + LastUpgradeCheck + 0440 + ORGANIZATIONNAME + 280 North, Inc. + + buildConfigurationList + 9EEC448D135749D200615446 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + en + + mainGroup + 9EEC4488135749D200615446 + productRefGroup + 9EEC4494135749D200615446 + projectDirPath + + projectRoot + + targets + + 9EEC4492135749D200615446 + + + 9EEC448D135749D200615446 + + buildConfigurations + + 9EEC44C3135749D300615446 + 9EEC44C4135749D300615446 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 9EEC448F135749D200615446 + + buildActionMask + 2147483647 + files + + 1B5E4D17B25C5B28B6462407 + 8B0D4BCFB75C55BAA8372871 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9EEC4490135749D200615446 + + buildActionMask + 2147483647 + files + + 9EEC4498135749D200615446 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9EEC4491135749D200615446 + + buildActionMask + 2147483647 + files + + 9EEC44CC13574A0B00615446 + + isa + PBXResourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9EEC4492135749D200615446 + + buildConfigurationList + 9EEC44C5135749D300615446 + buildPhases + + 9EEC448F135749D200615446 + 9EEC4490135749D200615446 + 9EEC4491135749D200615446 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Another + productName + Another + productReference + 9EEC4493135749D200615446 + productType + com.apple.product-type.application + + 9EEC4493135749D200615446 + + explicitFileType + wrapper.application + includeInIndex + 0 + isa + PBXFileReference + path + Another.app + sourceTree + BUILT_PRODUCTS_DIR + + 9EEC4494135749D200615446 + + children + + 9EEC4493135749D200615446 + + isa + PBXGroup + name + Products + sourceTree + <group> + + 9EEC4496135749D200615446 + + children + + 9EEC4497135749D200615446 + 9EEC4499135749D300615446 + + isa + PBXGroup + name + Frameworks + sourceTree + <group> + + 9EEC4497135749D200615446 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + Cocoa.framework + path + System/Library/Frameworks/Cocoa.framework + sourceTree + SDKROOT + + 9EEC4498135749D200615446 + + fileRef + 9EEC4497135749D200615446 + isa + PBXBuildFile + + 9EEC4499135749D300615446 + + children + + 9EEC449A135749D300615446 + 9EEC449B135749D300615446 + 9EEC449C135749D300615446 + + isa + PBXGroup + name + Other Frameworks + sourceTree + <group> + + 9EEC449A135749D300615446 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + AppKit.framework + path + System/Library/Frameworks/AppKit.framework + sourceTree + SDKROOT + + 9EEC449B135749D300615446 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + CoreData.framework + path + System/Library/Frameworks/CoreData.framework + sourceTree + SDKROOT + + 9EEC449C135749D300615446 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + Foundation.framework + path + System/Library/Frameworks/Foundation.framework + sourceTree + SDKROOT + + 9EEC44C3135749D300615446 + + buildSettings + + ARCHS + $(ARCHS_STANDARD_32_64_BIT) + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + DEBUG + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES + GCC_WARN_UNUSED_VARIABLE + YES + MACOSX_DEPLOYMENT_TARGET + 10.6 + ONLY_ACTIVE_ARCH + YES + SDKROOT + macosx + + isa + XCBuildConfiguration + name + Debug + + 9EEC44C4135749D300615446 + + buildSettings + + ARCHS + $(ARCHS_STANDARD_32_64_BIT) + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES + GCC_WARN_UNUSED_VARIABLE + YES + MACOSX_DEPLOYMENT_TARGET + 10.6 + SDKROOT + macosx + + isa + XCBuildConfiguration + name + Release + + 9EEC44C5135749D300615446 + + buildConfigurations + + 9EEC44C6135749D300615446 + 9EEC44C7135749D300615446 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 9EEC44C6135749D300615446 + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COMBINE_HIDPI_IMAGES + YES + COPY_PHASE_STRIP + NO + GCC_DYNAMIC_NO_PIC + NO + GCC_ENABLE_OBJC_EXCEPTIONS + YES + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Another/Another-Prefix.pch + INFOPLIST_FILE + Another/Another-Info.plist + PRODUCT_NAME + $(TARGET_NAME) + WRAPPER_EXTENSION + app + + isa + XCBuildConfiguration + name + Debug + + 9EEC44C7135749D300615446 + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COMBINE_HIDPI_IMAGES + YES + COPY_PHASE_STRIP + YES + DEBUG_INFORMATION_FORMAT + dwarf-with-dsym + GCC_ENABLE_OBJC_EXCEPTIONS + YES + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Another/Another-Prefix.pch + INFOPLIST_FILE + Another/Another-Info.plist + PRODUCT_NAME + $(TARGET_NAME) + WRAPPER_EXTENSION + app + + isa + XCBuildConfiguration + name + Release + + 9EEC44CB13574A0B00615446 + + isa + PBXFileReference + lastKnownFileType + folder + name + CappuccinoResources + path + Resources + sourceTree + <group> + + 9EEC44CC13574A0B00615446 + + fileRef + 9EEC44CB13574A0B00615446 + isa + PBXBuildFile + + A6B54A31A8533D688FE9F3A2 + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + _Users_alexandrewilhelm_Desktop_TestTableColumn_AppController.m + path + .XcodeSupport/_Users_alexandrewilhelm_Desktop_TestTableColumn_AppController.m + sourceTree + SOURCE_ROOT + + C2E9451D931720F5C6B6C688 + + isa + PBXFileReference + lastKnownFileType + ? + name + AppController.j + path + AppController.j + sourceTree + SOURCE_ROOT + + D4A44EE5BDA177F42FC5D011 + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + xcc_general_include.h + path + .XcodeSupport/xcc_general_include.h + sourceTree + SOURCE_ROOT + + + rootObject + 9EEC448A135749D200615446 + + diff --git a/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..7e5473893 --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Tests/Manual/TableTest/TestTableColumn/index-debug.html b/Tests/Manual/TableTest/TestTableColumn/index-debug.html new file mode 100644 index 000000000..052461639 --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/index-debug.html @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + TestTableColumn + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/TableTest/TestTableColumn/index.html b/Tests/Manual/TableTest/TestTableColumn/index.html new file mode 100644 index 000000000..079d93ccf --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/index.html @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + TestTableColumn + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/TableTest/TestTableColumn/main.j b/Tests/Manual/TableTest/TestTableColumn/main.j new file mode 100644 index 000000000..2770e86dc --- /dev/null +++ b/Tests/Manual/TableTest/TestTableColumn/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * TestTableColumn + * + * Created by You on April 16, 2013. + * Copyright 2013, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 57408d18ae32784b4b687ac0f04339e76a2ae723 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 19 Apr 2014 09:05:14 +0200 Subject: [PATCH 021/234] New: ojunit tests for CPTableView -reloadData & -removeTableColumn: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -removeTableColumn: is failing with an « index out of bounds » error. --- Tests/AppKit/CPTableViewReloadDataTest.j | 63 +++++++++++++++++++++++ Tests/AppKit/CPTableViewTableColumnTest.j | 61 ++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 Tests/AppKit/CPTableViewReloadDataTest.j create mode 100644 Tests/AppKit/CPTableViewTableColumnTest.j diff --git a/Tests/AppKit/CPTableViewReloadDataTest.j b/Tests/AppKit/CPTableViewReloadDataTest.j new file mode 100644 index 000000000..5c8a6c63b --- /dev/null +++ b/Tests/AppKit/CPTableViewReloadDataTest.j @@ -0,0 +1,63 @@ +@import + +[CPApplication sharedApplication]; + +@implementation CPTableViewReloadDataTest : OJTestCase +{ + CPWindow theWindow; + CPTableView tableView; + CPArray tableContent; +} + +- (void)setUp +{ + tableContent = []; + // setup a reasonable table + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) + styleMask:CPWindowNotSizable]; + + tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; + [tableView setDataSource:self]; + + var itemIndex = 0, + items = [@"Colonne1", @"Colonne2", @"Colonne3", @"Colonne4"]; + + for (itemIndex ; itemIndex < [items count]; itemIndex++) + { + var item = [items objectAtIndex:itemIndex], + column = [[CPTableColumn alloc] initWithIdentifier:item]; + [column setEditable:YES]; + [column setMinWidth:50]; + [[column headerView] setStringValue:item]; + [tableView addTableColumn:column]; + } + + [[theWindow contentView] addSubview:tableView]; +} + +- (void)testReloadDataAfterModelCountChangesFromZero +{ + tableContent = ["A", "B", "C"]; + + [tableView reloadData]; + + [tableView _enumerateViewsInRows:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, 3)] columns:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, 4)] usingBlock:function(view, row, column, stop) + { + var tableColumn = [[tableView tableColumns] objectAtIndex:column], + expected = [tableColumn identifier] + "_" + [tableContent objectAtIndex:row]; + + [self assertTrue:([view stringValue] == expected)]; + }]; +} + +- (int)numberOfRowsInTableView:(CPTableView)aTableView +{ + return [tableContent count]; +} + +- (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRowIndex +{ + return [aColumn identifier] + "_" + [tableContent objectAtIndex:aRowIndex]; +} + +@end \ No newline at end of file diff --git a/Tests/AppKit/CPTableViewTableColumnTest.j b/Tests/AppKit/CPTableViewTableColumnTest.j new file mode 100644 index 000000000..e07cdf43a --- /dev/null +++ b/Tests/AppKit/CPTableViewTableColumnTest.j @@ -0,0 +1,61 @@ +@import + +[CPApplication sharedApplication]; + +@implementation CPTableViewTableColumnTest : OJTestCase +{ + CPWindow theWindow; + CPTableView tableView; +} + +- (void)setUp +{ + // setup a reasonable table + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) + styleMask:CPWindowNotSizable]; + + tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; + [tableView setDataSource:self]; + + var itemIndex = 0, + items = [@"Colonne1", @"Colonne2", @"Colonne3", @"Colonne4"]; + + for (itemIndex ; itemIndex < [items count]; itemIndex++) + { + var item = [items objectAtIndex:itemIndex], + column = [[CPTableColumn alloc] initWithIdentifier:item]; + [column setEditable:YES]; + [column setMinWidth:50]; + [[column headerView] setStringValue:item]; + [tableView addTableColumn:column]; + } + + [[theWindow contentView] addSubview:tableView]; + + [tableView reloadData]; +} + +- (void)testRemoveTableColumn +{ + [self assertTrue:([[tableView tableColumns] count] == 4)]; + + [tableView removeTableColumn:[[tableView tableColumns] firstObject]]; + + [self assertTrue:([[tableView tableColumns] count] == 3)]; + + [tableView removeTableColumn:[[tableView tableColumns] firstObject]]; + + [self assertTrue:([[tableView tableColumns] count] == 2)]; +} + +- (int)numberOfRowsInTableView:(CPTableView)aTableView +{ + return 15; +} + +- (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRowIndex +{ + return "COLUMN_" + [aColumn identifier] + "ROW_" + aRowIndex; +} + +@end \ No newline at end of file From 45a59f9aec895b753a8ff1c59d0d39cf674efc4e Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 19 Apr 2014 09:10:51 +0200 Subject: [PATCH 022/234] Code style Rename _numberOfRowsDidChange -> _dataViewsNeedReloadAfterContentChange. Subclasses use this method to tell if a full view reloading is needed when calling -reloadData. Currently CPOutlineView returns YES - this is the previous behavior. Added private - (void)_reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes This is the internal method for reloading objectValues only. --- AppKit/CPOutlineView.j | 16 +++++++++++----- AppKit/CPTableView.j | 37 +++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index 25c8ecc6f..b1c3c5646 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -337,7 +337,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, if ([_outlineViewDataSource respondsToSelector:@selector(outlineView:sortDescriptorsDidChange:)]) _implementedOutlineViewDataSourceMethods |= CPOutlineViewDataSource_outlineView_sortDescriptorsDidChange_; - [self _reloadDataViews]; + [self reloadData]; } /*! @@ -630,7 +630,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, _outlineTableColumn = aTableColumn; // FIXME: efficiency. - [self _reloadDataViews]; + [self reloadData]; } /*! @@ -689,7 +689,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, _indentationPerLevel = anIndentationWidth; // FIXME: efficiency!!!! - [self _reloadDataViews]; + [self reloadData]; } /*! @@ -717,7 +717,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, _indentationMarkerFollowsDataView = indentationMarkerShouldFollowDataView; // !!!! - [self _reloadDataViews]; + [self reloadData]; } /*! @@ -1091,7 +1091,13 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, _disclosureControlQueue = []; // FIXME: really? - [self _reloadDataViews]; + [self reloadData]; +} + +- (BOOL)_dataViewsNeedReloadAfterContentChange +{ + // Alternatively, check if the current tree of views mactches the current tree in the data source. + return YES; } /*! diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 235566b28..df658c1fa 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -614,6 +614,7 @@ NOT YET IMPLEMENTED */ - (void)reloadData { + // Empty the data cache. _objectValues = { }; [self reloadDataForRowIndexes:_exposedRows columnIndexes:_exposedColumns]; } @@ -625,20 +626,28 @@ NOT YET IMPLEMENTED */ - (void)reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes { - if ([self _numberOfRowsDidChange]) + if ([self _dataViewsNeedReloadAfterContentChange]) [self _reloadDataViewsImmediately]; else - [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop) - { - [self _setObjectValueForTableColumn:_tableColumns[column] row:row forView:view useCache:NO]; - }]; + [self _reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndexes]; } -- (BOOL)_numberOfRowsDidChange +// Reloads the data, not the views +- (void)_reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes +{ + [self _enumerateViewsInRows:rowIndexes columns:columnIndexes usingBlock:function(view, row, column, stop) + { + var tableColumn = [_tableColumns objectAtIndex:column]; + [self _setObjectValueForTableColumn:tableColumn row:row forView:view useCache:NO]; + }]; +} + +- (BOOL)_dataViewsNeedReloadAfterContentChange { return (_numberOfRows !== [self _numberOfRows]); } +// Reloads the views AND the data - (void)_reloadDataViews { //if (!_dataSource) @@ -3484,11 +3493,13 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self setNeedsDisplay:YES]; // if we have any columns to remove do that here - if ([_differedColumnDataToRemove count]) + var removeCount = [_differedColumnDataToRemove count]; + + if (removeCount) { var removeIndexes = [CPIndexSet indexSet]; - for (var i = 0; i < _differedColumnDataToRemove.length; i++) + for (var i = 0; i < removeCount; i++) { var data = _differedColumnDataToRemove[i], tableColumn = data.column, @@ -3497,7 +3508,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (columnIdx !== CPNotFound) [removeIndexes addIndex:columnIdx]; } - + // FIXME: do we also need to remove non exposed rows that may stay in the cache ? [self _unloadDataViewsInRows:_exposedRows columns:removeIndexes]; [_differedColumnDataToRemove removeAllObjects]; } @@ -3592,9 +3603,11 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self _setObjectValueForTableColumn:tableColumn row:row forView:dataView]; - var applyThemeStateBlock = (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone && (isRowSelected || [self isColumnSelected:column])) ? _BlockSelectView : _BlockDeselectView; - - applyThemeStateBlock(dataView, row, column); + if (_selectionHighlightStyle !== CPTableViewSelectionHighlightStyleNone && + (isRowSelected || [self isColumnSelected:column])) + _BlockSelectView(dataView, row, column); + else + _BlockDeselectView(dataView, row, column); // FIX ME: for performance reasons we might consider diverging from cocoa and moving this to the reloadData method if (_implementedDelegateMethods & CPTableViewDelegate_tableView_isGroupRow_) From 88954b9bf6394590e3965a785ae19211ce9c8c54 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 25 Jun 2014 20:54:18 +0200 Subject: [PATCH 023/234] fix cpcollectionview height issue --- AppKit/CPCollectionView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 5dbd5da53..2b6505682 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -623,7 +623,7 @@ var HORIZONTAL_MARGIN = 2; height = MAX(height, numberOfRows * (_minItemSize.height + _verticalMargin)); - var itemSizeHeight = FLOOR(height / numberOfRows); + var itemSizeHeight = itemSize.height; if (maxItemSizeHeight > 0) itemSizeHeight = MIN(itemSizeHeight, maxItemSizeHeight); From f82e52b7a2b880b82214b3124f9fb390631dc94b Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 26 Jun 2014 18:06:50 +0200 Subject: [PATCH 024/234] correction of height calculation --- AppKit/CPCollectionView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 2b6505682..0bd92dc1c 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -623,7 +623,7 @@ var HORIZONTAL_MARGIN = 2; height = MAX(height, numberOfRows * (_minItemSize.height + _verticalMargin)); - var itemSizeHeight = itemSize.height; + var itemSizeHeight = FLOOR(height / numberOfRows) - _verticalMargin; if (maxItemSizeHeight > 0) itemSizeHeight = MIN(itemSizeHeight, maxItemSizeHeight); From d686a0dadf678c2eac8fdf4e4bcc12a68531e178 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 30 Jul 2014 21:09:41 +0200 Subject: [PATCH 025/234] reverseSetValuesFor: handle multiple selection --- AppKit/CPTextField.j | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 899c460b9..0b85ef76c 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1957,6 +1957,23 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [_source setObjectValue:aValue]; } +- (void)reverseSetValueFor:(CPString)aBinding +{ + var destination = [_info objectForKey:CPObservedObjectKey], + keyPath = [_info objectForKey:CPObservedKeyPathKey], + options = [_info objectForKey:CPOptionsKey], + newValue = [self valueForBinding:aBinding], + value = [destination valueForKeyPath:keyPath]; + + if (CPIsControllerMarker(value) && newValue == nil) return; + + newValue = [self reverseTransformValue:newValue withOptions:options]; + + [self suppressSpecificNotificationFromObject:destination keyPath:keyPath]; + [destination setValue:newValue forKeyPath:keyPath]; + [self unsuppressSpecificNotificationFromObject:destination keyPath:keyPath]; +} + @end @implementation _CPTextFieldPatternValueBinder : CPValueWithPatternBinding From b1981bb70c6b77386922f655d1d079facd5d98ca Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 14 Aug 2014 22:27:46 +0200 Subject: [PATCH 026/234] fix activateIgnoringOtherApps:shouldIgnoreOthe... --- AppKit/CPApplication.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index f26e3b648..1cddce9c7 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -448,7 +448,7 @@ var CPMainCibFile = @"CPMainCibFile", [CPPlatform activateIgnoringOtherApps:shouldIgnoreOtherApps]; _isActive = YES; - [self _willResignActive]; + [self _didBecomeActive]; } - (void)deactivate From 1767cf8ad4e5419fba40453eb1565b77ce91ca58 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 14 Aug 2014 22:41:59 +0200 Subject: [PATCH 027/234] formatting+nil equality --- AppKit/CPTextField.j | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 0b85ef76c..43f83d8ea 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1960,12 +1960,12 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", - (void)reverseSetValueFor:(CPString)aBinding { var destination = [_info objectForKey:CPObservedObjectKey], - keyPath = [_info objectForKey:CPObservedKeyPathKey], - options = [_info objectForKey:CPOptionsKey], - newValue = [self valueForBinding:aBinding], - value = [destination valueForKeyPath:keyPath]; + keyPath = [_info objectForKey:CPObservedKeyPathKey], + options = [_info objectForKey:CPOptionsKey], + newValue = [self valueForBinding:aBinding], + value = [destination valueForKeyPath:keyPath]; - if (CPIsControllerMarker(value) && newValue == nil) return; + if (CPIsControllerMarker(value) && newValue === nil) return; newValue = [self reverseTransformValue:newValue withOptions:options]; From b2f1477b45df4e8cbfda0560fee58006d304c715 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 15 Aug 2014 16:37:03 -0700 Subject: [PATCH 028/234] Fixed: wrong condition in CPApplication --- AppKit/CPApplication.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 1cddce9c7..f3783c75a 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -1173,7 +1173,7 @@ var CPMainCibFile = @"CPMainCibFile", [[self keyWindow] orderFront:self]; else if ([self mainWindow]) [[self mainWindow] makeKeyAndOrderFront:self]; - else + else if ([self mainMenu]) [[self mainMenu]._menuWindow makeKeyWindow]; //FIXME this may not actually work _previousKeyWindow = nil; From 9ed30f563adc97943117754806001badf4314f43 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 19 Aug 2014 14:26:26 -0700 Subject: [PATCH 029/234] Fixed: Methods viewDidMoveToSuperview viewDidMoveToWindow viewWillMoveToSuperview viewWillMoveToWindow not called as in Cocoa Previously, when adding, removing, replacing a CPView, the framework didn't call the methods viewDidMoveToSuperview, viewDidMoveToWindow, viewWillMoveToSuperview and viewWillMoveToWindow as in Cocoa. Now it does. The main change is that these methods will be called when removing a CPView. Added unit-test in Tests/AppKit/CPViewTest.j --- AppKit/CPView.j | 49 +++++---- Tests/AppKit/CPViewTest.j | 212 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 243 insertions(+), 18 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 5e1357ccf..d0517df4b 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -508,6 +508,9 @@ var CPViewFlags = { }, [CPException raise:CPInvalidArgumentException reason:"can't insert a subview in duplicate (probably partially decoded)"]; #endif + // Notify the subview that it will be moving. + [aSubview viewWillMoveToSuperview:self]; + // We will have to adjust the z-index of all views starting at this index. var count = _subviews.length; @@ -537,14 +540,13 @@ var CPViewFlags = { }, } else { + var superview = aSubview._superview; + // Remove the view from its previous superview. - [aSubview removeFromSuperview]; + [aSubview _removeFromSuperview]; - // Set the subview's window to our own. - [aSubview _setWindow:_window]; - - // Notify the subview that it will be moving. - [aSubview viewWillMoveToSuperview:self]; + if (superview) + [aSubview _setWindow:nil]; // Set ourselves as the superview. aSubview._superview = self; @@ -577,6 +579,12 @@ var CPViewFlags = { }, if (![aSubview isHidden] && [self isHiddenOrHasHiddenAncestor]) [aSubview _notifyViewDidHide]; + [aSubview viewDidMoveToSuperview]; + + // Set the subview's window to our own. + if (_window) + [aSubview _setWindow:_window]; + // This method might be called before we are fully unarchived, in which case the theme state isn't set up yet // and none of the below matters anyhow. if (_themeState) @@ -592,8 +600,6 @@ var CPViewFlags = { }, [aSubview _notifyWindowDidResignKey]; } - [aSubview viewDidMoveToSuperview]; - [self didAddSubview:aSubview]; } @@ -610,6 +616,18 @@ var CPViewFlags = { }, Does nothing if there's no container view. */ - (void)removeFromSuperview +{ + var superview = _superview; + + [self viewWillMoveToSuperview:nil]; + [self _removeFromSuperview]; + [self viewDidMoveToSuperview]; + + if (superview) + [self _setWindow:nil]; +} + +- (void)_removeFromSuperview { if (!_superview) return; @@ -634,8 +652,6 @@ var CPViewFlags = { }, [self _notifyViewDidResignFirstResponder]; _superview = nil; - - [self _setWindow:nil]; } /*! @@ -645,14 +661,14 @@ var CPViewFlags = { }, */ - (void)replaceSubview:(CPView)aSubview with:(CPView)aView { - if (aSubview._superview !== self) + if (aSubview._superview !== self || aSubview === aView) return; var index = [_subviews indexOfObjectIdenticalTo:aSubview]; - [aSubview removeFromSuperview]; - [self _insertSubview:aView atIndex:index]; + + [aSubview removeFromSuperview]; } - (void)setSubviews:(CPArray)newSubviews @@ -727,9 +743,6 @@ var CPViewFlags = { }, /* @ignore */ - (void)_setWindow:(CPWindow)aWindow { - if (_window === aWindow) - return; - [[self window] _dirtyKeyViewLoop]; // Clear out first responder if we're the first responder and leaving. @@ -2936,10 +2949,10 @@ setBoundsOrigin: - (BOOL)unsetThemeState:(ThemeState)aState { - if (aState && aState.isa && [aState isKindOfClass:CPArray]) + if (aState && aState.isa && [aState isKindOfClass:CPArray]) aState = CPThemeState.apply(null, aState); - var oldThemeState = _themeState + var oldThemeState = _themeState; _themeState = _themeState.without(aState); if (oldThemeState === _themeState) diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 509664c4b..49857032c 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -4,14 +4,33 @@ [CPApplication sharedApplication] +var methodCalled; + @implementation CPViewTest : OJTestCase { CPView view; + CPView view1; + CPView view2; + CPView view3; + + CPWindow window; } - (void)setUp { + window = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1000.0, 1000.0) styleMask:CPWindowNotSizable]; + view = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + view1 = [[CPResponderView alloc] initWithFrame:CGRectMakeZero()]; + view2 = [[CPResponderView alloc] initWithFrame:CGRectMakeZero()], + view3 = [[CPResponderView alloc] initWithFrame:CGRectMakeZero()], + + [view1 setIdentifier:@"view1"]; + [view2 setIdentifier:@"view2"]; + [view3 setIdentifier:@"view3"]; + + methodCalled = []; + [super setUp]; } @@ -446,10 +465,203 @@ [self assertFalse:[subview hasThemeState:CPThemeStateFirstResponder]]; } +- (void)testWhenAddedSubviewMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1"]; + + [[window contentView] addSubview:view1]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedSubviewWithoutWindowMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view2", @"viewDidMoveToSuperview_view2"]; + + [view1 addSubview:view2]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedSubviewTwiceMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1", @"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1"]; + + [[window contentView] addSubview:view1]; + [[window contentView] addSubview:view1]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenRemovedSubviewMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1"]; + + [view1 removeFromSuperview]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedSubviewThenRemovedSubviewMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1"]; + + [[window contentView] addSubview:view1]; + + methodCalled = []; + [view1 removeFromSuperview]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedSubviewThenRemovedSubviewWithoutWindowMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1"]; + + [view1 addSubview:view2]; + + methodCalled = []; + [view1 removeFromSuperview]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedTwoSubviewsMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view2", @"viewDidMoveToSuperview_view2",@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewWillMoveToWindow_view2", "viewDidMoveToWindow_view2", "viewDidMoveToWindow_view1"]; + + [view1 addSubview:view2]; + [[window contentView] addSubview:view1]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedTwoSubviewsThenRemovedMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewWillMoveToWindow_view2", "viewDidMoveToWindow_view2", "viewDidMoveToWindow_view1"]; + + [view1 addSubview:view2]; + [[window contentView] addSubview:view1]; + + methodCalled = []; + [view1 removeFromSuperview]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedOneSubviewsWithSetSubviewsMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1"]; + + [[window contentView] setSubviews:[view1]]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedTwoSubviewsWithSetSubviewsMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1", @"viewWillMoveToSuperview_view2", @"viewDidMoveToSuperview_view2", "viewWillMoveToWindow_view2", "viewDidMoveToWindow_view2"]; + + [[window contentView] setSubviews:[view1, view2]]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedTwoSubviewsThenSetSubviewsWithOneViewMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view2", @"viewDidMoveToSuperview_view2", "viewWillMoveToWindow_view2", "viewDidMoveToWindow_view2"]; + + [[window contentView] setSubviews:[view1, view2]]; + + methodCalled = []; + + [[window contentView] setSubviews:[view1]]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenAddedTwoSubviewsThenSetSubviewsWithTwoViewsMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view2", @"viewDidMoveToSuperview_view2", "viewWillMoveToWindow_view2", "viewDidMoveToWindow_view2", @"viewWillMoveToSuperview_view3", @"viewDidMoveToSuperview_view3", "viewWillMoveToWindow_view3", "viewDidMoveToWindow_view3"]; + + [[window contentView] setSubviews:[view1, view2]]; + + methodCalled = []; + + [[window contentView] setSubviews:[view1, view3]]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenReplacedViewWithSameViewMethodCalled +{ + var expectedRestult = []; + + [[window contentView] addSubview:view1]; + + methodCalled = []; + + [[window contentView] replaceSubview:view1 with:view1]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenReplacedViewWithOtherViewMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view2", @"viewDidMoveToSuperview_view2", "viewWillMoveToWindow_view2", "viewDidMoveToWindow_view2", @"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1"]; + + [[window contentView] addSubview:view1]; + + methodCalled = []; + + [[window contentView] replaceSubview:view1 with:view2]; + + [self assert:expectedRestult equals:methodCalled]; +} + +- (void)testWhenReplacedViewWithOtherAddedViewMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view2", @"viewDidMoveToSuperview_view2", "viewWillMoveToWindow_view2", "viewDidMoveToWindow_view2", @"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1"]; + + [[window contentView] addSubview:view1]; + [[window contentView] addSubview:view2]; + + methodCalled = []; + + [[window contentView] replaceSubview:view1 with:view2]; + + [self assert:expectedRestult equals:methodCalled]; +} + @end + @implementation CPResponderView : CPView +- (void)viewDidMoveToSuperview +{ + var string = @"viewDidMoveToSuperview_" + [self identifier]; + [methodCalled addObject:string]; +} + +- (void)viewDidMoveToWindow +{ + var string = @"viewDidMoveToWindow_" + [self identifier]; + [methodCalled addObject:string]; +} + +- (void)viewWillMoveToSuperview:(CPView)newSuperview +{ + var string = @"viewWillMoveToSuperview_" + [self identifier]; + [methodCalled addObject:string]; +} + +- (void)viewWillMoveToWindow:(CPWindow)newWindow +{ + var string = @"viewWillMoveToWindow_" + [self identifier]; + [methodCalled addObject:string]; +} + - (BOOL)acceptsFirstResponder { return YES; From abdf1156d4d3d33afff55e168881cd7729c28fe0 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 19 Aug 2014 17:45:01 -0700 Subject: [PATCH 030/234] Fixed: memory leaks with CPNotifications Previously, when removing a view, Cappuccino didn't clean the notification center. The notification center kept in reference old views. This PR fix this issue. When a CPView is added to a view, the methods _removeObservers and _addObservers are called. In these both methods we remove and add the observer to the notification center if needed. _removeObservers and _addObservers are called for the view and its subviews. These both methods are called through the method viewWillMoveToSuperview. When a CPView is removed, we only call the method _removeObservers. When a CPWindow is closed, we call the method _removeObservers on its contentView. When a CPWindow is about to be opened, we call the method _removeObservers and _addObservers on its contentView. Refs #1880 Refs #2024 Test app in Tests/Manual/AttachedSheet2/SheetWindowController.j --- AppKit/CPClipView.j | 45 +++-- AppKit/CPComboBox.j | 202 +++++++++++-------- AppKit/CPDatePicker/_CPDatePickerTextField.j | 40 +++- AppKit/CPSearchField.j | 18 +- AppKit/CPTableView.j | 16 +- AppKit/CPTextField.j | 14 ++ AppKit/CPView.j | 20 ++ AppKit/CPWindow/CPWindow.j | 4 + 8 files changed, 255 insertions(+), 104 deletions(-) diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index 7cc52d2bc..6c941aace 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -47,18 +47,7 @@ if (_documentView) { - var defaultCenter = [CPNotificationCenter defaultCenter]; - - [defaultCenter - removeObserver:self - name:CPViewFrameDidChangeNotification - object:_documentView]; - - [defaultCenter - removeObserver:self - name:CPViewBoundsDidChangeNotification - object:_documentView]; - + [self _removeObserverDocumentView:_documentView]; [_documentView removeFromSuperview]; } @@ -91,6 +80,38 @@ object:_documentView]; } +- (void)_removeObserverDocumentView:(CPView)aDocumentView +{ + var defaultCenter = [CPNotificationCenter defaultCenter]; + + [defaultCenter + removeObserver:self + name:CPViewFrameDidChangeNotification + object:_documentView]; + + [defaultCenter + removeObserver:self + name:CPViewBoundsDidChangeNotification + object:_documentView]; +} + +- (void)_addObservers +{ + [super _addObservers]; + + if (_documentView) + [self _observeDocumentView]; +} + +- (void)_removeObservers +{ + [super _removeObservers]; + + if (_documentView) + [self _removeObserverDocumentView:_documentView]; +} + + /*! Returns the document view. */ diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 6b783b426..c75b01886 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -210,42 +210,11 @@ var CPComboBoxTextSubview = @"text", if (aDelegate === delegate) return; - var defaultCenter = [CPNotificationCenter defaultCenter]; - if (delegate) - { - [defaultCenter removeObserver:delegate name:CPComboBoxSelectionIsChangingNotification object:self]; - [defaultCenter removeObserver:delegate name:CPComboBoxSelectionDidChangeNotification object:self]; - [defaultCenter removeObserver:delegate name:CPComboBoxWillDismissNotification object:self]; - [defaultCenter removeObserver:delegate name:CPComboBoxWillPopUpNotification object:self]; - } + [self _removeObserversDelegate:delegate]; if (aDelegate) - { - if ([aDelegate respondsToSelector:@selector(comboBoxSelectionIsChanging:)]) - [defaultCenter addObserver:delegate - selector:@selector(comboBoxSelectionIsChanging:) - name:CPComboBoxSelectionIsChangingNotification - object:self]; - - if ([aDelegate respondsToSelector:@selector(comboBoxSelectionDidChange:)]) - [defaultCenter addObserver:delegate - selector:@selector(comboBoxSelectionDidChange:) - name:CPComboBoxSelectionDidChangeNotification - object:self]; - - if ([aDelegate respondsToSelector:@selector(comboBoxWillPopUp:)]) - [defaultCenter addObserver:delegate - selector:@selector(comboBoxWillPopUp:) - name:CPComboBoxWillPopUpNotification - object:self]; - - if ([aDelegate respondsToSelector:@selector(comboBoxWillDismiss:)]) - [defaultCenter addObserver:delegate - selector:@selector(comboBoxWillDissmis:) - name:CPComboBoxWillDismissNotification - object:self]; - } + [self _addObserversDelegate:aDelegate]; [super setDelegate:aDelegate]; } @@ -397,56 +366,11 @@ var CPComboBoxTextSubview = @"text", var defaultCenter = [CPNotificationCenter defaultCenter]; if (_listDelegate) - { - [defaultCenter removeObserver:self name:_CPPopUpListWillPopUpNotification object:_listDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListWillDismissNotification object:_listDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListDidDismissNotification object:_listDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListItemWasClickedNotification object:_listDelegate]; - - var oldTableView = [_listDelegate tableView]; - - if (oldTableView) - { - [defaultCenter removeObserver:self name:CPTableViewSelectionIsChangingNotification object:oldTableView]; - [defaultCenter removeObserver:self name:CPTableViewSelectionDidChangeNotification object:oldTableView]; - } - } + [self _removeObserversListDelegate:_listDelegate] _listDelegate = aDelegate; - [defaultCenter addObserver:self - selector:@selector(comboBoxWillPopUp:) - name:_CPPopUpListWillPopUpNotification - object:_listDelegate]; - - [defaultCenter addObserver:self - selector:@selector(comboBoxWillDismiss:) - name:_CPPopUpListWillDismissNotification - object:_listDelegate]; - - [defaultCenter addObserver:self - selector:@selector(listDidDismiss:) - name:_CPPopUpListDidDismissNotification - object:_listDelegate]; - - [defaultCenter addObserver:self - selector:@selector(itemWasClicked:) - name:_CPPopUpListItemWasClickedNotification - object:_listDelegate]; - - [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; - - var tableView = [_listDelegate tableView]; - - [defaultCenter addObserver:self - selector:@selector(comboBoxSelectionIsChanging:) - name:CPTableViewSelectionIsChangingNotification - object:tableView]; - - [defaultCenter addObserver:self - selector:@selector(comboBoxSelectionDidChange:) - name:CPTableViewSelectionDidChangeNotification - object:tableView]; + [self _addObserversListDelegate:_listDelegate] // Apply our text style to the list [_listDelegate setFont:[self font]]; @@ -973,6 +897,124 @@ var CPComboBoxTextSubview = @"text", } } +- (void)_removeObservers +{ + [super _removeObservers]; + + if (_listDelegate) + [self _removeObserversListDelegate:_listDelegate]; + + if ([self delegate]) + [self _removeObserversDelegate:[self delegate]]; +} + +- (void)_removeObserversDelegate:(id)aDelegate +{ + var defaultCenter = [CPNotificationCenter defaultCenter]; + + [defaultCenter removeObserver:aDelegate name:CPComboBoxSelectionIsChangingNotification object:self]; + [defaultCenter removeObserver:aDelegate name:CPComboBoxSelectionDidChangeNotification object:self]; + [defaultCenter removeObserver:aDelegate name:CPComboBoxWillDismissNotification object:self]; + [defaultCenter removeObserver:aDelegate name:CPComboBoxWillPopUpNotification object:self]; +} + +- (void)_removeObserversListDelegate:(id)aDelegate +{ + var defaultCenter = [CPNotificationCenter defaultCenter]; + + [defaultCenter removeObserver:self name:_CPPopUpListWillPopUpNotification object:aDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListWillDismissNotification object:aDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListDidDismissNotification object:aDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListItemWasClickedNotification object:aDelegate]; + + var oldTableView = [aDelegate tableView]; + + if (oldTableView) + { + [defaultCenter removeObserver:self name:CPTableViewSelectionIsChangingNotification object:oldTableView]; + [defaultCenter removeObserver:self name:CPTableViewSelectionDidChangeNotification object:oldTableView]; + } +} + +- (void)_addObservers +{ + [super _addObservers]; + + if (_listDelegate) + [self _addObserversListDelegate:_listDelegate]; + + if ([self delegate]) + [self _addObserversDelegate:[self delegate]]; +} + +- (void)_addObserversDelegate:(id)aDelegate +{ + var defaultCenter = [CPNotificationCenter defaultCenter]; + + if ([aDelegate respondsToSelector:@selector(comboBoxSelectionIsChanging:)]) + [defaultCenter addObserver:aDelegate + selector:@selector(comboBoxSelectionIsChanging:) + name:CPComboBoxSelectionIsChangingNotification + object:self]; + + if ([aDelegate respondsToSelector:@selector(comboBoxSelectionDidChange:)]) + [defaultCenter addObserver:aDelegate + selector:@selector(comboBoxSelectionDidChange:) + name:CPComboBoxSelectionDidChangeNotification + object:self]; + + if ([aDelegate respondsToSelector:@selector(comboBoxWillPopUp:)]) + [defaultCenter addObserver:aDelegate + selector:@selector(comboBoxWillPopUp:) + name:CPComboBoxWillPopUpNotification + object:self]; + + if ([aDelegate respondsToSelector:@selector(comboBoxWillDismiss:)]) + [defaultCenter addObserver:aDelegate + selector:@selector(comboBoxWillDissmis:) + name:CPComboBoxWillDismissNotification + object:self]; +} + +- (void)_addObserversListDelegate:(id)aDelegate +{ + var defaultCenter = [CPNotificationCenter defaultCenter]; + + [defaultCenter addObserver:self + selector:@selector(comboBoxWillPopUp:) + name:_CPPopUpListWillPopUpNotification + object:aDelegate]; + + [defaultCenter addObserver:self + selector:@selector(comboBoxWillDismiss:) + name:_CPPopUpListWillDismissNotification + object:aDelegate]; + + [defaultCenter addObserver:self + selector:@selector(listDidDismiss:) + name:_CPPopUpListDidDismissNotification + object:aDelegate]; + + [defaultCenter addObserver:self + selector:@selector(itemWasClicked:) + name:_CPPopUpListItemWasClickedNotification + object:aDelegate]; + + [[aDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + + var tableView = [aDelegate tableView]; + + [defaultCenter addObserver:self + selector:@selector(comboBoxSelectionIsChanging:) + name:CPTableViewSelectionIsChangingNotification + object:tableView]; + + [defaultCenter addObserver:self + selector:@selector(comboBoxSelectionDidChange:) + name:CPTableViewSelectionDidChangeNotification + object:tableView]; +} + @end @implementation CPComboBox (CPComboBoxDelegate) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 0429c5752..d991f5006 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -92,8 +92,6 @@ var CPZeroKeyCode = 48, [_stepper setAction:@selector(_clickStepper:)]; [self addSubview:_stepper]; - [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_datePickerElementTextFieldBecomeFirstResponder:) name:CPDatePickerElementTextFieldBecomeFirstResponder object:self]; - [self setNeedsLayout]; [self setNeedsDisplay:YES]; } @@ -410,6 +408,24 @@ var CPZeroKeyCode = 48, [_datePickerElementView setNeedsLayout]; } + +#pragma mark - +#pragma mark Override observers + +- (void)_removeObservers +{ + [super _removeObservers]; + + [[CPNotificationCenter defaultCenter] removeObserver:self name:CPDatePickerElementTextFieldBecomeFirstResponder object:self]; +} + +- (void)_addObservers +{ + [super _addObservers]; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_datePickerElementTextFieldBecomeFirstResponder:) name:CPDatePickerElementTextFieldBecomeFirstResponder object:self]; +} + @end @@ -520,8 +536,6 @@ var CPZeroKeyCode = 48, [self addSubview: _textFieldSeparatorThree]; [self addSubview: _textFieldSeparatorFour]; - [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_datePickerElementTextFieldAMPMChangedNotification:) name:CPDatePickerElementTextFieldAMPMChangedNotification object:_textFieldPMAM]; - [self setNeedsLayout]; } @@ -535,6 +549,24 @@ var CPZeroKeyCode = 48, } +#pragma mark - +#pragma mark Override observers + +- (void)_removeObservers +{ + [super _removeObservers]; + + [[CPNotificationCenter defaultCenter] removeObserver:self name:CPDatePickerElementTextFieldAMPMChangedNotification object:_textFieldPMAM]; +} + +- (void)_addObservers +{ + [super _addObservers]; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_datePickerElementTextFieldAMPMChangedNotification:) name:CPDatePickerElementTextFieldAMPMChangedNotification object:_textFieldPMAM]; +} + + #pragma mark - #pragma mark Setter Getter methods diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j index d7346f9ed..0f6d9d9e4 100644 --- a/AppKit/CPSearchField.j +++ b/AppKit/CPSearchField.j @@ -119,16 +119,22 @@ var RECENT_SEARCH_PREFIX = @" "; _canResignFirstResponder = YES; } -- (void)viewWillMoveToSuperview:(CPView)aView + +#pragma mark - +#pragma mark Override observers + +- (void)_removeObservers { - [super viewWillMoveToSuperview:aView]; + [super _removeObservers]; - // First we remove any observer that may have been in place to avoid memory leakage. [[CPNotificationCenter defaultCenter] removeObserver:self name:CPControlTextDidChangeNotification object:self]; +} - // Register the observe here if we need to. - if (aView) - [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_searchFieldTextDidChange:) name:CPControlTextDidChangeNotification object:self]; +- (void)_addObservers +{ + [super _addObservers]; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_searchFieldTextDidChange:) name:CPControlTextDidChangeNotification object:self]; } // Managing Buttons diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index e597f2646..ebeb66e19 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -473,8 +473,6 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; if (!_sortDescriptors) _sortDescriptors = []; - - [self _startObservingFirstResponder]; } /*! @@ -4453,6 +4451,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad */ - (void)viewWillMoveToSuperview:(CPView)aView { + [super viewWillMoveToSuperview:aView]; + var superview = [self superview], defaultCenter = [CPNotificationCenter defaultCenter]; @@ -5125,6 +5125,18 @@ Your delegate can implement this method to avoid subclassing the tableview to ad return hit; } +- (void)_removeObservers +{ + [super _removeObservers]; + [self _stopObservingFirstResponder]; +} + +- (void)_addObservers +{ + [super _addObservers]; + [self _startObservingFirstResponder]; +} + - (void)_startObservingFirstResponder { [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_firstResponderDidChange:) name:_CPWindowDidChangeFirstResponderNotification object:[self window]]; diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 5ff471141..6b1591222 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -820,6 +820,20 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); } } +- (void)_removeObservers +{ + [super _removeObservers]; + [self _setObserveWindowKeyNotifications:NO]; +} + +- (void)_addObservers +{ + [super _addObservers]; + + if ([self window] === self) + [self _setObserveWindowKeyNotifications:YES]; +} + - (void)_windowDidResignKey:(CPNotification)aNotification { if (![[self window] isKeyWindow]) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index d0517df4b..9fb8b6de4 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -816,6 +816,10 @@ var CPViewFlags = { }, */ - (void)viewWillMoveToSuperview:(CPView)aView { + [self _removeObservers]; + + if (aView) + [self _addObservers]; } /*! @@ -834,6 +838,22 @@ var CPViewFlags = { }, { } +- (void)_removeObservers +{ + var count = [_subviews count]; + + while (count--) + [_subviews[count] _removeObservers]; +} + +- (void)_addObservers +{ + var count = [_subviews count]; + + while (count--) + [_subviews[count] _addObservers]; +} + /*! Returns the menu item containing the receiver or one of its ancestor views. @return a menu item, or \c nil if the view or one of its ancestors wasn't found diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 0e074ccb1..70fb8034e 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -901,6 +901,8 @@ CPTexturedBackgroundWindowMask - (void)_orderFront { + [[self contentView] _addObservers]; + #if PLATFORM(DOM) // -dw- if a sheet is clicked, the parent window should come up too if (_isSheet) @@ -960,6 +962,8 @@ CPTexturedBackgroundWindowMask if (!_isVisible) return; + [[self contentView] _removeObservers]; + if ([self isSheet]) { // -dw- as in Cocoa, orderOut: detaches the sheet and animates out From 0479e9b3f3991f5255f3bb29f99adc70b6d77e52 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 19 Aug 2014 17:52:24 -0700 Subject: [PATCH 031/234] Fixed: make sure to remove observers when opening a CPWindow --- AppKit/CPWindow/CPWindow.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 70fb8034e..6f7e684c4 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -901,6 +901,7 @@ CPTexturedBackgroundWindowMask - (void)_orderFront { + [[self contentView] _removeObservers]; [[self contentView] _addObservers]; #if PLATFORM(DOM) From ce0233d0a24c834da6517a6c35ae68ac3a105e87 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 20 Aug 2014 15:11:21 -0700 Subject: [PATCH 032/234] Fixed: revert commit abdf1156d4d3d33afff55e168881cd7729c28fe0 for CPComboBox --- AppKit/CPComboBox.j | 202 ++++++++++++++++++-------------------------- 1 file changed, 80 insertions(+), 122 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index c75b01886..6b783b426 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -210,11 +210,42 @@ var CPComboBoxTextSubview = @"text", if (aDelegate === delegate) return; + var defaultCenter = [CPNotificationCenter defaultCenter]; + if (delegate) - [self _removeObserversDelegate:delegate]; + { + [defaultCenter removeObserver:delegate name:CPComboBoxSelectionIsChangingNotification object:self]; + [defaultCenter removeObserver:delegate name:CPComboBoxSelectionDidChangeNotification object:self]; + [defaultCenter removeObserver:delegate name:CPComboBoxWillDismissNotification object:self]; + [defaultCenter removeObserver:delegate name:CPComboBoxWillPopUpNotification object:self]; + } if (aDelegate) - [self _addObserversDelegate:aDelegate]; + { + if ([aDelegate respondsToSelector:@selector(comboBoxSelectionIsChanging:)]) + [defaultCenter addObserver:delegate + selector:@selector(comboBoxSelectionIsChanging:) + name:CPComboBoxSelectionIsChangingNotification + object:self]; + + if ([aDelegate respondsToSelector:@selector(comboBoxSelectionDidChange:)]) + [defaultCenter addObserver:delegate + selector:@selector(comboBoxSelectionDidChange:) + name:CPComboBoxSelectionDidChangeNotification + object:self]; + + if ([aDelegate respondsToSelector:@selector(comboBoxWillPopUp:)]) + [defaultCenter addObserver:delegate + selector:@selector(comboBoxWillPopUp:) + name:CPComboBoxWillPopUpNotification + object:self]; + + if ([aDelegate respondsToSelector:@selector(comboBoxWillDismiss:)]) + [defaultCenter addObserver:delegate + selector:@selector(comboBoxWillDissmis:) + name:CPComboBoxWillDismissNotification + object:self]; + } [super setDelegate:aDelegate]; } @@ -366,11 +397,56 @@ var CPComboBoxTextSubview = @"text", var defaultCenter = [CPNotificationCenter defaultCenter]; if (_listDelegate) - [self _removeObserversListDelegate:_listDelegate] + { + [defaultCenter removeObserver:self name:_CPPopUpListWillPopUpNotification object:_listDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListWillDismissNotification object:_listDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListDidDismissNotification object:_listDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListItemWasClickedNotification object:_listDelegate]; + + var oldTableView = [_listDelegate tableView]; + + if (oldTableView) + { + [defaultCenter removeObserver:self name:CPTableViewSelectionIsChangingNotification object:oldTableView]; + [defaultCenter removeObserver:self name:CPTableViewSelectionDidChangeNotification object:oldTableView]; + } + } _listDelegate = aDelegate; - [self _addObserversListDelegate:_listDelegate] + [defaultCenter addObserver:self + selector:@selector(comboBoxWillPopUp:) + name:_CPPopUpListWillPopUpNotification + object:_listDelegate]; + + [defaultCenter addObserver:self + selector:@selector(comboBoxWillDismiss:) + name:_CPPopUpListWillDismissNotification + object:_listDelegate]; + + [defaultCenter addObserver:self + selector:@selector(listDidDismiss:) + name:_CPPopUpListDidDismissNotification + object:_listDelegate]; + + [defaultCenter addObserver:self + selector:@selector(itemWasClicked:) + name:_CPPopUpListItemWasClickedNotification + object:_listDelegate]; + + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + + var tableView = [_listDelegate tableView]; + + [defaultCenter addObserver:self + selector:@selector(comboBoxSelectionIsChanging:) + name:CPTableViewSelectionIsChangingNotification + object:tableView]; + + [defaultCenter addObserver:self + selector:@selector(comboBoxSelectionDidChange:) + name:CPTableViewSelectionDidChangeNotification + object:tableView]; // Apply our text style to the list [_listDelegate setFont:[self font]]; @@ -897,124 +973,6 @@ var CPComboBoxTextSubview = @"text", } } -- (void)_removeObservers -{ - [super _removeObservers]; - - if (_listDelegate) - [self _removeObserversListDelegate:_listDelegate]; - - if ([self delegate]) - [self _removeObserversDelegate:[self delegate]]; -} - -- (void)_removeObserversDelegate:(id)aDelegate -{ - var defaultCenter = [CPNotificationCenter defaultCenter]; - - [defaultCenter removeObserver:aDelegate name:CPComboBoxSelectionIsChangingNotification object:self]; - [defaultCenter removeObserver:aDelegate name:CPComboBoxSelectionDidChangeNotification object:self]; - [defaultCenter removeObserver:aDelegate name:CPComboBoxWillDismissNotification object:self]; - [defaultCenter removeObserver:aDelegate name:CPComboBoxWillPopUpNotification object:self]; -} - -- (void)_removeObserversListDelegate:(id)aDelegate -{ - var defaultCenter = [CPNotificationCenter defaultCenter]; - - [defaultCenter removeObserver:self name:_CPPopUpListWillPopUpNotification object:aDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListWillDismissNotification object:aDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListDidDismissNotification object:aDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListItemWasClickedNotification object:aDelegate]; - - var oldTableView = [aDelegate tableView]; - - if (oldTableView) - { - [defaultCenter removeObserver:self name:CPTableViewSelectionIsChangingNotification object:oldTableView]; - [defaultCenter removeObserver:self name:CPTableViewSelectionDidChangeNotification object:oldTableView]; - } -} - -- (void)_addObservers -{ - [super _addObservers]; - - if (_listDelegate) - [self _addObserversListDelegate:_listDelegate]; - - if ([self delegate]) - [self _addObserversDelegate:[self delegate]]; -} - -- (void)_addObserversDelegate:(id)aDelegate -{ - var defaultCenter = [CPNotificationCenter defaultCenter]; - - if ([aDelegate respondsToSelector:@selector(comboBoxSelectionIsChanging:)]) - [defaultCenter addObserver:aDelegate - selector:@selector(comboBoxSelectionIsChanging:) - name:CPComboBoxSelectionIsChangingNotification - object:self]; - - if ([aDelegate respondsToSelector:@selector(comboBoxSelectionDidChange:)]) - [defaultCenter addObserver:aDelegate - selector:@selector(comboBoxSelectionDidChange:) - name:CPComboBoxSelectionDidChangeNotification - object:self]; - - if ([aDelegate respondsToSelector:@selector(comboBoxWillPopUp:)]) - [defaultCenter addObserver:aDelegate - selector:@selector(comboBoxWillPopUp:) - name:CPComboBoxWillPopUpNotification - object:self]; - - if ([aDelegate respondsToSelector:@selector(comboBoxWillDismiss:)]) - [defaultCenter addObserver:aDelegate - selector:@selector(comboBoxWillDissmis:) - name:CPComboBoxWillDismissNotification - object:self]; -} - -- (void)_addObserversListDelegate:(id)aDelegate -{ - var defaultCenter = [CPNotificationCenter defaultCenter]; - - [defaultCenter addObserver:self - selector:@selector(comboBoxWillPopUp:) - name:_CPPopUpListWillPopUpNotification - object:aDelegate]; - - [defaultCenter addObserver:self - selector:@selector(comboBoxWillDismiss:) - name:_CPPopUpListWillDismissNotification - object:aDelegate]; - - [defaultCenter addObserver:self - selector:@selector(listDidDismiss:) - name:_CPPopUpListDidDismissNotification - object:aDelegate]; - - [defaultCenter addObserver:self - selector:@selector(itemWasClicked:) - name:_CPPopUpListItemWasClickedNotification - object:aDelegate]; - - [[aDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; - - var tableView = [aDelegate tableView]; - - [defaultCenter addObserver:self - selector:@selector(comboBoxSelectionIsChanging:) - name:CPTableViewSelectionIsChangingNotification - object:tableView]; - - [defaultCenter addObserver:self - selector:@selector(comboBoxSelectionDidChange:) - name:CPTableViewSelectionDidChangeNotification - object:tableView]; -} - @end @implementation CPComboBox (CPComboBoxDelegate) From bd20050db8321fc2b25974dc6ed54bd59a4c8622 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 20 Aug 2014 15:23:10 -0700 Subject: [PATCH 033/234] Fixed: added a boolean to avoid to addObservers seveal times --- AppKit/CPView.j | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 9fb8b6de4..8218bffd7 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -228,6 +228,8 @@ var CPViewFlags = { }, Function _toolTipFunctionIn; Function _toolTipFunctionOut; BOOL _toolTipInstalled; + + BOOL _isObserving; } /* @@ -844,14 +846,21 @@ var CPViewFlags = { }, while (count--) [_subviews[count] _removeObservers]; + + _isObserving = NO; } - (void)_addObservers { + if (_isObserving) + return; + var count = [_subviews count]; while (count--) [_subviews[count] _addObservers]; + + _isObserving = YES; } /*! From 1fcf13d149756d61dd90d3621623b9d36b459c25 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 20 Aug 2014 16:13:59 -0700 Subject: [PATCH 034/234] Fixed: added optimization for releasing observers --- AppKit/CPClipView.j | 6 +++++ AppKit/CPDatePicker/_CPDatePickerTextField.j | 12 ++++++++++ .../CPRuleEditor/_CPRuleEditorViewSliceRow.j | 23 ++++++++++++++++--- AppKit/CPSearchField.j | 6 +++++ AppKit/CPTableView.j | 6 +++++ AppKit/CPTextField.j | 6 +++++ AppKit/CPView.j | 3 +++ 7 files changed, 59 insertions(+), 3 deletions(-) diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index 6c941aace..8128cc4bc 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -97,6 +97,9 @@ - (void)_addObservers { + if (_isObserving) + return; + [super _addObservers]; if (_documentView) @@ -105,6 +108,9 @@ - (void)_removeObservers { + if (!_isObserving) + return; + [super _removeObservers]; if (_documentView) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index d991f5006..882747a6e 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -414,6 +414,9 @@ var CPZeroKeyCode = 48, - (void)_removeObservers { + if (!_isObserving) + return; + [super _removeObservers]; [[CPNotificationCenter defaultCenter] removeObserver:self name:CPDatePickerElementTextFieldBecomeFirstResponder object:self]; @@ -421,6 +424,9 @@ var CPZeroKeyCode = 48, - (void)_addObservers { + if (_isObserving) + return; + [super _addObservers]; [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_datePickerElementTextFieldBecomeFirstResponder:) name:CPDatePickerElementTextFieldBecomeFirstResponder object:self]; @@ -554,6 +560,9 @@ var CPZeroKeyCode = 48, - (void)_removeObservers { + if (!_isObserving) + return; + [super _removeObservers]; [[CPNotificationCenter defaultCenter] removeObserver:self name:CPDatePickerElementTextFieldAMPMChangedNotification object:_textFieldPMAM]; @@ -561,6 +570,9 @@ var CPZeroKeyCode = 48, - (void)_addObservers { + if (_isObserving) + return; + [super _addObservers]; [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_datePickerElementTextFieldAMPMChangedNotification:) name:CPDatePickerElementTextFieldAMPMChangedNotification object:_textFieldPMAM]; diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j index 20b573790..c06f3021b 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j @@ -65,9 +65,6 @@ var CONTROL_HEIGHT = 16., [self addSubview:_subtractButton]; [self setAutoresizingMask:CPViewWidthSizable]; - - var center = [CPNotificationCenter defaultCenter]; - [center addObserver:self selector:@selector(_textDidChange:) name:CPControlTextDidChangeNotification object:nil]; } - (CPButton)_createRowButton @@ -481,6 +478,26 @@ var CONTROL_HEIGHT = 16., [self layoutSubviews]; } +- (void)_addObservers +{ + if (_isObserving) + return; + + [super _addObservers]; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_textDidChange:) name:CPControlTextDidChangeNotification object:nil]; +} + +- (void)_removeObservers +{ + if (!_isObserving) + return; + + [super _removeObservers]; + + [[CPNotificationCenter defaultCenter] removeObserver:self name:CPControlTextDidChangeNotification object:nil]; +} + - (void)drawRect:(CGRect)rect { [super drawRect:rect]; diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j index 0f6d9d9e4..c26e79140 100644 --- a/AppKit/CPSearchField.j +++ b/AppKit/CPSearchField.j @@ -125,6 +125,9 @@ var RECENT_SEARCH_PREFIX = @" "; - (void)_removeObservers { + if (!_isObserving) + return; + [super _removeObservers]; [[CPNotificationCenter defaultCenter] removeObserver:self name:CPControlTextDidChangeNotification object:self]; @@ -132,6 +135,9 @@ var RECENT_SEARCH_PREFIX = @" "; - (void)_addObservers { + if (_isObserving) + return; + [super _addObservers]; [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_searchFieldTextDidChange:) name:CPControlTextDidChangeNotification object:self]; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index ebeb66e19..eed697cf8 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -5127,12 +5127,18 @@ Your delegate can implement this method to avoid subclassing the tableview to ad - (void)_removeObservers { + if (!_isObserving) + return; + [super _removeObservers]; [self _stopObservingFirstResponder]; } - (void)_addObservers { + if (_isObserving) + return; + [super _addObservers]; [self _startObservingFirstResponder]; } diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 6b1591222..523d56bd4 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -822,12 +822,18 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)_removeObservers { + if (!_isObserving) + return; + [super _removeObservers]; [self _setObserveWindowKeyNotifications:NO]; } - (void)_addObservers { + if (_isObserving) + return; + [super _addObservers]; if ([self window] === self) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 8218bffd7..90f3cd529 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -842,6 +842,9 @@ var CPViewFlags = { }, - (void)_removeObservers { + if (!_isObserving) + return; + var count = [_subviews count]; while (count--) From aa4a4b07d828fbb0911de87ad3ac4c337193ec0d Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 28 Aug 2014 22:22:50 -0700 Subject: [PATCH 035/234] Fixed: method viewWillMoveToWindow and viewDidMoveToWindow not called when when adding a view to a view without a window where the previous superview had a window --- AppKit/CPView.j | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 90f3cd529..785a420e5 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -514,7 +514,8 @@ var CPViewFlags = { }, [aSubview viewWillMoveToSuperview:self]; // We will have to adjust the z-index of all views starting at this index. - var count = _subviews.length; + var count = _subviews.length, + lastWindow; // Dirty the key view loop, in case the window wants to auto recalculate it [[self window] _dirtyKeyViewLoop]; @@ -544,12 +545,11 @@ var CPViewFlags = { }, { var superview = aSubview._superview; + lastWindow = [superview window]; + // Remove the view from its previous superview. [aSubview _removeFromSuperview]; - if (superview) - [aSubview _setWindow:nil]; - // Set ourselves as the superview. aSubview._superview = self; } @@ -587,6 +587,9 @@ var CPViewFlags = { }, if (_window) [aSubview _setWindow:_window]; + if (!_window && lastWindow) + [aSubview _setWindow:nil]; + // This method might be called before we are fully unarchived, in which case the theme state isn't set up yet // and none of the below matters anyhow. if (_themeState) From cf0b4c8f0344dd1dac0561e7d1456ecba529d99e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 28 Aug 2014 22:23:20 -0700 Subject: [PATCH 036/234] Fixed: added CPView test for the method addSubview --- Tests/AppKit/CPViewTest.j | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 49857032c..3d1430492 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -22,8 +22,8 @@ var methodCalled; view = [[CPView alloc] initWithFrame:CGRectMakeZero()]; view1 = [[CPResponderView alloc] initWithFrame:CGRectMakeZero()]; - view2 = [[CPResponderView alloc] initWithFrame:CGRectMakeZero()], - view3 = [[CPResponderView alloc] initWithFrame:CGRectMakeZero()], + view2 = [[CPResponderView alloc] initWithFrame:CGRectMakeZero()]; + view3 = [[CPResponderView alloc] initWithFrame:CGRectMakeZero()]; [view1 setIdentifier:@"view1"]; [view2 setIdentifier:@"view2"]; @@ -549,6 +549,16 @@ var methodCalled; [self assert:expectedRestult equals:methodCalled]; } +- (void)testWhenAddedTwoSubviewsThenAddedTheViewToAnotherViewWithoutWindowMethodCalled +{ + var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", @"viewWillMoveToWindow_view1", @"viewDidMoveToWindow_view1", @"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", @"viewWillMoveToWindow_view1", @"viewDidMoveToWindow_view1"]; + + [[window contentView] addSubview:view1]; + [view2 addSubview:view1]; + + [self assert:expectedRestult equals:methodCalled]; +} + - (void)testWhenAddedOneSubviewsWithSetSubviewsMethodCalled { var expectedRestult = [@"viewWillMoveToSuperview_view1", @"viewDidMoveToSuperview_view1", "viewWillMoveToWindow_view1", "viewDidMoveToWindow_view1"]; From de495aa1c551a29d9fd35fe19b18c816081d1a17 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 28 Aug 2014 22:28:41 -0700 Subject: [PATCH 037/234] Fixed: _removeObservers called in orderFront, we don't need this as addObservers and removeObservers work with boolean to check if the observers are set or not --- AppKit/CPWindow/CPWindow.j | 1 - 1 file changed, 1 deletion(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 6f7e684c4..70fb8034e 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -901,7 +901,6 @@ CPTexturedBackgroundWindowMask - (void)_orderFront { - [[self contentView] _removeObservers]; [[self contentView] _addObservers]; #if PLATFORM(DOM) From ab4f0f87ca4ffe756778f7f0d4ae4464407aba6d Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 4 Sep 2014 17:51:59 +0200 Subject: [PATCH 038/234] bump zIndex by 1 to avoid -1 --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index b0610b5f2..f39c6f5c8 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1280,7 +1280,7 @@ var PreventScroll = true; insertionIndex = _windowLevels[middle] > aLevel ? middle : middle + 1 [_windowLevels insertObject:aLevel atIndex:insertionIndex]; - layer._DOMElement.style.zIndex = aLevel; + layer._DOMElement.style.zIndex = aLevel + 1; _DOMBodyElement.appendChild(layer._DOMElement); } From ecab61929e9d9aec347dbb985876ad3d12272d52 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 4 Sep 2014 18:00:13 +0200 Subject: [PATCH 039/234] formatting --- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index f39c6f5c8..31b1810ef 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1280,7 +1280,7 @@ var PreventScroll = true; insertionIndex = _windowLevels[middle] > aLevel ? middle : middle + 1 [_windowLevels insertObject:aLevel atIndex:insertionIndex]; - layer._DOMElement.style.zIndex = aLevel + 1; + layer._DOMElement.style.zIndex = aLevel + 1; // adding one avoids negative zIndices. These have been causing issues in Chrome _DOMBodyElement.appendChild(layer._DOMElement); } From c4924e4005fc872222216b4e964c006373e8f646 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 4 Sep 2014 14:30:40 -0700 Subject: [PATCH 040/234] Fixed: typo --- AppKit/CPClipView.j | 1 - 1 file changed, 1 deletion(-) diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index 8128cc4bc..8503c4cc5 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -117,7 +117,6 @@ [self _removeObserverDocumentView:_documentView]; } - /*! Returns the document view. */ From 1e392814235cf3be4087b14dc7a4d2d926d6d691 Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Fri, 5 Sep 2014 14:46:20 +0100 Subject: [PATCH 041/234] Fixed: CPBinder unbindAllForObject did not work. Previously, calling CPBinder unbindObjectForKey would not actually unbind each of the bindings because it was passing the wrong object to the unbind method which would silently ignore the issue. The commit passes the correct parameter to allow unbinding to actually take place. Fixes #2197. --- AppKit/CPKeyValueBinding.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 06ce850b7..0377da75a 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -116,7 +116,7 @@ var CPBindingOperationAnd = 0, count = allKeys.length; while (count--) - [anObject unbind:[bindings objectForKey:allKeys[count]]]; + [anObject unbind:allKeys[count]]; [bindingsMap removeObjectForKey:[anObject UID]]; } From c1e89bd1c3d27c6c04afa38ab64fe12d93f10c2b Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 5 Sep 2014 16:16:46 -0700 Subject: [PATCH 042/234] Fixed: CPDatePicker in a CPTableView wrong behavior Previously, when clicking on a CPDatePicker in a CPTableView, cappuccino didn't select the tableView row firstly. Now it does as in cocoa. The stepper still have the same behavior as a CPButton in a CPTableView. refs #2201 --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 37780ef43..85ea5a45f 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -533,9 +533,13 @@ var CPZeroKeyCode = 48, #pragma mark - #pragma mark Responder methods +/*! @ignore */ - (BOOL)acceptsFirstResponder { - return NO; + // This is needed to accept to be firstResponder when nothing is selected. + // This element needs to be first responder when the CPDatePicker is in the CPTableView + // When clicking on a row of a CPTableView where there isn't a date element, the CPTableView will ask this element to know if it can becomes or not a firstResponder. + return [_datePicker isEnabled] && ![self superview]._currentTextField; } @@ -1282,6 +1286,12 @@ var CPMonthDateType = 0, return self; } +/*! @ignore */ +- (BOOL)acceptsFirstResponder +{ + return [_datePicker isEnabled]; +} + /*! Set the dateType of the textField */ - (void)setDateType:(int)aDateType @@ -1734,4 +1744,9 @@ var CPMonthDateType = 0, return frameSize; } -@end +- (CGRect)bezelRectForBounds:(CGRect)bounds +{ + return CGRectMakeCopy(bounds); +} + +@end \ No newline at end of file From a3796fe128b8931d4c95e3a741b12728ce7984db Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 6 Sep 2014 20:22:51 +0200 Subject: [PATCH 043/234] Added private method to CPBinder: + (void)_reverseSetValueFromExclusiveBinderForObject:(id)anObject Usage: when a control is known to have exclusive bindings (like selected index/tag/value), use this method when you don't know the binding name and want to send values to the binded object (via reverseSetValueFor:). In CPBinder binderMap, picks the first binder matching the receiver class or subclass. --- AppKit/CPKeyValueBinding.j | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 06ce850b7..30c637549 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -70,6 +70,20 @@ var CPBindingOperationAnd = 0, return [[bindingsMap objectForKey:[anObject UID]] objectForKey:aBinding]; } ++ (void)_reverseSetValueFromExclusiveBinderForObject:(id)anObject +{ + var bindersByBindingName = [bindingsMap objectForKey:[anObject UID]]; + + [bindersByBindingName enumerateKeysAndObjectsUsingBlock:function(binding, binder, stop) + { + if ([binder isKindOfClass:[self class]]) + { + [binder reverseSetValueFor:binding]; + stop(YES); + } + }]; +} + + (CPDictionary)infoForBinding:(CPString)aBinding forObject:(id)anObject { var theBinding = [self getBinding:aBinding forObject:anObject]; From e051d02ad3661ed21607e76b44d1974b75f96afb Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 6 Sep 2014 20:35:41 +0200 Subject: [PATCH 044/234] FIXED : CPBinder subclasses were keeping references to the source object in a class var. This could cause memory leaks and was unnecessarily verbose. CPPopUpButton , CPRadio and CPSegmentedControl now use a generic CPBinder method for searching the binder involved when the control is asked to reverse set the binding, typically after a user interaction. Fixes #2199 TODO: prevent user to bind multiple selection bindings when these bindings are exclusive. --- AppKit/CPPopUpButton.j | 24 +- AppKit/CPRadio.j | 24 +- AppKit/CPSegmentedControl.j | 38 +- .../AppController.j | 10 +- .../Resources/MainMenu.cib | 2 +- .../Resources/MainMenu.xib | 2782 ++++++++++++----- 6 files changed, 2088 insertions(+), 792 deletions(-) diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index ba54efd32..0484cfcb2 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -773,7 +773,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); - (void)_reverseSetBinding { - [_CPPopUpButtonSelectionBinder reverseSetValueForObject:self]; + [_CPPopUpButtonSelectionBinder _reverseSetValueFromExclusiveBinderForObject:self]; [super _reverseSetBinding]; } @@ -929,30 +929,8 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); @end -var binderForObject = {}; - @implementation _CPPopUpButtonSelectionBinder : CPBinder { - CPString _selectionBinding @accessors; -} - -- (id)initWithBinding:(CPString)aBinding name:(CPString)aName to:(id)aDestination keyPath:(CPString)aKeyPath options:(CPDictionary)options from:(id)aSource -{ - self = [super initWithBinding:aBinding name:aName to:aDestination keyPath:aKeyPath options:options from:aSource]; - - if (self) - { - binderForObject[[aSource UID]] = self; - _selectionBinding = aName; - } - - return self; -} - -+ (void)reverseSetValueForObject:(id)aSource -{ - var binder = binderForObject[[aSource UID]]; - [binder reverseSetValueFor:[binder _selectionBinding]]; } - (void)setPlaceholderValue:(id)aValue withMarker:(CPString)aMarker forBinding:(CPString)aBinding diff --git a/AppKit/CPRadio.j b/AppKit/CPRadio.j index 446578c7c..a887d73b1 100644 --- a/AppKit/CPRadio.j +++ b/AppKit/CPRadio.j @@ -356,7 +356,7 @@ var CPRadioRadioGroupKey = @"CPRadioRadioGroupKey"; [_selectedRadio setState:CPOffState]; _selectedRadio = aRadio; - [_CPRadioGroupSelectionBinder reverseSetValueForObject:self]; + [_CPRadioGroupSelectionBinder _reverseSetValueFromExclusiveBinderForObject:self]; } @end @@ -409,30 +409,8 @@ var CPRadioGroupRadiosKey = @"CPRadioGroupRadiosKey", @end -var binderForObject = {}; - @implementation _CPRadioGroupSelectionBinder : CPBinder { - CPString _selectionBinding @accessors; -} - -- (id)initWithBinding:(CPString)aBinding name:(CPString)aName to:(id)aDestination keyPath:(CPString)aKeyPath options:(CPDictionary)options from:(id)aSource -{ - self = [super initWithBinding:aBinding name:aName to:aDestination keyPath:aKeyPath options:options from:aSource]; - - if (self) - { - binderForObject[[aSource UID]] = self; - _selectionBinding = aName; - } - - return self; -} - -+ (void)reverseSetValueForObject:(id)aSource -{ - var binder = binderForObject[[aSource UID]]; - [binder reverseSetValueFor:[binder _selectionBinding]]; } - (void)setPlaceholderValue:(id)aValue withMarker:(CPString)aMarker forBinding:(CPString)aBinding diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 53bb09394..5baf5646e 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -49,6 +49,7 @@ CPSegmentSwitchTrackingMomentary = 2; unsigned _trackingSegment; BOOL _trackingHighlighted; + BOOL _hasBinding; } + (CPString)defaultThemeClass @@ -107,14 +108,22 @@ CPSegmentSwitchTrackingMomentary = 2; - (void)bind:(CPString)aBinding toObject:(id)anObject withKeyPath:(CPString)aKeyPath options:(CPDictionary)options { if ([[self class] _isSelectionBinding:aBinding] && _trackingMode !== CPSegmentSwitchTrackingSelectOne) + { CPLog.warn("Binding " + aBinding + " needs CPSegmentSwitchTrackingSelectOne tracking mode"); - else - [super bind:aBinding toObject:anObject withKeyPath:aKeyPath options:options]; + return; + } + + if (_hasBinding) + [_CPSegmentedControlBinder unbindAllForObject:self]; + + [super bind:aBinding toObject:anObject withKeyPath:aKeyPath options:options]; + + _hasBinding = YES; } - (void)_reverseSetBinding { - [_CPSegmentedControlBinder reverseSetValueForObject:self]; + [_CPSegmentedControlBinder _reverseSetValueFromExclusiveBinderForObject:self]; } /*! @@ -948,31 +957,10 @@ var CPSegmentedControlSegmentsKey = "CPSegmentedControlSegmentsKey", @end -var CPSegmentedControlBindersMap = {}, - CPSegmentedControlNoSelectionPlaceholder = "CPSegmentedControlNoSelectionPlaceholder"; +var CPSegmentedControlNoSelectionPlaceholder = "CPSegmentedControlNoSelectionPlaceholder"; @implementation _CPSegmentedControlBinder : CPBinder { - CPString _selectionBinding @accessors(readonly, getter=selectionBinding); -} - -+ (void)reverseSetValueForObject:(id)aSource -{ - var binder = CPSegmentedControlBindersMap[[aSource UID]]; - [binder reverseSetValueFor:[binder selectionBinding]]; -} - -- (id)initWithBinding:(CPString)aBinding name:(CPString)aName to:(id)aDestination keyPath:(CPString)aKeyPath options:(CPDictionary)options from:(id)aSource -{ - self = [super initWithBinding:aBinding name:aName to:aDestination keyPath:aKeyPath options:options from:aSource]; - - if (self) - { - CPSegmentedControlBindersMap[[aSource UID]] = self; - _selectionBinding = aName; - } - - return self; } - (void)_updatePlaceholdersWithOptions:(CPDictionary)options diff --git a/Tests/Manual/CPSegmentedControlBindings/AppController.j b/Tests/Manual/CPSegmentedControlBindings/AppController.j index f4f69cd19..712d7b33b 100644 --- a/Tests/Manual/CPSegmentedControlBindings/AppController.j +++ b/Tests/Manual/CPSegmentedControlBindings/AppController.j @@ -6,6 +6,8 @@ * Copyright 2012, Your Company All rights reserved. */ +CPLogRegister(CPLogConsole) + @import @implementation AppController : CPObject @@ -30,10 +32,10 @@ - (id)newObject { - var randIndex = FLOOR(RAND()*3), - randLabel = ["un", "deux", "trois", nil][FLOOR(RAND()*4)], - randTag = FLOOR(RAND()*3); - + var randIndex = FLOOR(RAND() * 3), + randLabel = ["Label1", "Label2", "Label3", nil][FLOOR(RAND() * 4)], + randTag = FLOOR(RAND() * 3); + return [CPDictionary dictionaryWithObjectsAndKeys:randIndex, @"index", randLabel, @"label", randTag, @"tag"]; } diff --git a/Tests/Manual/CPSegmentedControlBindings/Resources/MainMenu.cib b/Tests/Manual/CPSegmentedControlBindings/Resources/MainMenu.cib index 7aa5cbadc..0a9e52e2e 100644 --- a/Tests/Manual/CPSegmentedControlBindings/Resources/MainMenu.cib +++ b/Tests/Manual/CPSegmentedControlBindings/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;251E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;252E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;253E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;249E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;249E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;216E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;156E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;91E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;141E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;207E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;208E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;209E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;210E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;212E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;213E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;214E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;196E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;191E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;235E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;248E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;242E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;319E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;321E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;323E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;241E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;324E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;325E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;240E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;327E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;328E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;329E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;246E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;330E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;331E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;321E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;244E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;333E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;334E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;325E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;228E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;337E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;227E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;339E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;340E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;341E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;226E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;342E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;220E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;345E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;346E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;328E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;347E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;252E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;348E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;349E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;350E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;96E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;351E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;354E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;355E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;102E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;363E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;364E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;365E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;371E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;373E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;374E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;375E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;376E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;377E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;379E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;116E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;379E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;380E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;381E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;116E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;382E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;383E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;385E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;386E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;387E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;397E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;399E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;130E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;399E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;400E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;401E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;402E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;403E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;404E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;405E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;407E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;410E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;411E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;414E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;415E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;416E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;417E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;419E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;421E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;422E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;423E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;143E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;423E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;424E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;425E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;143E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;426E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;143E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;427E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;147E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;427E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;428E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;429E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;414E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;410E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;411E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;431E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;402E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;403E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;432E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;152E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;432E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;433E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;435E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;437E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;439E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;440E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;441E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;443E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;159E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;444E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;445E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;446E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;447E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;449E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;450E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;451E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;452E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;453E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;167E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;453E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;454E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;456E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;457E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;171E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;458E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;459E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;460E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;173E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;460E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;461E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;462E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;456E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;410E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;465E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;467E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;469E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;470E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;402E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;471E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;472E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;473E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;474E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;475E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;183E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;475E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;476E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;478E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;479E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;480E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;481E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;189E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;481E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;482E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;478E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;484E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;194E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;484E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;485E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;486E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;487E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;488E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;489E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;491E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;492E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;493E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;206E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;494E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;496E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;497E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;498E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;499E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;500E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;502E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;504E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;505E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;506E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;505E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;507E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;508E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;509E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;510E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;511E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;407E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;351E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;218E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;513E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;513E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;E;D;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;219E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;516E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;517E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;519E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;521E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;522E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;512E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;221E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;523E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;524E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;525E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;526E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;528E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;529E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;233E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;230E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;530E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;530E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;530E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;530E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;356E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;356E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;356E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;531E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;410E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;512E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;223E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;528E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;532E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;532E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;528E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;534E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;535E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;12;$agrid-colorD;K;6;CP$UIDd;3;536E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;537E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;538E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;512E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;473E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;356E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;356E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;356E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;356E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;358E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;539E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;536E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;512E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;356E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;541E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;232E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;542E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;543E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;544E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;546E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;547E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;402E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;358E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;356E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;548E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;543E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;544E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;549E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;550E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;402E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;358E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;356E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;551E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;530E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;552E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;553E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;554E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;402E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;358E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;356E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;229E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;222E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;555E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;556E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;222E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;558E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;559E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;560E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;512E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;222E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;561E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;512E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;358E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;562E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;529E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;563E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;563E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;529E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;564E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;224E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;3;229E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;222E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;565E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;566E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;222E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;558E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;559E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;560E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;512E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;222E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;567E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;512E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;356E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;568E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;569E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;570E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;571E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;572E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;521E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;512E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;471E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;357E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;358E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;573E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;512E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;356E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;410E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;512E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;574E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;575E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;577E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;578E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;580E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;581E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;577E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;582E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;584E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;577E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;585E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;586E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;587E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;577E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;588E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;589E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;587E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;577E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;588E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;590E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;587E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;577E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;588E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;591E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;592E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;593E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;594E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;219E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;595E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;517E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;519E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;521E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;596E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;597E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;592E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;593E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;598E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;219E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;599E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;517E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;519E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;521E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;600E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;601E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;592E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;593E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;602E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;579E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;603E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;604E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;518E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;571E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;572E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;521E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;512E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;474E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;357E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;358E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;573E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;512E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;356E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;410E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;512E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;605E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;250E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;606E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;356E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;356E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;356E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;356E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;356E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;356E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;356E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;358E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;358E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;3;607E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;608E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;216E;E;E;S;8;delegateS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;4;add:S;7;remove:S;20;value: selection.tagS;5;valueS;13;selection.tagD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;609E;E;E;S;22;value: selection.labelS;15;selection.labelD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;609E;E;E;S;22;value: selection.indexS;15;selection.indexD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;609E;E;E;S;26;selectedTag: selection.tagS;11;selectedTagD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;30;selectedLabel: selection.labelS;13;selectedLabelD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;610E;E;E;S;26;value: arrangedObjects.tagS;19;arrangedObjects.tagD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;28;value: arrangedObjects.labelS;21;arrangedObjects.labelD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;28;value: arrangedObjects.indexS;21;arrangedObjects.indexD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;30;selectedIndex: selection.indexS;13;selectedIndexD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;115E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;106E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;117E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;142E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;132E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;141E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;155E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;6;Print…S;1;pS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;E;E;S;10;Clear MenuS;13;Page Setup...S;1;PS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;205E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 278}, {626, 360}}S;22;{{0, 0}, {1680, 1028}}d;1;0S;20;{{0, 0}, {626, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;248E;E;E;S;6;normalS;21;{{35, 18}, {146, 25}}S;19;{{0, 0}, {146, 25}}d;2;36S;17;segmented-controlD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;520E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;611E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;612E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;356E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;614E;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;616E;E;E;S;23;{{35, 163}, {413, 151}}S;20;{{0, 0}, {413, 151}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;528E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;541E;D;K;6;CP$UIDd;3;531E;E;E;S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;527E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;222E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;617E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;532E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;618E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;222E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;619E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;620E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;527E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;222E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;621E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;622E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;222E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;619E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;624E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;232E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;217E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;222E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;625E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;222E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;E;S;20;{{0, 0}, {411, 133}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;533E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;626E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;533E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;627E;E;d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;228E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;540E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;222E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;628E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;629E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;222E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;631E;E;d;3;116d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;545E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;625E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;632E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;633E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;512E;K;12;$atext-colorD;K;6;CP$UIDd;3;634E;K;6;$afontD;K;6;CP$UIDd;3;635E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;636E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;635E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;3;634E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;512E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;473E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;637E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;639E;K;11;$aalignmentD;K;6;CP$UIDd;3;512E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;641E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;642E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;643E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;356E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;356E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;619E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;473E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;512E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;3;111D;K;6;$classD;K;6;CP$UIDd;3;545E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;625E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;644E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;633E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;512E;K;12;$atext-colorD;K;6;CP$UIDd;3;634E;K;6;$afontD;K;6;CP$UIDd;3;635E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;645E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;635E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;3;634E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;512E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;473E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;637E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;639E;K;11;$aalignmentD;K;6;CP$UIDd;3;512E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;646E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;642E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;643E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;356E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;356E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;619E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;473E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;512E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;3;136f;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;3;545E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;625E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;647E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;633E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;512E;K;12;$atext-colorD;K;6;CP$UIDd;3;634E;K;6;$afontD;K;6;CP$UIDd;3;635E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;648E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;635E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;3;634E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;512E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;473E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;637E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;576E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;639E;K;11;$aalignmentD;K;6;CP$UIDd;3;512E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;649E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;642E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;643E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;356E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;356E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;619E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;473E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;512E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;19;{{1, 1}, {411, 15}}S;19;{{0, 0}, {411, 15}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:f;18;0.9903614457831326S;19;{{0, 0}, {411, 25}}S;14;tableHeaderRowS;22;{{224, 32}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;27;_verticalScrollerDidScroll:f;18;0.8872180451127819S;21;{{35, 317}, {39, 25}}S;18;{{0, 0}, {39, 25}}S;6;buttonS;8;borderedd;2;14S;22;{{466, 171}, {38, 17}}S;18;{{0, 0}, {38, 17}}S;9;textfieldD;K;6;$classD;K;6;CP$UIDd;3;520E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;611E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;612E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;356E;E;S;6;index:D;K;6;$classD;K;6;CP$UIDd;3;533E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;650E;E;S;22;{{471, 196}, {33, 17}}S;18;{{0, 0}, {33, 17}}S;6;label:S;22;{{481, 221}, {23, 17}}S;18;{{0, 0}, {23, 17}}S;4;tag:S;23;{{506, 171}, {100, 17}}S;19;{{0, 0}, {100, 17}}S;5;LabelS;23;{{506, 196}, {100, 17}}S;23;{{506, 221}, {100, 17}}S;22;{{193, 23}, {413, 17}}S;19;{{0, 0}, {413, 17}}D;K;6;$classD;K;6;CP$UIDd;3;520E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;651E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;652E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;358E;E;S;56;CPSelectedIndexBinding CPArrayController selection.indexS;21;{{35, 65}, {146, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;653E;D;K;6;CP$UIDd;3;654E;D;K;6;CP$UIDd;3;655E;E;E;S;22;{{193, 70}, {413, 17}}S;56;CPSelectedLabelBinding CPArrayController selection.labelS;22;{{35, 115}, {146, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;656E;D;K;6;CP$UIDd;3;657E;D;K;6;CP$UIDd;3;658E;E;E;S;23;{{193, 120}, {413, 17}}S;52;CPSelectedTagBinding CPArrayController selection.tagS;21;{{79, 317}, {36, 25}}S;18;{{0, 0}, {36, 25}}S;13;AppControllerS;19;CPMutableDictionaryS;15;ArrayControllerS;17;CPArrayControllerS;4;NULLS;5;troisS;28;_CPFontSystemFacePlaceholderd;2;-1D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;659E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;512E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;660E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;356E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;413E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;610E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;410E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;S;20;{{1, 1}, {411, 133}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;224E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;533E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;661E;E;S;6;_NS:11S;21;{{1, 134}, {411, 17}}S;19;{{0, 0}, {411, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;232E;E;E;S;6;_NS:15S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;662E;D;K;6;CP$UIDd;3;662E;D;K;6;CP$UIDd;3;662E;D;K;6;CP$UIDd;3;413E;E;E;S;22;{{224, 128}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewS;6;_NS:19D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;664E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;533E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;665E;E;D;K;6;$classD;K;6;CP$UIDd;3;520E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;611E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;666E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;356E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;356E;E;S;5;indexS;17;{{3, 0}, {-6, 0}}S;17;{{0, 0}, {-6, 0}}S;8;editableD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;640E;K;4;nameD;K;6;CP$UIDd;3;667E;K;12;defaultValueD;K;6;CP$UIDd;3;577E;K;6;valuesD;K;6;CP$UIDd;3;668E;E;S;9;Text Celld;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;669E;E;E;S;5;labelD;K;6;$classD;K;6;CP$UIDd;3;640E;K;4;nameD;K;6;CP$UIDd;3;667E;K;12;defaultValueD;K;6;CP$UIDd;3;577E;K;6;valuesD;K;6;CP$UIDd;3;670E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;671E;E;E;S;3;tagD;K;6;$classD;K;6;CP$UIDd;3;640E;K;4;nameD;K;6;CP$UIDd;3;667E;K;12;defaultValueD;K;6;CP$UIDd;3;577E;K;6;valuesD;K;6;CP$UIDd;3;672E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;673E;D;K;6;CP$UIDd;3;673E;D;K;6;CP$UIDd;3;673E;D;K;6;CP$UIDd;3;413E;E;E;S;7;Courierd;2;12D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;659E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;512E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;660E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;356E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;413E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;610E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;410E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;659E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;512E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;660E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;356E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;413E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;613E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;610E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;410E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;S;2;unS;4;deuxD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;E;E;f;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;663E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;546E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;625E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;546E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;674E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;358E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;675E;D;K;6;CP$UIDd;3;675E;D;K;6;CP$UIDd;3;675E;D;K;6;CP$UIDd;3;413E;E;E;d;2;11S;4;fontD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;676E;K;6;normalD;K;6;CP$UIDd;3;677E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;663E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;549E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;625E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;549E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;674E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;358E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;E;D;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;676E;K;6;normalD;K;6;CP$UIDd;3;677E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;663E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;553E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;625E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;553E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;674E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;358E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;E;D;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;21;selectedTableDataViewD;K;6;CP$UIDd;3;676E;K;6;normalD;K;6;CP$UIDd;3;677E;E;E;f;18;0.6862745098039216d;2;18f;18;0.5019607843137255D;K;6;$classD;K;6;CP$UIDd;3;520E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;678E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;652E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;356E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;358E;E;D;K;6;$classD;K;6;CP$UIDd;3;520E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;611E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;652E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;356E;E;S;17;Arial, sans-serifE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;251E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;252E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;253E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;249E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;249E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;216E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;156E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;91E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;141E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;207E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;208E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;209E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;210E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;212E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;213E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;214E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;177E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;196E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;191E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;233E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;241E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;240E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;319E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;321E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;323E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;324E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;325E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;238E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;327E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;328E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;329E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;248E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;330E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;331E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;321E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;246E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;333E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;334E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;325E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;226E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;337E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;225E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;339E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;340E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;341E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;224E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;342E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;320E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;243E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;251E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;345E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;346E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;328E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;347E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;252E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;348E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;349E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;350E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;96E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;96E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;351E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;354E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;355E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;102E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;102E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;363E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;364E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;365E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;371E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;373E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;374E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;375E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;376E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;377E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;379E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;116E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;116E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;379E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;380E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;381E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;116E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;382E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;383E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;385E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;386E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;387E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;397E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;399E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;130E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;130E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;399E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;400E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;401E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;402E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;403E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;404E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;405E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;406E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;407E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;410E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;411E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;130E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;414E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;137E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;415E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;416E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;417E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;419E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;420E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;421E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;422E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;423E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;143E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;143E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;423E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;424E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;425E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;143E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;426E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;143E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;427E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;147E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;147E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;427E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;428E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;429E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;414E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;410E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;411E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;431E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;402E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;403E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;432E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;152E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;152E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;432E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;433E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;435E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;437E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;439E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;440E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;441E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;443E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;159E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;159E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;444E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;445E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;446E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;447E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;449E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;398E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;450E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;451E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;452E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;152E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;453E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;167E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;453E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;454E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;456E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;457E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;167E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;171E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;171E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;458E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;459E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;460E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;173E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;173E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;460E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;461E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;462E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;456E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;410E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;465E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;467E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;469E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;470E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;402E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;471E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;472E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;473E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;474E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;475E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;183E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;475E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;476E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;478E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;479E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;480E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;481E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;189E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;481E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;482E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;478E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;484E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;194E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;194E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;484E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;485E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;486E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;487E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;488E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;489E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;491E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;492E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;493E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;173E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;352E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;206E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;494E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;496E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;497E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;498E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;499E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;500E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;502E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;358E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;504E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;505E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;506E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;505E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;215E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;507E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;508E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;509E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;510E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;511E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;407E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;351E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;218E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;513E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;513E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;514E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;219E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;517E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;518E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;519E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;521E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;523E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;524E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;231E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;228E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;525E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;525E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;525E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;525E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;356E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;356E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;356E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;526E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;410E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;512E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;221E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;523E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;527E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;527E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;523E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;529E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;530E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;12;$agrid-colorD;K;6;CP$UIDd;3;531E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;532E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;533E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;512E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;473E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;356E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;356E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;356E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;356E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;358E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;534E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;531E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;512E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;356E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;536E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;230E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;223E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;537E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;538E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;539E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;541E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;542E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;402E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;358E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;356E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;223E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;543E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;538E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;539E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;544E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;545E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;402E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;358E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;356E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;223E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;546E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;525E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;547E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;548E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;549E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;402E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;358E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;356E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;227E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;220E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;220E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;552E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;554E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;555E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;512E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;220E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;556E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;512E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;358E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;557E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;229E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;524E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;558E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;558E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;524E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;559E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;222E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;3;227E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;220E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;560E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;561E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;220E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;552E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;554E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;555E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;512E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;220E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;562E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;512E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;356E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;563E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;232E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;564E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;565E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;567E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;512E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;471E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;357E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;358E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;570E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;512E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;356E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;410E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;512E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;571E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;572E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;574E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;576E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;577E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;578E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;579E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;580E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;581E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;582E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;584E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;585E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;584E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;586E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;584E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;232E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;587E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;588E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;567E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;512E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;474E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;357E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;358E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;570E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;512E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;356E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;410E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;512E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;242E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;589E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;590E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;592E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;593E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;594E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;595E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;596E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;597E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;594E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;595E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;598E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;242E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;599E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;600E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;601E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;602E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;603E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;473E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;595E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;356E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;604E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;358E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;575E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;410E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;473E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;242E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;218E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;605E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;606E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;218E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;11;$aalignmentD;K;6;CP$UIDd;3;410E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;410E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;473E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;607E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;413E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;608E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;250E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;609E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;356E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;356E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;356E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;356E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;356E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;356E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;356E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;358E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;358E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;3;610E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;611E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;216E;E;E;S;8;delegateS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;4;add:S;7;remove:S;20;value: selection.tagS;5;valueS;13;selection.tagD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;612E;E;E;S;22;value: selection.labelS;15;selection.labelD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;612E;E;E;S;22;value: selection.indexS;15;selection.indexD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;612E;E;E;S;26;selectedTag: selection.tagS;11;selectedTagD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;30;selectedLabel: selection.labelS;13;selectedLabelD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;K;17;CPNullPlaceholderD;K;6;CP$UIDd;3;613E;E;E;S;26;value: arrangedObjects.tagS;19;arrangedObjects.tagD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;28;value: arrangedObjects.labelS;21;arrangedObjects.labelD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;28;value: arrangedObjects.indexS;21;arrangedObjects.indexD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;30;selectedIndex: selection.indexS;13;selectedIndexD;K;6;$classD;K;6;CP$UIDd;3;322E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;115E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;106E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;117E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;142E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;132E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;141E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;155E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;6;Print…S;1;pS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;E;E;S;10;Clear MenuS;13;Page Setup...S;1;PS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;205E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 277}, {695, 361}}S;22;{{0, 0}, {1680, 1028}}d;1;0S;20;{{0, 0}, {695, 361}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;E;E;S;6;normalS;6;{1, 1}S;23;{{35, 163}, {413, 151}}S;20;{{0, 0}, {413, 151}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;523E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;524E;D;K;6;CP$UIDd;3;526E;E;E;d;2;36S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;522E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;220E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;614E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;527E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;615E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;220E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;616E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;618E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;3;522E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;220E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;619E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;620E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;621E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;220E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;525E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;622E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;230E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;217E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;220E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;220E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;E;S;20;{{0, 0}, {411, 133}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;528E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;624E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;528E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;625E;E;d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;226E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;535E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;512E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;626E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;627E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;628E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;629E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;E;d;3;116d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;630E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;631E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;632E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;633E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;632E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;512E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;473E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;634E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;635E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;636E;K;11;$aalignmentD;K;6;CP$UIDd;3;512E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;637E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;638E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;356E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;356E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;617E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;473E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;512E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;3;111D;K;6;$classD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;639E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;631E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;632E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;640E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;632E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;512E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;473E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;634E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;635E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;636E;K;11;$aalignmentD;K;6;CP$UIDd;3;512E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;637E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;638E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;356E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;356E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;617E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;473E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;512E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;3;136f;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;641E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;631E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;632E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;642E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;632E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;512E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;473E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;634E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;635E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;636E;K;11;$aalignmentD;K;6;CP$UIDd;3;512E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;637E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;638E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;356E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;356E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;358E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;617E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;473E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;512E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;19;{{1, 1}, {411, 15}}S;19;{{0, 0}, {411, 15}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:f;18;0.9903614457831326S;19;{{0, 0}, {411, 25}}S;14;tableHeaderRowS;22;{{224, 32}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;27;_verticalScrollerDidScroll:f;18;0.8872180451127819S;21;{{35, 317}, {39, 25}}S;18;{{0, 0}, {39, 25}}S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;568E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;643E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;644E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;358E;E;d;2;14S;22;{{466, 171}, {38, 17}}S;18;{{0, 0}, {38, 17}}S;9;textfieldS;6;index:D;K;6;$classD;K;6;CP$UIDd;3;528E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;645E;E;S;22;{{471, 196}, {33, 17}}S;18;{{0, 0}, {33, 17}}S;6;label:S;22;{{481, 221}, {23, 17}}S;18;{{0, 0}, {23, 17}}S;4;tag:S;23;{{506, 171}, {100, 17}}S;19;{{0, 0}, {100, 17}}S;5;LabelS;23;{{506, 196}, {100, 17}}S;23;{{506, 221}, {100, 17}}S;21;{{79, 317}, {36, 25}}S;18;{{0, 0}, {36, 25}}S;21;{{35, 18}, {209, 25}}S;19;{{0, 0}, {209, 25}}S;17;segmented-controlD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;647E;D;K;6;CP$UIDd;3;648E;D;K;6;CP$UIDd;3;649E;E;E;S;22;{{249, 22}, {413, 17}}S;19;{{0, 0}, {413, 17}}D;K;6;$classD;K;6;CP$UIDd;3;568E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;650E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;651E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;358E;E;S;56;CPSelectedIndexBinding CPArrayController selection.indexS;22;{{249, 69}, {413, 17}}S;56;CPSelectedLabelBinding CPArrayController selection.labelS;21;{{35, 65}, {194, 25}}S;19;{{0, 0}, {194, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;652E;D;K;6;CP$UIDd;3;653E;D;K;6;CP$UIDd;3;654E;E;E;S;23;{{249, 119}, {380, 17}}S;19;{{0, 0}, {380, 17}}S;52;CPSelectedTagBinding CPArrayController selection.tagS;22;{{35, 115}, {173, 25}}S;19;{{0, 0}, {173, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;655E;D;K;6;CP$UIDd;3;656E;D;K;6;CP$UIDd;3;657E;E;E;S;13;AppControllerS;19;CPMutableDictionaryS;15;ArrayControllerS;17;CPArrayControllerS;4;NULLS;5;troisS;20;{{1, 1}, {411, 133}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;222E;E;E;d;2;18D;K;6;$classD;K;6;CP$UIDd;3;528E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;658E;E;S;6;_NS:11S;21;{{1, 134}, {411, 17}}S;19;{{0, 0}, {411, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;230E;E;E;S;6;_NS:15S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;659E;D;K;6;CP$UIDd;3;659E;D;K;6;CP$UIDd;3;659E;D;K;6;CP$UIDd;3;413E;E;E;S;20;{{224, 0}, {14, 25}}S;18;{{0, 0}, {14, 25}}S;10;cornerviewS;6;_NS:19D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;661E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;568E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;643E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;662E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;358E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;358E;E;S;5;indexS;17;{{3, 0}, {-6, 0}}S;17;{{0, 0}, {-6, 0}}S;22;editable+tableDataViewS;9;Text Celld;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;663E;E;E;S;5;labelD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;664E;E;E;S;3;tagS;17;.Lucida Grande UId;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;413E;E;E;D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;666E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;512E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;667E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;356E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;413E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;668E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;410E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;S;7;Courierd;2;12D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;669E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;512E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;670E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;356E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;413E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;671E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;410E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;672E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;512E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;673E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;356E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;413E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;512E;E;D;K;6;$classD;K;6;CP$UIDd;3;646E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;674E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;358E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;356E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;410E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;675E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;D;K;6;CP$UIDd;3;413E;E;E;f;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;660E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;541E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;541E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;616E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;358E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;E;d;2;11D;K;6;$classD;K;6;CP$UIDd;3;660E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;544E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;544E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;616E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;358E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;E;D;K;6;$classD;K;6;CP$UIDd;3;660E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;548E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;548E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;616E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;358E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;515E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;516E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;516E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;358E;E;f;18;0.6862745098039216S;7;Index:0S;7;Index:1S;7;Index:2S;6;Label1S;6;Label2S;6;Label3S;5;Tag:0S;5;Tag:1S;5;Tag:2d;2;55E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPSegmentedControlBindings/Resources/MainMenu.xib b/Tests/Manual/CPSegmentedControlBindings/Resources/MainMenu.xib index 554ab4afd..7881fb0bd 100644 --- a/Tests/Manual/CPSegmentedControlBindings/Resources/MainMenu.xib +++ b/Tests/Manual/CPSegmentedControlBindings/Resources/MainMenu.xib @@ -1,17 +1,16 @@ - + 1050 - 11G63 - 2844 - 1138.51 - 569.00 + 13E28 + 6206.8 + 1265.21 + 698.00 com.apple.InterfaceBuilder.CocoaPlugin - 2844 + 6206.8 - - YES + NSArrayController NSButton NSButtonCell @@ -29,17 +28,15 @@ NSTextFieldCell NSView NSWindowTemplate - - - YES + + com.apple.InterfaceBuilder.CocoaPlugin - + PluginDependencyRecalculationVersion - - YES + NSApplication @@ -51,8 +48,7 @@ AMainMenu - - YES + NewApplication @@ -68,10 +64,10 @@ NSMenuMixedState submenuAction: + NewApplication - - YES + About NewApplication @@ -120,11 +116,10 @@ submenuAction: + Services - - YES - + _NSServicesMenu @@ -186,7 +181,7 @@ - + _NSAppleMenu @@ -199,10 +194,10 @@ submenuAction: + File - - YES + New @@ -230,10 +225,10 @@ submenuAction: + Open Recent - - YES + Clear Menu @@ -243,7 +238,7 @@ - + _NSRecentDocumentsMenu @@ -323,7 +318,7 @@ - + @@ -335,10 +330,10 @@ submenuAction: + Edit - - YES + Undo @@ -433,10 +428,10 @@ submenuAction: + Find - - YES + Find… @@ -486,7 +481,7 @@ - + @@ -498,10 +493,10 @@ submenuAction: + Spelling and Grammar - - YES + Show Spelling… @@ -538,7 +533,7 @@ - + @@ -550,10 +545,10 @@ submenuAction: + Substitutions - - YES + Smart Copy/Paste @@ -584,7 +579,7 @@ 3 - + @@ -596,10 +591,10 @@ submenuAction: + Speech - - YES + Start Speaking @@ -618,10 +613,10 @@ - + - + @@ -632,10 +627,10 @@ submenuAction: + Format - - YES + Font @@ -644,10 +639,10 @@ submenuAction: + Font - - YES + Show Fonts @@ -734,10 +729,10 @@ submenuAction: + Kern - - YES + Use Default @@ -770,7 +765,7 @@ - + @@ -781,10 +776,10 @@ submenuAction: + Ligature - - YES + Use Default @@ -809,7 +804,7 @@ - + @@ -820,10 +815,10 @@ submenuAction: + Baseline - - YES + Use Default @@ -864,7 +859,7 @@ - + @@ -914,7 +909,7 @@ - + _NSFontMenu @@ -926,10 +921,10 @@ submenuAction: + Text - - YES + Align Left @@ -1001,10 +996,10 @@ - + - + @@ -1016,10 +1011,10 @@ submenuAction: + View - - YES + Show Toolbar @@ -1038,7 +1033,7 @@ - + @@ -1050,10 +1045,10 @@ submenuAction: + Window - - YES + Minimize @@ -1092,7 +1087,7 @@ - + _NSWindowsMenu @@ -1105,10 +1100,10 @@ submenuAction: + Help - - YES + NewApplication Help @@ -1118,16 +1113,16 @@ - + - + _NSMainMenu 7 2 - {{335, 390}, {626, 360}} + {{335, 390}, {695, 361}} 1946157056 Window NSWindow @@ -1136,59 +1131,56 @@ 256 - - YES + 268 - {{33, 317}, {146, 24}} + {{33, 318}, {209, 24}} _NS:9 YES - 67108864 + 75497472 0 - LucidaGrande + YES 13 1044 _NS:9 - - YES + - un + Index:0 3 - deux + Index:1 1 YES 3 - trois + Index:2 2 3 - + 1 1 + NO 268 - - YES + - 2304 - - YES + 2322 + 256 @@ -1198,27 +1190,26 @@ _NS:13 YES + NO + YES 256 {411, 17} - + _NS:16 - - + + -2147483392 {{224, 0}, {16, 17}} - - _NS:19 - - YES + 116 40 @@ -1228,7 +1219,7 @@ 2048 index - LucidaGrande + YES 11 3100 @@ -1304,7 +1295,7 @@ 10 3.4028234663852886e+38 - 75628096 + 75497536 2048 tag @@ -1320,7 +1311,7 @@ - 337772096 + 337641536 2048 Text Cell @@ -1333,7 +1324,7 @@ YES - + 3 2 @@ -1357,7 +1348,7 @@ 0 1 - + {{1, 17}, {411, 133}} @@ -1375,6 +1366,7 @@ _NS:58 + NO _doScroller: 0.88721804511278191 @@ -1387,6 +1379,7 @@ _NS:60 + NO 1 _doScroller: @@ -1394,11 +1387,10 @@ - 2304 - - YES + 2338 + - + {{1, 0}, {411, 17}} @@ -1408,9 +1400,8 @@ 4 - - - {{35, 46}, {413, 151}} + + {{35, 47}, {413, 151}} @@ -1420,13 +1411,15 @@ - QSAAAEEgAABBmAAAQZgAAA + 0.25 + 4 + 1 268 - {{29, 12}, {51, 32}} + {{29, 13}, {51, 32}} @@ -1446,85 +1439,87 @@ 200 25 + NO 268 - {{33, 270}, {146, 24}} + {{33, 271}, {194, 24}} _NS:9 YES - 67108864 + 75497472 0 _NS:9 - - YES + - un + Label1 3 - deux + Label2 1 YES 3 - trois + Label3 2 3 - + 1 1 + NO 268 - {{33, 220}, {146, 24}} + {{33, 221}, {173, 24}} _NS:9 YES - 67108864 - 0 + 76546112 + 1024 _NS:9 - - YES + - un + Tag:0 3 - deux + Tag:1 1 YES 3 - trois + 55 + Tag:2 2 3 - + 1 1 + NO 268 - {{190, 320}, {419, 17}} + {{246, 322}, {419, 17}} @@ -1549,11 +1544,13 @@ + NO + 1 268 - {{190, 273}, {419, 17}} + {{246, 275}, {419, 17}} @@ -1569,11 +1566,13 @@ + NO + 1 268 - {{190, 223}, {419, 17}} + {{246, 225}, {386, 17}} @@ -1589,11 +1588,13 @@ + NO + 1 268 - {{463, 172}, {44, 17}} + {{463, 173}, {44, 17}} @@ -1609,11 +1610,13 @@ + NO + 1 268 - {{468, 147}, {39, 17}} + {{468, 148}, {39, 17}} @@ -1629,11 +1632,13 @@ + NO + 1 268 - {{478, 122}, {29, 17}} + {{478, 123}, {29, 17}} @@ -1649,11 +1654,13 @@ + NO + 1 268 - {{503, 172}, {106, 17}} + {{503, 173}, {106, 17}} @@ -1669,11 +1676,13 @@ + NO + 1 268 - {{503, 147}, {106, 17}} + {{503, 148}, {106, 17}} @@ -1689,11 +1698,13 @@ + NO + 1 268 - {{503, 122}, {106, 17}} + {{503, 123}, {106, 17}} @@ -1709,11 +1720,13 @@ + NO + 1 268 - {{73, 12}, {48, 32}} + {{73, 13}, {48, 32}} @@ -1733,9 +1746,10 @@ 200 25 + NO - - {626, 360} + + {695, 361} @@ -1748,12 +1762,11 @@ AppController - - YES + index label tag - + YES YES @@ -1763,10 +1776,9 @@ YES YES - + - - YES + terminate: @@ -2447,15 +2459,12 @@ 558 - + - - YES + 0 - - YES - + @@ -2464,24 +2473,38 @@ File's Owner + + + + + -1 First Responder + + + + + -3 Application + + + + + 29 - - YES + @@ -2489,60 +2512,84 @@ - + MainMenu + + + + + 19 - - YES + - + + + + + + 56 - - YES + - + + + + + + 103 - - YES + - + + + + + + 217 - - YES + - + + + + + + 83 - - YES + - + + + + + + 81 - - YES + @@ -2554,87 +2601,154 @@ - + + + + + + 75 + + + + + 80 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 - - YES + - + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 - - YES + - + + + + + + 126 + + + + + 205 - - YES + @@ -2648,156 +2762,270 @@ - + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 - - YES + - + + + + + + 216 - - YES + - + + + + + + 200 - - YES + - + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 - - YES + - + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 - - YES + - + + + + + + 111 + + + + + 57 - - YES + @@ -2809,218 +3037,372 @@ - + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 - - YES + - + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 - - YES + - + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 - - YES + - + + + + + + 296 - - YES + - + + + + + + 297 + + + + + 298 + + + + + 211 - - YES + - + + + + + + 212 - - YES + - + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 - - YES + - + + + + + + 349 - - YES + - + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 - - YES + - + + + + + + 372 - - YES - + @@ -3029,57 +3411,136 @@ - - - - - - + + + + + + + + + + + + + + + + + 1 + {0, 0} + + + + + + + + 2 + {695, 361} + + + + + + + + + + + + + + + + + + + + + + + + ibDesignableContentView.ibShadowedSubviews + + + + + + + + + + + + + + + + + + + 375 - - YES + - + + + + + + 376 - - YES + - + + + + + + 377 - - YES + - + + + + + + 378 - - YES + - + + + + + + 379 - - YES + @@ -3088,54 +3549,98 @@ - + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 - - YES + @@ -3152,899 +3657,1744 @@ - + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 - - YES + - + + + + + + 398 - - YES + - + + + + + + 399 - - YES + - + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 - - YES + - + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 - - YES + - + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 - - YES + - + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + 491 - - YES + - + + + + + + + + + 1 + {33, 318} + + + + + + + + 2 + {209, 24} + + + + + + + + + + + + + + + + + + + + + + + + 492 + + + + + 503 - - YES + - + + + + + + + + + 1 + {35, 47} + + + + + + + + 2 + {413, 151} + + + + + + + + + + + + + + + + + + + + + + + + 504 - - YES + - + + + + + + + + + 1 + {0, 0} + + + + + + + + 2 + {411, 133} + + + + + + + + + + + + + + + + + + + + + + + + 505 + + + + + + + + 1 + {1, 135} + + + + + + + + 2 + {411, 15} + + + + + + + + + + + + + + + + + + + + + + + + 506 + + + + + + + + 1 + {0, 0} + + + + + + + + 2 + {411, 17} + + + + + + + + + + + + + + + + + + + + + + + + 507 + + + + + + + + 1 + {224, 17} + + + + + + + + 2 + {15, 102} + + + + + + + + + + + + + + + + + + + + + + + + 508 - - YES + - + + + + + + 509 - - YES + - + + + + + + 510 + + + + + 511 + + + + + 512 - - YES + - + + + + + + 513 + + + + + 514 - - YES + - + + + + + + + + + 1 + {29, 13} + + + + + + + + 2 + {51, 32} + + + + + + + + + + + + + + + + + + + + + + + + 515 + + + + + 516 + + + + + 524 - - YES + - + + + + + + + + + 1 + {33, 271} + + + + + + + + 2 + {194, 24} + + + + + + + + + + + + + + + + + + + + + + + + 525 + + + + + 527 - - YES + - + + + + + + + + + 1 + {33, 221} + + + + + + + + 2 + {173, 24} + + + + + + + + + + + + + + + + + + + + + + + + 528 + + + + + 530 - - YES + - + + + + + + + + + 1 + {246, 322} + + + + + + + + 2 + {419, 17} + + + + + + + + + + + + + + + + + + + + + + + + 531 + + + + + 532 - - YES + - + + + + + + + + + 1 + {246, 275} + + + + + + + + 2 + {419, 17} + + + + + + + + + + + + + + + + + + + + + + + + 533 + + + + + 534 - - YES + - + + + + + + + + + 1 + {246, 225} + + + + + + + + 2 + {386, 17} + + + + + + + + + + + + + + + + + + + + + + + + 535 + + + + + 536 - - YES + - + + + + + + + + + 1 + {463, 173} + + + + + + + + 2 + {44, 17} + + + + + + + + + + + + + + + + + + + + + + + + 537 + + + + + 538 - - YES + - + + + + + + + + + 1 + {468, 148} + + + + + + + + 2 + {39, 17} + + + + + + + + + + + + + + + + + + + + + + + + 539 + + + + + 540 - - YES + - + + + + + + + + + 1 + {478, 123} + + + + + + + + 2 + {29, 17} + + + + + + + + + + + + + + + + + + + + + + + + 541 + + + + + 542 - - YES + - + + + + + + + + + 1 + {503, 173} + + + + + + + + 2 + {106, 17} + + + + + + + + + + + + + + + + + + + + + + + + 543 + + + + + 544 - - YES + - + + + + + + + + + 1 + {503, 148} + + + + + + + + 2 + {106, 17} + + + + + + + + + + + + + + + + + + + + + + + + 545 + + + + + 546 - - YES + - + + + + + + + + + 1 + {503, 123} + + + + + + + + 2 + {106, 17} + + + + + + + + + + + + + + + + + + + + + + + + 547 + + + + + 562 - - YES + - + + + + + + + + + 1 + {73, 13} + + + + + + + + 2 + {48, 32} + + + + + + + + + + + + + + + + + + + + + + + + 563 + + + + + - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 103.IBPluginDependency - 106.IBPluginDependency - 111.IBPluginDependency - 112.IBPluginDependency - 124.IBPluginDependency - 125.IBPluginDependency - 126.IBPluginDependency - 129.IBPluginDependency - 130.IBPluginDependency - 131.IBPluginDependency - 134.IBPluginDependency - 136.IBPluginDependency - 143.IBPluginDependency - 144.IBPluginDependency - 145.IBPluginDependency - 149.IBPluginDependency - 150.IBPluginDependency - 19.IBPluginDependency - 195.IBPluginDependency - 196.IBPluginDependency - 197.IBPluginDependency - 198.IBPluginDependency - 199.IBPluginDependency - 200.IBPluginDependency - 201.IBPluginDependency - 202.IBPluginDependency - 203.IBPluginDependency - 204.IBPluginDependency - 205.IBPluginDependency - 206.IBPluginDependency - 207.IBPluginDependency - 208.IBPluginDependency - 209.IBPluginDependency - 210.IBPluginDependency - 211.IBPluginDependency - 212.IBPluginDependency - 213.IBPluginDependency - 214.IBPluginDependency - 215.IBPluginDependency - 216.IBPluginDependency - 217.IBPluginDependency - 218.IBPluginDependency - 219.IBPluginDependency - 220.IBPluginDependency - 221.IBPluginDependency - 23.IBPluginDependency - 236.IBPluginDependency - 239.IBPluginDependency - 24.IBPluginDependency - 29.IBPluginDependency - 295.IBPluginDependency - 296.IBPluginDependency - 297.IBPluginDependency - 298.IBPluginDependency - 346.IBPluginDependency - 348.IBPluginDependency - 349.IBPluginDependency - 350.IBPluginDependency - 351.IBPluginDependency - 354.IBPluginDependency - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 372.IBPluginDependency - 375.IBPluginDependency - 376.IBPluginDependency - 377.IBPluginDependency - 378.IBPluginDependency - 379.IBPluginDependency - 380.IBPluginDependency - 381.IBPluginDependency - 382.IBPluginDependency - 383.IBPluginDependency - 384.IBPluginDependency - 385.IBPluginDependency - 386.IBPluginDependency - 387.IBPluginDependency - 388.IBPluginDependency - 389.IBPluginDependency - 390.IBPluginDependency - 391.IBPluginDependency - 392.IBPluginDependency - 393.IBPluginDependency - 394.IBPluginDependency - 395.IBPluginDependency - 396.IBPluginDependency - 397.IBPluginDependency - 398.IBPluginDependency - 399.IBPluginDependency - 400.IBPluginDependency - 401.IBPluginDependency - 402.IBPluginDependency - 403.IBPluginDependency - 404.IBPluginDependency - 405.IBPluginDependency - 406.IBPluginDependency - 407.IBPluginDependency - 408.IBPluginDependency - 409.IBPluginDependency - 410.IBPluginDependency - 411.IBPluginDependency - 412.IBPluginDependency - 413.IBPluginDependency - 414.IBPluginDependency - 415.IBPluginDependency - 416.IBPluginDependency - 417.IBPluginDependency - 418.IBPluginDependency - 419.IBPluginDependency - 450.IBPluginDependency - 491.IBPluginDependency - 492.IBNSSegmentedControlInspectorSelectedSegmentMetadataKey - 492.IBPluginDependency - 5.IBPluginDependency - 503.IBPluginDependency - 504.IBPluginDependency - 505.IBPluginDependency - 506.IBPluginDependency - 507.IBPluginDependency - 508.IBPluginDependency - 509.IBPluginDependency - 510.IBPluginDependency - 511.IBPluginDependency - 512.IBPluginDependency - 513.IBPluginDependency - 514.IBPluginDependency - 515.IBPluginDependency - 516.CustomClassName - 516.IBPluginDependency - 524.IBPluginDependency - 525.IBNSSegmentedControlInspectorSelectedSegmentMetadataKey - 525.IBPluginDependency - 527.IBPluginDependency - 528.IBNSSegmentedControlInspectorSelectedSegmentMetadataKey - 528.IBPluginDependency - 530.IBPluginDependency - 531.IBPluginDependency - 532.IBPluginDependency - 533.IBPluginDependency - 534.IBPluginDependency - 535.IBPluginDependency - 536.IBPluginDependency - 537.IBPluginDependency - 538.IBPluginDependency - 539.IBPluginDependency - 540.IBPluginDependency - 541.IBPluginDependency - 542.IBPluginDependency - 543.IBPluginDependency - 544.IBPluginDependency - 545.IBPluginDependency - 546.IBPluginDependency - 547.IBPluginDependency - 56.IBPluginDependency - 562.IBPluginDependency - 563.IBPluginDependency - 57.IBPluginDependency - 58.IBPluginDependency - 72.IBPluginDependency - 73.IBPluginDependency - 74.IBPluginDependency - 75.IBPluginDependency - 77.IBPluginDependency - 78.IBPluginDependency - 79.IBPluginDependency - 80.IBPluginDependency - 81.IBPluginDependency - 82.IBPluginDependency - 83.IBPluginDependency - 92.IBPluginDependency - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{303, 221}, {480, 360}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - ArrayController - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - YES - - + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {447.5, 416.5} + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + ArrayController + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + - - YES - - - + 567 - - YES + AppController NSObject - + IBProjectSource - ./Classes/AppController.h + ../.XcodeSupport/AppController.h ArrayController NSArrayController - - IBProjectSource - ./Classes/ArrayController.h - + - + 0 IBCocoaFramework + NO com.apple.InterfaceBuilder.CocoaPlugin.macosx com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - + YES 3 - - YES - - YES - NSMenuCheckmark - NSMenuMixedState - - - YES - {11, 11} - {10, 3} - - + + {11, 11} + {10, 3} + From fa5fd1e71cf1d9184ef97462795ca57c91f087bb Mon Sep 17 00:00:00 2001 From: Sebastian Balay Date: Fri, 5 Sep 2014 16:05:21 -0300 Subject: [PATCH 045/234] Add support to diacritic insensitive search in CPString rangeOfString:options:range: method When searching by range, the option of diacritic insensitive search was not being contemplated Also add support to strip variants of 'E' 'I' 'O' 'U' that were not implemented. Source: http://www.ascii-code.com/ --- Foundation/CPString.j | 21 ++++++++++++++++++--- Tests/Foundation/CPStringTest.j | 7 +++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Foundation/CPString.j b/Foundation/CPString.j index d9992ed8f..69e9caf8a 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -345,6 +345,7 @@ var CPStringUIDs = new CFMutableDictionary(), specified mask which can be a combination of:
     CPCaseInsensitiveSearch
+    CPDiacriticInsensitiveSearch
     CPLiteralSearch
     CPBackwardsSearch
     CPAnchoredSearch
@@ -366,6 +367,7 @@ var CPStringUIDs = new CFMutableDictionary(),
     options specified in the specified mask which can be a combination of:
     
     CPCaseInsensitiveSearch
+    CPDiacriticInsensitiveSearch
     CPLiteralSearch
     CPBackwardsSearch
     CPAnchoredSearch
@@ -393,6 +395,11 @@ var CPStringUIDs = new CFMutableDictionary(),
         string = string.toLowerCase();
         aString = aString.toLowerCase();
     }
+    if (aMask & CPDiacriticInsensitiveSearch)
+    {
+        string = string.stripDiacritics();
+        aString = aString.stripDiacritics();
+    }
 
     if (aMask & CPBackwardsSearch)
     {
@@ -682,6 +689,14 @@ var CPStringNull = [CPNull null];
     return self.toUpperCase();
 }
 
+/*!
+    Returns a copy of the string stripped of diacritical marks.
+*/
+- (CPString)stripDiacritics
+{
+    return self.stripDiacritics();
+}
+
 /*!
     Returns the text as a floating point value.
 */
@@ -948,9 +963,9 @@ var CPStringNull = [CPNull null];
 
 @end
 
-
-var diacritics = [[192,198],[224,230],[231,231],[232,235],[236,239],[242,246],[249,252]], // Basic Latin ; Latin-1 Supplement.
-    normalized = [65,97,99,101,105,111,117];
+var diacritics = [[192,198],[200,203],[204,207],[210,214],[217,220],[224,230],
+                 [231,231],[232,235],[236,239],[242,246],[249,252]], // Basic Latin ; Latin-1 Supplement.
+    normalized = [65,69,73,79,85,97,99,101,105,111,117];
 
 String.prototype.stripDiacritics = function()
 {
diff --git a/Tests/Foundation/CPStringTest.j b/Tests/Foundation/CPStringTest.j
index 3bc97c334..f3e4c9454 100644
--- a/Tests/Foundation/CPStringTest.j
+++ b/Tests/Foundation/CPStringTest.j
@@ -572,4 +572,11 @@
     [self assertThrows:function () { [@"Objective-J" compare:[CPNull null]] }];
 }
 
+- (void)testStripDiacritics
+{
+    [self assert:[@"áa ée íi óo úu" stripDiacritics]  equals:@"aa ee ii oo uu"];
+    [self assert:[@"ÁA ÉE ÍI ÓO ÚU" stripDiacritics]  equals:@"AA EE II OO UU"];
+    [self assert:[@"Å Ã Ê í ö û" stripDiacritics]  equals:@"A A E i o u"];
+}
+
 @end

From 68b193a782ac5a6bb313a1f64984e2b308540d94 Mon Sep 17 00:00:00 2001
From: cacaodev 
Date: Tue, 9 Sep 2014 20:31:15 +0200
Subject: [PATCH 046/234] NEW: bind:toObject: ... now checks if another binding
 mutually exclusive is already binded. Throws an exception if this is the
 case. Controls can implement -isExlusiveBinding: to determine if bindings are
 exclusive. Defaults to NO. Exclusive bindings are mainly
 CPSelectedIndexBinding | CPSelectedTagBinding | CPSelectedValueBinding

---
 AppKit/CPKeyValueBinding.j           | 29 +++++++++++
 AppKit/CPPopUpButton.j               | 21 +++++---
 AppKit/CPRadio.j                     |  7 +++
 AppKit/CPSegmentedControl.j          | 73 +++++++++++++++-------------
 Tests/AppKit/CPKeyValueBindingTest.j | 15 ++++++
 5 files changed, 103 insertions(+), 42 deletions(-)

diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j
index 30c637549..3e0989998 100644
--- a/AppKit/CPKeyValueBinding.j
+++ b/AppKit/CPKeyValueBinding.j
@@ -173,6 +173,24 @@ var CPBindingOperationAnd = 0,
     return self;
 }
 
++ (BOOL)isBindingAllowed:(CPString)aBinding forObject:(id)anObject
+{
+    if ([[anObject class] isBindingExclusive:aBinding])
+    {
+        var bindingsForObject = [bindingsMap objectForKey:[anObject UID]],
+            allBindings = [bindingsForObject allKeys],
+            count = [allBindings count];
+
+        while(count--)
+        {
+            if ([[anObject class] isBindingExclusive:allBindings[count]])
+                return NO;
+        }
+    }
+
+    return YES;
+}
+
 - (void)raiseIfNotApplicable:(id)aValue forKeyPath:(CPString)keyPath options:(CPDictionary)options
 {
     if (aValue === CPNotApplicableMarker && [options objectForKey:CPRaisesForNotApplicableKeysBindingOption])
@@ -401,6 +419,11 @@ var CPBindingOperationAnd = 0,
     return [CPBinder class];
 }
 
++ (BOOL)isBindingExclusive:(CPString)aBinding
+{
+    return NO;
+}
+
 - (CPArray)exposedBindings
 {
     var exposedBindings = [],
@@ -429,6 +452,12 @@ var CPBindingOperationAnd = 0,
     if (!anObject || !aKeyPath)
         return CPLog.error("Invalid object or path on " + self + " for " + aBinding);
 
+    if (![CPBinder isBindingAllowed:aBinding forObject:self])
+    {
+        [CPException raise:CPGenericException
+                   reason:@"Cannot bind " + aBinding + " because a binding with the same functionality is already in use."];
+        return;
+    }
     //if (![[self exposedBindings] containsObject:aBinding])
     //    CPLog.warn("No binding exposed on " + self + " for " + aBinding);
 
diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j
index 0484cfcb2..09aecb6fe 100644
--- a/AppKit/CPPopUpButton.j
+++ b/AppKit/CPPopUpButton.j
@@ -771,13 +771,6 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
             [[self selectedItem] setState:CPOffState];
 }
 
-- (void)_reverseSetBinding
-{
-    [_CPPopUpButtonSelectionBinder _reverseSetValueFromExclusiveBinderForObject:self];
-
-    [super _reverseSetBinding];
-}
-
 @end
 
 @implementation CPPopUpButton (BindingSupport)
@@ -800,6 +793,20 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
     return [super _binderClassForBinding:aBinding];
 }
 
++ (BOOL)isBindingExclusive:(CPString)aBinding
+{
+    return (aBinding == CPSelectedIndexBinding ||
+           aBinding == CPSelectedTagBinding ||
+           aBinding == CPSelectedValueBinding);
+}
+
+- (void)_reverseSetBinding
+{
+    [_CPPopUpButtonSelectionBinder _reverseSetValueFromExclusiveBinderForObject:self];
+
+    [super _reverseSetBinding];
+}
+
 @end
 
 @implementation _CPPopUpButtonContentBinder : CPBinder
diff --git a/AppKit/CPRadio.j b/AppKit/CPRadio.j
index a887d73b1..8cf37cc3d 100644
--- a/AppKit/CPRadio.j
+++ b/AppKit/CPRadio.j
@@ -407,6 +407,13 @@ var CPRadioGroupRadiosKey           = @"CPRadioGroupRadiosKey",
     return [super _binderClassForBinding:aBinding];
 }
 
++ (BOOL)isBindingExclusive:(CPString)aBinding
+{
+    return (aBinding == CPSelectedIndexBinding ||
+           aBinding == CPSelectedTagBinding ||
+           aBinding == CPSelectedValueBinding);
+}
+
 @end
 
 @implementation _CPRadioGroupSelectionBinder : CPBinder
diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j
index 5baf5646e..37b4ec316 100644
--- a/AppKit/CPSegmentedControl.j
+++ b/AppKit/CPSegmentedControl.j
@@ -49,7 +49,6 @@ CPSegmentSwitchTrackingMomentary = 2;
 
     unsigned                _trackingSegment;
     BOOL                    _trackingHighlighted;
-    BOOL                    _hasBinding;
 }
 
 + (CPString)defaultThemeClass
@@ -75,19 +74,6 @@ CPSegmentSwitchTrackingMomentary = 2;
         };
 }
 
-+ (Class)_binderClassForBinding:(CPString)aBinding
-{
-    if ([self _isSelectionBinding:aBinding])
-        return [_CPSegmentedControlBinder class];
-
-    return [super _binderClassForBinding:aBinding];
-}
-
-+ (BOOL)_isSelectionBinding:(CPString)aBinding
-{
-    return (aBinding === CPSelectedIndexBinding || aBinding === CPSelectedLabelBinding || aBinding === CPSelectedTagBinding);
-}
-
 - (id)initWithFrame:(CGRect)aRect
 {
     _segments = [];
@@ -105,27 +91,6 @@ CPSegmentSwitchTrackingMomentary = 2;
     return self;
 }
 
-- (void)bind:(CPString)aBinding toObject:(id)anObject withKeyPath:(CPString)aKeyPath options:(CPDictionary)options
-{
-    if ([[self class] _isSelectionBinding:aBinding] && _trackingMode !== CPSegmentSwitchTrackingSelectOne)
-    {
-        CPLog.warn("Binding " + aBinding + " needs CPSegmentSwitchTrackingSelectOne tracking mode");
-        return;
-    }
-
-    if (_hasBinding)
-        [_CPSegmentedControlBinder unbindAllForObject:self];
-
-    [super bind:aBinding toObject:anObject withKeyPath:aKeyPath options:options];
-
-    _hasBinding = YES;
-}
-
-- (void)_reverseSetBinding
-{
-    [_CPSegmentedControlBinder _reverseSetValueFromExclusiveBinderForObject:self];
-}
-
 /*!
     Returns the tag of the selected segment.
 */
@@ -957,6 +922,44 @@ var CPSegmentedControlSegmentsKey       = "CPSegmentedControlSegmentsKey",
 
 @end
 
+@implementation CPSegmentedControl (BindingSupport)
+
++ (Class)_binderClassForBinding:(CPString)aBinding
+{
+    if ([self _isSelectionBinding:aBinding])
+        return [_CPSegmentedControlBinder class];
+
+    return [super _binderClassForBinding:aBinding];
+}
+
++ (BOOL)_isSelectionBinding:(CPString)aBinding
+{
+    return (aBinding === CPSelectedIndexBinding || aBinding === CPSelectedLabelBinding || aBinding === CPSelectedTagBinding);
+}
+
++ (BOOL)isBindingExclusive:(CPString)aBinding
+{
+    return [self _isSelectionBinding:aBinding];
+}
+
+- (void)bind:(CPString)aBinding toObject:(id)anObject withKeyPath:(CPString)aKeyPath options:(CPDictionary)options
+{
+    if ([[self class] _isSelectionBinding:aBinding] && _trackingMode !== CPSegmentSwitchTrackingSelectOne)
+    {
+        CPLog.warn("Binding " + aBinding + " needs CPSegmentSwitchTrackingSelectOne tracking mode");
+        return;
+    }
+
+    [super bind:aBinding toObject:anObject withKeyPath:aKeyPath options:options];
+}
+
+- (void)_reverseSetBinding
+{
+    [_CPSegmentedControlBinder _reverseSetValueFromExclusiveBinderForObject:self];
+}
+
+@end
+
 var CPSegmentedControlNoSelectionPlaceholder = "CPSegmentedControlNoSelectionPlaceholder";
 
 @implementation _CPSegmentedControlBinder : CPBinder
diff --git a/Tests/AppKit/CPKeyValueBindingTest.j b/Tests/AppKit/CPKeyValueBindingTest.j
index 9812e81e6..701e1d858 100644
--- a/Tests/AppKit/CPKeyValueBindingTest.j
+++ b/Tests/AppKit/CPKeyValueBindingTest.j
@@ -342,6 +342,21 @@
     [self assert:@"brie" equals:[control2 objectValue] message:@"control2 objectValue is wrong"];
 }
 
+- (void)testExclusiveBindingsThrowsException
+{
+    var segmented = [[CPSegmentedControl alloc] initWithFrame:CGRectMakeZero()];
+    [segmented setSegmentCount:3];
+
+    var model = [BindingTester testerWithCheese:2];
+
+    [segmented bind:CPSelectedIndexBinding toObject:model withKeyPath:@"cheese" options:nil];
+
+    [self assertThrows:function()
+    {
+        [segmented bind:CPSelectedTagBinding toObject:model withKeyPath:@"cheese" options:nil];
+    }];
+}
+
 @end
 
 @implementation TextField : CPTextField

From 83ec89fa20c3e9f3ff0e296954e544fa7033454b Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Wed, 10 Sep 2014 12:54:16 -0700
Subject: [PATCH 047/234] Fixed: CPDatePicker send an action with the methods
 setObjectValue: and setDateValue:

Previously, the CPDatePicker sent an action to the target when the method setObjectValue: and setDateValue were called.
Now it sends the action only when the user makes an action.

Fixed #2206
---
 AppKit/CPDatePicker/CPDatePicker.j           | 5 ++++-
 AppKit/CPDatePicker/_CPDatePickerCalendar.j  | 8 ++++++++
 AppKit/CPDatePicker/_CPDatePickerTextField.j | 8 ++++++--
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/AppKit/CPDatePicker/CPDatePicker.j b/AppKit/CPDatePicker/CPDatePicker.j
index 0fec343d4..80b7c9efe 100644
--- a/AppKit/CPDatePicker/CPDatePicker.j
+++ b/AppKit/CPDatePicker/CPDatePicker.j
@@ -75,6 +75,7 @@ CPEraDatePickerElementFlag              = 0x0100;
     CPInteger       _datePickerStyle    @accessors(property=datePickerStyle);
     CPInteger       _timeInterval       @accessors(property=timeInterval);
 
+    BOOL                    _invokedByUserEvent;
     _CPDatePickerTextField  _datePickerTextfield;
     _CPDatePickerCalendar   _datePickerCalendar;
     unsigned                _implementedCDatePickerDelegateMethods;
@@ -312,6 +313,7 @@ CPEraDatePickerElementFlag              = 0x0100;
     if (aDateValue == nil)
         return;
 
+    _invokedByUserEvent = NO;
     [self _setDateValue:aDateValue timeInterval:_timeInterval];
 }
 
@@ -359,7 +361,8 @@ CPEraDatePickerElementFlag              = 0x0100;
     _timeInterval = (_datePickerMode == CPSingleDateMode)? 0 : aTimeInterval;
     [self didChangeValueForKey:@"timeInterval"];
 
-    [self sendAction:[self action] to:[self target]];
+    if (_invokedByUserEvent)
+        [self sendAction:[self action] to:[self target]];
 
     if (_datePickerStyle == CPTextFieldAndStepperDatePickerStyle || _datePickerStyle == CPTextFieldDatePickerStyle)
         [_datePickerTextfield setDateValue:_dateValue];
diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j
index a3bf3535f..8ebd1ee8c 100644
--- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j
+++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j
@@ -896,6 +896,8 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su"
     _indexDayTile = -1;
     _eventDragged = nil
 
+    _datePicker._invokedByUserEvent = YES;
+
     // Check if we have to change or not the month of the component
     if ([dayTile date].getMonth() == _date.getMonth())
     {
@@ -948,6 +950,8 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su"
         else
             [_delegate _displayNextMonth];
     }
+
+    _datePicker._invokedByUserEvent = NO;
 }
 
 /*! Mouse dragged event
@@ -965,6 +969,8 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su"
     _indexDayTile = [self indexOfTileForEvent:anEvent];
     _eventDragged = anEvent;
 
+    _datePicker._invokedByUserEvent = YES;
+
     if ([_datePicker datePickerMode] == CPSingleDateMode)
     {
         // Check if we have to change or not the month of the component
@@ -1006,6 +1012,8 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su"
                 [_datePicker _setDateValue:[self _hoursMinutesSecondsFromDatePickerForDate:_clickDate] timeInterval:[dateTile timeIntervalSinceDate:dateValueAtMidnight]];
         }
     }
+
+    _datePicker._invokedByUserEvent = NO;
 }
 
 - (void)mouseUp:(CPEvent)anEvent
diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j
index 37780ef43..b8cc6dfdd 100644
--- a/AppKit/CPDatePicker/_CPDatePickerTextField.j
+++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j
@@ -679,7 +679,9 @@ var CPZeroKeyCode = 48,
             dateValue.setHours(dateValue.getHours() - 12);
     }
 
-    [_datePicker setDateValue:dateValue];
+    _datePicker._invokedByUserEvent = YES;
+    [_datePicker _setDateValue:dateValue timeInterval:[_datePicker timeInterval]];
+    _datePicker._invokedByUserEvent = NO;
 }
 
 
@@ -1636,7 +1638,9 @@ var CPMonthDateType = 0,
         newDateValue.setSeconds(newDateValue.getSeconds() + secondsFromGMT - secondsFromGMTTimeZone);
     }
 
-    [_datePicker setDateValue:newDateValue];
+    _datePicker._invokedByUserEvent = YES;
+    [_datePicker _setDateValue:newDateValue timeInterval:[_datePicker timeInterval]];
+    _datePicker._invokedByUserEvent = NO;
 }
 
 

From 3e8afaeae42cfc075398a40b06c77cc2906bf793 Mon Sep 17 00:00:00 2001
From: cacaodev 
Date: Thu, 11 Sep 2014 23:14:21 +0200
Subject: [PATCH 048/234] Fixed: -removeTableColumn: now works without error.
 OJTest in AppKit/CPTableColumnTest.j, manual test in
 TableTest/TestTanleColumn/ Fixed: Added an out of bounds check to
 _unloadDataViews:... Revert: revert -reloadData to the previous behavior
 where views & data were reloaded, not only data. That's what cocoa does for
 view based tables.

---
 AppKit/CPTableView.j                          | 22 ++++++++++---------
 .../TableTest/TestTableColumn/AppController.j | 11 ++++------
 2 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index 51074d6c6..c7c446d2b 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -618,7 +618,7 @@ NOT YET IMPLEMENTED
 {
     // Empty the data cache.
     _objectValues = { };
-    [self reloadDataForRowIndexes:_exposedRows columnIndexes:_exposedColumns];
+    [self _reloadDataViewsImmediately];
 }
 
 /*!
@@ -628,10 +628,7 @@ NOT YET IMPLEMENTED
 */
 - (void)reloadDataForRowIndexes:(CPIndexSet)rowIndexes columnIndexes:(CPIndexSet)columnIndexes
 {
-    if ([self _dataViewsNeedReloadAfterContentChange])
-        [self _reloadDataViewsImmediately];
-    else
-        [self _reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndexes];
+    [self reloadData];
 }
 
 // Reloads the data, not the views
@@ -1155,7 +1152,6 @@ NOT YET IMPLEMENTED
     else
         _dirtyTableColumnRangeIndex = MIN(index, _dirtyTableColumnRangeIndex);
 
-    [_tableColumns removeObject:aTableColumn];
     [self _reloadDataViewsImmediately];
 }
 
@@ -3510,8 +3506,12 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
             if (columnIdx !== CPNotFound)
                 [removeIndexes addIndex:columnIdx];
         }
+
         // FIXME: do we also need to remove non exposed rows that may stay in the cache ?
         [self _unloadDataViewsInRows:_exposedRows columns:removeIndexes];
+
+        [_tableColumns removeObjectsAtIndexes:removeIndexes];
+
         [_differedColumnDataToRemove removeAllObjects];
     }
 
@@ -3532,7 +3532,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
 */
 - (void)_unloadDataViewsInRows:(CPIndexSet)rowIndexes columns:(CPIndexSet)columnIndexes
 {
-    if (![rowIndexes count] || ![columnIndexes count])
+    if (![rowIndexes count] || ![columnIndexes count] || [columnIndexes lastIndex] >=  [_tableColumns count])
         return;
 
     // If and edited view is about to be unloaded, cleanup its state before enqueuing.
@@ -5078,7 +5078,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
     [self getColumn:@ref(column) row:@ref(row) forView:responder];
 
     if (row == CPNotFound && column  == CPNotFound)
-	[self _notifyViewDidResignFirstResponder];
+	    [self _notifyViewDidResignFirstResponder];
+
     _editingRow = row;
     _editingColumn = column;
 
@@ -5086,7 +5087,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
     // This makes sure the theming effects of a focused table remain in effect even as cells are being edited in it.
     [self _notifyViewDidBecomeFirstResponder];
 
-    if (_editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && ![responder isBezeled])
+    if (_editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && !_isViewBased)
     {
         [responder setBezeled:YES];
         [self _registerForEndEditingNote:responder];
@@ -5175,7 +5176,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
     // is implemented.
     [editingTableColumn _reverseSetDataView:aDataView forRow:_editingRow];
 
-    [self reloadDataForRowIndexes:[CPIndexSet indexSetWithIndex:_editingRow] columnIndexes:[CPIndexSet indexSetWithIndex:_editingColumn]];
+    if (_editingRow !== CPNotFound && _editingColumn !== CPNotFound)
+        [self reloadDataForRowIndexes:[CPIndexSet indexSetWithIndex:_editingRow] columnIndexes:[CPIndexSet indexSetWithIndex:_editingColumn]];
 }
 
 - (void)_setEditingState:(BOOL)editingState forView:(CPView)aView
diff --git a/Tests/Manual/TableTest/TestTableColumn/AppController.j b/Tests/Manual/TableTest/TestTableColumn/AppController.j
index 6b7aeecb9..73d94e777 100644
--- a/Tests/Manual/TableTest/TestTableColumn/AppController.j
+++ b/Tests/Manual/TableTest/TestTableColumn/AppController.j
@@ -9,6 +9,7 @@
 @import 
 @import 
 
+@import "../../CPTrace.j"
 
 @implementation AppController : CPObject
 {
@@ -19,6 +20,7 @@
 - (void)applicationDidFinishLaunching:(CPNotification)aNotification
 {
     // This is called when the application is done loading.
+    CPTrace("CPTableView", "_unloadDataViewsInRows:columns:");
 }
 
 - (void)awakeFromCib
@@ -51,15 +53,11 @@
 
 - (@action)click:(id)sender
 {
-    var i = 0;
-    console.log("Before NUmberColumn : " + [[tableView tableColumns] count]);
+    console.log("Before NumberOfColumns : " + [[tableView tableColumns] count]);
 
     [tableView removeTableColumn:[[tableView tableColumns] firstObject]];
 
-    while (i < 10000000)
-        i++;
-
-    console.log("After NUmberColumn : " + [[tableView tableColumns] count]);
+    console.log("After NumberOfColumns : " + [[tableView tableColumns] count]);
 }
 
 - (int)numberOfRowsInTableView:(CPTableView)aTableView
@@ -69,7 +67,6 @@
 
 - (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRowIndex
 {
-    console.log([[aTableView tableColumns] count]);
     return 10;
 }
 

From a2755221d0cd6e236b5bd2b8426ead8d458fdb35 Mon Sep 17 00:00:00 2001
From: cacaodev 
Date: Fri, 12 Sep 2014 22:33:50 +0200
Subject: [PATCH 049/234] The cocoa behavior is: Exclusive bindings are
 impossible in IB Possible in code (tested with segmented control and
 selectedIndex & selectedTag) but then you get unexpected behavior. A segment
 can be selected after a click and then changes to another segment. After this
 commit, extra exclusive bindings are just ignored and we warn about it.

---
 AppKit/CPKeyValueBinding.j           |  3 +--
 Tests/AppKit/CPKeyValueBindingTest.j | 13 ++++++++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j
index 3e0989998..263fc3435 100644
--- a/AppKit/CPKeyValueBinding.j
+++ b/AppKit/CPKeyValueBinding.j
@@ -454,8 +454,7 @@ var CPBindingOperationAnd = 0,
 
     if (![CPBinder isBindingAllowed:aBinding forObject:self])
     {
-        [CPException raise:CPGenericException
-                   reason:@"Cannot bind " + aBinding + " because a binding with the same functionality is already in use."];
+        CPLog.warn([self description] + " : cannot bind " + aBinding + " because another binding with the same functionality is already in use.");
         return;
     }
     //if (![[self exposedBindings] containsObject:aBinding])
diff --git a/Tests/AppKit/CPKeyValueBindingTest.j b/Tests/AppKit/CPKeyValueBindingTest.j
index 701e1d858..8412e18a9 100644
--- a/Tests/AppKit/CPKeyValueBindingTest.j
+++ b/Tests/AppKit/CPKeyValueBindingTest.j
@@ -342,7 +342,7 @@
     [self assert:@"brie" equals:[control2 objectValue] message:@"control2 objectValue is wrong"];
 }
 
-- (void)testExclusiveBindingsThrowsException
+- (void)testExclusiveBindings
 {
     var segmented = [[CPSegmentedControl alloc] initWithFrame:CGRectMakeZero()];
     [segmented setSegmentCount:3];
@@ -351,10 +351,13 @@
 
     [segmented bind:CPSelectedIndexBinding toObject:model withKeyPath:@"cheese" options:nil];
 
-    [self assertThrows:function()
-    {
-        [segmented bind:CPSelectedTagBinding toObject:model withKeyPath:@"cheese" options:nil];
-    }];
+    // Try to bind another binding (mutually exclusive) to the same value.
+    [segmented bind:CPSelectedTagBinding toObject:model withKeyPath:@"cheese" options:nil];
+
+    [self assertNotNull:[segmented infoForBinding:CPSelectedIndexBinding]];
+
+    // Check that the source is not binded with the CPSelectedTagBinding
+    [self assertNull:[segmented infoForBinding:CPSelectedTagBinding]];
 }
 
 @end

From 13fe318110af1d7b459daab22db09bae082ff0ca Mon Sep 17 00:00:00 2001
From: Martin Carlberg 
Date: Tue, 16 Sep 2014 20:13:42 +0200
Subject: [PATCH 050/234] Fixed: When the compiler can't find a protocol in a
 class declaration it now gives an understandable error.

This fixes #2212
---
 Objective-J/ObjJAcornCompiler.js | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js
index e1cf72b07..8aacfa23c 100644
--- a/Objective-J/ObjJAcornCompiler.js
+++ b/Objective-J/ObjJAcornCompiler.js
@@ -1778,7 +1778,8 @@ ClassDeclarationStatement: function(node, st, c) {
         var getterSetterBuffer = new StringBuffer();
 
         // Add the class declaration to compile accessors correctly
-        getterSetterBuffer.concat(compiler.source.substring(node.start, node.endOfIvars));
+        // Remove all protocols from class declaration
+        getterSetterBuffer.concat(compiler.source.substring(node.start, node.endOfIvars).replace(/<.*>/g, ""));
         getterSetterBuffer.concat("\n");
 
         for (var i = 0; i < node.ivardeclarations.length; ++i)
@@ -1893,8 +1894,15 @@ ClassDeclarationStatement: function(node, st, c) {
         // Lookup the protocolDefs for the protocols
         var protocolDefs = [];
 
-        for (var i = 0, size = protocols.length; i < size; i++)
-            protocolDefs.push(compiler.getProtocolDef(protocols[i].name));
+        for (var i = 0, size = protocols.length; i < size; i++) {
+            var protocol = protocols[i],
+                protocolDef = compiler.getProtocolDef(protocol.name);
+
+            if (!protocolDef)
+                throw compiler.error_message("Cannot find protocol declaration for '" + protocol.name + "'", protocol);
+
+            protocolDefs.push(protocolDef);
+        }
 
         var unimplementedMethods = classDef.listOfNotImplementedMethodsForProtocols(protocolDefs);
 

From 2dccd2f30b3c6b356c4e34549b2fdf041c594cb2 Mon Sep 17 00:00:00 2001
From: cacaodev 
Date: Thu, 18 Sep 2014 19:23:16 +0200
Subject: [PATCH 051/234] NEW: ojtest for method -
 (void)getColumn:(Function)columnRef row:(Function)rowRef
 forView:(CPView)aView This internal method is used for editing and public
 methods rowForView: and columnForView

---
 AppKit/CPTableView.j           |  7 +--
 Tests/AppKit/CPTableViewTest.j | 95 ++++++++++++++++++++++++++++++++++
 2 files changed, 99 insertions(+), 3 deletions(-)

diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index c7c446d2b..c187220ca 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -2087,13 +2087,13 @@ NOT YET IMPLEMENTED
 - (void)getColumn:(Function)columnRef row:(Function)rowRef forView:(CPView)aView
 {
     var columnResult = -1,
-        rowResult = -1,
-        found = YES;
+        rowResult = -1;
 
-    if (aView && [aView isKindOfClass:[CPView class]])
+    if (aView && [aView isKindOfClass:[CPView class]] && ![aView isKindOfClass:[CPTableView class]])
     {
         var cellView = aView,
             contentView = [[self window] contentView],
+            found = NO,
             max_rec = 100;
 
         while (max_rec--)
@@ -2109,6 +2109,7 @@ NOT YET IMPLEMENTED
 
                 if ([superview isKindOfClass:[CPTableView class]])
                 {
+                    found = YES;
                     break;
                 }
 
diff --git a/Tests/AppKit/CPTableViewTest.j b/Tests/AppKit/CPTableViewTest.j
index 2653e0c33..e20cc5690 100644
--- a/Tests/AppKit/CPTableViewTest.j
+++ b/Tests/AppKit/CPTableViewTest.j
@@ -311,6 +311,101 @@
     [self assertTrue:[table bounds].size.width >= 200];
 }
 
+// Test internal method - (void)getColumn:(Function)columnRef row:(Function)rowRef forView:(CPView)aView
+- (void)testGetColumnAndRow
+{
+    var table = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 400, 400)],
+        tableColumn1 = [[CPTableColumn alloc] initWithIdentifier:@"A"],
+        tableColumn2 = [[CPTableColumn alloc] initWithIdentifier:@"B"],
+        delegate = [ContentBindingTableDelegate new];
+
+    [delegate setTester:self];
+    [table setDelegate:delegate];
+
+    [delegate setTableEntries:[[@"A1", @"B1"], [@"A2", @"B2"], [@"A3", @"B3"]]];
+    [table bind:@"content" toObject:delegate withKeyPath:@"tableEntries" options:nil];
+
+    [[theWindow contentView] addSubview:table];
+
+    [tableColumn1 setWidth:50.0];
+    [tableColumn2 setWidth:100.0];
+
+    [table addTableColumn:tableColumn1];
+    [table addTableColumn:tableColumn2];
+
+    var table2 = [[CPTableView alloc] initWithFrame:CGRectMake(400, 0, 400, 400)],
+        table2Column1 = [[CPTableColumn alloc] initWithIdentifier:@"A"],
+        table2Column2 = [[CPTableColumn alloc] initWithIdentifier:@"B"],
+        delegate = [ContentBindingTableDelegate new];
+
+    [delegate setTester:self];
+    [table2 setDelegate:delegate];
+
+    [delegate setTableEntries:[[@"A1", @"B1"], [@"A2", @"B2"], [@"A3", @"B3"]]];
+    [table2 bind:@"content" toObject:delegate withKeyPath:@"tableEntries" options:nil];
+
+    [[theWindow contentView] addSubview:table2];
+
+    [table2Column1 setWidth:50.0];
+    [table2Column2 setWidth:100.0];
+
+    [table2 addTableColumn:tableColumn1];
+    [table2 addTableColumn:tableColumn2];
+
+    var row,
+        column;
+
+// get row and column for a nil view
+    [table getColumn:@ref(column) row:@ref(row) forView:nil];
+
+    [self assert:CPNotFound equals:column];
+    [self assert:CPNotFound equals:row];
+
+// get row and column for a random view
+    var v = [[CPView alloc] initWithFrame:CGRectMake(0,0,100,100)];
+
+    [table getColumn:@ref(column) row:@ref(row) forView:v];
+
+    [self assert:CPNotFound equals:column];
+    [self assert:CPNotFound equals:row];
+
+// get row and column for the table view
+    [table getColumn:@ref(column) row:@ref(row) forView:table];
+
+    [self assert:CPNotFound equals:column];
+    [self assert:CPNotFound equals:row];
+
+// get row and column for a view outside a table column
+    [table getColumn:@ref(column) row:@ref(row) forView:[theWindow contentView]];
+
+    [self assert:CPNotFound equals:column];
+    [self assert:CPNotFound equals:row];
+
+// Enumerate views inside the table view and check that rows and columns are correct
+    [table enumerateAvailableViewsUsingBlock:function(dataView, aRow, aColumn, stop)
+    {
+        var getRow,
+            getColumn;
+
+        [table getColumn:@ref(getColumn) row:@ref(getRow) forView:dataView];
+
+        [self assert:aColumn equals:getColumn];
+        [self assert:aRow equals:getRow];
+    }];
+
+// Enumerate views inside a different table view and check that rows and columns are not found
+    [table2 enumerateAvailableViewsUsingBlock:function(dataView, aRow, aColumn, stop)
+    {
+        var getRow,
+            getColumn;
+
+        [table getColumn:@ref(getColumn) row:@ref(getRow) forView:dataView];
+
+        [self assert:CPNotFound equals:getRow];
+        [self assert:CPNotFound equals:getColumn];
+    }];
+}
+
 @end
 
 @implementation FirstResponderConfigurableTableView : CPTableView

From 903cc8ee83e5eececc67cae059b84ba31eeb65c3 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Fri, 19 Sep 2014 09:59:56 -0700
Subject: [PATCH 052/234] Fixed: CPThemeStateSelectedDataView still set when
 removing a view

Previously, when removing a view from a CPTableView, the themeState CPThemeStateSelectedDataView wasn't unset. Now it does.
---
 AppKit/CPTableView.j | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index e597f2646..32b24ef97 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -3950,6 +3950,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
     // FIXME: yuck!
     var identifier = [aDataView identifier];
 
+    if ([aDataView hasThemeState:CPThemeStateSelectedDataView])
+        [aDataView unsetThemeState:CPThemeStateSelectedDataView];
+
     if (!_cachedDataViews[identifier])
         _cachedDataViews[identifier] = [aDataView];
     else

From f82099143fd120f6484f12e0f99d8f6c399121f5 Mon Sep 17 00:00:00 2001
From: cacaodev 
Date: Tue, 23 Sep 2014 12:17:52 +0200
Subject: [PATCH 053/234] CPTableView: -_reloadDataViewsImmediately ->
 -reloadData CPTableColumn: binder:-setValueFor:  is a simple data reload.

---
 AppKit/CPOutlineView.j |  6 ------
 AppKit/CPTableColumn.j |  3 ++-
 AppKit/CPTableView.j   | 23 +++++------------------
 3 files changed, 7 insertions(+), 25 deletions(-)

diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j
index c3d86abf6..6dc83fa0c 100644
--- a/AppKit/CPOutlineView.j
+++ b/AppKit/CPOutlineView.j
@@ -1321,12 +1321,6 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff  = 0,
     [self reloadData];
 }
 
-- (BOOL)_dataViewsNeedReloadAfterContentChange
-{
-    // Alternatively, check if the current tree of views mactches the current tree in the data source.
-    return YES;
-}
-
 /*!
     Reloads all the data of the outlineview.
 */
diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j
index 3098b65dc..3765fac89 100644
--- a/AppKit/CPTableColumn.j
+++ b/AppKit/CPTableColumn.j
@@ -564,7 +564,8 @@ CPTableColumnUserResizingMask   = 1 << 1;
         rowIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [tableView numberOfRows])],
         columnIndexes = [CPIndexSet indexSetWithIndex:column];
 
-    [tableView reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndexes];
+    // Reloads objectValues only, not the views.
+    [tableView _reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndexes];
 }
 
 - (CPSortDescriptor)_defaultSortDescriptorPrototype
diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index c187220ca..ee4fe4338 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -616,9 +616,8 @@ NOT YET IMPLEMENTED
 */
 - (void)reloadData
 {
-    // Empty the data cache.
-    _objectValues = { };
-    [self _reloadDataViewsImmediately];
+    [self _reloadDataViews];
+    [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
 }
 
 /*!
@@ -641,11 +640,6 @@ NOT YET IMPLEMENTED
     }];
 }
 
-- (BOOL)_dataViewsNeedReloadAfterContentChange
-{
-    return (_numberOfRows !== [self _numberOfRows]);
-}
-
 // Reloads the views AND the data
 - (void)_reloadDataViews
 {
@@ -668,13 +662,6 @@ NOT YET IMPLEMENTED
     [self setNeedsDisplay:YES];
 }
 
-// reload data views and process events to force a -load
-- (void)_reloadDataViewsImmediately
-{
-    [self _reloadDataViews];
-    [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
-}
-
 //Target-action Behavior
 /*!
     Sets the message sent to the target when the user double-clicks an
@@ -1152,7 +1139,7 @@ NOT YET IMPLEMENTED
     else
         _dirtyTableColumnRangeIndex = MIN(index, _dirtyTableColumnRangeIndex);
 
-    [self _reloadDataViewsImmediately];
+    [self reloadData];
 }
 
 /*!
@@ -3804,7 +3791,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
 
 - (void)enumerateAvailableViewsUsingBlock:(Function/*CPView *dataView, CPInteger row, CPInteger column*, @ref stop*/)handler
 {
-    [self _reloadDataViewsImmediately];
+    [self reloadData];
     [self _enumerateViewsInRows:_exposedRows columns:_exposedColumns usingBlock:handler];
 }
 
@@ -5206,7 +5193,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
     if (![self isRowSelected:rowIndex])
         [[CPException exceptionWithName:@"Error" reason:@"Attempt to edit row " + rowIndex + " when not selected." userInfo:nil] raise];
 
-    [self _reloadDataViewsImmediately];
+    [self reloadData];
 
     [self scrollRowToVisible:rowIndex];
     [self scrollColumnToVisible:columnIndex];

From 1a414ac69ca024ddcdfb65e3f2fce13219125311 Mon Sep 17 00:00:00 2001
From: cacaodev 
Date: Tue, 23 Sep 2014 13:56:52 +0200
Subject: [PATCH 054/234] view-based table: always use the proto UID as view
 identifier

-setDataView: was not working because the caching system was picking
views cached with the column identifier which is persistent.

Test: CPTableViewTest -testLayout
---
 AppKit/CPTableColumn.j |  1 +
 AppKit/CPTableView.j   | 48 ++++++++++++++++++++++++------------------
 2 files changed, 29 insertions(+), 20 deletions(-)

diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j
index 3765fac89..a9ab441a2 100644
--- a/AppKit/CPTableColumn.j
+++ b/AppKit/CPTableColumn.j
@@ -565,6 +565,7 @@ CPTableColumnUserResizingMask   = 1 << 1;
         columnIndexes = [CPIndexSet indexSetWithIndex:column];
 
     // Reloads objectValues only, not the views.
+    // FIXME: reload data for all rows or just exposed rows ?
     [tableView _reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndexes];
 }
 
diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index ee4fe4338..49015bd8e 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -232,18 +232,18 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5;
     CPInteger                   _dirtyTableColumnRangeIndex;
     CPInteger                   _numberOfHiddenColumns;
 
-    BOOL                _reloadAllRows;
-    BOOL                _invalidateObjectValuesCache;
-    Object              _objectValues;
+    BOOL                        _reloadAllRows;
+    BOOL                        _invalidateObjectValuesCache;
+    Object                      _objectValues;
 
-    CGRect              _exposedRect;
-    CPIndexSet          _exposedRows;
-    CPIndexSet          _exposedColumns;
+    CGRect                      _exposedRect;
+    CPIndexSet                  _exposedRows;
+    CPIndexSet                  _exposedColumns;
 
-    Object              _dataViewsForRows;
-    Object              _cachedDataViews;
-    CPDictionary        _archivedDataViews;
-    Object              _unavailable_custom_cibs;
+    Object                      _dataViewsForRows;
+    Object                      _cachedDataViews;
+    CPDictionary                _archivedDataViews;
+    Object                      _unavailable_custom_cibs;
 
     //Configuring Behavior
     BOOL                        _allowsColumnReordering;
@@ -3674,18 +3674,26 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
 
     if (!view)
     {
-        var columnIdentifier = [aTableColumn identifier];
+        // For cell-based tables, use the dataView prototype identifier as view identifier
+        // instead of column identifier because 1/ the column identifier may be nil
+        // and 2/ the tableColumn dataView may change after the column identifier was set.
+        var identifier;
 
-        // For cell-based tables, use the dataView prototype identifier.
-        if (!columnIdentifier)
-            columnIdentifier = [[aTableColumn dataView] UID];
+        if (_isViewBased)
+        {
+            identifier = [aTableColumn identifier];
+            view = [self makeViewWithIdentifier:identifier owner:_delegate];
+        }
+        else
+        {
+            identifier = [[aTableColumn dataView] UID];
+            view = [self makeViewWithIdentifier:identifier owner:_delegate];
 
-        view = [self makeViewWithIdentifier:columnIdentifier owner:_delegate];
+            if (!view)
+                view = [aTableColumn _newDataView];
+        }
 
-        if (!view)
-            view = [aTableColumn _newDataView];
-
-        [view setIdentifier:columnIdentifier];
+        [view setIdentifier:identifier];
     }
 
     return view;
@@ -5954,7 +5962,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
         keyPath = [_info objectForKey:CPObservedKeyPathKey];
 
     _content = [destination valueForKey:keyPath];
-
+    // FIXME: reload data for all rows or just exposed rows ?
     [_source _reloadDataViews];
 }
 

From 7db488cdfbca4baaa75f4e8c44890531601c3e21 Mon Sep 17 00:00:00 2001
From: RoosterDragon 
Date: Wed, 24 Sep 2014 13:45:49 +0100
Subject: [PATCH 055/234] Fixed: CPImageView no longer leaks due to image load
 notification.

Previously, CPImageView would sometimes attach a notification to CPImageDidLoadNotification when the image was set, but would never remove this notification. The view could then leak memory as the notification center would be keeping a reference even if the view was no longer being used.

This commit fixes that issue by removing the observation once the image has loaded.

Fixes #2198.
---
 AppKit/CPImageView.j | 1 +
 1 file changed, 1 insertion(+)

diff --git a/AppKit/CPImageView.j b/AppKit/CPImageView.j
index 5f92e0fe9..1c4ef8dbc 100644
--- a/AppKit/CPImageView.j
+++ b/AppKit/CPImageView.j
@@ -178,6 +178,7 @@ var CPImageViewEmptyPlaceholderImage = nil;
 
 - (void)imageDidLoad:(CPNotification)aNotification
 {
+    [[CPNotificationCenter defaultCenter] removeObserver:self name:CPImageDidLoadNotification object:[self objectValue]];
     [self hideOrDisplayContents];
 
     [self setNeedsLayout];

From be6e222d8d6f0005ea7198d0d3a638eb5f8779ff Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Wed, 24 Sep 2014 10:14:38 -0700
Subject: [PATCH 056/234] Fixed: memory leak in CPColorWell

---
 AppKit/CPColorWell.j | 44 +++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 39 insertions(+), 5 deletions(-)

diff --git a/AppKit/CPColorWell.j b/AppKit/CPColorWell.j
index 8d8132f3a..15fa5343b 100644
--- a/AppKit/CPColorWell.j
+++ b/AppKit/CPColorWell.j
@@ -86,14 +86,12 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv
         _active = NO;
         _color = [CPColor whiteColor];
         [self setBordered:YES];
-
-        [self _registerForNotifications];
     }
 
     return self;
 }
 
-- (void)_registerForNotifications
+- (void)_registerNotifications
 {
     var defaultCenter = [CPNotificationCenter defaultCenter];
 
@@ -110,6 +108,22 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv
              object:[CPColorPanel sharedColorPanel]];
 }
 
+- (void)_removeNotifications
+{
+    var defaultCenter = [CPNotificationCenter defaultCenter];
+
+    [defaultCenter
+        removeObserver:self
+                  name:_CPColorWellDidBecomeExclusiveNotification
+                object:nil];
+
+    [defaultCenter
+        removeObserver:self
+                  name:CPWindowWillCloseNotification
+                object:[CPColorPanel sharedColorPanel]];
+
+}
+
 /*!
     Sets whether the color well is bordered.
 */
@@ -312,6 +326,28 @@ var _CPColorWellDidBecomeExclusiveNotification = @"_CPColorWellDidBecomeExclusiv
     [contentBorderView setBackgroundColor:[self currentValueForThemeAttribute:@"content-border-color"]];
 }
 
+
+#pragma mark -
+#pragma mark Observers method
+
+- (void)_addObservers
+{
+    if (_isObserving)
+        return;
+
+    [super _addObservers];
+    [self _registerNotifications];
+}
+
+- (void)_removeObservers
+{
+    if (!_isObserving)
+        return;
+
+    [super _removeObservers];
+    [self _removeNotifications];
+}
+
 @end
 
 @implementation CPColorWellValueBinder : CPBinder
@@ -363,8 +399,6 @@ var CPColorWellColorKey     = "CPColorWellColorKey",
         _active = NO;
         _color = [aCoder decodeObjectForKey:CPColorWellColorKey];
         [self setBordered:[aCoder decodeBoolForKey:CPColorWellBorderedKey]];
-
-        [self _registerForNotifications];
     }
 
     return self;

From a822ec729a785c708c4f65a66f21a2b5cb91dc30 Mon Sep 17 00:00:00 2001
From: kevin-xu 
Date: Wed, 24 Sep 2014 20:53:06 -0700
Subject: [PATCH 057/234] Fixed: It cannot execute the "jake" commands
 correctly in the Cappuccino repository directory when it's not the Apple OS.

When running the "jake" commands in the repository directory, it would print:

$ jake --help
narwhal/packages/narwhal-jsc/bin/narwhal-jsc: line 33: narwhal/packages/narwhal-jsc/bin/narwhal-jscore: No such file or directory

Now, it will print:

$ pwd
/home/kevin/workspace/Cappuccino
$ jake --help
Usage: jake [OPTIONS] targets...
-f --jakefile FILE: Use FILE as the jakefile.
-T --tasks: Display the tasks with descriptions, then exit.
-D --describe: Describe the tasks then exit.
-P --prereqs: Display the tasks and dependencies, then exit.
	-v --verbose: Log message to standard output.
-h --help: displays usage information (final option)

Fixes #2181
---
 narwhal.local.conf | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/narwhal.local.conf b/narwhal.local.conf
index 482c677c4..5df81b251 100644
--- a/narwhal.local.conf
+++ b/narwhal.local.conf
@@ -1,5 +1,14 @@
-if [ -z "$NARWHAL_ENGINE" ] && [ -d "$NARWHAL_HOME/packages/narwhal-jsc" ]; then
-	export NARWHAL_ENGINE=jsc
+if [ -z "$NARWHAL_ENGINE" ] && [ `uname` == "Darwin" ]; then
+    # We should check "narwhal-jsc.conf" and the corresponding executable to determine whether JSC can be "$NARWHAL_ENGINE".
+    if [ -f "$NARWHAL_HOME/packages/narwhal-jsc/narwhal-jsc.conf" ]; then
+        source "$NARWHAL_HOME/packages/narwhal-jsc/narwhal-jsc.conf"
+    fi
+    if [ -z "$NARWHAL_JSC_MODE" ]; then
+        NARWHAL_JSC_MODE="jscore"
+    fi
+    if [ -f "$NARWHAL_HOME/packages/narwhal-jsc/bin/narwhal-$NARWHAL_JSC_MODE" ]; then
+        export NARWHAL_ENGINE=jsc
+    fi
 fi
 
 if [ "$NARWHAL_ENGINE" == jsc ] && [ `ulimit -n` -lt 1024 ]; then

From ae6d379cced12de8c6f3cb01c822ec9b0d7a25d1 Mon Sep 17 00:00:00 2001
From: cacaodev 
Date: Thu, 25 Sep 2014 23:11:10 +0200
Subject: [PATCH 058/234] Improve TestTableColumn manual test to expose a bug
 when resizing after a column remove

---
 Tests/AppKit/CPTableViewTableColumnTest.j     |   11 +-
 .../TableTest/TestTableColumn/AppController.j |   27 +-
 .../TestTableColumn/Resources/MainMenu.cib    |    5 +-
 .../TestTableColumn/Resources/MainMenu.xib    | 1783 ++---------------
 .../TestTableColumn.xcodeproj/project.pbxproj |  646 +-----
 5 files changed, 283 insertions(+), 2189 deletions(-)

diff --git a/Tests/AppKit/CPTableViewTableColumnTest.j b/Tests/AppKit/CPTableViewTableColumnTest.j
index e07cdf43a..a63381e73 100644
--- a/Tests/AppKit/CPTableViewTableColumnTest.j
+++ b/Tests/AppKit/CPTableViewTableColumnTest.j
@@ -40,12 +40,19 @@
     [self assertTrue:([[tableView tableColumns] count] == 4)];
 
     [tableView removeTableColumn:[[tableView tableColumns] firstObject]];
-
+[[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
     [self assertTrue:([[tableView tableColumns] count] == 3)];
 
     [tableView removeTableColumn:[[tableView tableColumns] firstObject]];
-
+[[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
     [self assertTrue:([[tableView tableColumns] count] == 2)];
+
+    [tableView enumerateAvailableViewsUsingBlock:function(view, row, column, stop)
+    {
+        var tableColumn = [[tableView tableColumns] objectAtIndex:column];
+        [self assert:("COLUMN_" + [tableColumn identifier] + "ROW_" + row) equals:[view objectValue]];
+
+    }];
 }
 
 - (int)numberOfRowsInTableView:(CPTableView)aTableView
diff --git a/Tests/Manual/TableTest/TestTableColumn/AppController.j b/Tests/Manual/TableTest/TestTableColumn/AppController.j
index 73d94e777..318468497 100644
--- a/Tests/Manual/TableTest/TestTableColumn/AppController.j
+++ b/Tests/Manual/TableTest/TestTableColumn/AppController.j
@@ -9,7 +9,8 @@
 @import 
 @import 
 
-@import "../../CPTrace.j"
+//@import "../../CPTrace.j"
+CPLogRegister(CPLogConsole);
 
 @implementation AppController : CPObject
 {
@@ -20,7 +21,7 @@
 - (void)applicationDidFinishLaunching:(CPNotification)aNotification
 {
     // This is called when the application is done loading.
-    CPTrace("CPTableView", "_unloadDataViewsInRows:columns:");
+    //CPTrace("CPTableView", "_unloadDataViewsInRows:columns:");
 }
 
 - (void)awakeFromCib
@@ -43,7 +44,7 @@
     for (itemIndex ; itemIndex < [items count]; itemIndex++)
     {
         var item = [items objectAtIndex:itemIndex],
-            column = [[CPTableColumn alloc] initWithIdentifier:itemIndex];
+            column = [[CPTableColumn alloc] initWithIdentifier:item];
         [column setEditable:YES];
         [column setMinWidth:50];
         [[column headerView] setStringValue:item];
@@ -55,9 +56,25 @@
 {
     console.log("Before NumberOfColumns : " + [[tableView tableColumns] count]);
 
-    [tableView removeTableColumn:[[tableView tableColumns] firstObject]];
+    var selectedColumn = [tableView selectedColumn];
+    if (selectedColumn !== CPNotFound)
+        [tableView removeTableColumn:[[tableView tableColumns] objectAtIndex:selectedColumn]];
 
     console.log("After NumberOfColumns : " + [[tableView tableColumns] count]);
+
+    var tableColunms = [tableView tableColumns],
+        fails = NO;
+
+    [tableView enumerateAvailableViewsUsingBlock:function(view,row,column,stop)
+    {
+       if (([tableColunms[column] identifier] + " " + row ) != [view objectValue])
+       {
+           fails = YES;
+           stop(YES);
+       }
+    }];
+
+    CPLog.debug("Test that data views are in the right place : " + (fails ? "FAILS":"SUCCESS"));
 }
 
 - (int)numberOfRowsInTableView:(CPTableView)aTableView
@@ -67,7 +84,7 @@
 
 - (id)tableView:(CPTableView)aTableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRowIndex
 {
-    return 10;
+    return [aColumn identifier] + " " + aRowIndex;
 }
 
 @end
diff --git a/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.cib b/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.cib
index 53b6da934..004cd2f81 100644
--- a/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.cib
+++ b/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.cib
@@ -1 +1,4 @@
-280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;139E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;140E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;141E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;139E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;131E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;125E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;139E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;139E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;111E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;74E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;55E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;96E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;139E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;179E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;140E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;180E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;181E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;182E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;60E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;183E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;186E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;194E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;66E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;195E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;196E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;197E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;200E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;201E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;73E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;203E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;205E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;73E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;207E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;76E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;207E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;209E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;210E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;211E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;212E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;213E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;214E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;215E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;216E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;217E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;218E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;219E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;220E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;221E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;223E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;223E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;227E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;228E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;233E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;234E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;236E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;237E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;94E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;239E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;241E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;94E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;94E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;243E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;94E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;245E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;94E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;247E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;249E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;251E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;104E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;251E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;237E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;234E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;255E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;227E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;256E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;109E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;256E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;260E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;261E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;262E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;263E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;265E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;266E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;266E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;267E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;269E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;271E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;188E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;272E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;273E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;184E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;273E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;275E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;276E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;185E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;124E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;279E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;280E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;281E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;282E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;283E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;231E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;183E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;127E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;285E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;286E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;128E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;288E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;289E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;290E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;127E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;291E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;292E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;294E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;295E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;136E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;133E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;296E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;296E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;296E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;296E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;188E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;188E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;188E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;297E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;234E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;284E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;294E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;298E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;294E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;301E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;12;$agrid-colorD;K;6;CP$UIDd;3;302E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;303E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;304E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;305E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;284E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;303E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;190E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;188E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;188E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;188E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;188E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;306E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;302E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;284E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;190E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;308E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;135E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;309E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;310E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;311E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;314E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;284E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;129E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;315E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;303E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;284E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;190E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;316E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;134E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;295E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;317E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;317E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;318E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;131E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;3;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;319E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;320E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;311E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;314E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;284E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;129E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;321E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;303E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;284E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;188E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;322E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;323E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;127E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;291E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;326E;K;11;$aalignmentD;K;6;CP$UIDd;3;234E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;284E;K;6;$afontD;K;6;CP$UIDd;3;328E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;284E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;303E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;329E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;189E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;190E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;330E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;284E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;188E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;234E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;284E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;331E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;E;E;S;8;delegateS;9;tableViewS;9;theWindowS;10;dataSourceS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;6;click:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;72E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;68E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;74E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;99E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;89E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;98E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;101E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;119E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{335, 62}, {517, 426}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {517, 426}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;138E;E;E;S;6;normalS;22;{{25, 20}, {435, 322}}S;20;{{0, 0}, {435, 322}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;294E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;295E;D;K;6;CP$UIDd;3;297E;E;E;d;2;36S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;332E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;311E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;335E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;131E;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;336E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;337E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;338E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;311E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;339E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;135E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;126E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;340E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;340E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;E;S;20;{{0, 0}, {433, 304}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;299E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;341E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;299E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;342E;E;d;1;4d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;307E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;343E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;344E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;345E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;287E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;346E;E;S;19;{{1, 2}, {433, 15}}S;19;{{0, 0}, {433, 15}}d;1;8d;11;-2147483648S;8;scrollerS;8;disabledS;29;_horizontalScrollerDidScroll:f;18;0.9622222222222222S;19;{{0, 0}, {433, 25}}S;14;tableHeaderRowS;23;{{224, 203}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;27;_verticalScrollerDidScroll:f;18;0.9506578947368421S;22;{{382, 376}, {70, 25}}S;18;{{0, 0}, {70, 25}}S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;327E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;347E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;348E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;188E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;190E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;188E;E;S;6;Buttond;2;14S;13;AppControllerS;20;{{1, 1}, {433, 304}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;131E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;299E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;349E;E;S;6;_NS:11S;21;{{1, 305}, {433, 17}}S;19;{{0, 0}, {433, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;E;E;S;6;_NS:15S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;350E;D;K;6;CP$UIDd;3;237E;E;E;S;20;{{224, 0}, {16, 23}}S;18;{{0, 0}, {16, 23}}S;10;cornerviewS;6;_NS:19S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;237E;E;E;f;3;0.8E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
+280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;41E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;42E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;40E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;40E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;40E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;40E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;46E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;40E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;43E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;40E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;41E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;48E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;49E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;50E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;52E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;53E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;54E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;56E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;58E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;61E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;62E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;63E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;64E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;65E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;58E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;67E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;2;68E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;35E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;32E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;69E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;69E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;69E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;69E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;70E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;70E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;70E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;71E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;72E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;55E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;67E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;73E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;67E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;58E;K;12;$agrid-colorD;K;6;CP$UIDd;2;77E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;2;79E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;2;80E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;2;55E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;2;78E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;2;60E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;2;70E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;2;70E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;2;70E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;2;70E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;2;81E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;2;77E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;2;55E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;2;60E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;2;83E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;34E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;84E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;85E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;86E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;55E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;28E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;90E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;60E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;91E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;68E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;92E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;92E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;68E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;58E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;30E;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;94E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;86E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;55E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;28E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;96E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;70E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;97E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;64E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;101E;K;11;$aalignmentD;K;6;CP$UIDd;2;78E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;72E;K;6;$afontD;K;6;CP$UIDd;3;103E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;70E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;104E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;55E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;60E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;60E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;60E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;105E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;72E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;78E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;106E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;107E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;64E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;109E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;55E;K;6;$afontD;K;6;CP$UIDd;3;103E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;55E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;78E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;55E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;110E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;111E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;60E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;112E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;55E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;70E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;55E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;113E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;8;delegateS;9;tableViewS;9;theWindowS;10;dataSourceS;6;click:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 148}, {576, 490}}S;22;{{0, 0}, {1680, 1028}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {576, 490}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;37E;E;E;S;6;normalS;6;{1, 1}F;S;23;{{20, 113}, {527, 322}}S;20;{{0, 0}, {527, 322}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;71E;E;E;d;2;36S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;114E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;115E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;116E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;117E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;58E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;30E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;119E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;120E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;121E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;117E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;58E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;122E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;34E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;123E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;58E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;E;d;1;2S;20;{{0, 0}, {525, 304}}D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;74E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;124E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;2;74E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;125E;E;d;1;4d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;82E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;128E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;58E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;129E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;59E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;60E;E;S;19;{{1, 2}, {433, 15}}S;19;{{0, 0}, {433, 15}}d;1;8d;11;-2147483648S;8;scrollerS;27;controlSizeRegular+disabledS;29;_horizontalScrollerDidScroll:f;18;0.9622222222222222S;19;{{0, 0}, {525, 25}}S;14;tableHeaderRowS;23;{{224, 203}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;27;_verticalScrollerDidScroll:f;18;0.9506578947368421S;21;{{20, 13}, {527, 68}}S;19;{{0, 0}, {527, 68}}S;9;textfieldS;18;controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;130E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;131E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;60E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;60E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;60E;E;S;204;- Select a table column and remove it.
+- Resize any column.
+The column should be removed. You should not see any bold text 
+in the data views. The data views should not disappear when you resize a column.D;K;6;$classD;K;6;CP$UIDd;2;74E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;132E;E;S;23;{{360, 449}, {187, 25}}S;19;{{0, 0}, {187, 25}}S;6;buttonS;27;bordered+controlSizeRegularS;22;Remove Selected ColumnS;0;d;2;14S;13;AppControllerS;20;{{1, 1}, {525, 304}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;E;E;d;2;18D;K;6;$classD;K;6;CP$UIDd;2;74E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;133E;E;S;6;_NS:11S;21;{{1, 305}, {525, 17}}S;19;{{0, 0}, {525, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;6;_NS:15S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;E;E;S;20;{{224, 0}, {14, 25}}S;18;{{0, 0}, {14, 25}}S;10;cornerviewS;6;_NS:19S;17;.Lucida Grande UId;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;134E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;E;E;d;1;1f;3;0.8f;18;0.6862745098039216E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.xib b/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.xib
index c943f759d..c0d05d812 100644
--- a/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.xib
+++ b/Tests/Manual/TableTest/TestTableColumn/Resources/MainMenu.xib
@@ -1,39 +1,36 @@
 
-
+
 	
 		1050
-		12D78
-		3084
-		1187.37
-		626.00
+		13F34
+		6246
+		1265.21
+		698.00
 		
 			com.apple.InterfaceBuilder.CocoaPlugin
-			3084
+			6246
 		
-		
-			YES
+		
 			NSButton
 			NSButtonCell
 			NSCustomObject
-			NSMenu
-			NSMenuItem
 			NSScrollView
 			NSScroller
 			NSTableHeaderView
 			NSTableView
+			NSTextField
+			NSTextFieldCell
 			NSView
 			NSWindowTemplate
-		
-		
-			YES
+		
+		
 			com.apple.InterfaceBuilder.CocoaPlugin
-		
+		
 		
 			PluginDependencyRecalculationVersion
 			
 		
-		
-			YES
+		
 			
 				NSApplication
 			
@@ -43,606 +40,10 @@
 			
 				NSApplication
 			
-			
-				AMainMenu
-				
-					YES
-					
-						
-						NewApplication
-						
-						1048576
-						2147483647
-						
-							NSImage
-							NSMenuCheckmark
-						
-						
-							NSImage
-							NSMenuMixedState
-						
-						submenuAction:
-						
-							NewApplication
-							
-								YES
-								
-									
-									About NewApplication
-									
-									2147483647
-									
-									
-								
-								
-									
-									YES
-									YES
-									
-									
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Preferences…
-									,
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									YES
-									YES
-									
-									
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Quit NewApplication
-									q
-									1048576
-									2147483647
-									
-									
-								
-							
-							_NSAppleMenu
-						
-					
-					
-						
-						File
-						
-						1048576
-						2147483647
-						
-						
-						submenuAction:
-						
-							File
-							
-								YES
-								
-									
-									New
-									n
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Open…
-									o
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Open Recent
-									
-									1048576
-									2147483647
-									
-									
-									submenuAction:
-									
-										Open Recent
-										
-											YES
-											
-												
-												Clear Menu
-												
-												1048576
-												2147483647
-												
-												
-											
-										
-										_NSRecentDocumentsMenu
-									
-								
-								
-									
-									YES
-									YES
-									
-									
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Close
-									w
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Save
-									s
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Save As…
-									S
-									1179648
-									2147483647
-									
-									
-								
-								
-									
-									Revert to Saved
-									
-									2147483647
-									
-									
-								
-							
-						
-					
-					
-						
-						Edit
-						
-						1048576
-						2147483647
-						
-						
-						submenuAction:
-						
-							Edit
-							
-								YES
-								
-									
-									Undo
-									z
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Redo
-									Z
-									1179648
-									2147483647
-									
-									
-								
-								
-									
-									YES
-									YES
-									
-									
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Cut
-									x
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Copy
-									c
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Paste
-									v
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Delete
-									
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Select All
-									a
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									YES
-									YES
-									
-									
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Find
-									
-									1048576
-									2147483647
-									
-									
-									submenuAction:
-									
-										Find
-										
-											YES
-											
-												
-												Find…
-												f
-												1048576
-												2147483647
-												
-												
-												1
-											
-											
-												
-												Find Next
-												g
-												1048576
-												2147483647
-												
-												
-												2
-											
-											
-												
-												Find Previous
-												G
-												1179648
-												2147483647
-												
-												
-												3
-											
-											
-												
-												Use Selection for Find
-												e
-												1048576
-												2147483647
-												
-												
-												7
-											
-											
-												
-												Jump to Selection
-												j
-												1048576
-												2147483647
-												
-												
-											
-										
-									
-								
-								
-									
-									Spelling and Grammar
-									
-									1048576
-									2147483647
-									
-									
-									submenuAction:
-									
-										Spelling and Grammar
-										
-											YES
-											
-												
-												Show Spelling…
-												:
-												1048576
-												2147483647
-												
-												
-											
-											
-												
-												Check Spelling
-												;
-												1048576
-												2147483647
-												
-												
-											
-											
-												
-												Check Spelling While Typing
-												
-												1048576
-												2147483647
-												
-												
-											
-											
-												
-												Check Grammar With Spelling
-												
-												1048576
-												2147483647
-												
-												
-											
-										
-									
-								
-								
-									
-									Substitutions
-									
-									1048576
-									2147483647
-									
-									
-									submenuAction:
-									
-										Substitutions
-										
-											YES
-											
-												
-												Smart Copy/Paste
-												f
-												1048576
-												2147483647
-												
-												
-												1
-											
-											
-												
-												Smart Quotes
-												g
-												1048576
-												2147483647
-												
-												
-												2
-											
-											
-												
-												Smart Links
-												G
-												1179648
-												2147483647
-												
-												
-												3
-											
-										
-									
-								
-								
-									
-									Speech
-									
-									1048576
-									2147483647
-									
-									
-									submenuAction:
-									
-										Speech
-										
-											YES
-											
-												
-												Start Speaking
-												
-												1048576
-												2147483647
-												
-												
-											
-											
-												
-												Stop Speaking
-												
-												1048576
-												2147483647
-												
-												
-											
-										
-									
-								
-							
-						
-					
-					
-						
-						View
-						
-						1048576
-						2147483647
-						
-						
-						submenuAction:
-						
-							View
-							
-								YES
-								
-									
-									Show Toolbar
-									t
-									1572864
-									2147483647
-									
-									
-								
-								
-									
-									Customize Toolbar…
-									
-									1048576
-									2147483647
-									
-									
-								
-							
-						
-					
-					
-						
-						Window
-						
-						1048576
-						2147483647
-						
-						
-						submenuAction:
-						
-							Window
-							
-								YES
-								
-									
-									Minimize
-									m
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Zoom
-									
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									YES
-									YES
-									
-									
-									1048576
-									2147483647
-									
-									
-								
-								
-									
-									Bring All to Front
-									
-									1048576
-									2147483647
-									
-									
-								
-							
-							_NSWindowsMenu
-						
-					
-					
-						
-						Help
-						
-						1048576
-						2147483647
-						
-						
-						submenuAction:
-						
-							Help
-							
-								YES
-								
-									
-									NewApplication Help
-									?
-									1048576
-									2147483647
-									
-									
-								
-							
-						
-					
-				
-				_NSMainMenu
-			
 			
 				7
 				2
-				{{335, 390}, {517, 426}}
+				{{335, 390}, {576, 490}}
 				1946157056
 				Window
 				NSWindow
@@ -651,25 +52,22 @@
 				
 					
 					256
-					
-						YES
+					
 						
 							
 							268
-							
-								YES
+							
 								
 									
-									2304
-									
-										YES
+									2322
+									
 										
 											
 											256
-											{433, 304}
+											{525, 304}
 											
 											
-											
+											
 											_NS:13
 											YES
 											NO
@@ -677,23 +75,21 @@
 											
 												
 												256
-												{433, 17}
+												{525, 17}
 												
 												
-												
+												
 												_NS:16
 												
 											
-											
+											
 												
 												-2147483392
 												{{224, 0}, {16, 17}}
 												
 												_NS:19
 											
-											
-												YES
-											
+											
 											3
 											2
 											
@@ -720,8 +116,8 @@
 											0
 											1
 										
-									
-									{{1, 17}, {433, 304}}
+									
+									{{1, 17}, {525, 304}}
 									
 									
 									
@@ -731,7 +127,7 @@
 										6
 										System
 										controlBackgroundColor
-										
+										
 											3
 											MC42NjY2NjY2NjY3AA
 										
@@ -767,12 +163,11 @@
 								
 								
 									
-									2304
-									
-										YES
+									2338
+									
 										
-									
-									{{1, 0}, {433, 17}}
+									
+									{{1, 0}, {525, 17}}
 									
 									
 									
@@ -781,11 +176,11 @@
 									
 									4
 								
-							
-							{{25, 84}, {435, 322}}
+							
+							{{20, 55}, {527, 322}}
 							
 							
-							
+							
 							_NS:9
 							133682
 							
@@ -800,17 +195,18 @@
 						
 							
 							268
-							{{376, 19}, {82, 32}}
+							{{354, 13}, {199, 32}}
 							
 							
+							
 							_NS:9
 							YES
 							
 								67108864
 								134217728
-								Button
-								
-									LucidaGrande
+								Remove Selected Column
+								
+									YES
 									13
 									1044
 								
@@ -825,39 +221,61 @@
 							
 							NO
 						
-					
-					{517, 426}
+						
+							
+							268
+							{{18, 409}, {531, 68}}
+							
+							
+							
+							_NS:526
+							{251, 750}
+							YES
+							
+								68157504
+								272630784
+								LSBTZWxlY3QgYSB0YWJsZSBjb2x1bW4gYW5kIHJlbW92ZSBpdC4KLSBSZXNpemUgYW55IGNvbHVtbi4K
+VGhlIGNvbHVtbiBzaG91bGQgYmUgcmVtb3ZlZC4gWW91IHNob3VsZCBub3Qgc2VlIGFueSBib2xkIHRl
+eHQgCmluIHRoZSBkYXRhIHZpZXdzLiBUaGUgZGF0YSB2aWV3cyBzaG91bGQgbm90IGRpc2FwcGVhciB3
+aGVuIHlvdSByZXNpemUgYSBjb2x1bW4uA
+								
+								_NS:526
+								
+								
+									6
+									System
+									controlColor
+									
+								
+								
+									6
+									System
+									controlTextColor
+									
+										3
+										MAA
+									
+								
+							
+							NO
+							1
+						
+					
+					{576, 490}
 					
 					
-					
+					
 				
-				{{0, 0}, {1440, 878}}
+				{{0, 0}, {1680, 1028}}
 				{10000000000000, 10000000000000}
 				YES
 			
 			
 				AppController
 			
-		
+		
 		
-			
-				YES
-				
-					
-						terminate:
-						
-						
-					
-					449
-				
-				
-					
-						orderFrontStandardAboutPanel:
-						
-						
-					
-					142
-				
+			
 				
 					
 						delegate
@@ -866,254 +284,6 @@
 					
 					451
 				
-				
-					
-						performMiniaturize:
-						
-						
-					
-					37
-				
-				
-					
-						arrangeInFront:
-						
-						
-					
-					39
-				
-				
-					
-						clearRecentDocuments:
-						
-						
-					
-					127
-				
-				
-					
-						performClose:
-						
-						
-					
-					193
-				
-				
-					
-						toggleContinuousSpellChecking:
-						
-						
-					
-					222
-				
-				
-					
-						undo:
-						
-						
-					
-					223
-				
-				
-					
-						copy:
-						
-						
-					
-					224
-				
-				
-					
-						checkSpelling:
-						
-						
-					
-					225
-				
-				
-					
-						paste:
-						
-						
-					
-					226
-				
-				
-					
-						stopSpeaking:
-						
-						
-					
-					227
-				
-				
-					
-						cut:
-						
-						
-					
-					228
-				
-				
-					
-						showGuessPanel:
-						
-						
-					
-					230
-				
-				
-					
-						redo:
-						
-						
-					
-					231
-				
-				
-					
-						selectAll:
-						
-						
-					
-					232
-				
-				
-					
-						startSpeaking:
-						
-						
-					
-					233
-				
-				
-					
-						delete:
-						
-						
-					
-					235
-				
-				
-					
-						performZoom:
-						
-						
-					
-					240
-				
-				
-					
-						performFindPanelAction:
-						
-						
-					
-					241
-				
-				
-					
-						centerSelectionInVisibleArea:
-						
-						
-					
-					245
-				
-				
-					
-						toggleGrammarChecking:
-						
-						
-					
-					347
-				
-				
-					
-						toggleSmartInsertDelete:
-						
-						
-					
-					355
-				
-				
-					
-						toggleAutomaticQuoteSubstitution:
-						
-						
-					
-					356
-				
-				
-					
-						toggleAutomaticLinkDetection:
-						
-						
-					
-					357
-				
-				
-					
-						showHelp:
-						
-						
-					
-					360
-				
-				
-					
-						saveDocument:
-						
-						
-					
-					362
-				
-				
-					
-						saveDocumentAs:
-						
-						
-					
-					363
-				
-				
-					
-						revertDocumentToSaved:
-						
-						
-					
-					364
-				
-				
-					
-						runToolbarCustomizationPalette:
-						
-						
-					
-					365
-				
-				
-					
-						toggleToolbarShown:
-						
-						
-					
-					366
-				
-				
-					
-						newDocument:
-						
-						
-					
-					373
-				
-				
-					
-						openDocument:
-						
-						
-					
-					374
-				
 				
 					
 						theWindow
@@ -1154,15 +324,12 @@
 					
 					484
 				
-			
+			
 			
-				
-					YES
+				
 					
 						0
-						
-							YES
-						
+						
 						
 						
 					
@@ -1184,488 +351,22 @@
 						
 						Application
 					
-					
-						29
-						
-						
-							YES
-							
-							
-							
-							
-							
-							
-						
-						
-						MainMenu
-					
-					
-						19
-						
-						
-							YES
-							
-						
-						
-					
-					
-						56
-						
-						
-							YES
-							
-						
-						
-					
-					
-						103
-						
-						
-							YES
-							
-						
-						
-					
-					
-						217
-						
-						
-							YES
-							
-						
-						
-					
-					
-						83
-						
-						
-							YES
-							
-						
-						
-					
-					
-						81
-						
-						
-							YES
-							
-							
-							
-							
-							
-							
-							
-							
-						
-						
-					
-					
-						75
-						
-						
-					
-					
-						80
-						
-						
-					
-					
-						72
-						
-						
-					
-					
-						82
-						
-						
-					
-					
-						124
-						
-						
-							YES
-							
-						
-						
-					
-					
-						73
-						
-						
-					
-					
-						79
-						
-						
-					
-					
-						112
-						
-						
-					
-					
-						125
-						
-						
-							YES
-							
-						
-						
-					
-					
-						126
-						
-						
-					
-					
-						205
-						
-						
-							YES
-							
-							
-							
-							
-							
-							
-							
-							
-							
-							
-							
-							
-							
-						
-						
-					
-					
-						202
-						
-						
-					
-					
-						198
-						
-						
-					
-					
-						207
-						
-						
-					
-					
-						214
-						
-						
-					
-					
-						199
-						
-						
-					
-					
-						203
-						
-						
-					
-					
-						197
-						
-						
-					
-					
-						206
-						
-						
-					
-					
-						215
-						
-						
-					
-					
-						218
-						
-						
-							YES
-							
-						
-						
-					
-					
-						216
-						
-						
-							YES
-							
-						
-						
-					
-					
-						200
-						
-						
-							YES
-							
-							
-							
-							
-						
-						
-					
-					
-						219
-						
-						
-					
-					
-						201
-						
-						
-					
-					
-						204
-						
-						
-					
-					
-						220
-						
-						
-							YES
-							
-							
-							
-							
-							
-						
-						
-					
-					
-						213
-						
-						
-					
-					
-						210
-						
-						
-					
-					
-						221
-						
-						
-					
-					
-						208
-						
-						
-					
-					
-						209
-						
-						
-					
-					
-						106
-						
-						
-							YES
-							
-						
-						
-					
-					
-						111
-						
-						
-					
-					
-						57
-						
-						
-							YES
-							
-							
-							
-							
-							
-						
-						
-					
-					
-						58
-						
-						
-					
-					
-						136
-						
-						
-					
-					
-						129
-						
-						
-					
-					
-						143
-						
-						
-					
-					
-						236
-						
-						
-					
-					
-						24
-						
-						
-							YES
-							
-							
-							
-							
-						
-						
-					
-					
-						92
-						
-						
-					
-					
-						5
-						
-						
-					
-					
-						239
-						
-						
-					
-					
-						23
-						
-						
-					
-					
-						295
-						
-						
-							YES
-							
-						
-						
-					
-					
-						296
-						
-						
-							YES
-							
-							
-						
-						
-					
-					
-						297
-						
-						
-					
-					
-						298
-						
-						
-					
-					
-						211
-						
-						
-							YES
-							
-						
-						
-					
-					
-						212
-						
-						
-							YES
-							
-							
-						
-						
-					
-					
-						195
-						
-						
-					
-					
-						196
-						
-						
-					
-					
-						346
-						
-						
-					
-					
-						348
-						
-						
-							YES
-							
-						
-						
-					
-					
-						349
-						
-						
-							YES
-							
-							
-							
-						
-						
-					
-					
-						350
-						
-						
-					
-					
-						351
-						
-						
-					
-					
-						354
-						
-						
-					
 					
 						371
 						
-						
-							YES
+						
 							
-						
+						
 						
 					
 					
 						372
 						
-						
-							YES
+						
 							
+							
 							
-						
+						
 						
 					
 					
@@ -1676,21 +377,18 @@
 					
 						460
 						
-						
-							YES
+						
 							
 							
 							
 							
-						
+						
 						
 					
 					
 						461
 						
-						
-							YES
-						
+						
 						
 					
 					
@@ -1711,10 +409,9 @@
 					
 						470
 						
-						
-							YES
+						
 							
-						
+						
 						
 					
 					
@@ -1722,196 +419,50 @@
 						
 						
 					
-				
-			
-			
-				YES
-				
-					YES
-					-1.IBPluginDependency
-					-2.IBPluginDependency
-					-3.IBPluginDependency
-					103.IBPluginDependency
-					106.IBPluginDependency
-					111.IBPluginDependency
-					112.IBPluginDependency
-					124.IBPluginDependency
-					125.IBPluginDependency
-					126.IBPluginDependency
-					129.IBPluginDependency
-					136.IBPluginDependency
-					143.IBPluginDependency
-					19.IBPluginDependency
-					195.IBPluginDependency
-					196.IBPluginDependency
-					197.IBPluginDependency
-					198.IBPluginDependency
-					199.IBPluginDependency
-					200.IBPluginDependency
-					201.IBPluginDependency
-					202.IBPluginDependency
-					203.IBPluginDependency
-					204.IBPluginDependency
-					205.IBPluginDependency
-					206.IBPluginDependency
-					207.IBPluginDependency
-					208.IBPluginDependency
-					209.IBPluginDependency
-					210.IBPluginDependency
-					211.IBPluginDependency
-					212.IBPluginDependency
-					213.IBPluginDependency
-					214.IBPluginDependency
-					215.IBPluginDependency
-					216.IBPluginDependency
-					217.IBPluginDependency
-					218.IBPluginDependency
-					219.IBPluginDependency
-					220.IBPluginDependency
-					221.IBPluginDependency
-					23.IBPluginDependency
-					236.IBPluginDependency
-					239.IBPluginDependency
-					24.IBPluginDependency
-					29.IBPluginDependency
-					295.IBPluginDependency
-					296.IBPluginDependency
-					297.IBPluginDependency
-					298.IBPluginDependency
-					346.IBPluginDependency
-					348.IBPluginDependency
-					349.IBPluginDependency
-					350.IBPluginDependency
-					351.IBPluginDependency
-					354.IBPluginDependency
-					371.IBPluginDependency
-					371.IBWindowTemplateEditedContentRect
-					371.NSWindowTemplate.visibleAtLaunch
-					372.IBPluginDependency
-					450.IBPluginDependency
-					460.IBPluginDependency
-					461.IBPluginDependency
-					462.IBPluginDependency
-					463.IBPluginDependency
-					464.IBPluginDependency
-					470.IBPluginDependency
-					471.IBPluginDependency
-					5.IBPluginDependency
-					56.IBPluginDependency
-					57.IBPluginDependency
-					58.IBPluginDependency
-					72.IBPluginDependency
-					73.IBPluginDependency
-					75.IBPluginDependency
-					79.IBPluginDependency
-					80.IBPluginDependency
-					81.IBPluginDependency
-					82.IBPluginDependency
-					83.IBPluginDependency
-					92.IBPluginDependency
-				
-				
-					YES
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					{{303, 221}, {480, 360}}
-					
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-					com.apple.InterfaceBuilder.CocoaPlugin
-				
-			
-			
-				YES
-				
-				
+					
+						485
+						
+						
+							
+						
+						
+					
+					
+						486
+						
+						
+					
+				
 			
+			
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				{343, 405}
+				com.apple.InterfaceBuilder.CocoaPlugin
+				{{303, 221}, {480, 360}}
+				
+				
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+				com.apple.InterfaceBuilder.CocoaPlugin
+			
+			
 			
-			
-				YES
-				
-				
-			
+			
 			
-			484
+			486
 		
 		
-			
-				YES
+			
 				
 					AppController
 					NSObject
@@ -1926,69 +477,39 @@
 							id
 						
 					
-					
-						YES
-						
-							YES
-							tableView
-							theWindow
+					
+						NSTableView
+						NSWindow
+					
+					
+						
+							tableView
+							NSTableView
 						
-						
-							YES
-							NSTableView
-							NSWindow
+						
+							theWindow
+							NSWindow
 						
-					
-					
-						YES
-						
-							YES
-							tableView
-							theWindow
-						
-						
-							YES
-							
-								tableView
-								NSTableView
-							
-							
-								theWindow
-								NSWindow
-							
-						
-					
+					
 					
 						IBProjectSource
-						./Classes/AppController.h
+						../.XcodeSupport/AppController.h
 					
 				
-			
+			
 		
 		0
 		IBCocoaFramework
+		NO
 		
 			com.apple.InterfaceBuilder.CocoaPlugin.macosx
 			
 		
 		
 			com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
-			
+			
 		
 		YES
 		3
-		
-			YES
-			
-				YES
-				NSMenuCheckmark
-				NSMenuMixedState
-			
-			
-				YES
-				{11, 11}
-				{10, 3}
-			
-		
 	
 
diff --git a/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.pbxproj b/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.pbxproj
index 00dccea7d..efb973aa7 100644
--- a/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.pbxproj
+++ b/Tests/Manual/TableTest/TestTableColumn/TestTableColumn.xcodeproj/project.pbxproj
@@ -1,550 +1,96 @@
-
-
-
-
-	archiveVersion
-	1
-	classes
-	
-	objectVersion
-	46
-	objects
-	
-		1B5E4D17B25C5B28B6462407
-		
-			fileRef
-			A6B54A31A8533D688FE9F3A2
-			isa
-			PBXBuildFile
-		
-		1FE84B6FB2325D44BD26AE65
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			sourcecode.c.h
-			name
-			_Users_serafin_Desktop_TestTableColumn_AppController.h
-			path
-			.XcodeSupport/_Users_serafin_Desktop_TestTableColumn_AppController.h
-			sourceTree
-			SOURCE_ROOT
-		
-		392441AC9EC523C7D8BA9308
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			?
-			name
-			AppController.j
-			path
-			AppController.j
-			sourceTree
-			SOURCE_ROOT
-		
-		525F4427B3396B9F8FB42176
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			sourcecode.c.objc
-			name
-			_Users_serafin_Desktop_TestTableColumn_AppController.m
-			path
-			.XcodeSupport/_Users_serafin_Desktop_TestTableColumn_AppController.m
-			sourceTree
-			SOURCE_ROOT
-		
-		61A941CF8C8385DBF46059E5
-		
-			children
-			
-				392441AC9EC523C7D8BA9308
-				C2E9451D931720F5C6B6C688
-			
-			isa
-			PBXGroup
-			name
-			Sources
-			sourceTree
-			<group>
-		
-		75F04D4595E73A1C6E597923
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			sourcecode.c.h
-			name
-			_Users_alexandrewilhelm_Desktop_TestTableColumn_AppController.h
-			path
-			.XcodeSupport/_Users_alexandrewilhelm_Desktop_TestTableColumn_AppController.h
-			sourceTree
-			SOURCE_ROOT
-		
-		8B0D4BCFB75C55BAA8372871
-		
-			fileRef
-			525F4427B3396B9F8FB42176
-			isa
-			PBXBuildFile
-		
-		9E484D7D889CBAC1447F240A
-		
-			children
-			
-				D4A44EE5BDA177F42FC5D011
-				75F04D4595E73A1C6E597923
-				A6B54A31A8533D688FE9F3A2
-				1FE84B6FB2325D44BD26AE65
-				525F4427B3396B9F8FB42176
-			
-			isa
-			PBXGroup
-			name
-			Classes
-			sourceTree
-			<group>
-		
-		9EEC4488135749D200615446
-		
-			children
-			
-				9EEC44CB13574A0B00615446
-				9EEC4496135749D200615446
-				9E484D7D889CBAC1447F240A
-				61A941CF8C8385DBF46059E5
-			
-			isa
-			PBXGroup
-			sourceTree
-			<group>
-		
-		9EEC448A135749D200615446
-		
-			attributes
-			
-				LastUpgradeCheck
-				0440
-				ORGANIZATIONNAME
-				280 North, Inc.
-			
-			buildConfigurationList
-			9EEC448D135749D200615446
-			compatibilityVersion
-			Xcode 3.2
-			developmentRegion
-			English
-			hasScannedForEncodings
-			0
-			isa
-			PBXProject
-			knownRegions
-			
-				en
-			
-			mainGroup
-			9EEC4488135749D200615446
-			productRefGroup
-			9EEC4494135749D200615446
-			projectDirPath
-			
-			projectRoot
-			
-			targets
-			
-				9EEC4492135749D200615446
-			
-		
-		9EEC448D135749D200615446
-		
-			buildConfigurations
-			
-				9EEC44C3135749D300615446
-				9EEC44C4135749D300615446
-			
-			defaultConfigurationIsVisible
-			0
-			defaultConfigurationName
-			Release
-			isa
-			XCConfigurationList
-		
-		9EEC448F135749D200615446
-		
-			buildActionMask
-			2147483647
-			files
-			
-				1B5E4D17B25C5B28B6462407
-				8B0D4BCFB75C55BAA8372871
-			
-			isa
-			PBXSourcesBuildPhase
-			runOnlyForDeploymentPostprocessing
-			0
-		
-		9EEC4490135749D200615446
-		
-			buildActionMask
-			2147483647
-			files
-			
-				9EEC4498135749D200615446
-			
-			isa
-			PBXFrameworksBuildPhase
-			runOnlyForDeploymentPostprocessing
-			0
-		
-		9EEC4491135749D200615446
-		
-			buildActionMask
-			2147483647
-			files
-			
-				9EEC44CC13574A0B00615446
-			
-			isa
-			PBXResourcesBuildPhase
-			runOnlyForDeploymentPostprocessing
-			0
-		
-		9EEC4492135749D200615446
-		
-			buildConfigurationList
-			9EEC44C5135749D300615446
-			buildPhases
-			
-				9EEC448F135749D200615446
-				9EEC4490135749D200615446
-				9EEC4491135749D200615446
-			
-			buildRules
-			
-			dependencies
-			
-			isa
-			PBXNativeTarget
-			name
-			Another
-			productName
-			Another
-			productReference
-			9EEC4493135749D200615446
-			productType
-			com.apple.product-type.application
-		
-		9EEC4493135749D200615446
-		
-			explicitFileType
-			wrapper.application
-			includeInIndex
-			0
-			isa
-			PBXFileReference
-			path
-			Another.app
-			sourceTree
-			BUILT_PRODUCTS_DIR
-		
-		9EEC4494135749D200615446
-		
-			children
-			
-				9EEC4493135749D200615446
-			
-			isa
-			PBXGroup
-			name
-			Products
-			sourceTree
-			<group>
-		
-		9EEC4496135749D200615446
-		
-			children
-			
-				9EEC4497135749D200615446
-				9EEC4499135749D300615446
-			
-			isa
-			PBXGroup
-			name
-			Frameworks
-			sourceTree
-			<group>
-		
-		9EEC4497135749D200615446
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			wrapper.framework
-			name
-			Cocoa.framework
-			path
-			System/Library/Frameworks/Cocoa.framework
-			sourceTree
-			SDKROOT
-		
-		9EEC4498135749D200615446
-		
-			fileRef
-			9EEC4497135749D200615446
-			isa
-			PBXBuildFile
-		
-		9EEC4499135749D300615446
-		
-			children
-			
-				9EEC449A135749D300615446
-				9EEC449B135749D300615446
-				9EEC449C135749D300615446
-			
-			isa
-			PBXGroup
-			name
-			Other Frameworks
-			sourceTree
-			<group>
-		
-		9EEC449A135749D300615446
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			wrapper.framework
-			name
-			AppKit.framework
-			path
-			System/Library/Frameworks/AppKit.framework
-			sourceTree
-			SDKROOT
-		
-		9EEC449B135749D300615446
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			wrapper.framework
-			name
-			CoreData.framework
-			path
-			System/Library/Frameworks/CoreData.framework
-			sourceTree
-			SDKROOT
-		
-		9EEC449C135749D300615446
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			wrapper.framework
-			name
-			Foundation.framework
-			path
-			System/Library/Frameworks/Foundation.framework
-			sourceTree
-			SDKROOT
-		
-		9EEC44C3135749D300615446
-		
-			buildSettings
-			
-				ARCHS
-				$(ARCHS_STANDARD_32_64_BIT)
-				GCC_C_LANGUAGE_STANDARD
-				gnu99
-				GCC_OPTIMIZATION_LEVEL
-				0
-				GCC_PREPROCESSOR_DEFINITIONS
-				DEBUG
-				GCC_SYMBOLS_PRIVATE_EXTERN
-				NO
-				GCC_VERSION
-				com.apple.compilers.llvm.clang.1_0
-				GCC_WARN_64_TO_32_BIT_CONVERSION
-				YES
-				GCC_WARN_ABOUT_RETURN_TYPE
-				YES
-				GCC_WARN_UNUSED_VARIABLE
-				YES
-				MACOSX_DEPLOYMENT_TARGET
-				10.6
-				ONLY_ACTIVE_ARCH
-				YES
-				SDKROOT
-				macosx
-			
-			isa
-			XCBuildConfiguration
-			name
-			Debug
-		
-		9EEC44C4135749D300615446
-		
-			buildSettings
-			
-				ARCHS
-				$(ARCHS_STANDARD_32_64_BIT)
-				GCC_C_LANGUAGE_STANDARD
-				gnu99
-				GCC_VERSION
-				com.apple.compilers.llvm.clang.1_0
-				GCC_WARN_64_TO_32_BIT_CONVERSION
-				YES
-				GCC_WARN_ABOUT_RETURN_TYPE
-				YES
-				GCC_WARN_UNUSED_VARIABLE
-				YES
-				MACOSX_DEPLOYMENT_TARGET
-				10.6
-				SDKROOT
-				macosx
-			
-			isa
-			XCBuildConfiguration
-			name
-			Release
-		
-		9EEC44C5135749D300615446
-		
-			buildConfigurations
-			
-				9EEC44C6135749D300615446
-				9EEC44C7135749D300615446
-			
-			defaultConfigurationIsVisible
-			0
-			defaultConfigurationName
-			Release
-			isa
-			XCConfigurationList
-		
-		9EEC44C6135749D300615446
-		
-			buildSettings
-			
-				ALWAYS_SEARCH_USER_PATHS
-				NO
-				COMBINE_HIDPI_IMAGES
-				YES
-				COPY_PHASE_STRIP
-				NO
-				GCC_DYNAMIC_NO_PIC
-				NO
-				GCC_ENABLE_OBJC_EXCEPTIONS
-				YES
-				GCC_PRECOMPILE_PREFIX_HEADER
-				YES
-				GCC_PREFIX_HEADER
-				Another/Another-Prefix.pch
-				INFOPLIST_FILE
-				Another/Another-Info.plist
-				PRODUCT_NAME
-				$(TARGET_NAME)
-				WRAPPER_EXTENSION
-				app
-			
-			isa
-			XCBuildConfiguration
-			name
-			Debug
-		
-		9EEC44C7135749D300615446
-		
-			buildSettings
-			
-				ALWAYS_SEARCH_USER_PATHS
-				NO
-				COMBINE_HIDPI_IMAGES
-				YES
-				COPY_PHASE_STRIP
-				YES
-				DEBUG_INFORMATION_FORMAT
-				dwarf-with-dsym
-				GCC_ENABLE_OBJC_EXCEPTIONS
-				YES
-				GCC_PRECOMPILE_PREFIX_HEADER
-				YES
-				GCC_PREFIX_HEADER
-				Another/Another-Prefix.pch
-				INFOPLIST_FILE
-				Another/Another-Info.plist
-				PRODUCT_NAME
-				$(TARGET_NAME)
-				WRAPPER_EXTENSION
-				app
-			
-			isa
-			XCBuildConfiguration
-			name
-			Release
-		
-		9EEC44CB13574A0B00615446
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			folder
-			name
-			CappuccinoResources
-			path
-			Resources
-			sourceTree
-			<group>
-		
-		9EEC44CC13574A0B00615446
-		
-			fileRef
-			9EEC44CB13574A0B00615446
-			isa
-			PBXBuildFile
-		
-		A6B54A31A8533D688FE9F3A2
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			sourcecode.c.objc
-			name
-			_Users_alexandrewilhelm_Desktop_TestTableColumn_AppController.m
-			path
-			.XcodeSupport/_Users_alexandrewilhelm_Desktop_TestTableColumn_AppController.m
-			sourceTree
-			SOURCE_ROOT
-		
-		C2E9451D931720F5C6B6C688
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			?
-			name
-			AppController.j
-			path
-			AppController.j
-			sourceTree
-			SOURCE_ROOT
-		
-		D4A44EE5BDA177F42FC5D011
-		
-			isa
-			PBXFileReference
-			lastKnownFileType
-			sourcecode.c.h
-			name
-			xcc_general_include.h
-			path
-			.XcodeSupport/xcc_general_include.h
-			sourceTree
-			SOURCE_ROOT
-		
-	
-	rootObject
-	9EEC448A135749D200615446
-
-
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXFileReference section */
+		0A344A2F9A031BB2EC0B6F6B /* AppController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppController.h; path = .XcodeSupport/AppController.h; sourceTree = SOURCE_ROOT; };
+		0FEC49B3806EE9F6A56FFF38 /* xcc_general_include.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = xcc_general_include.h; path = .XcodeSupport/xcc_general_include.h; sourceTree = SOURCE_ROOT; };
+		3BDA43079FA11781DF405343 /* AppController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppController.m; path = .XcodeSupport/AppController.m; sourceTree = SOURCE_ROOT; };
+		5BC541719E8140DC69A0E287 /* AppController.j */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppController.j; path = AppController.j; sourceTree = SOURCE_ROOT; };
+		E164FE29172185F500263CE3 /* Resources */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Resources; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+		275E4AA7BE4D47921975CAED /* Cocoa Classes */ = {
+			isa = PBXGroup;
+			children = (
+				0A344A2F9A031BB2EC0B6F6B /* AppController.h */,
+				3BDA43079FA11781DF405343 /* AppController.m */,
+				0FEC49B3806EE9F6A56FFF38 /* xcc_general_include.h */,
+			);
+			name = "Cocoa Classes";
+			sourceTree = "";
+		};
+		BB9D478D9A6A373A957A2B6D /* Cappuccino Source */ = {
+			isa = PBXGroup;
+			children = (
+				5BC541719E8140DC69A0E287 /* AppController.j */,
+			);
+			name = "Cappuccino Source";
+			sourceTree = "";
+		};
+		E164FE221721857400263CE3 /*  */ = {
+			isa = PBXGroup;
+			children = (
+				E164FE29172185F500263CE3 /* Resources */,
+				275E4AA7BE4D47921975CAED /* Cocoa Classes */,
+				BB9D478D9A6A373A957A2B6D /* Cappuccino Source */,
+			);
+			sourceTree = "";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+		E164FE231721857400263CE3 /* Project Object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0460;
+			};
+			buildConfigurationList = E164FE261721857400263CE3 /* Build configuration list for PBXProject "Unity-iPhone" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = E164FE221721857400263CE3 /*  */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+			);
+		};
+/* End PBXProject section */
+
+/* Begin XCBuildConfiguration section */
+		E164FE271721857400263CE3 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Debug;
+		};
+		E164FE281721857400263CE3 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		E164FE261721857400263CE3 /* Build configuration list for PBXProject "Unity-iPhone" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				E164FE271721857400263CE3 /* Debug */,
+				E164FE281721857400263CE3 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = E164FE231721857400263CE3 /* Project Object */;
+}
\ No newline at end of file

From e156badef62677e6155a487f20223f669e100107 Mon Sep 17 00:00:00 2001
From: cacaodev 
Date: Thu, 25 Sep 2014 23:14:54 +0200
Subject: [PATCH 059/234] FIXED: After a column removal, columns were not at
 the right place and non exposed views from the removed column were not
 removed

---
 AppKit/CPTableView.j | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index 49015bd8e..0d16a5ba7 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -320,6 +320,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5;
 
     CPInteger           _draggedColumnIndex;
     BOOL                _draggedColumnIsSelected;
+    BOOL                _needsDifferedTableColumnRemove;
     CPArray             _differedColumnDataToRemove;
 
     Function            _BlockDeselectView;
@@ -474,6 +475,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5;
     _sourceListInactiveTopLineColor = [CPColor colorWithCalibratedRed:(173.0/255.0) green:(187.0/255.0) blue:(209.0/255.0) alpha:1.0];
     _sourceListInactiveBottomLineColor = [CPColor colorWithCalibratedRed:(150.0/255.0) green:(161.0/255.0) blue:(183.0/255.0) alpha:1.0];*/
     _differedColumnDataToRemove = [];
+    _needsDifferedTableColumnRemove = NO;
     _implementsCustomDrawRow = [self implementsSelector:@selector(drawRow:clipRect:)];
 
     if (!_sortDescriptors)
@@ -1125,6 +1127,7 @@ NOT YET IMPLEMENTED
 
     // we defer the actual removal until the end of the runloop in order to keep a reference to the column.
     [_differedColumnDataToRemove addObject:{"column":aTableColumn, "shouldBeHidden": [aTableColumn isHidden]}];
+    _needsDifferedTableColumnRemove = YES;
 
     [aTableColumn setHidden:YES];
     [aTableColumn setTableView:nil];
@@ -3479,11 +3482,11 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
     [self setNeedsDisplay:YES];
 
     // if we have any columns to remove do that here
-    var removeCount = [_differedColumnDataToRemove count];
 
-    if (removeCount)
+    if (_needsDifferedTableColumnRemove)
     {
-        var removeIndexes = [CPIndexSet indexSet];
+        var removeCount = [_differedColumnDataToRemove count],
+            removeIndexes = [CPIndexSet indexSet];
 
         for (var i = 0; i < removeCount; i++)
         {
@@ -3495,12 +3498,16 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
                 [removeIndexes addIndex:columnIdx];
         }
 
-        // FIXME: do we also need to remove non exposed rows that may stay in the cache ?
-        [self _unloadDataViewsInRows:_exposedRows columns:removeIndexes];
+        var rowIndexes = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self numberOfRows])];
+        [self _unloadDataViewsInRows:rowIndexes columns:removeIndexes];
 
         [_tableColumns removeObjectsAtIndexes:removeIndexes];
 
+        _dirtyTableColumnRangeIndex = 0;
+        [self _recalculateTableColumnRanges];
+
         [_differedColumnDataToRemove removeAllObjects];
+        _needsDifferedTableColumnRemove = NO;
     }
 
     // Now clear all the leftovers

From 2f7681f881530e9918cef90c6629a180a8f49d7f Mon Sep 17 00:00:00 2001
From: Martin Carlberg 
Date: Fri, 26 Sep 2014 13:28:44 +0200
Subject: [PATCH 060/234] Fixed: No line information was provided for compiler
 errors on the first line of a file

---
 Objective-J/ObjJAcornCompiler.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js
index e1cf72b07..8b6582a68 100644
--- a/Objective-J/ObjJAcornCompiler.js
+++ b/Objective-J/ObjJAcornCompiler.js
@@ -383,7 +383,7 @@ var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*
         this.tokens = exports.acorn.parse(aString);
     }
     catch (e) {
-        if (e.lineStart)
+        if (e.lineStart != null)
         {
             var message = this.prettifyMessage(e, "ERROR");
 #ifdef BROWSER

From 06d0357f749ac0ca5543a713cb6eca598ccb86f5 Mon Sep 17 00:00:00 2001
From: kevin-xu 
Date: Tue, 16 Sep 2014 19:24:14 -0700
Subject: [PATCH 061/234] Fixed: objj.vim is too old and has some bugs.

objj.vim cannot highlight much syntax correctly, and it should be updated. I've modified objc.vim to objj.vim which reads javascript.vim in the beginning, and now it looks good. Because javascript.vim & c.vim must be loaded into objj.vim, so they should also be committed.

Fixes #2211
---
 Tools/Editors/Vim/c.vim          | 427 +++++++++++++++++++++++++++++++
 Tools/Editors/Vim/javascript.vim | 135 ++++++++++
 Tools/Editors/Vim/objj.vim       | 211 ++++++---------
 3 files changed, 641 insertions(+), 132 deletions(-)
 create mode 100644 Tools/Editors/Vim/c.vim
 create mode 100644 Tools/Editors/Vim/javascript.vim

diff --git a/Tools/Editors/Vim/c.vim b/Tools/Editors/Vim/c.vim
new file mode 100644
index 000000000..4553519b0
--- /dev/null
+++ b/Tools/Editors/Vim/c.vim
@@ -0,0 +1,427 @@
+" Vim syntax file
+" Language:	C
+" Maintainer:	Bram Moolenaar 
+" Last Change:	2012 Jan 14
+
+" Quit when a (custom) syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" A bunch of useful C keywords
+syn keyword	cStatement	goto break return continue asm
+syn keyword	cLabel		case default
+syn keyword	cConditional	if else switch
+syn keyword	cRepeat		while for do
+
+syn keyword	cTodo		contained TODO FIXME XXX
+
+" It's easy to accidentally add a space after a backslash that was intended
+" for line continuation.  Some compilers allow it, which makes it
+" unpredicatable and should be avoided.
+syn match	cBadContinuation contained "\\\s\+$"
+
+" cCommentGroup allows adding matches for special things in comments
+syn cluster	cCommentGroup	contains=cTodo,cBadContinuation
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match	cSpecial	display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
+if !exists("c_no_utf")
+  syn match	cSpecial	display contained "\\\(u\x\{4}\|U\x\{8}\)"
+endif
+if exists("c_no_cformat")
+  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell
+  " cCppString: same as cString, but ends at end of line
+  syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell
+else
+  if !exists("c_no_c99") " ISO C99
+    syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+  else
+    syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+  endif
+  syn match	cFormat		display "%%" contained
+  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell
+  " cCppString: same as cString, but ends at end of line
+  syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
+endif
+
+syn match	cCharacter	"L\='[^\\]'"
+syn match	cCharacter	"L'[^']*'" contains=cSpecial
+if exists("c_gnu")
+  syn match	cSpecialError	"L\='\\[^'\"?\\abefnrtv]'"
+  syn match	cSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
+else
+  syn match	cSpecialError	"L\='\\[^'\"?\\abfnrtv]'"
+  syn match	cSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
+endif
+syn match	cSpecialCharacter display "L\='\\\o\{1,3}'"
+syn match	cSpecialCharacter display "'\\x\x\{1,2}'"
+syn match	cSpecialCharacter display "L'\\x\x\+'"
+
+if !exists("c_no_c11") " ISO C11
+  if exists("c_no_cformat")
+    syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell
+  else
+    syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell
+  endif
+  syn match	cCharacter	"[Uu]'[^\\]'"
+  syn match	cCharacter	"[Uu]'[^']*'" contains=cSpecial
+  if exists("c_gnu")
+    syn match	cSpecialError	"[Uu]'\\[^'\"?\\abefnrtv]'"
+    syn match	cSpecialCharacter "[Uu]'\\['\"?\\abefnrtv]'"
+  else
+    syn match	cSpecialError	"[Uu]'\\[^'\"?\\abfnrtv]'"
+    syn match	cSpecialCharacter "[Uu]'\\['\"?\\abfnrtv]'"
+  endif
+  syn match	cSpecialCharacter display "[Uu]'\\\o\{1,3}'"
+  syn match	cSpecialCharacter display "[Uu]'\\x\x\+'"
+endif
+
+"when wanted, highlight trailing white space
+if exists("c_space_errors")
+  if !exists("c_no_trail_space_error")
+    syn match	cSpaceError	display excludenl "\s\+$"
+  endif
+  if !exists("c_no_tab_space_error")
+    syn match	cSpaceError	display " \+\t"me=e-1
+  endif
+endif
+
+" This should be before cErrInParen to avoid problems with #define ({ xxx })
+if exists("c_curly_error")
+  syntax match cCurlyError "}"
+  syntax region	cBlock		start="{" end="}" contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
+else
+  syntax region	cBlock		start="{" end="}" transparent fold
+endif
+
+"catch errors caused by wrong parenthesis and brackets
+" also accept <% for {, %> for }, <: for [ and :> for ] (C99)
+" But avoid matching <::.
+syn cluster	cParenGroup	contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
+if exists("c_no_curly_error")
+  syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
+  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+  syn match	cParenError	display ")"
+  syn match	cErrInParen	display contained "^[{}]\|^<%\|^%>"
+elseif exists("c_no_bracket_error")
+  syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
+  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+  syn match	cParenError	display ")"
+  syn match	cErrInParen	display contained "[{}]\|<%\|%>"
+else
+  syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
+  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
+  syn match	cParenError	display "[\])]"
+  syn match	cErrInParen	display contained "[\]{}]\|<%\|%>"
+  syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
+  " cCppBracket: same as cParen but ends at end-of-line; used in cDefine
+  syn region	cCppBracket	transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
+  syn match	cErrInBracket	display contained "[);{}]\|<%\|%>"
+endif
+
+syntax region	cBadBlock	keepend extend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match	cNumbers	display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal
+" Same, but without octal error (for comments)
+syn match	cNumbersCom	display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal
+syn match	cNumber		display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match	cNumber		display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match	cOctal		display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero
+syn match	cOctalZero	display contained "\<0"
+syn match	cFloat		display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match	cFloat		display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match	cFloat		display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match	cFloat		display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+if !exists("c_no_c99")
+  "hexadecimal floating point number, optional leading digits, with dot, with exponent
+  syn match	cFloat		display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
+  "hexadecimal floating point number, with leading digits, optional dot, with exponent
+  syn match	cFloat		display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
+endif
+
+" flag an octal number with wrong digits
+syn match	cOctalError	display contained "0\o*[89]\d*"
+syn case match
+
+if exists("c_comment_strings")
+  " A comment can contain cString, cCharacter and cNumber.
+  " But a "*/" inside a cString in a cComment DOES end the comment!  So we
+  " need to use a special type of cString: cCommentString, which also ends on
+  " "*/", and sees a "*" at the start of the line as comment again.
+  " Unfortunately this doesn't very well work for // type of comments :-(
+  syntax match	cCommentSkip	contained "^\s*\*\($\|\s\+\)"
+  syntax region cCommentString	contained start=+L\=\\\@" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
+syn match	cPreConditMatch	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
+if !exists("c_no_if0")
+  syn cluster	cCppOutInGroup	contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
+  syn region	cCppOutWrapper	start="^\s*\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse fold
+  syn region	cCppOutIf	contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse
+  if !exists("c_no_if0_fold")
+    syn region	cCppOutIf2	contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip fold
+  else
+    syn region	cCppOutIf2	contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip
+  endif
+  syn region	cCppOutElse	contained matchgroup=cCppOutWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit
+  syn region	cCppInWrapper	start="^\s*\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold
+  syn region	cCppInIf	contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit
+  if !exists("c_no_if0_fold")
+    syn region	cCppInElse	contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold
+  else
+    syn region	cCppInElse	contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2
+  endif
+  syn region	cCppInElse2	contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip
+  syn region	cCppOutSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip
+  syn region	cCppInSkip	contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc
+endif
+syn region	cIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match	cIncluded	display contained "<[^>]*>"
+syn match	cInclude	display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
+"syn match cLineSkip	"\\$"
+syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti
+syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
+syn region	cPreProc	start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
+
+" Highlight User Labels
+syn cluster	cMultiGroup	contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
+syn region	cMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
+" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+syn cluster	cLabelGroup	contains=cUserLabel
+syn match	cUserCont	display "^\s*\I\i*\s*:$" contains=@cLabelGroup
+syn match	cUserCont	display ";\s*\I\i*\s*:$" contains=@cLabelGroup
+syn match	cUserCont	display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
+syn match	cUserCont	display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
+
+syn match	cUserLabel	display "\I\i*" contained
+
+" Avoid recognizing most bitfields as labels
+syn match	cBitField	display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
+syn match	cBitField	display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
+
+if exists("c_minlines")
+  let b:c_minlines = c_minlines
+else
+  if !exists("c_no_if0")
+    let b:c_minlines = 50	" #if 0 constructs can be long
+  else
+    let b:c_minlines = 15	" mostly for () constructs
+  endif
+endif
+if exists("c_curly_error")
+  syn sync fromstart
+else
+  exec "syn sync ccomment cComment minlines=" . b:c_minlines
+endif
+
+" Define the default highlighting.
+" Only used when an item doesn't have highlighting yet
+hi def link cFormat		cSpecial
+hi def link cCppString		cString
+hi def link cCommentL		cComment
+hi def link cCommentStart	cComment
+hi def link cLabel		Label
+hi def link cUserLabel		Label
+hi def link cConditional	Conditional
+hi def link cRepeat		Repeat
+hi def link cCharacter		Character
+hi def link cSpecialCharacter	cSpecial
+hi def link cNumber		Number
+hi def link cOctal		Number
+hi def link cOctalZero		PreProc	 " link this to Error if you want
+hi def link cFloat		Float
+hi def link cOctalError		cError
+hi def link cParenError		cError
+hi def link cErrInParen		cError
+hi def link cErrInBracket	cError
+hi def link cCommentError	cError
+hi def link cCommentStartError	cError
+hi def link cSpaceError		cError
+hi def link cSpecialError	cError
+hi def link cCurlyError		cError
+hi def link cOperator		Operator
+hi def link cStructure		Structure
+hi def link cStorageClass	StorageClass
+hi def link cInclude		Include
+hi def link cPreProc		PreProc
+hi def link cDefine		Macro
+hi def link cIncluded		cString
+hi def link cError		Error
+hi def link cStatement		Statement
+hi def link cCppInWrapper	cCppOutWrapper
+hi def link cCppOutWrapper	cPreCondit
+hi def link cPreConditMatch	cPreCondit
+hi def link cPreCondit		PreCondit
+hi def link cType		Type
+hi def link cConstant		Constant
+hi def link cCommentString	cString
+hi def link cComment2String	cString
+hi def link cCommentSkip	cComment
+hi def link cString		String
+hi def link cComment		Comment
+hi def link cSpecial		SpecialChar
+hi def link cTodo		Todo
+hi def link cBadContinuation	Error
+hi def link cCppOutSkip		cCppOutIf2
+hi def link cCppInElse2		cCppOutIf2
+hi def link cCppOutIf2		cCppOut2  " Old syntax group for #if 0 body
+hi def link cCppOut2		cCppOut  " Old syntax group for #if of #if 0
+hi def link cCppOut		Comment
+
+let b:current_syntax = "c"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim: ts=8
diff --git a/Tools/Editors/Vim/javascript.vim b/Tools/Editors/Vim/javascript.vim
new file mode 100644
index 000000000..b293eb806
--- /dev/null
+++ b/Tools/Editors/Vim/javascript.vim
@@ -0,0 +1,135 @@
+" Vim syntax file
+" Language:	JavaScript
+" Maintainer:	Claudio Fleiner 
+" Updaters:	Scott Shattuck (ss) 
+" URL:		http://www.fleiner.com/vim/syntax/javascript.vim
+" Changes:	(ss) added keywords, reserved words, and other identifiers
+"		(ss) repaired several quoting and grouping glitches
+"		(ss) fixed regex parsing issue with multiple qualifiers [gi]
+"		(ss) additional factoring of keywords, globals, and members
+" Last Change:	2010 Mar 25
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+" tuning parameters:
+" unlet javaScript_fold
+
+if !exists("main_syntax")
+  if version < 600
+    syntax clear
+  elseif exists("b:current_syntax")
+    finish
+  endif
+  let main_syntax = 'javascript'
+endif
+
+" Drop fold if it set but vim doesn't support it.
+if version < 600 && exists("javaScript_fold")
+  unlet javaScript_fold
+endif
+
+
+syn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
+syn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
+syn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
+syn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
+syn match   javaScriptSpecial	       "\\\d\d\d\|\\."
+syn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
+syn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
+
+syn match   javaScriptSpecialCharacter "'\\.'"
+syn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
+syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
+
+syn keyword javaScriptConditional	if else switch
+syn keyword javaScriptRepeat		while for do in
+syn keyword javaScriptBranch		break continue
+syn keyword javaScriptOperator		new delete instanceof typeof
+syn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
+syn keyword javaScriptStatement		return with
+syn keyword javaScriptBoolean		true false
+syn keyword javaScriptNull		null undefined
+syn keyword javaScriptIdentifier	arguments this var let
+syn keyword javaScriptLabel		case default
+syn keyword javaScriptException		try catch finally throw
+syn keyword javaScriptMessage		alert confirm prompt status
+syn keyword javaScriptGlobal		self window top parent
+syn keyword javaScriptMember		document event location 
+syn keyword javaScriptDeprecated	escape unescape
+syn keyword javaScriptReserved		abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile 
+
+if exists("javaScript_fold")
+    syn match	javaScriptFunction	"\"
+    syn region	javaScriptFunctionFold	start="\.*[^};]$" end="^\z1}.*$" transparent fold keepend
+
+    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\"
+    syn sync match javaScriptSync	grouphere NONE "^}"
+
+    setlocal foldmethod=syntax
+    setlocal foldtext=getline(v:foldstart)
+else
+    syn keyword javaScriptFunction	function
+    syn match	javaScriptBraces	   "[{}\[\]]"
+    syn match	javaScriptParens	   "[()]"
+endif
+
+syn sync fromstart
+syn sync maxlines=100
+
+if main_syntax == "javascript"
+  syn sync ccomment javaScriptComment
+endif
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_javascript_syn_inits")
+  if version < 508
+    let did_javascript_syn_inits = 1
+    command -nargs=+ HiLink hi link 
+  else
+    command -nargs=+ HiLink hi def link 
+  endif
+  HiLink javaScriptComment		Comment
+  HiLink javaScriptLineComment		Comment
+  HiLink javaScriptCommentTodo		Todo
+  HiLink javaScriptSpecial		Special
+  HiLink javaScriptStringS		String
+  HiLink javaScriptStringD		String
+  HiLink javaScriptCharacter		Character
+  HiLink javaScriptSpecialCharacter	javaScriptSpecial
+  HiLink javaScriptNumber		javaScriptValue
+  HiLink javaScriptConditional		Conditional
+  HiLink javaScriptRepeat		Repeat
+  HiLink javaScriptBranch		Conditional
+  HiLink javaScriptOperator		Operator
+  HiLink javaScriptType			Type
+  HiLink javaScriptStatement		Statement
+  HiLink javaScriptFunction		Function
+  HiLink javaScriptBraces		Function
+  HiLink javaScriptError		Error
+  HiLink javaScrParenError		javaScriptError
+  HiLink javaScriptNull			Keyword
+  HiLink javaScriptBoolean		Boolean
+  HiLink javaScriptRegexpString		String
+
+  HiLink javaScriptIdentifier		Identifier
+  HiLink javaScriptLabel		Label
+  HiLink javaScriptException		Exception
+  HiLink javaScriptMessage		Keyword
+  HiLink javaScriptGlobal		Keyword
+  HiLink javaScriptMember		Keyword
+  HiLink javaScriptDeprecated		Exception 
+  HiLink javaScriptReserved		Keyword
+  HiLink javaScriptDebug		Debug
+  HiLink javaScriptConstant		Label
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "javascript"
+if main_syntax == 'javascript'
+  unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/Tools/Editors/Vim/objj.vim b/Tools/Editors/Vim/objj.vim
index 530fdbac8..e42d14c8a 100644
--- a/Tools/Editors/Vim/objj.vim
+++ b/Tools/Editors/Vim/objj.vim
@@ -1,51 +1,86 @@
 " Vim syntax file
-" Language:	Objective-J
-" Maintainer:	Shawn MacIntyre 
-" Updaters:	
-" URL:		
-" Changes:	(sm) merged javascript syntax Claudio Fleiner and Scott Shattuck and objc syntax by Kazunobu Kuriyama and Anthony Hodsdon 
-" Last Change:	2008 Sep 8
+" Language:             Objective-J
+" Maintainer:           Shawn MacIntyre 
+" First Author:         Shawn MacIntyre 
+" Updaters:             Kevin Xu 
+" Changes:              (sm) merged JavaScript syntax by
+"                          Claudio Fleiner & Scott Shattuck and
+"                          Objective-C syntax by
+"                          Valentino Kyriakides, Anthony Hodsdon & Kazunobu Kuriyama
+"                       (sm) modified 'objc.vim' to our 'objj.vim'
+"                          which reads 'javascript.vim' in the beginning.
+" Last Change:          2014 Sep 29
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
-" tuning parameters:
-" unlet objj_fold
-
-if !exists("main_syntax")
-  if version < 600
-    syntax clear
-  elseif exists("b:current_syntax")
-    finish
-  endif
-  let main_syntax = 'objj'
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
 endif
 
-" Drop fold if it set but vim doesn't support it.
-if version < 600 && exists("objj_fold")
-  unlet objj_fold
+" Read the JavaScript syntax to start with
+if version < 600
+  source :p:h/javascript.vim
+else
+  runtime! syntax/javascript.vim
+  unlet b:current_syntax
 endif
 
-syn case ignore
+" Modify some syntax from 'javascript.vim'.
+syn clear javaScriptParens
+syn clear javaScriptBraces
 
-" objj keywords, types, type qualifiers etc.
+" TODO: The '{}' & '[]' representing the JavaScript 'object' & 'array'
+" should be highlighted.
+
+" Read the C syntax to start with
+if version < 600
+  source :p:h/c.vim
+else
+  runtime! syntax/c.vim
+  unlet b:current_syntax
+endif
+
+" FIXME: The highlighting the common special-notice 'TBD'
+" for comments in JavaScript
+" is broken by c.vim.
+
+" Objective-J extentions follow below
+"
+" NOTE: Objective-J is abbreviated to ObjJ/objj
+" and uses *.j as file extensions!
+
+
+" ObjJ keywords, types, type qualifiers etc.
 syn keyword objjStatement	self super _cmd
+syn keyword objjStatement	property getter setter readwrite readonly copy
 syn keyword objjType		id Class SEL IMP BOOL
-"syn keyword objjTypeModifier	bycopy in out inout oneway
-syn keyword objjConstant	nil Nil
+syn keyword objjTypeModifier	bycopy in out inout oneway
+syn keyword objjConstant	nil Nil NULL NO YES
 
-" Match the objj #import directive (like C's #include)
+" Match the ObjJ @import directive
+syn match  objjDirective    "@import"
+
+" Match the ObjJ #import directive (like C's #include)
 syn region objjImported display contained start=+"+  skip=+\\\\\|\\"+  end=+"+
-syn match  objjImported display contained "<[_0-9a-zA-Z.\/]*>"
-syn match  objjImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objjImported
+syn match  objjImported display contained "<[-_0-9a-zA-Z.\/]*>"
+syn match  objjImport display "^\s*\(%:\|#\|@\)\s*import\>\s*["<]" contains=objjImported
 
-" Match the important objj directives
-syn match  objjScopeDecl    "@public\|@private\|@protected"
-syn match  objjDirective    "@interface\|@implementation"
-syn match  objjDirective    "@class\|@end\|@defs"
-syn match  objjDirective    "@encode\|@protocol\|@selector"
+" Match the important ObjJ directives
+syn match  objjDirective    "@interface\|@implementation\|@protocol\|@end"
+syn match  objjScopeDecl    "@public\|@protected\|@private\|@package"
+syn match  objjScopeDecl    "@required\|@optional"
+syn match  objjDirective    "@property\|@synthesize\|@dynamic"
+syn match  objjDirective    "@outlet\|@accessors"
+syn match  objjDirective    "@action\|@selector"
+syn match  objjDirective    "@defs"
+syn match  objjDirective    "@global\|@class"
+syn match  objjDirective    "@encode"
+syn match  objjDirective    "@ref\|@deref"
 syn match  objjDirective    "@try\|@catch\|@finally\|@throw\|@synchronized"
 
-" Match the ObjC method types
+" Match the ObjJ method types
 "
 " NOTE: here I match only the indicators, this looks
 " much nicer and reduces cluttering color highlightings.
@@ -56,123 +91,38 @@ syn match objjInstMethod    "^\s*-\s*"
 syn match objjFactMethod    "^\s*+\s*"
 
 " To distinguish from a header inclusion from a protocol list.
-"syn match objjProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objjType,cType,Type
+syn match objjProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objjType,cType,Type
 
 
 " To distinguish labels from the keyword for a method's parameter.
 syn region objjKeyForMethodParam display
     \ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*("
     \ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*"
-    \ contains=objjType,Type
+    \ contains=objjType,objjTypeModifier,cType,cStructure,cStorageClass,Type
 
-" Objective-C Constant Strings
+" Objective-J Constant Strings
 syn match objjSpecial display "%@" contained
-syn region objjString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial
+syn region objjString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objjSpecial
 
-" Objective-C Message Expressions
-syn region objjMessage display start="\[" end="\]" contains=objjMessage,objjStatement,objjType,objjTypeModifier,objjString,objjConstant,objjDirective
+" Objective-J Message Expressions
+syn region objjMessage display start="\[" end="\]" contains=objjMessage,objjStatement,objjType,objjTypeModifier,objjString,objjConstant,objjDirective,cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,Type
 
 syn cluster cParenGroup add=objjMessage
 syn cluster cPreProcGroup add=objjMessage
 
-
-syn keyword objjCommentTodo    TODO FIXME XXX TBD contained
-syn match   objjLineComment    "\/\/.*" contains=objjCommentTodo
-syn match   objjCommentSkip    "^[ \t]*\*\($\|[ \t]\+\)"
-syn region  objjComment	       start="/\*"  end="\*/" contains=objjCommentTodo
-syn match   objjSpecial	       "\\\d\d\d\|\\."
-syn region  objjStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+  contains=objjSpecial,@htmlPreproc
-syn region  objjStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+  contains=objjSpecial,@htmlPreproc
-
-syn match   objjSpecialCharacter "'\\.'"
-syn match   objjNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
-syn region  objjRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
-
-syn keyword objjConditional	if else switch
-syn keyword objjRepeat		while for do in
-syn keyword objjBranch		break continue
-syn keyword objjOperator	new delete instanceof typeof
-syn keyword objjType		Array Boolean Date Function Number Object String RegExp
-syn keyword objjStatement	return with
-syn keyword objjBoolean		true false
-syn keyword objjNull		null undefined
-syn keyword objjIdentifier	arguments this var
-syn keyword objjLabel		case default
-syn keyword objjException	try catch finally throw
-syn keyword objjMessage		alert confirm prompt status
-syn keyword objjGlobal		self window top parent
-syn keyword objjMember		document event location 
-syn keyword objjDeprecated	escape unescape
-syn keyword objjReserved	abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile 
-
-if exists("objj_fold")
-    syn match	objjFunction      "\"
-    syn region	objjFunctionFold	start="\.*[^};]$" end="^\z1}.*$" transparent fold keepend
-
-    syn sync match objjSync	grouphere objjFunctionFold "\"
-    syn sync match objjSync	grouphere NONE "^}"
-
-    setlocal foldmethod=syntax
-    setlocal foldtext=getline(v:foldstart)
-else
-    syn keyword	objjFunction      function
-    syn match	objjBraces	   "[{}\[\]]"
-    syn match	objjParens	   "[()]"
-endif
-
-syn sync fromstart
-syn sync maxlines=100
-
-if main_syntax == "objj"
-  syn sync ccomment objjComment
-endif
-
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
 " For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_objj_syn_inits")
+if version >= 508 || !exists("did_objj_syntax_inits")
   if version < 508
-    let did_objj_syn_inits = 1
+    let did_objj_syntax_inits = 1
     command -nargs=+ HiLink hi link 
   else
     command -nargs=+ HiLink hi def link 
   endif
-  HiLink objjComment		Comment
-  HiLink objjLineComment	Comment
-  HiLink objjCommentTodo	Todo
-  HiLink objjSpecial		Special
-  HiLink objjStringS		String
-  HiLink objjStringD		String
-  HiLink objjCharacter		Character
-  HiLink objjSpecialCharacter	objjSpecial
-  HiLink objjNumber		objjValue
-  HiLink objjConditional	Conditional
-  HiLink objjRepeat		Repeat
-  HiLink objjBranch		Conditional
-  HiLink objjOperator		Operator
-  HiLink objjType		Type
-  HiLink objjStatement		Statement
-  HiLink objjFunction		Function
-  HiLink objjBraces		Function
-  HiLink objjError		Error
-  HiLink javaScrParenError	objjError
-  HiLink objjNull		Keyword
-  HiLink objjBoolean		Boolean
-  HiLink objjRegexpString	String
-
-  HiLink objjIdentifier		Identifier
-  HiLink objjLabel		Label
-  HiLink objjException		Exception
-  HiLink objjMessage		Keyword
-  HiLink objjGlobal		Keyword
-  HiLink objjMember		Keyword
-  HiLink objjDeprecated		Exception 
-  HiLink objjReserved		Keyword
-  HiLink objjDebug		Debug
-  HiLink objjConstant		Label
 
   HiLink objjImport		Include
-  HiLink objjImported		String
+  HiLink objjImported		cString
   HiLink objjTypeModifier	objjType
   HiLink objjType		Type
   HiLink objjScopeDecl		Statement
@@ -181,17 +131,14 @@ if version >= 508 || !exists("did_objj_syn_inits")
   HiLink objjStatement		Statement
   HiLink objjDirective		Statement
   HiLink objjKeyForMethodParam	None
-  HiLink objjString		String
+  HiLink objjString		cString
   HiLink objjSpecial		Special
   HiLink objjProtocol		None
-  HiLink objjConstant		Constant
+  HiLink objjConstant		cConstant
 
   delcommand HiLink
 endif
 
 let b:current_syntax = "objj"
-if main_syntax == 'objj'
-  unlet main_syntax
-endif
 
-" vim: ts=8
\ No newline at end of file
+" vim: ts=8

From 921fcbdcd021f1ec1e8e1f869ce47b2e7585bd77 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Mon, 29 Sep 2014 19:19:17 -0700
Subject: [PATCH 062/234] Fixed: firstResponder is lost when adding a
 firstResponder view to the same window

Previously, when adding a view (which is the firstResponder of the window) to the same window, the firstResponder was set to nil.
Now it keeps the same firstResponder.
---
 AppKit/CPView.j | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/AppKit/CPView.j b/AppKit/CPView.j
index 9de2e67bc..1a600667c 100644
--- a/AppKit/CPView.j
+++ b/AppKit/CPView.j
@@ -751,7 +751,7 @@ var CPViewFlags                     = { },
     [[self window] _dirtyKeyViewLoop];
 
     // Clear out first responder if we're the first responder and leaving.
-    if ([_window firstResponder] === self)
+    if ([_window firstResponder] === self && _window != aWindow)
         [_window makeFirstResponder:nil];
 
     // Notify the view and its subviews

From b617d60b6088ef1abf800bfe46eda92729d1af5b Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Tue, 30 Sep 2014 15:28:26 -0700
Subject: [PATCH 063/234] Fixed: Several views of _CPTableDrawView created when
 encoding and decoding a CPTableView

Previously, when encoding and decoding a CPTableView, the tableView had several _CPTableDrawView (in the subviews).
Now when encoding, we make sure to remove _CPTableDrawView from its superview.
---
 AppKit/CPTableView.j | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index 2349099c6..0ec455382 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -6025,6 +6025,11 @@ var CPTableViewDataSourceKey                = @"CPTableViewDataSourceKey",
 {
     [super encodeWithCoder:aCoder];
 
+    // We do this in order to avoid encoding the _tableDrawView, which
+    // should just automatically be created programmatically as needed.
+    if (_tableDrawView)
+        [_tableDrawView removeFromSuperview];
+
     [aCoder encodeObject:_dataSource forKey:CPTableViewDataSourceKey];
     [aCoder encodeObject:_delegate forKey:CPTableViewDelegateKey];
 

From 5979baa874f18eb0582dbdc33c0599276c299cb5 Mon Sep 17 00:00:00 2001
From: Antoine Mercadal 
Date: Wed, 1 Oct 2014 14:17:39 -0700
Subject: [PATCH 064/234] FIXED: - (BOOL)popoverShouldClose: was not called in
 transient and semi-transient mode

Previously, handlers of events that could make the popover to close were not calling CPPopover's performClose:. This patch ensure performClose: is called, and so delegates are consulted if the popover can be closed or not
---
 AppKit/CPPopover.j        | 14 +++++++++++---
 AppKit/_CPPopoverWindow.j |  4 ++--
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j
index 1f1edfb87..252f24fa0 100644
--- a/AppKit/CPPopover.j
+++ b/AppKit/CPPopover.j
@@ -310,9 +310,8 @@ Set the behavior of the CPPopover. It can be:
     if ([_popoverWindow isClosing])
         return;
 
-    if (_implementedDelegateMethods & CPPopoverDelegate_popover_shouldClose_)
-        if (![_delegate popoverShouldClose:self])
-            return;
+    if (![self _popoverShouldClose])
+        return;
 
     [self _close];
 }
@@ -346,6 +345,15 @@ Set the behavior of the CPPopover. It can be:
         [_delegate popoverDidShow:self];
 }
 
+/*! @ignore */
+- (BOOL)_popoverShouldClose
+{
+    if (_implementedDelegateMethods & CPPopoverDelegate_popover_shouldClose_)
+        return [_delegate popoverShouldClose:self];
+
+    return YES;
+}
+
 /*! @ignore */
 - (void)_popoverWillClose
 {
diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j
index 46c754ae2..bf5f14700 100644
--- a/AppKit/_CPPopoverWindow.j
+++ b/AppKit/_CPPopoverWindow.j
@@ -720,11 +720,11 @@ var _CPPopoverWindow_shouldClose_    = 1 << 4,
                     break;
                 }
 
-                [_delegate close];
+                [_delegate performClose:self];
                 break;
 
             case CPPopoverBehaviorTransient:
-                [_delegate close];
+                [_delegate performClose:self];
                 break;
 
             case CPPopoverBehaviorApplicationDefined:

From 608480c1d26c1a858e1cec6e0027cefc02181bb4 Mon Sep 17 00:00:00 2001
From: Antoine Mercadal 
Date: Wed, 1 Oct 2014 14:48:47 -0700
Subject: [PATCH 065/234] FIXED: popover window was not trapping next mouse
 event if delegate responds no to popoverShouldClose:

This patch fixes that by automatically trapping next mouse event if after a performClose, the popover is still visible
---
 AppKit/_CPPopoverWindow.j | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j
index bf5f14700..818ae6d60 100644
--- a/AppKit/_CPPopoverWindow.j
+++ b/AppKit/_CPPopoverWindow.j
@@ -726,11 +726,10 @@ var _CPPopoverWindow_shouldClose_    = 1 << 4,
             case CPPopoverBehaviorTransient:
                 [_delegate performClose:self];
                 break;
-
-            case CPPopoverBehaviorApplicationDefined:
-                [self _trapNextMouseDown];
-                break;
         }
+
+        if ([self isVisible])
+            [self _trapNextMouseDown];
     }
 }
 

From 5e0e61b7e50bfaaafb3f12c37028f53ce760d386 Mon Sep 17 00:00:00 2001
From: Martin Carlberg 
Date: Thu, 9 Oct 2014 19:25:56 +0200
Subject: [PATCH 066/234] =?UTF-8?q?Don=E2=80=99t=20create=20old=20or=20new?=
 =?UTF-8?q?=20values=20in=20KVO=20change=20dictionary=20when=20doing=20bin?=
 =?UTF-8?q?dings?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 AppKit/CPKeyValueBinding.j | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j
index 0c9bb22f0..1913a4436 100644
--- a/AppKit/CPKeyValueBinding.j
+++ b/AppKit/CPKeyValueBinding.j
@@ -156,7 +156,7 @@ var CPBindingOperationAnd = 0,
 
         [self _updatePlaceholdersWithOptions:options forBinding:aName];
 
-        [aDestination addObserver:self forKeyPath:aKeyPath options:CPKeyValueObservingOptionNew context:aBinding];
+        [aDestination addObserver:self forKeyPath:aKeyPath options:0 context:aBinding];
 
         var bindings = [bindingsMap objectForKey:[_source UID]];
 

From 643566bbfd255e6e68b14a42394dfe5f133b8bc6 Mon Sep 17 00:00:00 2001
From: Martin Carlberg 
Date: Thu, 9 Oct 2014 19:27:57 +0200
Subject: [PATCH 067/234] Honor options when creating KVO change dictionary

---
 Foundation/CPKeyValueObserving.j | 265 ++++++++++++++++++++-----------
 1 file changed, 172 insertions(+), 93 deletions(-)

diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j
index 5dc1257a0..53f110b32 100644
--- a/Foundation/CPKeyValueObserving.j
+++ b/Foundation/CPKeyValueObserving.j
@@ -327,6 +327,7 @@ var kvoNewAndOld        = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
     Class           _nativeClass;
     CPDictionary    _changesForKey;
     CPDictionary    _nestingForKey;
+    CPDictionary    _minOptionsForKey;
     Object          _observersForKey;
     int             _observersForKeyLength;
     CPSet           _replacedKeys;
@@ -354,6 +355,7 @@ var kvoNewAndOld        = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
         _observersForKey    = {};
         _changesForKey      = {};
         _nestingForKey      = {};
+        _minOptionsForKey   = {};
         _observersForKeyLength = 0;
 
         [self _replaceClass];
@@ -767,12 +769,20 @@ var kvoNewAndOld        = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
 
     if (options & CPKeyValueObservingOptionInitial)
     {
-        var newValue = [_targetObject valueForKeyPath:aPath];
+        var changes;
 
-        if (newValue === nil || newValue === undefined)
-            newValue = [CPNull null];
+        if (options & CPKeyValueObservingOptionNew)
+        {
+            var newValue = [_targetObject valueForKeyPath:aPath];
+
+            if (newValue == nil)
+                newValue = [CPNull null];
+
+            changes = @{ CPKeyValueChangeKindKey: CPKeyValueChangeSetting, CPKeyValueChangeNewKey: newValue };
+        } else {
+            changes = @{ CPKeyValueChangeKindKey: CPKeyValueChangeSetting };
+        }
 
-        var changes = @{ CPKeyValueChangeNewKey: newValue };
         [anObserver observeValueForKeyPath:aPath ofObject:_targetObject change:changes context:aContext];
     }
 }
@@ -819,7 +829,9 @@ var kvoNewAndOld        = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
 
 - (void)_sendNotificationsForKey:(CPString)aKey changeOptions:(CPDictionary)changeOptions isBefore:(BOOL)isBefore
 {
-    var changes = _changesForKey[aKey];
+    var changes = _changesForKey[aKey],
+        observers = [_observersForKey[aKey] allValues],
+        observersMinimumOptions = 0;
 
     if (isBefore)
     {
@@ -838,61 +850,78 @@ var kvoNewAndOld        = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
 
         _nestingForKey[aKey] = 1;
 
+        // Get the combined minimum of the ...Old and ...New options for all observers
+        var count = observers ? observers.length : 0;
+
+        while (count--)
+        {
+            var observerInfo = observers[count];
+
+            observersMinimumOptions |= observerInfo.options & kvoNewAndOld;
+        }
+
+        _minOptionsForKey[aKey] = observersMinimumOptions;
         changes = changeOptions;
 
-        var indexes = [changes objectForKey:CPKeyValueChangeIndexesKey],
-            setMutationKind = changes[_CPKeyValueChangeSetMutationKindKey];
-
-        if (setMutationKind)
+        if (observersMinimumOptions & CPKeyValueObservingOptionOld)
         {
-            var setMutationObjects = [changes[_CPKeyValueChangeSetMutationObjectsKey] copy],
-                setExistingObjects = [[_targetObject valueForKey: aKey] copy];
+            var indexes = [changes objectForKey:CPKeyValueChangeIndexesKey],
+                setMutationKind = changes[_CPKeyValueChangeSetMutationKindKey];
 
-            if (setMutationKind == CPKeyValueMinusSetMutation)
+            if (setMutationKind)
             {
-                [setExistingObjects intersectSet: setMutationObjects];
-                [changes setValue:setExistingObjects forKey:CPKeyValueChangeOldKey];
+                var setMutationObjects = [changes[_CPKeyValueChangeSetMutationObjectsKey] copy],
+                    setExistingObjects = [[_targetObject valueForKey: aKey] copy];
+
+                if (setMutationKind == CPKeyValueMinusSetMutation)
+                {
+                    [setExistingObjects intersectSet: setMutationObjects];
+                    [changes setValue:setExistingObjects forKey:CPKeyValueChangeOldKey];
+                }
+                else if (setMutationKind === CPKeyValueIntersectSetMutation || setMutationKind === CPKeyValueSetSetMutation)
+                {
+                    [setExistingObjects minusSet: setMutationObjects];
+                    [changes setValue:setExistingObjects forKey:CPKeyValueChangeOldKey];
+                }
+
+                //for unordered to-many relationships (CPSet) even new values can only be calculated before!!!
+                if (setMutationKind === CPKeyValueUnionSetMutation || setMutationKind === CPKeyValueSetSetMutation)
+                {
+                    [setMutationObjects minusSet: setExistingObjects];
+                    //hide new value (for CPKeyValueObservingOptionPrior messages)
+                    //as long as "didChangeValue..." is not yet called!
+                    changes[_CPKeyValueChangeSetMutationNewValueKey] = setMutationObjects;
+                }
             }
-            else if (setMutationKind === CPKeyValueIntersectSetMutation || setMutationKind === CPKeyValueSetSetMutation)
+            else if (indexes)
             {
-                [setExistingObjects minusSet: setMutationObjects];
-                [changes setValue:setExistingObjects forKey:CPKeyValueChangeOldKey];
+                var type = [changes objectForKey:CPKeyValueChangeKindKey];
+
+                // for ordered to-many relationships, oldvalue is only sensible for replace and remove
+                if (type === CPKeyValueChangeReplacement || type === CPKeyValueChangeRemoval)
+                {
+                    //FIXME: do we need to go through and replace "" with CPNull?
+                    var newValues = [[_targetObject mutableArrayValueForKeyPath:aKey] objectsAtIndexes:indexes];
+                    [changes setValue:newValues forKey:CPKeyValueChangeOldKey];
+                }
+            }
+            else
+            {
+                var oldValue = [_targetObject valueForKey:aKey];
+
+                if (oldValue === nil || oldValue === undefined)
+                    oldValue = [CPNull null];
+
+                [changes setObject:oldValue forKey:CPKeyValueChangeOldKey];
             }
 
-            //for unordered to-many relationships (CPSet) even new values can only be calculated before!!!
-            if (setMutationKind === CPKeyValueUnionSetMutation || setMutationKind === CPKeyValueSetSetMutation)
-            {
-                [setMutationObjects minusSet: setExistingObjects];
-                //hide new value (for CPKeyValueObservingOptionPrior messages)
-                //as long as "didChangeValue..." is not yet called!
-                changes[_CPKeyValueChangeSetMutationNewValueKey] = setMutationObjects;
-            }
-        }
-        else if (indexes)
-        {
-            var type = [changes objectForKey:CPKeyValueChangeKindKey];
-
-            // for ordered to-many relationships, oldvalue is only sensible for replace and remove
-            if (type === CPKeyValueChangeReplacement || type === CPKeyValueChangeRemoval)
-            {
-                //FIXME: do we need to go through and replace "" with CPNull?
-                var newValues = [[_targetObject mutableArrayValueForKeyPath:aKey] objectsAtIndexes:indexes];
-                [changes setValue:newValues forKey:CPKeyValueChangeOldKey];
-            }
-        }
-        else
-        {
-            var oldValue = [_targetObject valueForKey:aKey];
-
-            if (oldValue === nil || oldValue === undefined)
-                oldValue = [CPNull null];
-
-            [changes setObject:oldValue forKey:CPKeyValueChangeOldKey];
         }
 
         [changes setObject:1 forKey:CPKeyValueChangeNotificationIsPriorKey];
-
         _changesForKey[aKey] = changes;
+
+        // Clear ...New option as it should never be sent for a ...Prior option
+        observersMinimumOptions &= ~CPKeyValueObservingOptionNew;
     }
     else
     {
@@ -927,55 +956,97 @@ var kvoNewAndOld        = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
 
         [changes removeObjectForKey:CPKeyValueChangeNotificationIsPriorKey];
 
-        var indexes = [changes objectForKey:CPKeyValueChangeIndexesKey],
-            setMutationKind = changes[_CPKeyValueChangeSetMutationKindKey];
+        observersMinimumOptions = _minOptionsForKey[aKey];
 
-        if (setMutationKind)
+        if (observersMinimumOptions & CPKeyValueObservingOptionNew)
         {
-            //old and new values for unordered to-many relationships can only be calculated before
-            //set recalculated hidden new value as soon as "didChangeValue..." is called!
-            var newValue = changes[_CPKeyValueChangeSetMutationNewValueKey];
-            [changes setValue:newValue forKey:CPKeyValueChangeNewKey];
+            var indexes = [changes objectForKey:CPKeyValueChangeIndexesKey],
+                setMutationKind = changes[_CPKeyValueChangeSetMutationKindKey];
 
-            //delete hidden values
-            delete changes[_CPKeyValueChangeSetMutationNewValueKey];
-            delete changes[_CPKeyValueChangeSetMutationObjectsKey];
-            delete changes[_CPKeyValueChangeSetMutationKindKey];
-        }
-        else if (indexes)
-        {
-            var type = [changes objectForKey:CPKeyValueChangeKindKey];
-
-            // for ordered to-many relationships, newvalue is only sensible for replace and insert
-            if (type == CPKeyValueChangeReplacement || type == CPKeyValueChangeInsertion)
+            if (setMutationKind)
             {
-                //FIXME: do we need to go through and replace "" with CPNull?
-                var newValues = [[_targetObject mutableArrayValueForKeyPath:aKey] objectsAtIndexes:indexes];
-                [changes setValue:newValues forKey:CPKeyValueChangeNewKey];
+                //old and new values for unordered to-many relationships can only be calculated before
+                //set recalculated hidden new value as soon as "didChangeValue..." is called!
+                var newValue = changes[_CPKeyValueChangeSetMutationNewValueKey];
+                [changes setValue:newValue forKey:CPKeyValueChangeNewKey];
+
+                //delete hidden values
+                delete changes[_CPKeyValueChangeSetMutationNewValueKey];
+                delete changes[_CPKeyValueChangeSetMutationObjectsKey];
+                delete changes[_CPKeyValueChangeSetMutationKindKey];
+            }
+            else if (indexes)
+            {
+                var type = [changes objectForKey:CPKeyValueChangeKindKey];
+
+                // for ordered to-many relationships, newvalue is only sensible for replace and insert
+                if (type == CPKeyValueChangeReplacement || type == CPKeyValueChangeInsertion)
+                {
+                    //FIXME: do we need to go through and replace "" with CPNull?
+                    var newValues = [[_targetObject mutableArrayValueForKeyPath:aKey] objectsAtIndexes:indexes];
+                    [changes setValue:newValues forKey:CPKeyValueChangeNewKey];
+                }
+            }
+            else
+            {
+                var newValue = [_targetObject valueForKey:aKey];
+
+                if (newValue === nil || newValue === undefined)
+                    newValue = [CPNull null];
+
+                [changes setObject:newValue forKey:CPKeyValueChangeNewKey];
+            }
+        }
+
+        delete _minOptionsForKey[aKey];
+        delete _changesForKey[aKey];
+    }
+
+    var count = observers ? observers.length : 0,
+        changesCache = {};
+
+    while (count--)
+    {
+        var observerInfo = observers[count],
+            options = observerInfo.options,
+            onlyNewAndOldOptions = options & kvoNewAndOld,
+            observerChanges = nil;
+
+        if (isBefore)
+        {
+            // Only send 'observeValueForKeyPath:' for '...Prior' option when handling 'willChangeValue...'
+            if (options & CPKeyValueObservingOptionPrior)
+            {
+                observerChanges = changes;
+                // The new values are not yet created in the change dictionary so remove ...New option to get a working cache below
+                onlyNewAndOldOptions &= ~CPKeyValueObservingOptionNew;
             }
         }
         else
         {
-            var newValue = [_targetObject valueForKey:aKey];
-
-            if (newValue === nil || newValue === undefined)
-                newValue = [CPNull null];
-
-            [changes setObject:newValue forKey:CPKeyValueChangeNewKey];
+            observerChanges = changes;
         }
 
-        delete _changesForKey[aKey];
-    }
-
-    var observers = [_observersForKey[aKey] allValues],
-        count = observers ? observers.length : 0;
-
-    while (count--)
-    {
-        var observerInfo = observers[count];
-
-        if (!isBefore || (observerInfo.options & CPKeyValueObservingOptionPrior))
-            [observerInfo.observer observeValueForKeyPath:aKey ofObject:_targetObject change:changes context:observerInfo.context];
+        if (observerChanges)
+        {
+            // Don't change the 'change' dictionary when the observer wants the minimum options.
+            // The ...New option is remved above for the ...Prior case
+            if (onlyNewAndOldOptions !== observersMinimumOptions)
+            {
+                // Use a subset of the 'change' dictionary. First try to find it in the cache
+                observerChanges = changesCache[onlyNewAndOldOptions];
+                if (!observerChanges)
+                {
+                    // Not in the cache. Build a new dictionary and store it in the cache
+                    changesCache[onlyNewAndOldOptions] = observerChanges = [changes mutableCopy];
+                    if (!(onlyNewAndOldOptions & CPKeyValueObservingOptionOld))
+                        [observerChanges removeObjectForKey:CPKeyValueChangeOldKey];
+                    if (!(onlyNewAndOldOptions & CPKeyValueObservingOptionNew))
+                        [observerChanges removeObjectForKey:CPKeyValueChangeNewKey];
+                }
+            }
+            [observerInfo.observer observeValueForKeyPath:aKey ofObject:_targetObject change:observerChanges context:observerInfo.context];
+        }
     }
 
     var dependentKeysMap = _nativeClass[DependentKeysKey];
@@ -1226,13 +1297,21 @@ var kvoNewAndOld        = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
 {
     if (aKeyPath === _firstPart)
     {
-        var oldValue = [_value valueForKeyPath:_secondPart],
-            newValue = [_object valueForKeyPath:_firstPart + "." + _secondPart],
-            pathChanges = @{
-                    CPKeyValueChangeNewKey: newValue ? newValue : [CPNull null],
-                    CPKeyValueChangeOldKey: oldValue ? oldValue : [CPNull null],
-                    CPKeyValueChangeKindKey: CPKeyValueChangeSetting,
-                };
+        var pathChanges = [CPMutableDictionary dictionaryWithObject:CPKeyValueChangeSetting forKey:CPKeyValueChangeKindKey];
+
+        if (_options & CPKeyValueObservingOptionOld)
+        {
+            var oldValue = [_value valueForKeyPath:_secondPart];
+
+            [pathChanges setObject:oldValue != null ? oldValue : [CPNull null] forKey:CPKeyValueChangeOldKey];
+        }
+
+        if (_options & CPKeyValueObservingOptionNew)
+        {
+            var newValue = [_object valueForKeyPath:_firstPart + "." + _secondPart];
+
+            [pathChanges setObject:newValue != null ? newValue : [CPNull null] forKey:CPKeyValueChangeNewKey];
+        }
 
         [_observer observeValueForKeyPath:_firstPart + "." + _secondPart ofObject:_object change:pathChanges context:_context];
 

From 5b7afd72e3ee8309ff7920721a92a52b14c7b711 Mon Sep 17 00:00:00 2001
From: Martin Carlberg 
Date: Thu, 9 Oct 2014 19:30:05 +0200
Subject: [PATCH 068/234] Fixed: Test cases now use correct options for KVO
 change dictionaries

---
 Tests/AppKit/CPArrayControllerTest.j       |  85 ++++++++
 Tests/Foundation/CPKVOTest.j               | 120 ++++++++---
 Tests/Foundation/CPKeyValueObservingTest.j | 240 ++++++++++++++++++++-
 3 files changed, 410 insertions(+), 35 deletions(-)

diff --git a/Tests/AppKit/CPArrayControllerTest.j b/Tests/AppKit/CPArrayControllerTest.j
index 5e7f8f982..3365cfdcf 100644
--- a/Tests/AppKit/CPArrayControllerTest.j
+++ b/Tests/AppKit/CPArrayControllerTest.j
@@ -10,6 +10,9 @@
 
     CPArray             observations;
     int                 aCount @accessors;
+
+    CPArray             nameValues @accessors;
+    CPArray             depValues @accessors;
 }
 
 - (CPArray)makeTestArray
@@ -19,6 +22,22 @@
         [Employee employeeWithName:@"Tom" department:[Department departmentWithName:@"CommonJS"]]];
 }
 
+- (CPArray)makeTestArrayMany
+{
+    var a = [[Employee employeeWithName:@"Francisco" department:[Department departmentWithName:@"Cappuccino"]],
+        [Employee employeeWithName:@"Ross" department:[Department departmentWithName:@"Cappuccino"]],
+        [Employee employeeWithName:@"Tom" department:[Department departmentWithName:@"CommonJS"]]];
+
+    var i = 10000;
+
+    while (i--)
+    {
+        [a addObject:[Employee employeeWithName:@"Martin" + i department:[Department departmentWithName:@"Magic Lightning"]]];
+    }
+
+    return a;
+}
+
 - (void)initControllerWithSimpleArray
 {
     // Copy the array to allow the original to be reused.
@@ -1054,6 +1073,54 @@
     [self assert:[1, 2, 3] equals:[arrayController1 arrangedObjects] message:"normal selection"];
 }
 
+/*!
+    Test that bindings are not generation any change dictionary with Old or New values as a observer
+*/
+- (void)testCreationOfOldAndNeChangeDictionaryinObserverProtocol
+{
+    [self initControllerWithContentBinding];
+
+    var arrayController = [self arrayController];
+
+    [self bind:@"nameValues" toObject:arrayController withKeyPath:@"arrangedObjects.name" options:nil];
+
+    countGetName = 0;
+
+    [self setItemsArray:[]];
+    [self assert:0 equals:countGetName];
+
+    countGetName = 0;
+
+    [self setItemsArray:[self makeTestArray]];
+    [self assert:3 equals:countGetName message:@"3 items in array and one '.name' bindings should make 3 accesses to the name property not " + countGetName + " times"];
+}
+
+/*!
+    Test the speed of set an big array when the old was an empty.
+    Also test the speed when an empty array is set and the old is an big
+*/
+- (void)testPerformance
+{
+    [self initControllerWithContentBinding];
+
+    var arrayController = [self arrayController];
+    [self bind:@"nameValues" toObject:arrayController withKeyPath:@"arrangedObjects.name" options:nil];
+    [self bind:@"depValues" toObject:arrayController withKeyPath:@"arrangedObjects.department" options:nil];
+
+    [self setItemsArray:[]];
+    var bigArray = [self makeTestArrayMany];
+
+    var d = new Date();
+    [self setItemsArray:bigArray];
+    var dd = new Date();
+    [self setItemsArray:[]];
+    var ddd = new Date();
+
+    CPLog.warn("\n" + [self className] + " Performance tests");
+    CPLog.warn("EmptyArray -> BigArray (" + [bigArray count] + "): " + (dd - d) + "ms.");
+    CPLog.warn("BigArray (" + [bigArray count] + ") -> EmptyArray: " + (ddd - dd) + "ms.");
+}
+
 - (void)observeValueForKeyPath:keyPath
     ofObject:anActivity
     change:change
@@ -1099,8 +1166,20 @@
     [_contentArray replaceObjectAtIndex:index withObject:anObject];
 }
 
+- (void)setItemsArray:(CPArray)newValue
+{
+    [self setValue:newValue forKey:@"contentArray"];
+}
+
+- (CPArray)itemsArray
+{
+    return [self valueForKey:@"contentArray"];
+}
+
 @end
 
+var countGetName;
+
 @implementation Employee : CPObject
 {
     CPString            _name @accessors(property=name);
@@ -1128,6 +1207,12 @@
     return [CPString stringWithFormat:@"", [self name]];
 }
 
+- (CPString)name
+{
+    countGetName++;
+    return _name;
+}
+
 @end
 
 @implementation Department : CPObject
diff --git a/Tests/Foundation/CPKVOTest.j b/Tests/Foundation/CPKVOTest.j
index 0a4bccba5..1fa905abd 100644
--- a/Tests/Foundation/CPKVOTest.j
+++ b/Tests/Foundation/CPKVOTest.j
@@ -29,7 +29,7 @@
 {
     bob = [[PersonTester alloc] init];
 
-    [bob addObserver:self forKeyPath:@"name" options:nil context:@"testAddObserver"];
+    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:@"testAddObserver"];
 
     [bob setValue:@"bob" forKey:@"name"];
 
@@ -42,7 +42,7 @@
 {
     bob = [[PersonTester alloc] init];
 
-    [bob addObserver:self forKeyPath:@"name" options:nil context:@"testUnobservedKey"];
+    [bob addObserver:self forKeyPath:@"name" options:0 context:@"testUnobservedKey"];
 
     [bob setValue:@"555" forKey:@"phoneNumber"];
 
@@ -54,8 +54,8 @@
 {
     bob = [[PersonTester alloc] init];
 
-    [bob addObserver:self forKeyPath:@"name" options:nil context:@"testAddTwoObservers"];
-    [bob addObserver:[CPObject new] forKeyPath:@"name" options:nil context:@"testAddTwoObservers"];
+    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:@"testAddTwoObservers"];
+    [bob addObserver:[CPObject new] forKeyPath:@"name" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:@"testAddTwoObservers"];
 
     [bob setValue:@"bob" forKey:@"name"];
 
@@ -68,7 +68,7 @@
 {
     bob = [[PersonTester alloc] init];
 
-    [bob addObserver:self forKeyPath:@"phoneNumber" options:nil context:@"testDirectIVarObservation"];
+    [bob addObserver:self forKeyPath:@"phoneNumber" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:@"testDirectIVarObservation"];
 
     [bob setValue:@"555" forKey:@"phoneNumber"];
 
@@ -81,8 +81,8 @@
 {
     bob = [[PersonTester alloc] init];
 
-    [bob addObserver:self forKeyPath:@"name" options:nil context:@"testRemoveObserver"];
-    [bob addObserver:[CPString new] forKeyPath:@"name" options:nil context:@"testRemoveObserver"];
+    [bob addObserver:self forKeyPath:@"name" options:0 context:@"testRemoveObserver"];
+    [bob addObserver:[CPString new] forKeyPath:@"name" options:0 context:@"testRemoveObserver"];
 
     [bob removeObserver:self forKeyPath:@"name"];
 
@@ -96,8 +96,8 @@
     bob = [[PersonTester alloc] init];
     obj = [CPString new];
 
-    [bob addObserver:self forKeyPath:@"name" options:nil context:@"testRemoveOtherObserver"];
-    [bob addObserver:obj forKeyPath:@"name" options:nil context:@"testRemoveOtherObserver"];
+    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:@"testRemoveOtherObserver"];
+    [bob addObserver:obj forKeyPath:@"name" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:@"testRemoveOtherObserver"];
 
     [bob removeObserver:obj forKeyPath:@"name"];
 
@@ -113,8 +113,8 @@
     obj = [CPArray new];
     obj2 = [CPString new];
 
-    [bob addObserver:obj forKeyPath:@"name" options:nil context:@"testRemoveAllObservers"];
-    [bob addObserver:obj2 forKeyPath:@"name" options:nil context:@"testRemoveAllObservers"];
+    [bob addObserver:obj forKeyPath:@"name" options:0 context:@"testRemoveAllObservers"];
+    [bob addObserver:obj2 forKeyPath:@"name" options:0 context:@"testRemoveAllObservers"];
 
     [bob removeObserver:obj forKeyPath:@"name"];
     [bob removeObserver:obj2 forKeyPath:@"name"];
@@ -133,7 +133,7 @@
 
     [dict addObserver:self
            forKeyPath:@"dictionaryKey"
-             options:nil
+             options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld
              context:@"testDictionary"];
 
     [dict setObject:@"Jo Bob Ray" forKey:@"dictionaryKey"];
@@ -147,7 +147,20 @@
 
     bob = [[PersonTester alloc] init];
 
-    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionPrior context:@"testPriorObservationOption"];
+    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionPrior | CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:@"testPriorObservationOption"];
+
+    [bob setValue:@"bob" forKey:@"name"];
+
+    [self assertTrue:_sawPriorObservation message:@"asked for CPKeyValueObservingOptionPrior but did not recieve corresponding notification"];
+}
+
+- (void)testPriorObservationOptionNoOld
+{
+    _sawPriorObservation = NO;
+
+    bob = [[PersonTester alloc] init];
+
+    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionPrior | CPKeyValueObservingOptionNew context:@"testPriorObservationOptionNoOld"];
 
     [bob setValue:@"bob" forKey:@"name"];
 
@@ -162,7 +175,23 @@
 
     bob.name = "paul";
 
-    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionInitial context:@"testInitialObservationOption"];
+    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionInitial | CPKeyValueObservingOptionNew context:@"testInitialObservationOption"];
+    [bob removeObserver:self forKeyPath:@"name"];
+
+    [bob setValue:@"bob" forKey:@"name"];
+
+    [self assertTrue:_sawInitialObservation message:@"asked for CPKeyValueObservingOptionInitial but did not recieve corresponding notification"];
+}
+
+- (void)testInitialObservationOptionNoNew
+{
+    _sawInitialObservation = NO;
+
+    bob = [[PersonTester alloc] init];
+
+    bob.name = "paul";
+
+    [bob addObserver:self forKeyPath:@"name" options:CPKeyValueObservingOptionInitial context:@"testInitialObservationOptionNoNew"];
     [bob removeObserver:self forKeyPath:@"name"];
 
     [bob setValue:@"bob" forKey:@"name"];
@@ -178,8 +207,8 @@
 
     bob.name = "paul";
 
-    [bob addObserver:self forKeyPath:@"bobName" options:0 context:@"testDependentKeyObservation"];
-    [bob addObserver:self forKeyPath:@"twiceRemoved" options:0 context:@"testDependentKeyObservation2"];
+    [bob addObserver:self forKeyPath:@"bobName" options:CPKeyValueObservingOptionOld context:@"testDependentKeyObservation"];
+    [bob addObserver:self forKeyPath:@"twiceRemoved" options:CPKeyValueObservingOptionOld context:@"testDependentKeyObservation2"];
 
     [bob setValue:@"bob" forKey:@"name"];
 
@@ -194,7 +223,7 @@
 
     [cs101 setTeacher:bob];
 
-    [cs101 addObserver:self forKeyPath:@"teacher.name" options:0 context:@"testMultipartKey"];
+    [cs101 addObserver:self forKeyPath:@"teacher.name" options:CPKeyValueObservingOptionNew context:@"testMultipartKey"];
 
     [bob setName:@"bob"];
 
@@ -209,7 +238,7 @@
 
     [bob setValue:focus forKey:@"car"];
 
-    [bob addObserver:self forKeyPath:@"self.car.thisCar.model" options:0 context:@"testMultiPartKeysWhereValuesEvaluateToSelf"];
+    [bob addObserver:self forKeyPath:@"self.car.thisCar.model" options:CPKeyValueObservingOptionNew context:@"testMultiPartKeysWhereValuesEvaluateToSelf"];
 
     [focus setValue:@"ford focus" forKey:@"model"];
 
@@ -225,7 +254,7 @@
     [cs101 setTeacher:bob];
     [bob setValue:focus forKey:@"car"];
 
-    [cs101 addObserver:self forKeyPath:@"teacher.car.model" options:0 context:@"testThreePartKey"];
+    [cs101 addObserver:self forKeyPath:@"teacher.car.model" options:CPKeyValueObservingOptionNew context:@"testThreePartKey"];
 
     [focus setValue:@"ford focus" forKey:@"model"];
     [self assertTrue: _sawObservation message:@"Never recieved an observation"];
@@ -240,7 +269,7 @@
     [cs101 setTeacher:bob];
     [focus setValue:@"2000" forKey:@"year"];
 
-    [cs101 addObserver:self forKeyPath:@"teacher.car.year" options:0 context:@"testThreePartKeyPart2"];
+    [cs101 addObserver:self forKeyPath:@"teacher.car.year" options:CPKeyValueObservingOptionNew context:@"testThreePartKeyPart2"];
 
     [bob setValue:focus forKey:@"car"];
 
@@ -290,7 +319,7 @@
     [a setValue:[E new] forKeyPath:@"b.c.d.e"];
     [a setValue:[F new] forKeyPath:@"b.c.d.e.f"];
 
-    [a addObserver:self forKeyPath:@"b.c.d.e.f" options:0 context:@"testCrazyKeyPathChanges"];
+    [a addObserver:self forKeyPath:@"b.c.d.e.f" options:CPKeyValueObservingOptionNew context:@"testCrazyKeyPathChanges"];
 
     var newD = [D new];
 
@@ -311,7 +340,7 @@
     [a setValue:[E new] forKeyPath:@"b.c.d.e"];
     [a setValue:[F new] forKeyPath:@"b.c.d.e.f"];
 
-    [a addObserver:self forKeyPath:@"b.c.d.e.f" options:0 context:@"testCrazyKeyPathChanges2"];
+    [a addObserver:self forKeyPath:@"b.c.d.e.f" options:CPKeyValueObservingOptionNew context:@"testCrazyKeyPathChanges2"];
 
     [a setValue:nil forKeyPath:@"b.c"];
 
@@ -328,7 +357,7 @@
     [a setValue:[E new] forKeyPath:@"b.c.d.e"];
     [a setValue:[F new] forKeyPath:@"b.c.d.e.f"];
 
-    [a addObserver:self forKeyPath:@"b.c.d.e.f" options:0 context:@"testCrazyKeyPathChanges3"];
+    [a addObserver:self forKeyPath:@"b.c.d.e.f" options:CPKeyValueObservingOptionNew context:@"testCrazyKeyPathChanges3"];
 
     [a setValue:7 forKeyPath:@"b.c.d.e.f"];
 
@@ -341,7 +370,7 @@
 
     [tester setValue:[1, 2, 3, 4] forKey:@"managedObjects"];
 
-    [tester addObserver:self forKeyPath:@"managedObjects" options:0 context:@"testInsertIntoToManyProperty"];
+    [tester addObserver:self forKeyPath:@"managedObjects" options:CPKeyValueObservingOptionNew context:@"testInsertIntoToManyProperty"];
 
     [tester insertObject:5 inManagedObjectsAtIndex:4];
 
@@ -354,7 +383,7 @@
 
     [tester setValue:[1, 2, 3, 4] forKey:@"managedObjects"];
 
-    [tester addObserver:self forKeyPath:@"managedObjects" options:0 context:@"testRemoveFromToManyProperty"];
+    [tester addObserver:self forKeyPath:@"managedObjects" options:CPKeyValueObservingOptionOld context:@"testRemoveFromToManyProperty"];
 
     [tester removeObjectFromManagedObjectsAtIndex:0];
 
@@ -367,7 +396,7 @@
 
     tester.tester = [ToManyTester new];
     [tester.tester setValue:[1, 2, 3, 4] forKey:@"managedObjects"];
-    [tester addObserver:self forKeyPath:@"tester.managedObjects" options:0 context:@"testInsertIntoToManyPropertyIndirectly"];
+    [tester addObserver:self forKeyPath:@"tester.managedObjects" options:CPKeyValueObservingOptionNew context:@"testInsertIntoToManyPropertyIndirectly"];
 
     [tester.tester insertObject:5 inManagedObjectsAtIndex:4];
 
@@ -381,7 +410,7 @@
     tester.tester = [ToManyTester new];
 
     [tester.tester setValue:[1, 2, 3, 4] forKey:@"subviews"];
-    [tester addObserver:self forKeyPath:@"tester.subviews" options:0 context:@"testInsertIntoArrayPropertyIndirectly"];
+    [tester addObserver:self forKeyPath:@"tester.subviews" options:CPKeyValueObservingOptionNew context:@"testInsertIntoArrayPropertyIndirectly"];
 
     [tester.tester insertSubview:5 atIndex:4];
 
@@ -395,7 +424,7 @@
     tester.tester = [ToManyTester new];
 
     [tester.tester setValue:[1, 2, 3, 4] forKey:@"subviews"];
-    [tester addObserver:self forKeyPath:@"tester.subviews" options:0 context:@"testChangeTopLevelObject"];
+    [tester addObserver:self forKeyPath:@"tester.subviews" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:@"testChangeTopLevelObject"];
 
     var newTesterTester = [ToManyTester new];
     [newTesterTester setValue:[5, 6, 7, 8] forKey:@"subviews"];
@@ -554,7 +583,24 @@
             if (!_sawPriorObservation)
             {
                 [self assertTrue:prior message:@"Have not been sent the prior notification, but it should have been sent"];
-                [self assertTrue:oldValue == [CPNull null] message:@"Shoudl be no initial value"];
+                [self assertTrue:oldValue == [CPNull null] message:@"Should be no initial value"];
+                [self assertFalse:newValue message:@"Should be no object for the new value key on the prior notification"];
+                _sawPriorObservation = YES;
+            }
+            else
+            {
+                [self assertFalse:prior message:@"there should be no value for the notification is prior key, that notification was already sent"];
+                [self assertTrue:newValue == "set_bob" message:@"newValue should be: set_bob was: " + newValue];
+            }
+            break;
+
+        case "testPriorObservationOptionNoOld":
+            var prior = [changes objectForKey:CPKeyValueChangeNotificationIsPriorKey];
+
+            if (!_sawPriorObservation)
+            {
+                [self assertTrue:prior message:@"Have not been sent the prior notification, but it should have been sent"];
+                [self assertTrue:oldValue == nil message:@"Should be no old value"];
                 [self assertFalse:newValue message:@"Should be no object for the new value key on the prior notification"];
                 _sawPriorObservation = YES;
             }
@@ -568,8 +614,20 @@
         case "testInitialObservationOption":
             if (!_sawInitialObservation)
             {
-                [self assertTrue:newValue == "paul" message:@"Expected old value to be: paul was: " + oldValue];
-                [self assertFalse:oldValue message:@"Should be no value for new change key on initial observation"];
+                [self assertTrue:newValue == "paul" message:@"Expected new value to be: paul was: " + newValue];
+                [self assertTrue:oldValue == nil message:@"Should be no value for old change key on initial observation"];
+                _sawInitialObservation = YES;
+            }
+            else
+                [self assertFalse:YES message:@"Should never have received this notification"];
+
+            break;
+
+        case "testInitialObservationOptionNoNew":
+            if (!_sawInitialObservation)
+            {
+                [self assertTrue:newValue == nil message:@"New value should not be included"];
+                [self assertTrue:oldValue == nil message:@"Should be no value for old change key on initial observation"];
                 _sawInitialObservation = YES;
             }
             else
diff --git a/Tests/Foundation/CPKeyValueObservingTest.j b/Tests/Foundation/CPKeyValueObservingTest.j
index 82a0e4a7e..9726a7f05 100644
--- a/Tests/Foundation/CPKeyValueObservingTest.j
+++ b/Tests/Foundation/CPKeyValueObservingTest.j
@@ -2,6 +2,7 @@
 @import 
 @import 
 
+var _getCheeseCounter;
 
 @implementation CPKeyValueObservingTest : OJTestCase
 {
@@ -9,6 +10,12 @@
     id              _lastObject;
     CPDictionary    _lastChange;
     id              _lastContext;
+
+    CPString        _secondLastKeyPath;
+    id              _secondLastObject;
+    CPDictionary    _secondLastChange;
+    id              _secondLastContext;
+
 }
 
 - (Class)objectWithMethods:(CPString)aMethodName, ...
@@ -26,9 +33,10 @@
     return [theClass new];
 }
 
-- (void)setup
+- (void)setUp
 {
-    _lastKeyPath = _lastObject = _lastChange = _lastContext = nil;
+    _lastKeyPath = _lastObject = _lastChange = _lastContext = _secondLastKeyPath = _secondLastObject = _secondLastChange = _secondLastContext = nil;
+    _getCheeseCounter = 0;
 }
 
 - (void)testInitialObserving
@@ -38,18 +46,210 @@
 
     [self assert:@"cheese" equals:_lastKeyPath];
     [self assert:tester equals:_lastObject];
-    [self assert:[CPDictionary dictionaryWithObject:@"CHEESE!" forKey:CPKeyValueChangeNewKey] equals:_lastChange];
+    [self assert:@{CPKeyValueChangeNewKey: @"CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:_lastChange];
     [self assert:nil equals:_lastContext];
 }
 
+- (void)testInitialObservingNoNew
+{
+    var tester = [ObservingTester testerWithCheese:@"CHEESE!"];
+    [tester addObserver:self forKeyPath:@"cheese" options:CPKeyValueObservingOptionInitial context:nil];
+
+    [self assert:@"cheese" equals:_lastKeyPath];
+    [self assert:tester equals:_lastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:_lastChange];
+    [self assert:nil equals:_lastContext];
+}
+
+- (void)testSettingObservingPrior
+{
+    var tester = [ObservingTester testerWithCheese:@"CHEESE!"];
+    [tester addObserver:self forKeyPath:@"cheese" options:CPKeyValueObservingOptionPrior context:nil];
+
+    [tester setValue:@"NEW CHEESE!" forKey:@"cheese"];
+
+    [self assert:@"cheese" equals:_secondLastKeyPath];
+    [self assert:tester equals:_secondLastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting, CPKeyValueChangeNotificationIsPriorKey: 1} equals:_secondLastChange];
+    [self assert:nil equals:_secondLastContext];
+
+    [self assert:@"cheese" equals:_lastKeyPath];
+    [self assert:tester equals:_lastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:_lastChange];
+    [self assert:nil equals:_lastContext];
+    [self assert:0 equals:_getCheeseCounter message:@"Get method should never be called"];
+}
+
+- (void)testSettingObservingPriorPlusMoreObservers
+{
+    var tester = [ObservingTester testerWithCheese:@"CHEESE!"];
+    [tester addObserver:self forKeyPath:@"cheese" options:CPKeyValueObservingOptionPrior context:nil];
+
+    var observerWithOld = [[AnotherObserver alloc] init];
+    [tester addObserver:observerWithOld forKeyPath:@"cheese" options:CPKeyValueObservingOptionPrior | CPKeyValueObservingOptionOld context:nil];
+
+    var observerWithNew = [[AnotherObserver alloc] init];
+    [tester addObserver:observerWithNew forKeyPath:@"cheese" options:CPKeyValueObservingOptionPrior | CPKeyValueObservingOptionNew context:nil];
+
+    var observerWithNewAndOld = [[AnotherObserver alloc] init];
+    [tester addObserver:observerWithNewAndOld forKeyPath:@"cheese" options:CPKeyValueObservingOptionPrior | CPKeyValueObservingOptionOld | CPKeyValueObservingOptionNew context:nil];
+
+    [tester setValue:@"NEW CHEESE!" forKey:@"cheese"];
+
+    [self assert:@"cheese" equals:_secondLastKeyPath];
+    [self assert:tester equals:_secondLastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting, CPKeyValueChangeNotificationIsPriorKey: 1} equals:_secondLastChange];
+    [self assert:nil equals:_secondLastContext];
+
+    [self assert:@"cheese" equals:_lastKeyPath];
+    [self assert:tester equals:_lastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:_lastChange];
+    [self assert:nil equals:_lastContext];
+
+    [self assert:@"cheese" equals:observerWithOld._secondLastKeyPath];
+    [self assert:tester equals:observerWithOld._secondLastObject];
+    [self assert:@{CPKeyValueChangeOldKey: @"CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting, CPKeyValueChangeNotificationIsPriorKey: 1} equals:observerWithOld._secondLastChange];
+    [self assert:nil equals:observerWithOld._secondLastContext];
+
+    [self assert:@"cheese" equals:observerWithOld._lastKeyPath];
+    [self assert:tester equals:observerWithOld._lastObject];
+    [self assert:@{CPKeyValueChangeOldKey: @"CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:observerWithOld._lastChange];
+    [self assert:nil equals:observerWithOld._lastContext];
+
+    [self assert:@"cheese" equals:observerWithNew._secondLastKeyPath];
+    [self assert:tester equals:observerWithNew._secondLastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting, CPKeyValueChangeNotificationIsPriorKey: 1} equals:observerWithNew._secondLastChange];
+    [self assert:nil equals:observerWithNew._secondLastContext];
+
+    [self assert:@"cheese" equals:observerWithNew._lastKeyPath];
+    [self assert:tester equals:observerWithNew._lastObject];
+    [self assert:@{CPKeyValueChangeNewKey: @"NEW CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:observerWithNew._lastChange];
+    [self assert:nil equals:observerWithNew._lastContext];
+
+    [self assert:@"cheese" equals:observerWithNewAndOld._secondLastKeyPath];
+    [self assert:tester equals:observerWithNewAndOld._secondLastObject];
+    [self assert:@{CPKeyValueChangeOldKey: @"CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting, CPKeyValueChangeNotificationIsPriorKey: 1} equals:observerWithNewAndOld._secondLastChange];
+    [self assert:nil equals:observerWithNewAndOld._secondLastContext];
+
+    [self assert:@"cheese" equals:observerWithNewAndOld._lastKeyPath];
+    [self assert:tester equals:observerWithNewAndOld._lastObject];
+    [self assert:@{CPKeyValueChangeNewKey: @"NEW CHEESE!", CPKeyValueChangeOldKey: @"CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:observerWithNewAndOld._lastChange];
+    [self assert:nil equals:observerWithNewAndOld._lastContext];
+
+    [self assert:2 equals:_getCheeseCounter message:@"Get method should only be called twice, not " + _getCheeseCounter + " times"];
+}
+
+- (void)testSettingObserving
+{
+    var tester = [ObservingTester testerWithCheese:@"CHEESE!"];
+    [tester addObserver:self forKeyPath:@"cheese" options:0 context:nil];
+
+    [tester setValue:@"NEW CHEESE!" forKey:@"cheese"];
+    [self assert:@"cheese" equals:_lastKeyPath];
+    [self assert:tester equals:_lastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:_lastChange];
+    [self assert:nil equals:_lastContext];
+    [self assert:0 equals:_getCheeseCounter message:@"Get method should never be called"];
+}
+
+- (void)testSettingObservingNewPlusAnotherObserverWithNoNew
+{
+    var tester = [ObservingTester testerWithCheese:@"CHEESE!"];
+    [tester addObserver:self forKeyPath:@"cheese" options:CPKeyValueObservingOptionNew context:nil];
+
+    var anotherObserver = [[AnotherObserver alloc] init];
+    [tester addObserver:anotherObserver forKeyPath:@"cheese" options:0 context:nil];
+
+    [tester setValue:@"NEW CHEESE!" forKey:@"cheese"];
+
+    [self assert:@"cheese" equals:_lastKeyPath];
+    [self assert:tester equals:_lastObject];
+    [self assert:@{CPKeyValueChangeNewKey: @"NEW CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:_lastChange];
+    [self assert:nil equals:_lastContext];
+
+    [self assert:@"cheese" equals:anotherObserver._lastKeyPath];
+    [self assert:tester equals:anotherObserver._lastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:anotherObserver._lastChange];
+    [self assert:nil equals:anotherObserver._lastContext];
+
+    [self assert:1 equals:_getCheeseCounter message:@"Get method should only be called once, not " + _getCheeseCounter + " times"];
+}
+
+- (void)testSettingObservingOldPlusAnotherObserverWithNoOld
+{
+    var tester = [ObservingTester testerWithCheese:@"CHEESE!"];
+    [tester addObserver:self forKeyPath:@"cheese" options:CPKeyValueObservingOptionOld context:nil];
+
+    var anotherObserver = [[AnotherObserver alloc] init];
+    [tester addObserver:anotherObserver forKeyPath:@"cheese" options:0 context:nil];
+
+    [tester setValue:@"NEW CHEESE!" forKey:@"cheese"];
+
+    [self assert:@"cheese" equals:_lastKeyPath];
+    [self assert:tester equals:_lastObject];
+    [self assert:@{CPKeyValueChangeOldKey: @"CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:_lastChange];
+    [self assert:nil equals:_lastContext];
+
+    [self assert:@"cheese" equals:anotherObserver._lastKeyPath];
+    [self assert:tester equals:anotherObserver._lastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:anotherObserver._lastChange];
+    [self assert:nil equals:anotherObserver._lastContext];
+
+    [self assert:1 equals:_getCheeseCounter message:@"Get method should only be called once, not " + _getCheeseCounter + " times"];
+}
+
+- (void)testSettingObservingNewAndOldPlusMoreObserversWithOnlyNewOrOld
+{
+    var tester = [ObservingTester testerWithCheese:@"CHEESE!"];
+    [tester addObserver:self forKeyPath:@"cheese" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:nil];
+
+    var anotherObserver = [[AnotherObserver alloc] init];
+    [tester addObserver:anotherObserver forKeyPath:@"cheese" options:CPKeyValueObservingOptionOld context:nil];
+
+    var yetAnotherObserver = [[AnotherObserver alloc] init];
+    [tester addObserver:yetAnotherObserver forKeyPath:@"cheese" options:CPKeyValueObservingOptionNew context:nil];
+
+    var noNewOrOldObserver = [[AnotherObserver alloc] init];
+    [tester addObserver:noNewOrOldObserver forKeyPath:@"cheese" options:0 context:nil];
+
+    [tester setValue:@"NEW CHEESE!" forKey:@"cheese"];
+
+    [self assert:@"cheese" equals:_lastKeyPath];
+    [self assert:tester equals:_lastObject];
+    [self assert:@{CPKeyValueChangeNewKey: @"NEW CHEESE!", CPKeyValueChangeOldKey: @"CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:_lastChange];
+    [self assert:nil equals:_lastContext];
+
+    [self assert:@"cheese" equals:anotherObserver._lastKeyPath];
+    [self assert:tester equals:anotherObserver._lastObject];
+    [self assert:@{CPKeyValueChangeOldKey: @"CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:anotherObserver._lastChange];
+    [self assert:nil equals:anotherObserver._lastContext];
+
+    [self assert:@"cheese" equals:yetAnotherObserver._lastKeyPath];
+    [self assert:tester equals:yetAnotherObserver._lastObject];
+    [self assert:@{CPKeyValueChangeNewKey: @"NEW CHEESE!", CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:yetAnotherObserver._lastChange];
+    [self assert:nil equals:yetAnotherObserver._lastContext];
+
+    [self assert:@"cheese" equals:noNewOrOldObserver._lastKeyPath];
+    [self assert:tester equals:noNewOrOldObserver._lastObject];
+    [self assert:@{CPKeyValueChangeKindKey: CPKeyValueChangeSetting} equals:noNewOrOldObserver._lastChange];
+    [self assert:nil equals:noNewOrOldObserver._lastContext];
+
+    [self assert:2 equals:_getCheeseCounter message:@"Get method should only be called twice even with many observers, not " + _getCheeseCounter + " times"];
+}
+
 - (void)observeValueForKeyPath:(CPString)aKeyPath
                       ofObject:(id)anObject
                         change:(CPDictionary)aChange
                        context:(id)aContext
 {
+    _secondLastKeyPath = _lastKeyPath;
+    _secondLastObject  = _lastObject;
+    _secondLastChange  = _lastChange;
+    _secondLastContext = _lastContext;
+
     _lastKeyPath = aKeyPath;
     _lastObject  = anObject;
-    _lastChange  = aChange;
+    _lastChange  = [aChange copy];
     _lastContext = aContext;
 }
 
@@ -244,6 +444,7 @@
 
 - (id)cheese
 {
+    _getCheeseCounter++;
     return cheese;
 }
 
@@ -280,3 +481,34 @@
 }
 
 @end
+
+@implementation AnotherObserver : CPObject
+{
+    CPString        _lastKeyPath;
+    id              _lastObject;
+    CPDictionary    _lastChange;
+    id              _lastContext;
+
+    CPString        _secondLastKeyPath;
+    id              _secondLastObject;
+    CPDictionary    _secondLastChange;
+    id              _secondLastContext;
+}
+
+- (void)observeValueForKeyPath:(CPString)aKeyPath
+                      ofObject:(id)anObject
+                        change:(CPDictionary)aChange
+                       context:(id)aContext
+{
+    _secondLastKeyPath = _lastKeyPath;
+    _secondLastObject  = _lastObject;
+    _secondLastChange  = _lastChange;
+    _secondLastContext = _lastContext;
+
+    _lastKeyPath = aKeyPath;
+    _lastObject  = anObject;
+    _lastChange  = [aChange copy];
+    _lastContext = aContext;
+}
+
+@end

From 8eb52f9a888c2183b7ee022eb52cea24ce8bb8c8 Mon Sep 17 00:00:00 2001
From: Antoine Mercadal 
Date: Mon, 20 Oct 2014 19:36:48 -0700
Subject: [PATCH 069/234] FIXED: Previous commit about explicitely define the
 observing options broke the abolity to hide buttons in CPButtonBar

This patch ensure to correctly set the options
---
 AppKit/CPButtonBar.j | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j
index 4dd9db247..c524a2fcb 100644
--- a/AppKit/CPButtonBar.j
+++ b/AppKit/CPButtonBar.j
@@ -28,6 +28,8 @@
 @global CPPopUpButtonStatePullsDown
 @global CPKeyValueChangeOldKey
 @global CPKeyValueChangeNewKey
+@global CPKeyValueObservingOptionNew
+@global CPKeyValueObservingOptionOld
 
 @implementation CPButtonBar : CPView
 {
@@ -137,7 +139,7 @@
 
     for (var i = [_buttons count] - 1; i >= 0; i--)
     {
-        [_buttons[i] addObserver:self forKeyPath:@"hidden" options:nil context:nil];
+        [_buttons[i] addObserver:self forKeyPath:@"hidden" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld context:nil];
         [_buttons[i] setBordered:YES];
     }
 

From e4516c19d30b2cea7cd5b3fc54a0a6838b38295c Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Wed, 22 Oct 2014 15:29:40 -0700
Subject: [PATCH 070/234] Fixed: CPSegmentedControl doesn't support small and
 mini control

Previously, when changing the controlSize of a CPSegmentedControl, Cappuccino didn't have the theme to do that.
Now, Cappuccino supports the controlSize small and mini. Aristo and Aristo2 have new attributes for that.
The attribute theme "default-height" has been replaced by "min-size" and "max-size" (used everywhere else in Cappuccino).
The CPSegmentedControl has now the theme attribute "nib2cib-adjustment-frame".

This pull request fixed alignment issue when adding a CPSegmentedControl from xCode. In the method initWithCode, we didn't care about the divider thickness, now we do. This same method will also add leftovers pixel to have exactly the same size as in xCode. Leftovers pixels are here because FLOOR operation and size of the font.

Manual test in Tests/Manual/CPSegmentedControlTest
Manual test in Tests/Manual/Nib2CibAlignment
---
 AppKit/CPSegmentedControl.j                   |  58 +-
 AppKit/CPTabView.j                            |   2 +-
 AppKit/Themes/Aristo/ThemeDescriptors.j       | 115 +++-
 AppKit/Themes/Aristo2/ThemeDescriptors.j      | 119 +++-
 .../Nib2CibAlignment/Resources/MainMenu.cib   |   2 +-
 .../Nib2CibAlignment/Resources/MainMenu.xib   | 598 +++++++++---------
 Tools/nib2cib/NSSegmentedControl.j            |  19 +-
 7 files changed, 575 insertions(+), 338 deletions(-)

diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j
index 37b4ec316..287ab8f48 100644
--- a/AppKit/CPSegmentedControl.j
+++ b/AppKit/CPSegmentedControl.j
@@ -70,7 +70,6 @@ CPSegmentSwitchTrackingMomentary = 2;
             @"center-segment-bezel-color": [CPNull null],
             @"divider-bezel-color": [CPNull null],
             @"divider-thickness": 1.0,
-            @"default-height": 24.0,
         };
 }
 
@@ -91,6 +90,16 @@ CPSegmentSwitchTrackingMomentary = 2;
     return self;
 }
 
+/*!
+    Sets the control's size.
+    @param aControlSize the control's size
+*/
+- (void)setControlSize:(CPControlSize)aControlSize
+{
+    [super setControlSize:aControlSize];
+    [self _sizeToControlSize];
+}
+
 /*!
     Returns the tag of the selected segment.
 */
@@ -486,7 +495,7 @@ CPSegmentSwitchTrackingMomentary = 2;
 
 - (CGRect)rectForEphemeralSubviewNamed:(CPString)aName
 {
-    var height = [self currentValueForThemeAttribute:@"default-height"],
+    var height = [self currentValueForThemeAttribute:@"min-size"].height,
         contentInset = [self currentValueForThemeAttribute:@"content-inset"],
         bezelInset = [self currentValueForThemeAttribute:@"bezel-inset"],
         bounds = [self bounds];
@@ -551,12 +560,16 @@ CPSegmentSwitchTrackingMomentary = 2;
         return;
 
     var themeState = _themeStates[0],
-        isDisabled = [self hasThemeState:CPThemeStateDisabled];
+        isDisabled = [self hasThemeState:CPThemeStateDisabled],
+        isControlSizeSmall = [self hasThemeState:CPThemeStateControlSizeSmall],
+        isControlSizeMini = [self hasThemeState:CPThemeStateControlSizeMini];
 
     themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState;
+    themeState = isControlSizeSmall ? themeState.and(CPThemeStateControlSizeSmall) : themeState;
+    themeState = isControlSizeMini ? themeState.and(CPThemeStateControlSizeMini) : themeState;
 
     var leftCapColor = [self valueForThemeAttribute:@"left-segment-bezel-color"
-                                            inState:themeState],
+                                inState:themeState],
 
         leftBezelView = [self layoutEphemeralSubviewNamed:@"left-segment-bezel"
                                                positioned:CPWindowBelow
@@ -567,6 +580,8 @@ CPSegmentSwitchTrackingMomentary = 2;
     var themeState = _themeStates[_themeStates.length - 1];
 
     themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState;
+    themeState = isControlSizeSmall ? themeState.and(CPThemeStateControlSizeSmall) : themeState;
+    themeState = isControlSizeMini ? themeState.and(CPThemeStateControlSizeMini) : themeState;
 
     var rightCapColor = [self valueForThemeAttribute:@"right-segment-bezel-color"
                                              inState:themeState],
@@ -582,6 +597,8 @@ CPSegmentSwitchTrackingMomentary = 2;
         var themeState = _themeStates[i];
 
         themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState;
+        themeState = isControlSizeSmall ? themeState.and(CPThemeStateControlSizeSmall) : themeState;
+        themeState = isControlSizeMini ? themeState.and(CPThemeStateControlSizeMini) : themeState;
 
         var bezelColor = [self valueForThemeAttribute:@"center-segment-bezel-color"
                                               inState:themeState],
@@ -592,7 +609,6 @@ CPSegmentSwitchTrackingMomentary = 2;
 
         [bezelView setBackgroundColor:bezelColor];
 
-
         // layout image/title views
         var segment = _segments[i],
             contentView = [self layoutEphemeralSubviewNamed:@"segment-content-" + i
@@ -624,6 +640,8 @@ CPSegmentSwitchTrackingMomentary = 2;
         borderState = (borderState.hasThemeState(CPThemeStateSelected) && !borderState.hasThemeState(CPThemeStateHighlighted)) ? CPThemeStateSelected : CPThemeStateNormal;
 
         borderState = isDisabled ? borderState.and(CPThemeStateDisabled) : borderState;
+        borderState = isControlSizeSmall ? borderState.and(CPThemeStateControlSizeSmall) : borderState;
+        borderState = isControlSizeMini ? borderState.and(CPThemeStateControlSizeMini) : borderState;
 
         var borderColor = [self valueForThemeAttribute:@"divider-bezel-color"
                                                inState:borderState],
@@ -681,7 +699,6 @@ CPSegmentSwitchTrackingMomentary = 2;
 
     // Update control size
     var frame = [self frame];
-
     [self setFrameSize:CGSizeMake(CGRectGetWidth(frame) + delta, CGRectGetHeight(frame))];
 
     // Update segment width
@@ -717,7 +734,7 @@ CPSegmentSwitchTrackingMomentary = 2;
 
 - (CGRect)bezelFrameForSegment:(unsigned)aSegment
 {
-    var height = [self currentValueForThemeAttribute:@"default-height"],
+    var height = [self currentValueForThemeAttribute:@"min-size"].height,
         bezelInset = [self currentValueForThemeAttribute:@"bezel-inset"],
         width = [self widthForSegment:aSegment],
         left = [self _leftOffsetForSegment:aSegment];
@@ -727,7 +744,7 @@ CPSegmentSwitchTrackingMomentary = 2;
 
 - (CGRect)contentFrameForSegment:(unsigned)aSegment
 {
-    var height = [self currentValueForThemeAttribute:@"default-height"],
+    var height = [self currentValueForThemeAttribute:@"min-size"].height,
         contentInset = [self currentValueForThemeAttribute:@"content-inset"],
         width = [self widthForSegment:aSegment],
         left = [self _leftOffsetForSegment:aSegment];
@@ -890,7 +907,6 @@ var CPSegmentedControlSegmentsKey       = "CPSegmentedControlSegmentsKey",
             _trackingMode = CPSegmentSwitchTrackingSelectOne;
 
         // HACK
-
         for (var i = 0; i < _segments.length; i++)
             _themeStates[i] = [_segments[i] selected] ? CPThemeStateSelected : CPThemeStateNormal;
 
@@ -898,12 +914,32 @@ var CPSegmentedControlSegmentsKey       = "CPSegmentedControlSegmentsKey",
         for (var i = 0; i < _segments.length; i++)
             [self tileWithChangedSegment:i];
 
-        var difference = MAX(originalWidth - [self frame].size.width, 0.0),
-            remainingWidth = FLOOR(difference / _segments.length);
+        var thickness = [self currentValueForThemeAttribute:@"divider-thickness"],
+            dividerExtraSpace = ([_segments count] - 1) * thickness,
+            difference = MAX(originalWidth - [self frame].size.width - dividerExtraSpace, 0.0),
+            remainingWidth = FLOOR(difference / _segments.length),
+            widthOfAllSegments = 0;
 
         for (var i = 0; i < _segments.length; i++)
+        {
             [self setWidth:[_segments[i] width] + remainingWidth forSegment:i];
+            widthOfAllSegments += [_segments[i] width];
+        }
 
+        // Here we handle the leftovers pixel, and we will add one pixel to each segment cell till we have the same size as the originalSize.
+        // This is needed to have a perfect/same alignment between our application and xCode.
+        var leftOversPixel = originalWidth - (widthOfAllSegments + dividerExtraSpace);
+
+        // Make sure we don't make an out of range
+        if (leftOversPixel < _segments.length - 1)
+        {
+            for (var i = 0; i < leftOversPixel; i++)
+            {
+                [self setWidth:[_segments[i] width] + 1 forSegment:i];
+            }
+        }
+
+        [self setFrameSize:CGSizeMake(originalWidth, [self frame].size.height)];
         [self tileWithChangedSegment:0];
     }
 
diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j
index 0e3ac7030..75f1d1ad5 100644
--- a/AppKit/CPTabView.j
+++ b/AppKit/CPTabView.j
@@ -94,7 +94,7 @@ var CPTabViewDidSelectTabViewItemSelector           = 1 << 1,
     _tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
     [_tabs setHitTests:NO];
 
-    var height = [_tabs valueForThemeAttribute:@"default-height"];
+    var height = [_tabs valueForThemeAttribute:@"min-size"].height;
     [_tabs setFrameSize:CGSizeMake(0, height)];
 
     _box = [[CPBox alloc] initWithFrame:[self  bounds]];
diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j
index c99f23bd1..3cc69832c 100755
--- a/AppKit/Themes/Aristo/ThemeDescriptors.j
+++ b/AppKit/Themes/Aristo/ThemeDescriptors.j
@@ -2089,6 +2089,52 @@ var themedButtonValues = nil,
         pushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 24.0),
         pushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 24.0);
 
+    var smallCenterBezelColor = PatternColor("segmented-control-bezel-center.png", 1.0, 20.0),
+        smallDividerBezelColor = PatternColor("segmented-control-bezel-divider.png", 1.0, 20.0),
+        smallCenterHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-center.png", 1.0, 20.0),
+        smallDividerHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-divider.png", 1.0, 20.0),
+        smallLeftHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-left.png", 4.0, 20.0),
+        smallRightHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-right.png", 4.0, 20.0),
+        smallInactiveCenterBezelColor = PatternColor("segmented-control-bezel-disabled-center.png", 1.0, 20.0),
+        smallInactiveDividerBezelColor = PatternColor("segmented-control-bezel-disabled-divider.png", 1.0, 20.0),
+        smallInactiveLeftBezelColor = PatternColor("segmented-control-bezel-disabled-left.png", 4.0, 20.0),
+        smallInactiveRightBezelColor = PatternColor("segmented-control-bezel-disabled-right.png", 4.0, 20.0),
+        smallInactiveHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-center.png", 1.0, 20.0),
+        smallInactiveHighlightedDividerBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-divider.png", 1.0, 20.0),
+        smallInactiveHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-left.png", 4.0, 20.0),
+        smallInactiveHighlightedRightBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-right.png", 4.0, 20.0),
+        smallLeftBezelColor = PatternColor("segmented-control-bezel-left.png", 4.0, 20.0),
+        smallRightBezelColor = PatternColor("segmented-control-bezel-right.png", 4.0, 20.0),
+        smallPushedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-center.png", 1.0, 20.0),
+        smallPushedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-left.png", 4.0, 20.0),
+        smallPushedRightBezelColor = PatternColor("segmented-control-bezel-pushed-right.png", 4.0, 20.0),
+        smallPushedHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-center.png", 1.0, 20.0),
+        smallPushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 20.0),
+        smallPushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 20.0);
+
+    var miniCenterBezelColor = PatternColor("segmented-control-bezel-center.png", 1.0, 15.0),
+        miniDividerBezelColor = PatternColor("segmented-control-bezel-divider.png", 1.0, 15.0),
+        miniCenterHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-center.png", 1.0, 15.0),
+        miniDividerHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-divider.png", 1.0, 15.0),
+        miniLeftHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-left.png", 4.0, 15.0),
+        miniRightHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-right.png", 4.0, 15.0),
+        miniInactiveCenterBezelColor = PatternColor("segmented-control-bezel-disabled-center.png", 1.0, 15.0),
+        miniInactiveDividerBezelColor = PatternColor("segmented-control-bezel-disabled-divider.png", 1.0, 15.0),
+        miniInactiveLeftBezelColor = PatternColor("segmented-control-bezel-disabled-left.png", 4.0, 15.0),
+        miniInactiveRightBezelColor = PatternColor("segmented-control-bezel-disabled-right.png", 4.0, 15.0),
+        miniInactiveHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-center.png", 1.0, 15.0),
+        miniInactiveHighlightedDividerBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-divider.png", 1.0, 15.0),
+        miniInactiveHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-left.png", 4.0, 15.0),
+        miniInactiveHighlightedRightBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-right.png", 4.0, 15.0),
+        miniLeftBezelColor = PatternColor("segmented-control-bezel-left.png", 4.0, 15.0),
+        miniRightBezelColor = PatternColor("segmented-control-bezel-right.png", 4.0, 15.0),
+        miniPushedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-center.png", 1.0, 15.0),
+        miniPushedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-left.png", 4.0, 15.0),
+        miniPushedRightBezelColor = PatternColor("segmented-control-bezel-pushed-right.png", 4.0, 15.0),
+        miniPushedHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-center.png", 1.0, 15.0),
+        miniPushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 15.0),
+        miniPushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 15.0);
+
     themedSegmentedControlValues =
         [
             [@"center-segment-bezel-color",     centerBezelColor,                       CPThemeStateNormal],
@@ -2117,9 +2163,75 @@ var themedButtonValues = nil,
             [@"right-segment-bezel-color",      pushedRightBezelColor,                  CPThemeStateHighlighted],
             [@"right-segment-bezel-color",      pushedHighlightedRightBezelColor,       [CPThemeStateHighlighted, CPThemeStateSelected]],
 
+
+            [@"center-segment-bezel-color",     smallCenterBezelColor,                       [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
+            [@"center-segment-bezel-color",     smallInactiveCenterBezelColor,               [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
+            [@"center-segment-bezel-color",     smallInactiveHighlightedCenterBezelColor,    [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"center-segment-bezel-color",     smallCenterHighlightedBezelColor,            [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
+            [@"center-segment-bezel-color",     smallPushedCenterBezelColor,                 [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
+            [@"center-segment-bezel-color",     smallPushedHighlightedCenterBezelColor,      [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"divider-bezel-color",            smallDividerBezelColor,                      [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
+            [@"divider-bezel-color",            smallInactiveDividerBezelColor,              [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
+            [@"divider-bezel-color",            smallInactiveHighlightedDividerBezelColor,   [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"divider-bezel-color",            smallDividerHighlightedBezelColor,           [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
+
+            [@"left-segment-bezel-color",       smallLeftBezelColor,                         [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
+            [@"left-segment-bezel-color",       smallInactiveLeftBezelColor,                 [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
+            [@"left-segment-bezel-color",       smallInactiveHighlightedLeftBezelColor,      [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"left-segment-bezel-color",       smallLeftHighlightedBezelColor,              [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
+            [@"left-segment-bezel-color",       smallPushedLeftBezelColor,                   [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
+            [@"left-segment-bezel-color",       smallPushedHighlightedLeftBezelColor,        [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"right-segment-bezel-color",      smallRightBezelColor,                        [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
+            [@"right-segment-bezel-color",      smallInactiveRightBezelColor,                [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
+            [@"right-segment-bezel-color",      smallInactiveHighlightedRightBezelColor,     [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"right-segment-bezel-color",      smallRightHighlightedBezelColor,             [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
+            [@"right-segment-bezel-color",      smallPushedRightBezelColor,                  [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
+            [@"right-segment-bezel-color",      smallPushedHighlightedRightBezelColor,       [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+
+            [@"center-segment-bezel-color",     miniCenterBezelColor,                       [CPThemeStateControlSizeMini, CPThemeStateNormal]],
+            [@"center-segment-bezel-color",     miniInactiveCenterBezelColor,               [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
+            [@"center-segment-bezel-color",     miniInactiveHighlightedCenterBezelColor,    [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"center-segment-bezel-color",     miniCenterHighlightedBezelColor,            [CPThemeStateControlSizeMini, CPThemeStateSelected]],
+            [@"center-segment-bezel-color",     miniPushedCenterBezelColor,                 [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
+            [@"center-segment-bezel-color",     miniPushedHighlightedCenterBezelColor,      [CPThemeStateControlSizeMini, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"divider-bezel-color",            miniDividerBezelColor,                      [CPThemeStateControlSizeMini, CPThemeStateNormal]],
+            [@"divider-bezel-color",            miniInactiveDividerBezelColor,              [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
+            [@"divider-bezel-color",            miniInactiveHighlightedDividerBezelColor,   [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"divider-bezel-color",            miniDividerHighlightedBezelColor,           [CPThemeStateControlSizeMini, CPThemeStateSelected]],
+
+            [@"left-segment-bezel-color",       miniLeftBezelColor,                         [CPThemeStateControlSizeMini, CPThemeStateNormal]],
+            [@"left-segment-bezel-color",       miniInactiveLeftBezelColor,                 [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
+            [@"left-segment-bezel-color",       miniInactiveHighlightedLeftBezelColor,      [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"left-segment-bezel-color",       miniLeftHighlightedBezelColor,              [CPThemeStateControlSizeMini, CPThemeStateSelected]],
+            [@"left-segment-bezel-color",       miniPushedLeftBezelColor,                   [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
+            [@"left-segment-bezel-color",       miniPushedHighlightedLeftBezelColor,        [CPThemeStateControlSizeMini, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"right-segment-bezel-color",      miniRightBezelColor,                        [CPThemeStateControlSizeMini, CPThemeStateNormal]],
+            [@"right-segment-bezel-color",      miniInactiveRightBezelColor,                [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
+            [@"right-segment-bezel-color",      miniInactiveHighlightedRightBezelColor,     [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"right-segment-bezel-color",      miniRightHighlightedBezelColor,             [CPThemeStateControlSizeMini, CPThemeStateSelected]],
+            [@"right-segment-bezel-color",      miniPushedRightBezelColor,                  [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
+            [@"right-segment-bezel-color",      miniPushedHighlightedRightBezelColor,       [CPThemeStateControlSizeMini, CPThemeStateHighlighted, CPThemeStateSelected]],
+
             [@"content-inset",  CGInsetMake(0.0, 4.0, 0.0, 4.0), CPThemeStateNormal],
             [@"bezel-inset",    CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateNormal],
 
+            [@"min-size",                   CGSizeMake(-1.0, 24.0)],
+            [@"max-size",                   CGSizeMake(-1.0, 24.0)],
+            [@"nib2cib-adjustment-frame",   CGRectMake(1.0, 1.0, -3.0, 0.0)],
+
+            [@"min-size",                   CGSizeMake(-1.0, 20.0),                             CPThemeStateControlSizeSmall],
+            [@"max-size",                   CGSizeMake(-1.0, 20.0),                             CPThemeStateControlSizeSmall],
+            [@"nib2cib-adjustment-frame",   CGRectMake(2.0, 0.0, -4.0, 0.0),                    CPThemeStateControlSizeSmall],
+
+            [@"min-size",                   CGSizeMake(-1.0, 15.0),                             CPThemeStateControlSizeMini],
+            [@"max-size",                   CGSizeMake(-1.0, 15.0),                             CPThemeStateControlSizeMini],
+            [@"nib2cib-adjustment-frame",   CGRectMake(1.0, 0.0, -2.0, 0.0),                    CPThemeStateControlSizeMini],
+
             [@"font",               [CPFont boldSystemFontOfSize:CPFontCurrentSystemSize]],
             [@"text-color",         [CPColor colorWithCalibratedWhite:79.0 / 255.0 alpha:1.0]],
             [@"text-color",         [CPColor colorWithCalibratedWhite:0.6 alpha:1.0], CPThemeStateDisabled],
@@ -2128,8 +2240,7 @@ var themedButtonValues = nil,
             [@"text-shadow-offset", CGSizeMake(0.0, 1.0)],
             [@"line-break-mode",    CPLineBreakByTruncatingTail],
 
-            [@"divider-thickness",  1.0],
-            [@"default-height",     25.0]
+            [@"divider-thickness",  1.0]
         ];
 
     [self registerThemeValues:themedSegmentedControlValues forView:segmentedControl];
diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j
index 1603331f3..c669539b5 100644
--- a/AppKit/Themes/Aristo2/ThemeDescriptors.j
+++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j
@@ -1587,6 +1587,52 @@ var themedButtonValues = nil,
         pushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 25.0),
         pushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 25.0);
 
+    var smallCenterBezelColor = PatternColor("segmented-control-bezel-center.png", 1.0, 20.0),
+        smallDividerBezelColor = PatternColor("segmented-control-bezel-divider.png", 1.0, 20.0),
+        smallCenterHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-center.png", 1.0, 20.0),
+        smallDividerHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-divider.png", 1.0, 20.0),
+        smallLeftHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-left.png", 4.0, 20.0),
+        smallRightHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-right.png", 4.0, 20.0),
+        smallInactiveCenterBezelColor = PatternColor("segmented-control-bezel-disabled-center.png", 1.0, 20.0),
+        smallInactiveDividerBezelColor = PatternColor("segmented-control-bezel-disabled-divider.png", 1.0, 20.0),
+        smallInactiveLeftBezelColor = PatternColor("segmented-control-bezel-disabled-left.png", 4.0, 20.0),
+        smallInactiveRightBezelColor = PatternColor("segmented-control-bezel-disabled-right.png", 4.0, 20.0),
+        smallInactiveHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-center.png", 1.0, 20.0),
+        smallInactiveHighlightedDividerBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-divider.png", 1.0, 20.0),
+        smallInactiveHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-left.png", 4.0, 20.0),
+        smallInactiveHighlightedRightBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-right.png", 4.0, 20.0),
+        smallLeftBezelColor = PatternColor("segmented-control-bezel-left.png", 4.0, 20.0),
+        smallRightBezelColor = PatternColor("segmented-control-bezel-right.png", 4.0, 20.0),
+        smallPushedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-center.png", 1.0, 20.0),
+        smallPushedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-left.png", 4.0, 20.0),
+        smallPushedRightBezelColor = PatternColor("segmented-control-bezel-pushed-right.png", 4.0, 20.0),
+        smallPushedHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-center.png", 1.0, 20.0),
+        smallPushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 20.0),
+        smallPushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 20.0);
+
+    var miniCenterBezelColor = PatternColor("segmented-control-bezel-center.png", 1.0, 15.0),
+        miniDividerBezelColor = PatternColor("segmented-control-bezel-divider.png", 1.0, 15.0),
+        miniCenterHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-center.png", 1.0, 15.0),
+        miniDividerHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-divider.png", 1.0, 15.0),
+        miniLeftHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-left.png", 4.0, 15.0),
+        miniRightHighlightedBezelColor = PatternColor("segmented-control-bezel-highlighted-right.png", 4.0, 15.0),
+        miniInactiveCenterBezelColor = PatternColor("segmented-control-bezel-disabled-center.png", 1.0, 15.0),
+        miniInactiveDividerBezelColor = PatternColor("segmented-control-bezel-disabled-divider.png", 1.0, 15.0),
+        miniInactiveLeftBezelColor = PatternColor("segmented-control-bezel-disabled-left.png", 4.0, 15.0),
+        miniInactiveRightBezelColor = PatternColor("segmented-control-bezel-disabled-right.png", 4.0, 15.0),
+        miniInactiveHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-center.png", 1.0, 15.0),
+        miniInactiveHighlightedDividerBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-divider.png", 1.0, 15.0),
+        miniInactiveHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-left.png", 4.0, 15.0),
+        miniInactiveHighlightedRightBezelColor = PatternColor("segmented-control-bezel-highlighted-disabled-right.png", 4.0, 15.0),
+        miniLeftBezelColor = PatternColor("segmented-control-bezel-left.png", 4.0, 15.0),
+        miniRightBezelColor = PatternColor("segmented-control-bezel-right.png", 4.0, 15.0),
+        miniPushedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-center.png", 1.0, 15.0),
+        miniPushedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-left.png", 4.0, 15.0),
+        miniPushedRightBezelColor = PatternColor("segmented-control-bezel-pushed-right.png", 4.0, 15.0),
+        miniPushedHighlightedCenterBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-center.png", 1.0, 15.0),
+        miniPushedHighlightedLeftBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-left.png", 4.0, 15.0),
+        miniPushedHighlightedRightBezelColor = PatternColor("segmented-control-bezel-pushed-highlighted-right.png", 4.0, 15.0);
+
     themedSegmentedControlValues =
         [
             [@"center-segment-bezel-color",     centerBezelColor,                       CPThemeStateNormal],
@@ -1615,8 +1661,74 @@ var themedButtonValues = nil,
             [@"right-segment-bezel-color",      pushedRightBezelColor,                  CPThemeStateHighlighted],
             [@"right-segment-bezel-color",      pushedHighlightedRightBezelColor,       [CPThemeStateHighlighted, CPThemeStateSelected]],
 
-            [@"content-inset",      CGInsetMake(0.0, 4.0, 0.0, 4.0),                    CPThemeStateNormal],
-            [@"bezel-inset",        CGInsetMake(0.0, 0.0, 0.0, 0.0),                    CPThemeStateNormal],
+
+            [@"center-segment-bezel-color",     smallCenterBezelColor,                       [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
+            [@"center-segment-bezel-color",     smallInactiveCenterBezelColor,               [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
+            [@"center-segment-bezel-color",     smallInactiveHighlightedCenterBezelColor,    [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"center-segment-bezel-color",     smallCenterHighlightedBezelColor,            [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
+            [@"center-segment-bezel-color",     smallPushedCenterBezelColor,                 [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
+            [@"center-segment-bezel-color",     smallPushedHighlightedCenterBezelColor,      [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"divider-bezel-color",            smallDividerBezelColor,                      [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
+            [@"divider-bezel-color",            smallInactiveDividerBezelColor,              [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
+            [@"divider-bezel-color",            smallInactiveHighlightedDividerBezelColor,   [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"divider-bezel-color",            smallDividerHighlightedBezelColor,           [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
+
+            [@"left-segment-bezel-color",       smallLeftBezelColor,                         [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
+            [@"left-segment-bezel-color",       smallInactiveLeftBezelColor,                 [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
+            [@"left-segment-bezel-color",       smallInactiveHighlightedLeftBezelColor,      [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"left-segment-bezel-color",       smallLeftHighlightedBezelColor,              [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
+            [@"left-segment-bezel-color",       smallPushedLeftBezelColor,                   [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
+            [@"left-segment-bezel-color",       smallPushedHighlightedLeftBezelColor,        [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"right-segment-bezel-color",      smallRightBezelColor,                        [CPThemeStateControlSizeSmall, CPThemeStateNormal]],
+            [@"right-segment-bezel-color",      smallInactiveRightBezelColor,                [CPThemeStateControlSizeSmall, CPThemeStateDisabled]],
+            [@"right-segment-bezel-color",      smallInactiveHighlightedRightBezelColor,     [CPThemeStateControlSizeSmall, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"right-segment-bezel-color",      smallRightHighlightedBezelColor,             [CPThemeStateControlSizeSmall, CPThemeStateSelected]],
+            [@"right-segment-bezel-color",      smallPushedRightBezelColor,                  [CPThemeStateControlSizeSmall, CPThemeStateHighlighted]],
+            [@"right-segment-bezel-color",      smallPushedHighlightedRightBezelColor,       [CPThemeStateControlSizeSmall, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+
+            [@"center-segment-bezel-color",     miniCenterBezelColor,                       [CPThemeStateControlSizeMini, CPThemeStateNormal]],
+            [@"center-segment-bezel-color",     miniInactiveCenterBezelColor,               [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
+            [@"center-segment-bezel-color",     miniInactiveHighlightedCenterBezelColor,    [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"center-segment-bezel-color",     miniCenterHighlightedBezelColor,            [CPThemeStateControlSizeMini, CPThemeStateSelected]],
+            [@"center-segment-bezel-color",     miniPushedCenterBezelColor,                 [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
+            [@"center-segment-bezel-color",     miniPushedHighlightedCenterBezelColor,      [CPThemeStateControlSizeMini, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"divider-bezel-color",            miniDividerBezelColor,                      [CPThemeStateControlSizeMini, CPThemeStateNormal]],
+            [@"divider-bezel-color",            miniInactiveDividerBezelColor,              [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
+            [@"divider-bezel-color",            miniInactiveHighlightedDividerBezelColor,   [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"divider-bezel-color",            miniDividerHighlightedBezelColor,           [CPThemeStateControlSizeMini, CPThemeStateSelected]],
+
+            [@"left-segment-bezel-color",       miniLeftBezelColor,                         [CPThemeStateControlSizeMini, CPThemeStateNormal]],
+            [@"left-segment-bezel-color",       miniInactiveLeftBezelColor,                 [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
+            [@"left-segment-bezel-color",       miniInactiveHighlightedLeftBezelColor,      [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"left-segment-bezel-color",       miniLeftHighlightedBezelColor,              [CPThemeStateControlSizeMini, CPThemeStateSelected]],
+            [@"left-segment-bezel-color",       miniPushedLeftBezelColor,                   [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
+            [@"left-segment-bezel-color",       miniPushedHighlightedLeftBezelColor,        [CPThemeStateControlSizeMini, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"right-segment-bezel-color",      miniRightBezelColor,                        [CPThemeStateControlSizeMini, CPThemeStateNormal]],
+            [@"right-segment-bezel-color",      miniInactiveRightBezelColor,                [CPThemeStateControlSizeMini, CPThemeStateDisabled]],
+            [@"right-segment-bezel-color",      miniInactiveHighlightedRightBezelColor,     [CPThemeStateControlSizeMini, CPThemeStateSelected, CPThemeStateDisabled]],
+            [@"right-segment-bezel-color",      miniRightHighlightedBezelColor,             [CPThemeStateControlSizeMini, CPThemeStateSelected]],
+            [@"right-segment-bezel-color",      miniPushedRightBezelColor,                  [CPThemeStateControlSizeMini, CPThemeStateHighlighted]],
+            [@"right-segment-bezel-color",      miniPushedHighlightedRightBezelColor,       [CPThemeStateControlSizeMini, CPThemeStateHighlighted, CPThemeStateSelected]],
+
+            [@"content-inset",              CGInsetMake(0.0, 4.0, 0.0, 4.0),                    CPThemeStateNormal],
+            [@"bezel-inset",                CGInsetMake(0.0, 0.0, 0.0, 0.0),                    CPThemeStateNormal],
+
+            [@"min-size",                   CGSizeMake(-1.0, 25.0)],
+            [@"max-size",                   CGSizeMake(-1.0, 25.0)],
+            [@"nib2cib-adjustment-frame",   CGRectMake(2.0, 2.0, -4.0, 1.0)],
+
+            [@"min-size",                   CGSizeMake(-1.0, 20.0),                             CPThemeStateControlSizeSmall],
+            [@"max-size",                   CGSizeMake(-1.0, 20.0),                             CPThemeStateControlSizeSmall],
+            [@"nib2cib-adjustment-frame",   CGRectMake(2.0, 0.0, -5.0, 0.0),                    CPThemeStateControlSizeSmall],
+
+            [@"min-size",                   CGSizeMake(-1.0, 15.0),                             CPThemeStateControlSizeMini],
+            [@"max-size",                   CGSizeMake(-1.0, 15.0),                             CPThemeStateControlSizeMini],
+            [@"nib2cib-adjustment-frame",   CGRectMake(1.0, 0.0, -2.0, 0.0),                    CPThemeStateControlSizeMini],
 
             [@"font",               [CPFont boldSystemFontOfSize:12.0]],
             [@"text-color",         regularTextColor],
@@ -1635,8 +1747,7 @@ var themedButtonValues = nil,
             [@"text-shadow-offset", CGSizeMake(0.0, 0.0),                               [CPThemeStateSelected, CPThemeStateDisabled]],
             [@"line-break-mode",    CPLineBreakByTruncatingTail],
 
-            [@"divider-thickness",  1.0],
-            [@"default-height",     25.0]
+            [@"divider-thickness",  1.0]
         ];
 
     [self registerThemeValues:themedSegmentedControlValues forView:segmentedControl];
diff --git a/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.cib b/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.cib
index d31525dae..a24e88827 100644
--- a/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.cib
+++ b/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.cib
@@ -1 +1 @@
-280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;129E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;187E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;188E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;152E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;189E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;151E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;191E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;192E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;149E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;193E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;150E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;195E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;196E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;147E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;197E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;198E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;148E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;199E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;200E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;179E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;26E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;187E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;203E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;204E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;205E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;206E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;207E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;208E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;209E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;28E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;211E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;211E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;212E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;E;D;K;10;$classnameS;5;CPBoxK;8;$classesA;S;5;CPBoxS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;216E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;225E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;226E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;227E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;228E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;229E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;230E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;231E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;232E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;233E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;235E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;236E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;237E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;238E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;239E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;240E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;241E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;242E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;243E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;244E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;245E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;218E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;246E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;247E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;249E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;250E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;251E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;252E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;253E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;254E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;255E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;257E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;258E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;259E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;260E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;261E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;262E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;263E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;264E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;265E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;266E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;267E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;268E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;217E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;248E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;269E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;272E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;273E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;274E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;272E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;275E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;276E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;272E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;277E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;278E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;272E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;279E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;280E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;272E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;281E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;282E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;272E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;283E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;284E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;285E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;286E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;287E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;285E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;288E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;289E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;285E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;290E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;291E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;285E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;292E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;293E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;285E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;294E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;295E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;271E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;285E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;210E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;219E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;$aborder-widthD;K;6;CP$UIDd;3;210E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;210E;K;16;$acontent-marginD;K;6;CP$UIDd;3;296E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;222E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;223E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;224E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;210E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;297E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;301E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;7;$aimageD;K;6;CP$UIDd;3;305E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;308E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;312E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;313E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;314E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;7;$aimageD;K;6;CP$UIDd;3;316E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;318E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;322E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;323E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;324E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;325E;K;7;$aimageD;K;6;CP$UIDd;3;326E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;327E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;328E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;329E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;7;$aimageD;K;6;CP$UIDd;3;330E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;308E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;331E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;313E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;332E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;7;$aimageD;K;6;CP$UIDd;3;333E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;334E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;335E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;336E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;337E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;329E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;7;$aimageD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;308E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;339E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;313E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;332E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;7;$aimageD;K;6;CP$UIDd;3;340E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;341E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;342E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;343E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;344E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;345E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;329E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;7;$aimageD;K;6;CP$UIDd;3;346E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;308E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;347E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;313E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;332E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;7;$aimageD;K;6;CP$UIDd;3;348E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;349E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;351E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;353E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;354E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;329E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;355E;K;7;$aimageD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;308E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;353E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;357E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;313E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;332E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;7;$aimageD;K;6;CP$UIDd;3;358E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;353E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;359E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;361E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;363E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;364E;K;7;$aimageD;K;6;CP$UIDd;3;365E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;366E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;367E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;368E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;369E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;370E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;371E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;323E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;372E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;325E;K;7;$aimageD;K;6;CP$UIDd;3;373E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;327E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;374E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;375E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;336E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;376E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;377E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;344E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;378E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;379E;K;7;$aimageD;K;6;CP$UIDd;3;380E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;353E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;381E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;382E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;383E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;384E;K;7;$aimageD;K;6;CP$UIDd;3;385E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;366E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;386E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;388E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;389E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;369E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;390E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;391E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;323E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;393E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;391E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;325E;K;7;$aimageD;K;6;CP$UIDd;3;394E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;327E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;395E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;391E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;396E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;336E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;397E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;342E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;391E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;398E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;344E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;399E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;391E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;400E;K;7;$aimageD;K;6;CP$UIDd;3;401E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;353E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;402E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;388E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;403E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;404E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;388E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;405E;K;7;$aimageD;K;6;CP$UIDd;3;406E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;366E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;407E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;369E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;411E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;323E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;412E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;325E;K;7;$aimageD;K;6;CP$UIDd;3;413E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;327E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;414E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;415E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;336E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;416E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;417E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;344E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;418E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;320E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;419E;K;7;$aimageD;K;6;CP$UIDd;3;420E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;353E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;421E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;422E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;423E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;424E;K;7;$aimageD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;366E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;181E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;306E;K;6;$afontD;K;6;CP$UIDd;3;428E;K;7;$aimageD;K;6;CP$UIDd;3;429E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;353E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;108E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;307E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;108E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;108E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;182E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;435E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;388E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;306E;K;6;$afontD;K;6;CP$UIDd;3;428E;K;7;$aimageD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;353E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;113E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;307E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;182E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;113E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;182E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;113E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;182E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;183E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;437E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;301E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;306E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;7;$aimageD;K;6;CP$UIDd;3;438E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;353E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;117E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;307E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;117E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;117E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;184E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;439E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;440E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;306E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;7;$aimageD;K;6;CP$UIDd;3;442E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;353E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;307E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;184E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;184E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;184E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;185E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;443E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;313E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;314E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;306E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;7;$aimageD;K;6;CP$UIDd;3;444E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;353E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;307E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;185E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;185E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;185E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;186E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;445E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;446E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;447E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;306E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;7;$aimageD;K;6;CP$UIDd;3;448E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;353E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;307E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;186E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;186E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;434E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;431E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;186E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;432E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;449E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;450E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;452E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;453E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;456E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;450E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;457E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;458E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;459E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;461E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;462E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;463E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;464E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;465E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;466E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;468E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;469E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPComboBoxK;8;$classesA;S;10;CPComboBoxS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;470E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;471E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;473E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;474E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;215E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;215E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;475E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;311E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;476E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;477E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;479E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;215E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;215E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;475E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;311E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;480E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;481E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;478E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;482E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;215E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;215E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;475E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;311E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;483E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;484E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;485E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;486E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;215E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;215E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;475E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;311E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;487E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;488E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;485E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;489E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;215E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;215E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;475E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;311E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;490E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;471E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;473E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;309E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;311E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;491E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;215E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;215E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;475E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;311E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;492E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;493E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;494E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;495E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;215E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;455E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;496E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;497E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;498E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;495E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;215E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;499E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;500E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;501E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;498E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;495E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;215E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;499E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;502E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;503E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;504E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;495E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;215E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;499E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;505E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;506E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;504E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;495E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;215E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;499E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;507E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;493E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;494E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;222E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;311E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;495E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;215E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;215E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;499E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;222E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;306E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;508E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;511E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;514E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;210E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;210E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;210E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;515E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;516E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;517E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;514E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;510E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;519E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;511E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;520E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;521E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;210E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;210E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;210E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;515E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;522E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;523E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;521E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;510E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;511E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;520E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;526E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;210E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;210E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;210E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;515E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;527E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;528E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;526E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;510E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;529E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;530E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;511E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;531E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;532E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;210E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;210E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;210E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;515E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;533E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;534E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;532E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;510E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;535E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;536E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;511E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;531E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;537E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;210E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;210E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;210E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;515E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;538E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;539E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;537E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;510E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;540E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;408E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;511E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;512E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;541E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;210E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;210E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;210E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;515E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;542E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;543E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;541E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;510E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;311E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;311E;E;D;K;10;$classnameS;9;CPStepperK;8;$classesA;S;9;CPStepperS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;544E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;545E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;546E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;494E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;547E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;307E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;548E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;549E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;545E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;546E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;498E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;547E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;307E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;548E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;545E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;546E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;504E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;547E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;307E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;548E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;311E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;551E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;552E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;555E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;556E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;552E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;557E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;555E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;558E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;559E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;560E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;555E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;561E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;559E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;562E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;555E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;563E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;564E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;565E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;555E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;566E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;564E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;387E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;567E;K;11;$aalignmentD;K;6;CP$UIDd;3;306E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;555E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;568E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;360E;K;11;$aalignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;7;$aimageD;K;6;CP$UIDd;3;569E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;369E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;310E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;210E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;570E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;571E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;572E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;573E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;574E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;575E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;576E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;574E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;577E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;213E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;E;D;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;578E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;465E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;494E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;582E;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;584E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;498E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;308E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;585E;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;586E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;587E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;504E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;309E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;588E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;589E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;590E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;591E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;590E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;592E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;590E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;593E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;590E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;594E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;590E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;595E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;590E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;596E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;597E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;598E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;597E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;599E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;597E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;600E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;597E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;601E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;597E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;602E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;597E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;603E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;26;{{335, -332}, {1137, 970}}S;22;{{0, 0}, {1680, 1028}}d;1;7S;6;Windowd;1;0S;21;{{0, 0}, {1137, 970}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;E;E;S;6;normalS;6;{1, 1}F;S;20;{{0, 18}, {1137, 5}}S;19;{{0, 0}, {1137, 5}}d;2;34S;3;boxD;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;d;1;2d;1;3S;3;BoxS;20;{{0, 58}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{0, 99}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 139}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 177}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 215}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 255}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 296}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 331}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 372}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 403}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 438}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 530}, {1137, 5}}d;2;10D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 570}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 611}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 651}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 689}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 727}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 767}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 808}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 847}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 887}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{0, 927}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;19;{{18, 0}, {5, 970}}S;18;{{0, 0}, {5, 970}}d;2;20D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{247, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{266, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{359, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{476, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{386, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{625, 0}, {5, 970}}d;2;17D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{724, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{749, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{854, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;20;{{882, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;21;{{1111, 0}, {5, 970}}D;K;6;$classD;K;6;CP$UIDd;3;220E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;604E;E;S;22;{{268, 298}, {94, 24}}S;18;{{0, 0}, {94, 24}}d;2;36S;6;buttonS;25;bordered+controlSizeSmallD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;606E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;609E;E;d;1;4d;1;1S;5;SmallS;0;d;2;14T;S;22;{{388, 298}, {91, 24}}S;18;{{0, 0}, {91, 24}}S;24;bordered+controlSizeMiniD;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;408E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;610E;E;S;4;MiniS;22;{{20, 101}, {230, 24}}S;19;{{0, 0}, {230, 24}}S;36;bordered+controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;611E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;CPSmallSquareBezelStyleS;22;{{20, 141}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;353E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;21;CPRoundRectBezelStyleS;22;{{268, 141}, {94, 24}}S;34;bordered+controlSizeSmall+selectedD;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;609E;E;S;22;{{388, 141}, {91, 24}}S;33;bordered+controlSizeMini+selectedD;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;610E;E;S;21;{{20, 60}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;27;CPTexturedRoundedBezelStyleS;21;{{268, 60}, {94, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;609E;E;S;21;{{388, 60}, {91, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;610E;E;S;21;{{21, 20}, {228, 24}}S;19;{{0, 0}, {228, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;26;CPTexturedSquareBezelStyleS;21;{{268, 20}, {94, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;609E;E;S;21;{{388, 20}, {91, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;610E;E;S;22;{{20, 179}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;353E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;311E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;20;CPRecessedBezelStyled;2;12S;22;{{268, 179}, {94, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;353E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;311E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;22;{{388, 179}, {91, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;610E;E;S;22;{{20, 217}, {230, 24}}S;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;28;CPShadowlessSquareBezelStyleS;22;{{20, 257}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;248E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;613E;E;S;25;CPRegularSquareBezelStyleS;22;{{20, 810}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;19;CPRoundedBezelStyleS;22;{{20, 613}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;22;{{20, 653}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;22;{{20, 572}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;22;{{20, 532}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;22;{{20, 691}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;353E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;311E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;22;{{20, 729}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;22;{{20, 769}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;248E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;613E;E;S;23;{{884, 298}, {230, 24}}d;2;33S;36;bordered+controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 101}, {230, 24}}S;45;bordered+controlSizeRegular+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 141}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;22;{{884, 60}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;22;{{885, 20}, {228, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 179}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;353E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;311E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;23;{{884, 217}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 257}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;248E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;613E;E;S;23;{{884, 810}, {230, 24}}d;1;9D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 613}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 653}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;23;{{884, 572}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 532}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 691}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;353E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;311E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;325E;E;S;23;{{884, 729}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;23;{{884, 769}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;248E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;613E;E;S;22;{{20, 440}, {230, 24}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;611E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;6;Item 1S;17;_popUpItemAction:d;7;1048576S;6;Item 2S;6;Item 3S;23;{{884, 440}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;22;{{268, 440}, {94, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;609E;E;S;23;{{751, 440}, {106, 24}}S;19;{{0, 0}, {106, 24}}S;34;bordered+controlSizeSmall+disabledD;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;609E;E;S;22;{{388, 440}, {91, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;610E;E;S;23;{{627, 440}, {100, 24}}S;19;{{0, 0}, {100, 24}}S;33;bordered+controlSizeMini+disabledD;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;610E;E;S;22;{{17, 330}, {236, 22}}S;19;{{0, 0}, {236, 22}}S;9;textfieldS;35;bezeled+controlSizeRegular+editableS;6;TargetD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;614E;E;S;23;{{881, 330}, {236, 22}}S;56;bezeled+controlSizeRegular+disabled+editable+placeholderS;23;{{265, 330}, {100, 26}}S;19;{{0, 0}, {100, 26}}S;45;bezeled+controlSizeSmall+editable+placeholderS;23;{{748, 330}, {112, 26}}S;19;{{0, 0}, {112, 26}}S;54;bezeled+controlSizeSmall+disabled+editable+placeholderS;22;{{385, 330}, {97, 23}}S;18;{{0, 0}, {97, 23}}S;44;bezeled+controlSizeMini+editable+placeholderS;23;{{624, 330}, {106, 23}}S;19;{{0, 0}, {106, 23}}S;53;bezeled+controlSizeMini+disabled+editable+placeholderS;22;{{17, 846}, {236, 26}}S;19;{{0, 0}, {236, 26}}S;8;comboboxS;63;bezeled+button-bordered+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;E;E;d;1;5S;22;{{266, 846}, {98, 22}}S;18;{{0, 0}, {98, 22}}S;61;bezeled+button-bordered+controlSizeSmall+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;E;E;S;23;{{749, 846}, {110, 22}}S;19;{{0, 0}, {110, 22}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;E;E;S;22;{{386, 847}, {95, 19}}S;18;{{0, 0}, {95, 19}}S;60;bezeled+button-bordered+controlSizeMini+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;E;E;S;23;{{625, 847}, {104, 19}}S;19;{{0, 0}, {104, 19}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;E;E;S;23;{{881, 846}, {236, 26}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;D;K;6;CP$UIDd;3;615E;E;E;S;22;{{20, 889}, {230, 17}}S;19;{{0, 0}, {230, 17}}S;18;controlSizeRegularS;5;LabelS;22;{{268, 889}, {94, 14}}S;18;{{0, 0}, {94, 14}}S;16;controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;616E;E;S;23;{{751, 889}, {106, 14}}S;19;{{0, 0}, {106, 14}}S;22;{{388, 889}, {91, 11}}S;18;{{0, 0}, {91, 11}}S;15;controlSizeMiniS;23;{{627, 889}, {100, 11}}S;19;{{0, 0}, {100, 11}}S;23;{{884, 889}, {230, 17}}S;22;{{20, 926}, {230, 29}}S;19;{{0, 0}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;617E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;210E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;619E;E;S;22;{{269, 926}, {94, 29}}S;18;{{0, 0}, {94, 29}}S;33;bezeled+bordered+controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;619E;E;S;23;{{752, 925}, {106, 29}}S;19;{{0, 0}, {106, 29}}D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;619E;E;S;22;{{388, 926}, {91, 29}}S;18;{{0, 0}, {91, 29}}S;32;bezeled+bordered+controlSizeMiniD;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;619E;E;S;23;{{627, 926}, {100, 29}}S;19;{{0, 0}, {100, 29}}D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;619E;E;S;23;{{884, 926}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;618E;E;D;K;6;$classD;K;6;CP$UIDd;3;513E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;619E;E;S;19;{{20, 374}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperd;5;65540d;3;100S;20;{{269, 374}, {0, 0}}S;20;{{389, 375}, {0, 0}}S;21;{{21, 403}, {61, 18}}S;18;{{0, 0}, {61, 18}}S;9;check-boxS;27;controlSizeRegular+selectedS;5;CheckS;22;{{884, 403}, {61, 18}}S;36;controlSizeRegular+disabled+selectedS;22;{{269, 402}, {77, 20}}S;18;{{0, 0}, {77, 20}}S;25;controlSizeSmall+selectedS;22;{{752, 402}, {77, 20}}S;34;controlSizeSmall+disabled+selectedS;23;{{389, 400}, {112, 22}}S;19;{{0, 0}, {112, 22}}S;24;controlSizeMini+selectedS;23;{{628, 400}, {112, 22}}S;33;controlSizeMini+disabled+selectedS;22;{{20, 298}, {230, 24}}D;K;6;$classD;K;6;CP$UIDd;3;304E;K;4;nameD;K;6;CP$UIDd;3;607E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;608E;K;5;valueD;K;6;CP$UIDd;3;612E;E;S;22;{{268, 613}, {94, 40}}S;18;{{0, 0}, {94, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;620E;D;K;6;CP$UIDd;3;621E;E;E;S;22;{{388, 613}, {91, 40}}S;18;{{0, 0}, {91, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;622E;D;K;6;CP$UIDd;3;623E;E;E;S;22;{{388, 653}, {91, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;624E;D;K;6;CP$UIDd;3;625E;E;E;S;22;{{267, 529}, {97, 23}}S;5;radioS;7;RegularD;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;581E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;626E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;22;{{388, 527}, {94, 25}}S;18;{{0, 0}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;581E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;627E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;22;{{388, 565}, {96, 29}}S;18;{{0, 0}, {96, 29}}D;K;6;$classD;K;6;CP$UIDd;3;581E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;628E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;13;AppControllerS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;E;E;S;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;629E;E;D;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;630E;E;D;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;631E;E;D;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;632E;E;D;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;633E;E;D;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;634E;E;S;22;{"width":0,"height":0}S;17;.Lucida Grande UId;2;11S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;606E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;408E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;d;2;13D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;611E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;3;302E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;605E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;248E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;215E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;307E;E;E;S;4;ItemD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;307E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;307E;D;K;6;CP$UIDd;3;307E;E;E;d;15;-62135510400000d;14;64092297600000D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;172E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;307E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;636E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;636E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;172E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;637E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;639E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;222E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;640E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;641E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;642E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;172E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;644E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;636E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;172E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;637E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;645E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;321E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;222E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;210E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;640E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;641E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;642E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;173E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;307E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;646E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;646E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;173E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;637E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;647E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;222E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;640E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;641E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;642E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;648E;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;173E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;649E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;646E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;173E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;637E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;650E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;303E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;222E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;307E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;640E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;641E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;642E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;648E;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;174E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;307E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;646E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;646E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;174E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;637E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;651E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;222E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;307E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;640E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;641E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;642E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;174E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;210E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;649E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;646E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;174E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;637E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;638E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;653E;K;11;$aalignmentD;K;6;CP$UIDd;3;210E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;222E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;210E;K;6;$afontD;K;6;CP$UIDd;3;315E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;222E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;214E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;214E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;215E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;306E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;222E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;640E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;215E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;307E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;307E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;311E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;222E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;210E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;641E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;642E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;654E;D;K;6;CP$UIDd;3;655E;D;K;6;CP$UIDd;3;656E;D;K;6;CP$UIDd;3;657E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;654E;D;K;6;CP$UIDd;3;655E;D;K;6;CP$UIDd;3;656E;D;K;6;CP$UIDd;3;657E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;654E;D;K;6;CP$UIDd;3;655E;D;K;6;CP$UIDd;3;656E;D;K;6;CP$UIDd;3;657E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;654E;D;K;6;CP$UIDd;3;655E;D;K;6;CP$UIDd;3;656E;D;K;6;CP$UIDd;3;657E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;654E;D;K;6;CP$UIDd;3;655E;D;K;6;CP$UIDd;3;656E;D;K;6;CP$UIDd;3;657E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;654E;D;K;6;CP$UIDd;3;655E;D;K;6;CP$UIDd;3;656E;D;K;6;CP$UIDd;3;657E;E;E;f;18;0.6862745098039216S;18;{{0, 0}, {94, 19}}d;2;18D;K;6;$classD;K;6;CP$UIDd;3;454E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;658E;E;S;46;bordered+controlSizeRegular+roundRect+selectedS;5;Radiof;3;0.5f;4;0.05D;K;6;$classD;K;6;CP$UIDd;3;581E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;659E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;620E;E;S;19;{{0, 21}, {94, 19}}S;37;bordered+controlSizeRegular+roundRectS;18;{{0, 0}, {91, 19}}S;44;bordered+controlSizeSmall+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;581E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;660E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;622E;E;S;19;{{0, 21}, {91, 19}}S;35;bordered+controlSizeSmall+roundRectS;43;bordered+controlSizeMini+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;581E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;661E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;624E;E;S;34;bordered+controlSizeMini+roundRectf;12;0.1843137294f;12;0.6745098233f;12;0.3843137622f;4;0.71D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;210E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;620E;D;K;6;CP$UIDd;3;621E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;622E;D;K;6;CP$UIDd;3;623E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;624E;D;K;6;CP$UIDd;3;625E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
+280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;133E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;201E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;202E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;156E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;156E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;203E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;155E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;205E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;153E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;207E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;154E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;209E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;151E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;211E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;152E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;213E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;214E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;193E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;26E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;201E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;217E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;218E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;219E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;220E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;221E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;222E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;223E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;28E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;225E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;226E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;227E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;E;D;K;10;$classnameS;5;CPBoxK;8;$classesA;S;5;CPBoxS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;231E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;236E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;240E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;241E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;242E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;244E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;245E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;246E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;247E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;248E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;249E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;250E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;251E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;252E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;253E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;254E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;255E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;257E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;258E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;259E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;260E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;261E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;262E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;264E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;265E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;266E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;267E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;268E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;269E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;270E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;271E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;272E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;273E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;274E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;275E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;276E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;277E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;278E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;279E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;280E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;281E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;282E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;283E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;285E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;263E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;286E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;287E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;290E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;291E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;292E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;294E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;295E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;292E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;296E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;297E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;292E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;298E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;299E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;300E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;301E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;302E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;303E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;304E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;305E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;306E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;307E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;308E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;309E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;310E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;311E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;312E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;310E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;313E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;314E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;310E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;315E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;316E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;310E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;317E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;318E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;310E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;320E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;321E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;310E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;322E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;323E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;327E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;7;$aimageD;K;6;CP$UIDd;3;331E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;334E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;338E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;339E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;340E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;7;$aimageD;K;6;CP$UIDd;3;342E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;344E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;348E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;349E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;350E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;351E;K;7;$aimageD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;353E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;354E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;7;$aimageD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;334E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;357E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;339E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;358E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;7;$aimageD;K;6;CP$UIDd;3;359E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;360E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;361E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;363E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;7;$aimageD;K;6;CP$UIDd;3;364E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;334E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;365E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;339E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;358E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;7;$aimageD;K;6;CP$UIDd;3;366E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;367E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;368E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;369E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;370E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;371E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;7;$aimageD;K;6;CP$UIDd;3;372E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;334E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;373E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;339E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;358E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;7;$aimageD;K;6;CP$UIDd;3;374E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;375E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;376E;K;7;$aimageD;K;6;CP$UIDd;3;377E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;378E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;293E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;379E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;380E;K;7;$aimageD;K;6;CP$UIDd;3;381E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;334E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;293E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;382E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;339E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;358E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;7;$aimageD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;293E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;384E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;386E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;388E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;389E;K;7;$aimageD;K;6;CP$UIDd;3;390E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;391E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;392E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;393E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;394E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;395E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;396E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;349E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;397E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;351E;K;7;$aimageD;K;6;CP$UIDd;3;398E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;353E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;399E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;400E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;401E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;402E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;370E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;403E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;404E;K;7;$aimageD;K;6;CP$UIDd;3;405E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;378E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;293E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;406E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;407E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;408E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;409E;K;7;$aimageD;K;6;CP$UIDd;3;410E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;391E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;411E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;413E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;414E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;394E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;415E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;417E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;349E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;418E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;351E;K;7;$aimageD;K;6;CP$UIDd;3;419E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;353E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;420E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;421E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;422E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;368E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;370E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;424E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;425E;K;7;$aimageD;K;6;CP$UIDd;3;426E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;378E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;293E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;427E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;413E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;429E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;413E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;430E;K;7;$aimageD;K;6;CP$UIDd;3;431E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;391E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;434E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;394E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;435E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;349E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;437E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;351E;K;7;$aimageD;K;6;CP$UIDd;3;438E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;353E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;439E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;440E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;441E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;442E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;370E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;443E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;346E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;444E;K;7;$aimageD;K;6;CP$UIDd;3;445E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;378E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;293E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;446E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;447E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;448E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;449E;K;7;$aimageD;K;6;CP$UIDd;3;450E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;391E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;195E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;451E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;332E;K;6;$afontD;K;6;CP$UIDd;3;453E;K;7;$aimageD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;293E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;195E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;196E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;460E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;413E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;332E;K;6;$afontD;K;6;CP$UIDd;3;453E;K;7;$aimageD;K;6;CP$UIDd;3;461E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;293E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;117E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;196E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;117E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;196E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;117E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;196E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;197E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;462E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;327E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;332E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;7;$aimageD;K;6;CP$UIDd;3;463E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;293E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;197E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;197E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;197E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;198E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;464E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;465E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;466E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;332E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;7;$aimageD;K;6;CP$UIDd;3;467E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;293E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;198E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;199E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;468E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;339E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;340E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;332E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;7;$aimageD;K;6;CP$UIDd;3;469E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;293E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;199E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;199E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;199E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;200E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;470E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;471E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;472E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;332E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;7;$aimageD;K;6;CP$UIDd;3;473E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;293E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;133E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;333E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;133E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;133E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;456E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;200E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;457E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;474E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;477E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;478E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;481E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;482E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;483E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;484E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;485E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;486E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;487E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;488E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;489E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;490E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;491E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;492E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;493E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;494E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPComboBoxK;8;$classesA;S;10;CPComboBoxS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;495E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;497E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;498E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;499E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;230E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;230E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;500E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;337E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;501E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;497E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;503E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;504E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;230E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;230E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;500E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;337E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;505E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;506E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;497E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;503E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;507E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;230E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;230E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;500E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;337E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;508E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;497E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;510E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;511E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;230E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;230E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;500E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;337E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;512E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;513E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;497E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;510E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;514E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;230E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;230E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;500E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;337E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;515E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;497E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;498E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;335E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;337E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;516E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;230E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;230E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;500E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;337E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;517E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;518E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;230E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;522E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;230E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;524E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;525E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;526E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;230E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;524E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;527E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;529E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;230E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;524E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;530E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;529E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;230E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;524E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;532E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;518E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;476E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;237E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;337E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;230E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;230E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;524E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;237E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;332E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;533E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;534E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;535E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;536E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;537E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;539E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;224E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;224E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;224E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;540E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;541E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;542E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;539E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;535E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;543E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;544E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;535E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;536E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;545E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;546E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;224E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;224E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;224E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;540E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;547E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;548E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;546E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;535E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;549E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;550E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;535E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;536E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;545E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;551E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;224E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;224E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;224E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;540E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;552E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;553E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;551E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;535E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;554E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;555E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;535E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;536E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;556E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;557E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;224E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;224E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;224E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;540E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;558E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;559E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;557E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;535E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;560E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;561E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;535E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;536E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;556E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;562E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;224E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;224E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;224E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;540E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;563E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;564E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;562E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;535E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;565E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;534E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;535E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;536E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;537E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;566E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;224E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;224E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;224E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;540E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;567E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;568E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;566E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;535E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;337E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;337E;E;D;K;10;$classnameS;9;CPStepperK;8;$classesA;S;9;CPStepperS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;569E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;570E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;571E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;572E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;333E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;573E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;574E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;570E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;571E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;572E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;333E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;573E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;337E;E;D;K;6;$classD;K;6;CP$UIDd;3;164E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;575E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;570E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;571E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;529E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;572E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;333E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;573E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;337E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;168E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;576E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;577E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;578E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;579E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;168E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;581E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;577E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;578E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;582E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;168E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;584E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;578E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;585E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;168E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;586E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;584E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;578E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;587E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;168E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;588E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;589E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;578E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;590E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;168E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;591E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;589E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;578E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;592E;K;11;$aalignmentD;K;6;CP$UIDd;3;332E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;593E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;345E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;325E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;326E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;385E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;7;$aimageD;K;6;CP$UIDd;3;594E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;394E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;336E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;224E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;595E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;596E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;597E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;598E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;599E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;600E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;601E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;599E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;602E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;E;D;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;603E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;604E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;606E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;608E;E;D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;609E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;334E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;610E;E;D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;611E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;612E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;529E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;335E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;613E;E;D;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;183E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;614E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;615E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;616E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;617E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;183E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;618E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;619E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;616E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;620E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;183E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;621E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;622E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;616E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;529E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;623E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;183E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;624E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;615E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;616E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;625E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;626E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;183E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;627E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;619E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;616E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;628E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;629E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;183E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;630E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;622E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;616E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;631E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;632E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;333E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;633E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;292E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;634E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;635E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;292E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;636E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;637E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;292E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;234E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;228E;K;14;$aborder-widthD;K;6;CP$UIDd;3;224E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;224E;K;16;$acontent-marginD;K;6;CP$UIDd;3;638E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;237E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;238E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;239E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;224E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;639E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;641E;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;642E;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;643E;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;644E;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;645E;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;640E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;646E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;647E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;648E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;647E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;649E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;647E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;650E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;647E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;651E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;647E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;652E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;647E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;653E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;27;{{335, -411}, {1137, 1049}}S;22;{{0, 0}, {1680, 1028}}d;1;7S;6;Windowd;1;0S;22;{{0, 1}, {1137, 1049}}S;22;{{0, 0}, {1137, 1049}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;E;E;S;6;normalS;6;{1, 1}F;S;20;{{0, 18}, {1137, 5}}S;19;{{0, 0}, {1137, 5}}d;2;34S;3;boxD;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;d;1;2d;1;3S;3;BoxS;20;{{0, 58}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;20;{{0, 99}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 139}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 177}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 215}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 255}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 296}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 331}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 372}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 403}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 438}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 530}, {1137, 5}}d;2;10D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 570}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 611}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 651}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 689}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 727}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 767}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 808}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 847}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 887}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 927}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{0, 969}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;20;{{18, 0}, {5, 1049}}S;19;{{0, 0}, {5, 1049}}d;2;20D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;20;{{93, 971}, {5, 88}}S;17;{{0, 0}, {5, 88}}d;2;12D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{329, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{438, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{247, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{266, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{359, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{476, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{386, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{625, 0}, {5, 1049}}d;2;17D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{724, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{749, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{854, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{882, 0}, {5, 1055}}S;19;{{0, 0}, {5, 1055}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;22;{{1111, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;22;{{268, 298}, {94, 25}}S;18;{{0, 0}, {94, 25}}d;2;36S;6;buttonS;25;bordered+controlSizeSmallD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;656E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;659E;E;d;1;4d;1;1S;5;SmallS;0;d;2;14T;S;22;{{388, 298}, {91, 25}}S;18;{{0, 0}, {91, 25}}S;24;bordered+controlSizeMiniD;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;433E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;660E;E;S;4;MiniS;22;{{20, 101}, {230, 25}}S;19;{{0, 0}, {230, 25}}S;36;bordered+controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;661E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;CPSmallSquareBezelStyleS;22;{{20, 141}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;293E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;21;CPRoundRectBezelStyleS;22;{{268, 141}, {94, 25}}S;34;bordered+controlSizeSmall+selectedD;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;659E;E;S;22;{{388, 141}, {91, 25}}S;33;bordered+controlSizeMini+selectedD;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;660E;E;S;21;{{20, 60}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;27;CPTexturedRoundedBezelStyleS;21;{{268, 60}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;659E;E;S;21;{{388, 60}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;660E;E;S;21;{{21, 20}, {228, 25}}S;19;{{0, 0}, {228, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;26;CPTexturedSquareBezelStyleS;21;{{268, 20}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;659E;E;S;21;{{388, 20}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;660E;E;S;22;{{20, 179}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;293E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;337E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;20;CPRecessedBezelStyleS;22;{{268, 179}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;293E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;337E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;22;{{388, 179}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;660E;E;S;22;{{20, 217}, {230, 25}}S;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;28;CPShadowlessSquareBezelStyleS;22;{{20, 257}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;263E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;663E;E;S;25;CPRegularSquareBezelStyleS;22;{{20, 810}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;19;CPRoundedBezelStyleS;22;{{20, 613}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;22;{{20, 653}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;22;{{20, 572}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;22;{{20, 532}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;22;{{20, 691}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;293E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;337E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;22;{{20, 729}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;22;{{20, 769}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;263E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;663E;E;S;23;{{884, 298}, {230, 25}}d;2;33S;36;bordered+controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 101}, {230, 25}}S;45;bordered+controlSizeRegular+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 141}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;22;{{884, 60}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;22;{{885, 20}, {228, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 179}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;293E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;337E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;23;{{884, 217}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 257}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;263E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;663E;E;S;23;{{884, 810}, {230, 25}}d;1;9D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 613}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 653}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;23;{{884, 572}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 532}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 691}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;293E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;337E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;351E;E;S;23;{{884, 729}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;23;{{884, 769}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;263E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;663E;E;S;22;{{20, 440}, {230, 25}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;661E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;6;Item 1S;17;_popUpItemAction:d;7;1048576S;6;Item 2S;6;Item 3S;23;{{884, 440}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;22;{{268, 440}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;659E;E;S;23;{{751, 440}, {106, 25}}S;19;{{0, 0}, {106, 25}}S;34;bordered+controlSizeSmall+disabledD;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;659E;E;S;22;{{388, 440}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;660E;E;S;23;{{627, 440}, {100, 25}}S;19;{{0, 0}, {100, 25}}S;33;bordered+controlSizeMini+disabledD;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;660E;E;S;22;{{16, 330}, {238, 22}}S;19;{{0, 0}, {238, 22}}S;9;textfieldS;35;bezeled+controlSizeRegular+editableS;6;TargetD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;664E;E;S;23;{{880, 330}, {238, 22}}S;56;bezeled+controlSizeRegular+disabled+editable+placeholderS;23;{{265, 330}, {101, 26}}S;19;{{0, 0}, {101, 26}}S;45;bezeled+controlSizeSmall+editable+placeholderS;23;{{748, 330}, {113, 26}}S;19;{{0, 0}, {113, 26}}S;54;bezeled+controlSizeSmall+disabled+editable+placeholderS;22;{{384, 330}, {99, 23}}S;18;{{0, 0}, {99, 23}}S;44;bezeled+controlSizeMini+editable+placeholderS;23;{{623, 330}, {108, 23}}S;19;{{0, 0}, {108, 23}}S;53;bezeled+controlSizeMini+disabled+editable+placeholderS;22;{{16, 846}, {238, 26}}S;19;{{0, 0}, {238, 26}}S;8;comboboxS;63;bezeled+button-bordered+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;E;E;d;1;5S;23;{{264, 846}, {102, 22}}S;19;{{0, 0}, {102, 22}}S;61;bezeled+button-bordered+controlSizeSmall+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;E;E;S;23;{{747, 846}, {114, 22}}S;19;{{0, 0}, {114, 22}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;E;E;S;22;{{384, 846}, {99, 19}}S;18;{{0, 0}, {99, 19}}S;60;bezeled+button-bordered+controlSizeMini+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;E;E;S;23;{{623, 846}, {108, 19}}S;19;{{0, 0}, {108, 19}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;E;E;S;23;{{880, 846}, {238, 26}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;D;K;6;CP$UIDd;3;665E;E;E;S;22;{{20, 889}, {230, 17}}S;19;{{0, 0}, {230, 17}}S;18;controlSizeRegularS;5;LabelS;22;{{268, 889}, {94, 14}}S;18;{{0, 0}, {94, 14}}S;16;controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;666E;E;S;23;{{751, 889}, {106, 14}}S;19;{{0, 0}, {106, 14}}S;22;{{388, 889}, {91, 11}}S;18;{{0, 0}, {91, 11}}S;15;controlSizeMiniS;23;{{627, 889}, {100, 11}}S;19;{{0, 0}, {100, 11}}S;23;{{884, 889}, {230, 17}}S;22;{{20, 926}, {230, 29}}S;19;{{0, 0}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;667E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;224E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;668E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;669E;E;S;22;{{268, 926}, {93, 29}}S;18;{{0, 0}, {93, 29}}S;33;bezeled+bordered+controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;668E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;669E;E;S;23;{{751, 925}, {105, 29}}S;19;{{0, 0}, {105, 29}}D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;668E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;669E;E;S;22;{{388, 926}, {91, 29}}S;18;{{0, 0}, {91, 29}}S;32;bezeled+bordered+controlSizeMiniD;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;668E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;669E;E;S;23;{{627, 926}, {100, 29}}S;19;{{0, 0}, {100, 29}}D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;668E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;669E;E;S;23;{{884, 926}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;668E;E;D;K;6;$classD;K;6;CP$UIDd;3;538E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;669E;E;S;19;{{20, 374}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperd;5;65540d;3;100S;20;{{269, 374}, {0, 0}}S;20;{{389, 375}, {0, 0}}S;21;{{17, 402}, {71, 21}}S;18;{{0, 0}, {71, 21}}S;9;check-boxS;27;controlSizeRegular+selectedS;5;CheckS;22;{{880, 402}, {71, 21}}S;36;controlSizeRegular+disabled+selectedS;22;{{266, 402}, {62, 21}}S;18;{{0, 0}, {62, 21}}S;25;controlSizeSmall+selectedS;22;{{749, 402}, {62, 21}}S;34;controlSizeSmall+disabled+selectedS;22;{{386, 400}, {97, 22}}S;18;{{0, 0}, {97, 22}}S;24;controlSizeMini+selectedS;22;{{625, 400}, {97, 22}}S;33;controlSizeMini+disabled+selectedS;22;{{20, 298}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;330E;K;4;nameD;K;6;CP$UIDd;3;657E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;658E;K;5;valueD;K;6;CP$UIDd;3;662E;E;S;22;{{268, 613}, {94, 40}}S;18;{{0, 0}, {94, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;670E;D;K;6;CP$UIDd;3;671E;E;E;S;22;{{388, 613}, {91, 40}}S;18;{{0, 0}, {91, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;672E;D;K;6;CP$UIDd;3;673E;E;E;S;22;{{388, 653}, {91, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;674E;D;K;6;CP$UIDd;3;675E;E;E;S;22;{{267, 529}, {97, 23}}S;18;{{0, 0}, {97, 23}}S;5;radioS;7;RegularD;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;607E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;676E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;22;{{386, 527}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;607E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;677E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;22;{{386, 565}, {96, 29}}S;18;{{0, 0}, {96, 29}}D;K;6;$classD;K;6;CP$UIDd;3;607E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;678E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;21;{{21, 971}, {76, 25}}S;18;{{0, 0}, {76, 25}}S;17;segmented-controlD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;680E;D;K;6;CP$UIDd;3;681E;E;E;S;22;{{268, 971}, {63, 20}}S;18;{{0, 0}, {63, 20}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;682E;D;K;6;CP$UIDd;3;683E;E;E;S;22;{{388, 971}, {53, 15}}S;18;{{0, 0}, {53, 15}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;684E;D;K;6;CP$UIDd;3;685E;E;E;S;22;{{884, 971}, {76, 25}}S;27;controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;686E;D;K;6;CP$UIDd;3;687E;E;E;S;22;{{751, 971}, {63, 20}}S;25;controlSizeSmall+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;688E;D;K;6;CP$UIDd;3;689E;E;E;S;22;{{627, 971}, {53, 15}}S;24;controlSizeMini+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;690E;D;K;6;CP$UIDd;3;691E;E;E;S;21;{{677, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{812, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;21;{{957, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;235E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;654E;E;S;13;AppControllerS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;E;E;S;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;692E;E;D;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;693E;E;D;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;694E;E;D;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;695E;E;D;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;696E;E;D;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;697E;E;S;22;{"width":0,"height":0}S;29;.Helvetica Neue DeskInterfaced;2;11S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;656E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;433E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;d;2;13D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;661E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;328E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;655E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;263E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;230E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;333E;E;E;S;4;ItemD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;698E;D;K;6;CP$UIDd;3;698E;D;K;6;CP$UIDd;3;698E;D;K;6;CP$UIDd;3;333E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;333E;D;K;6;CP$UIDd;3;333E;E;E;d;15;-62135510400000d;14;64092297600000D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;176E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;333E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;699E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;699E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;176E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;700E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;701E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;702E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;237E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;703E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;704E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;705E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;706E;E;D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;176E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;707E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;699E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;176E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;700E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;701E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;708E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;347E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;237E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;224E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;703E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;704E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;705E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;706E;E;D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;177E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;333E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;709E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;709E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;177E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;700E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;701E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;710E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;237E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;703E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;704E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;705E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;711E;E;D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;177E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;712E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;709E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;177E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;700E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;701E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;713E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;329E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;237E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;333E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;703E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;704E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;705E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;711E;E;D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;178E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;333E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;714E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;714E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;178E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;700E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;701E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;715E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;237E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;333E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;703E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;704E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;705E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;716E;E;D;K;6;$classD;K;6;CP$UIDd;3;179E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;178E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;224E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;717E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;714E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;178E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;700E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;701E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;605E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;718E;K;11;$aalignmentD;K;6;CP$UIDd;3;224E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;224E;K;6;$afontD;K;6;CP$UIDd;3;341E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;237E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;229E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;230E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;224E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;332E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;237E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;703E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;230E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;333E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;333E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;337E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;704E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;705E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;716E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;719E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;230E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;224E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;720E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;337E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;333E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;719E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;230E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;224E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;720E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;337E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;333E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;719E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;230E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;224E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;720E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;337E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;333E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;719E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;230E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;224E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;720E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;337E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;333E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;719E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;230E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;230E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;224E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;720E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;337E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;333E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;719E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;230E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;230E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;224E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;3;679E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;720E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;337E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;337E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;333E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;721E;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;D;K;6;CP$UIDd;3;724E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;721E;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;D;K;6;CP$UIDd;3;724E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;721E;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;D;K;6;CP$UIDd;3;724E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;721E;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;D;K;6;CP$UIDd;3;724E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;721E;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;D;K;6;CP$UIDd;3;724E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;721E;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;D;K;6;CP$UIDd;3;724E;E;E;f;18;0.6862745098039216S;18;{{0, 0}, {58, 18}}d;2;18D;K;6;$classD;K;6;CP$UIDd;3;479E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;725E;E;S;46;bordered+controlSizeRegular+roundRect+selectedS;5;Radiof;3;0.5f;4;0.05D;K;6;$classD;K;6;CP$UIDd;3;607E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;726E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;670E;E;S;19;{{0, 20}, {58, 18}}S;37;bordered+controlSizeRegular+roundRectS;18;{{0, 0}, {53, 18}}S;44;bordered+controlSizeSmall+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;607E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;727E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;672E;E;S;19;{{0, 20}, {53, 18}}S;35;bordered+controlSizeSmall+roundRectS;18;{{0, 0}, {48, 18}}S;43;bordered+controlSizeMini+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;607E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;728E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;674E;E;S;19;{{0, 20}, {48, 18}}S;34;bordered+controlSizeMini+roundRectS;1;TS;4;Testf;12;0.1843137294f;12;0.6745098233f;12;0.3843137622f;4;0.71D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;224E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;670E;D;K;6;CP$UIDd;3;671E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;672E;D;K;6;CP$UIDd;3;673E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;674E;D;K;6;CP$UIDd;3;675E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.xib b/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.xib
index e76d33bf0..3405858be 100644
--- a/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.xib
+++ b/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.xib
@@ -1,8 +1,8 @@
 
-
+
     
         
-        
+        
     
     
         
@@ -11,263 +11,291 @@
             
         
         
-        
+        
         
             
             
-            
+            
             
             
-                
+                
                 
                 
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
+                    
+                        
+                        
+                        
+                        
+                        
+                    
+                    
+                        
+                        
+                        
+                        
+                        
+                    
+                    
                         
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
-                        
-                        
-                        
-                        
-                    
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
+                        
+                        
+                        
+                        
+                    
+                    
+                        
+                        
+                        
+                        
+                        
+                    
+                    
+                        
+                        
+                        
+                        
+                        
+                    
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
-                    
-                        
+                    
+                        
                         
                         
                         
                         
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
-                        
+                        
                         
                         
                             
@@ -610,7 +638,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -625,7 +653,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -640,7 +668,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -655,7 +683,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -670,7 +698,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -685,7 +713,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -694,7 +722,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -703,7 +731,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -712,7 +740,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -721,7 +749,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -730,7 +758,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -739,7 +767,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -753,7 +781,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -767,7 +795,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -781,7 +809,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -795,7 +823,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -809,7 +837,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -823,7 +851,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -837,7 +865,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -851,7 +879,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -865,7 +893,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -879,7 +907,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -893,7 +921,7 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
@@ -907,220 +935,100 @@
                         
                     
                     
-                        
+                        
                         
                         
                             
                             
-                                
-                                
-                                    
-VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
-y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
-5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
-8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
-AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
-DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
-HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
-KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
-OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
-Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
-VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
-Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
-cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
-f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
-
-                                
+                                
+                                
                             
                             
                             
                         
                     
                     
-                        
+                        
                         
                         
                             
                             
-                                
-                                
-                                    
-VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
-y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
-5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
-8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
-AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
-DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
-HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
-KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
-OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
-Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
-VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
-Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
-cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
-f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
-
-                                
+                                
+                                
                             
                             
                             
                         
                     
                     
-                        
+                        
                         
                         
                             
                             
-                                
-                                
-                                    
-VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
-y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
-5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
-8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
-AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
-DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
-HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
-KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
-OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
-Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
-VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
-Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
-cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
-f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
-
-                                
+                                
+                                
                             
                             
                             
                         
                     
                     
-                        
+                        
                         
                         
                             
                             
-                                
-                                
-                                    
-VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
-y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
-5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
-8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
-AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
-DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
-HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
-KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
-OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
-Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
-VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
-Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
-cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
-f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
-
-                                
+                                
+                                
                             
                             
                             
                         
                     
                     
-                        
+                        
                         
                         
                             
                             
-                                
-                                
-                                    
-VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
-y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
-5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
-8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
-AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
-DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
-HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
-KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
-OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
-Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
-VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
-Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
-cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
-f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
-
-                                
+                                
+                                
                             
                             
                             
                         
                     
                     
-                        
+                        
                         
                         
                             
                             
-                                
-                                
-                                    
-VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
-y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
-5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
-8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
-AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
-DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
-HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
-KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
-OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
-Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
-VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
-Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
-cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
-f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
-AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
-
-                                
+                                
+                                
                             
                             
                             
                         
                     
                     
-                        
+                        
                         
                         
                     
                     
-                        
+                        
                         
                         
                     
                     
-                        
+                        
                         
                         
                     
                     
                     
                     
                     
                     
                     
                     
                     
-                        
+                        
                         
                         
-                        
+                        
                         
                         
                             
@@ -1199,10 +1107,10 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
                         
                     
                     
-                        
+                        
                         
                         
-                        
+                        
                         
                         
                             
@@ -1222,10 +1130,10 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
                         
                     
                     
-                        
+                        
                         
                         
-                        
+                        
                         
                         
                             
@@ -1245,7 +1153,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
                         
                     
                     
                     
                     
+                    
+                        
+                        
+                        
+                            
+                            
+                                
+                                
+                            
+                        
+                    
+                    
+                        
+                        
+                        
+                            
+                            
+                                
+                                
+                            
+                        
+                    
+                    
+                        
+                        
+                        
+                            
+                            
+                                
+                                
+                            
+                        
+                    
+                    
+                        
+                        
+                        
+                            
+                            
+                                
+                                
+                            
+                        
+                    
+                    
+                        
+                        
+                        
+                            
+                            
+                                
+                                
+                            
+                        
+                    
+                    
+                        
+                        
+                        
+                            
+                            
+                                
+                                
+                            
+                        
+                    
+                    
+                        
+                        
+                        
+                        
+                        
+                    
+                    
+                        
+                        
+                        
+                        
+                        
+                    
+                    
+                        
+                        
+                        
+                        
+                        
+                    
                 
             
+            
         
         
             
diff --git a/Tools/nib2cib/NSSegmentedControl.j b/Tools/nib2cib/NSSegmentedControl.j
index 95ca6902c..0136ca3b3 100644
--- a/Tools/nib2cib/NSSegmentedControl.j
+++ b/Tools/nib2cib/NSSegmentedControl.j
@@ -41,14 +41,6 @@
 {
     [super NS_initWithCell:cell];
 
-    var frame = [self frame],
-        originalWidth = frame.size.width;
-
-    frame.size.width = 0;
-    frame.origin.x = MAX(frame.origin.x - 4.0, 0.0);
-
-    [self setFrame:frame];
-
     _segments           = [cell segments];
     _selectedSegment    = [cell selectedSegment];
     _segmentStyle       = [cell segmentStyle];
@@ -57,23 +49,13 @@
     [self setValue:CPCenterTextAlignment forThemeAttribute:@"alignment"];
 
     // HACK
-
     for (var i = 0; i < _segments.length; i++)
     {
         _themeStates[i] = _segments[i].selected ? CPThemeStateSelected : CPThemeStateNormal;
-
         [self tileWithChangedSegment:i];
     }
 
-    // Adjust for differences between Cocoa and Cappuccino widget framing.
-    frame.origin.x += 6;
-
-    if ([[Nib2Cib defaultTheme] name] == @"Aristo2")
-        frame.size.height += 1;
-
-    frame.size.width = originalWidth;
     [self setEnabled:[cell isEnabled]];
-    [self setFrame:frame];
 }
 
 @end
@@ -90,6 +72,7 @@
     {
         var cell = [aCoder decodeObjectForKey:@"NSCell"];
         [self NS_initWithCell:cell];
+        [self _adjustNib2CibSize];
     }
 
     return self;

From 6d3f430b24f53f386d833b2275801cea16178b5b Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Wed, 22 Oct 2014 17:27:46 -0700
Subject: [PATCH 071/234] Fixed: constructor of CPDate can take string param

Previously, when making a CPDate with some constructors, we could pass a string or nil to create a date. For example it was allowed to do var date = [CPDate dateWithTimeIntervalSince1970:"10"];

Now this is not possible anymore and it works like in Cocoa, only number are authorized.
---
 Foundation/CPDate.j | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j
index 736ca9ff2..62eebc25c 100644
--- a/Foundation/CPDate.j
+++ b/Foundation/CPDate.j
@@ -74,24 +74,36 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0));
 
 - (id)initWithTimeIntervalSinceNow:(CPTimeInterval)seconds
 {
+    if (!_isNumberType(seconds))
+        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSinceNow: has to be an integer"];
+
     self = new Date((new Date()).getTime() + seconds * 1000);
     return self;
 }
 
 - (id)initWithTimeIntervalSince1970:(CPTimeInterval)seconds
 {
+    if (!_isNumberType(seconds))
+        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSince1970: has to be an integer"];
+
     self = new Date(seconds * 1000);
     return self;
 }
 
 - (id)initWithTimeIntervalSinceReferenceDate:(CPTimeInterval)seconds
 {
+    if (!_isNumberType(seconds))
+        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSinceReferenceDate: has to be an integer"];
+
     self = [self initWithTimeInterval:seconds sinceDate:CPDateReferenceDate];
     return self;
 }
 
 - (id)initWithTimeInterval:(CPTimeInterval)seconds sinceDate:(CPDate)refDate
 {
+    if (!_isNumberType(seconds))
+        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeInterval:sinceDate: has to be an integer"];
+
     self = new Date(refDate.getTime() + seconds * 1000);
     return self;
 }
@@ -275,3 +287,11 @@ Date.parseISO8601 = function (date)
 };
 
 Date.prototype.isa = CPDate;
+
+function _isNumberType(value)
+{
+    if (typeof value === 'number')
+        return YES;
+    else
+        return NO;
+}
\ No newline at end of file

From cbef08eeffbe5c0e1a9d152391d6b97576a0e4fe Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Thu, 23 Oct 2014 10:59:54 -0700
Subject: [PATCH 072/234] Fixed: prototype of method
 unfocusedSelectionGradientColors is void

Previously the prototype method of unfocusedSelectionGradientColors as void, now it's CPColor
---
 AppKit/CPTableView.j | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index 0ec455382..2fe528208 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -962,7 +962,7 @@ NOT YET IMPLEMENTED
 
 */
 
-- (void)unfocusedSelectionGradientColors
+- (CPColor)unfocusedSelectionGradientColors
 {
     if (!_unfocusedSourceListSelectionColor)
     {

From fcd2b778ea1bcdf482f009ec36634d3f61ebc58e Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Thu, 23 Oct 2014 11:53:46 -0700
Subject: [PATCH 073/234] Fixed: CPWindow keeps a reference of its
 firstResponder when closing a window

Previously, when closing a CPWindow, the window kept a reference of the firstResponder. This things raised an issue when opening a window again and asking the window to make the first responder to the same element as the one we had.

Now when closing a window, the window will update its firstResponder to nil.
---
 AppKit/CPWindow/CPWindow.j | 1 +
 1 file changed, 1 insertion(+)

diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j
index 70fb8034e..f770fc642 100644
--- a/AppKit/CPWindow/CPWindow.j
+++ b/AppKit/CPWindow/CPWindow.j
@@ -981,6 +981,7 @@ CPTexturedBackgroundWindowMask
     [_platformWindow order:CPWindowOut window:self relativeTo:nil];
 #endif
 
+    [self makeFirstResponder:nil];
     [self _updateMainAndKeyWindows];
 }
 

From 7af50c395139e754caa57ef4455549ad47f11af7 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Thu, 23 Oct 2014 12:53:10 -0700
Subject: [PATCH 074/234] Fixed: style in CPSegmentedControl

---
 AppKit/CPSegmentedControl.j | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j
index 287ab8f48..e95993152 100644
--- a/AppKit/CPSegmentedControl.j
+++ b/AppKit/CPSegmentedControl.j
@@ -565,11 +565,14 @@ CPSegmentSwitchTrackingMomentary = 2;
         isControlSizeMini = [self hasThemeState:CPThemeStateControlSizeMini];
 
     themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState;
-    themeState = isControlSizeSmall ? themeState.and(CPThemeStateControlSizeSmall) : themeState;
-    themeState = isControlSizeMini ? themeState.and(CPThemeStateControlSizeMini) : themeState;
+
+    if (isControlSizeSmall)
+        themeState = themeState.and(CPThemeStateControlSizeSmall);
+    else if (isControlSizeMini)
+        themeState = themeState.and(CPThemeStateControlSizeMini);
 
     var leftCapColor = [self valueForThemeAttribute:@"left-segment-bezel-color"
-                                inState:themeState],
+                                            inState:themeState],
 
         leftBezelView = [self layoutEphemeralSubviewNamed:@"left-segment-bezel"
                                                positioned:CPWindowBelow
@@ -580,8 +583,11 @@ CPSegmentSwitchTrackingMomentary = 2;
     var themeState = _themeStates[_themeStates.length - 1];
 
     themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState;
-    themeState = isControlSizeSmall ? themeState.and(CPThemeStateControlSizeSmall) : themeState;
-    themeState = isControlSizeMini ? themeState.and(CPThemeStateControlSizeMini) : themeState;
+
+    if (isControlSizeSmall)
+        themeState = themeState.and(CPThemeStateControlSizeSmall);
+    else if (isControlSizeMini)
+        themeState = themeState.and(CPThemeStateControlSizeMini);
 
     var rightCapColor = [self valueForThemeAttribute:@"right-segment-bezel-color"
                                              inState:themeState],
@@ -597,8 +603,11 @@ CPSegmentSwitchTrackingMomentary = 2;
         var themeState = _themeStates[i];
 
         themeState = isDisabled ? themeState.and(CPThemeStateDisabled) : themeState;
-        themeState = isControlSizeSmall ? themeState.and(CPThemeStateControlSizeSmall) : themeState;
-        themeState = isControlSizeMini ? themeState.and(CPThemeStateControlSizeMini) : themeState;
+
+        if (isControlSizeSmall)
+            themeState = themeState.and(CPThemeStateControlSizeSmall);
+        else if (isControlSizeMini)
+            themeState = themeState.and(CPThemeStateControlSizeMini);
 
         var bezelColor = [self valueForThemeAttribute:@"center-segment-bezel-color"
                                               inState:themeState],
@@ -640,8 +649,11 @@ CPSegmentSwitchTrackingMomentary = 2;
         borderState = (borderState.hasThemeState(CPThemeStateSelected) && !borderState.hasThemeState(CPThemeStateHighlighted)) ? CPThemeStateSelected : CPThemeStateNormal;
 
         borderState = isDisabled ? borderState.and(CPThemeStateDisabled) : borderState;
-        borderState = isControlSizeSmall ? borderState.and(CPThemeStateControlSizeSmall) : borderState;
-        borderState = isControlSizeMini ? borderState.and(CPThemeStateControlSizeMini) : borderState;
+
+        if (isControlSizeSmall)
+            borderState = borderState.and(CPThemeStateControlSizeSmall);
+        else if (isControlSizeMini)
+            borderState = borderState.and(CPThemeStateControlSizeMini);
 
         var borderColor = [self valueForThemeAttribute:@"divider-bezel-color"
                                                inState:borderState],
@@ -906,7 +918,7 @@ var CPSegmentedControlSegmentsKey       = "CPSegmentedControlSegmentsKey",
         else
             _trackingMode = CPSegmentSwitchTrackingSelectOne;
 
-        // HACK
+        // Here we update the themeStates array for each segments to know if there are selected or not
         for (var i = 0; i < _segments.length; i++)
             _themeStates[i] = [_segments[i] selected] ? CPThemeStateSelected : CPThemeStateNormal;
 

From e56cc85e963ab9138f1bec8a83c43ef3fdb0764c Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Thu, 23 Oct 2014 16:24:04 -0700
Subject: [PATCH 075/234] Fixed: bezeled is set to yes when making a right
 click on a non-selectable CPTextField in a cell of a CPTableView

Previously, when making a right click on a non-selectable CPTextField which is contained in a dataView of a CPTableView set the bezel attribute to yes.

Now, when making this things, Cappuccino will check if the CPTextField if editable or not.
---
 AppKit/CPTableView.j | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index 2fe528208..593292937 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -5177,7 +5177,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
     // This makes sure the theming effects of a focused table remain in effect even as cells are being edited in it.
     [self _notifyViewDidBecomeFirstResponder];
 
-    if (_editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && ![responder isBezeled])
+    if (_editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && ![responder isBezeled] && [responder isEditable])
     {
         [responder setBezeled:YES];
         [self _registerForEndEditingNote:responder];

From 34c7dededfa4e118d07ee1be342044e66798ef87 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Fri, 24 Oct 2014 14:06:42 -0700
Subject: [PATCH 076/234] Fixed: hitTest method returns the wrong view in the
 CPTableView when the selectionStyle is set to
 CPTableViewSelectionHighlightStyleNone

Previously, when having a CPTableView with a selectionStyle set to CPTableViewSelectionHighlightStyleNone, we needed two clicks to be able to select or click on a control of the cell. Now we only need one click as in Cocoa.

This is fixed by changing the method hitTest and returning the good view which can become the firstResponder.
---
 AppKit/CPTableView.j | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index 2fe528208..6b7a5f528 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -5123,7 +5123,12 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
     var hit = [super hitTest:aPoint];
 
     if ([[CPApp currentEvent] type] == CPLeftMouseDown && [hit acceptsFirstResponder] && ![self isRowSelected:[self rowForView:hit]])
+    {
+        if (_selectionHighlightStyle == CPTableViewSelectionHighlightStyleNone)
+            return hit;
+
         return self;
+    }
 
     return hit;
 }

From 3e5a6986f97f8b65e65b60b0845bded1476c02e7 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Fri, 24 Oct 2014 23:26:48 -0700
Subject: [PATCH 077/234] Fixed: arrow cursor when the cursor is hover a
 CPTextField

Previously, when the cursor was hover a CPTextField the cursor was an arrow till we selected the textField.
Now when the cursor is hover a CPTextField, and if this textField is enabled and editable or selectable we show the selecting cursor. This is the default behavior in Cocoa as well.

Updated manual test Tests/Manual/CPTextField/
---
 AppKit/CPTextField.j                     | 17 +++++++++++++++++
 Tests/Manual/CPTextField/AppController.j |  5 +++++
 2 files changed, 22 insertions(+)

diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j
index 89de8be0a..6cd39a6fb 100644
--- a/AppKit/CPTextField.j
+++ b/AppKit/CPTextField.j
@@ -31,6 +31,7 @@
 
 @global CPApp
 @global CPStringPboardType
+@global CPCursor
 
 
 @protocol CPTextFieldDelegate 
@@ -981,6 +982,22 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
         return [[[anEvent window] platformWindow] _propagateCurrentDOMEvent:YES];
 }
 
+- (void)mouseEntered:(CPEvent)anEvent
+{
+    [super mouseEntered:anEvent];
+
+    if ([self isEnabled] && ([self isSelectable] || [self isEditable]))
+        [[CPCursor IBeamCursor] set];
+}
+
+- (void)mouseExited:(CPEvent)anEvent
+{
+    [super mouseExited:anEvent];
+
+    // Make sure to have the arrow cursor when leaving a textField
+    [[CPCursor arrowCursor] set];
+}
+
 - (void)keyUp:(CPEvent)anEvent
 {
     if (!([self isEnabled] && [self isEditable]))
diff --git a/Tests/Manual/CPTextField/AppController.j b/Tests/Manual/CPTextField/AppController.j
index 52cbb591b..389cf3c8e 100644
--- a/Tests/Manual/CPTextField/AppController.j
+++ b/Tests/Manual/CPTextField/AppController.j
@@ -50,8 +50,13 @@
     [shadowLabel setFrame:CGRectMake(15, CGRectGetMaxY([textField frame]) + 10, 300, 18)];
     [championOfLightLabel setFrame:CGRectMake(15, CGRectGetMaxY([shadowLabel frame]) + 2, 300, 18)];
 
+    var selectableLabel = [CPTextField labelWithTitle:@"This text should be selectable and you should see the selectable cursor."];
+    [selectableLabel setSelectable:YES];
+    [selectableLabel setFrame:CGRectMake(15, CGRectGetMaxY([championOfLightLabel frame]) + 8, 600, 18)];
+
     [contentView addSubview:shadowLabel];
     [contentView addSubview:championOfLightLabel];
+    [contentView addSubview:selectableLabel];
 
     var jumpLabel = [CPTextField labelWithTitle:@"The text of these text fields should not move ('jump') when a field becomes the first responder. Labels on the right should replicate the input."];
 

From d5e811f9f1ecef6d000ad664e96160a30ee5a9d8 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Sun, 26 Oct 2014 21:27:10 -0700
Subject: [PATCH 078/234] Fixed: exception descriptions in CPDate did not
 countain all of the needed informations

---
 Foundation/CPDate.j | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j
index 62eebc25c..47abdfe7d 100644
--- a/Foundation/CPDate.j
+++ b/Foundation/CPDate.j
@@ -75,7 +75,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0));
 - (id)initWithTimeIntervalSinceNow:(CPTimeInterval)seconds
 {
     if (!_isNumberType(seconds))
-        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSinceNow: has to be an integer"];
+        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSinceNow: has to be an integer or a float"];
 
     self = new Date((new Date()).getTime() + seconds * 1000);
     return self;
@@ -84,7 +84,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0));
 - (id)initWithTimeIntervalSince1970:(CPTimeInterval)seconds
 {
     if (!_isNumberType(seconds))
-        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSince1970: has to be an integer"];
+        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSince1970: has to be an integer or a float"];
 
     self = new Date(seconds * 1000);
     return self;
@@ -93,7 +93,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0));
 - (id)initWithTimeIntervalSinceReferenceDate:(CPTimeInterval)seconds
 {
     if (!_isNumberType(seconds))
-        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSinceReferenceDate: has to be an integer"];
+        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSinceReferenceDate: has to be an integer or a float"];
 
     self = [self initWithTimeInterval:seconds sinceDate:CPDateReferenceDate];
     return self;
@@ -102,7 +102,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0));
 - (id)initWithTimeInterval:(CPTimeInterval)seconds sinceDate:(CPDate)refDate
 {
     if (!_isNumberType(seconds))
-        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeInterval:sinceDate: has to be an integer"];
+        [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeInterval:sinceDate: has to be an integer or a float"];
 
     self = new Date(refDate.getTime() + seconds * 1000);
     return self;

From ecb557daa5ec147bac99cc07b55b93e7c9706514 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Mon, 27 Oct 2014 10:09:33 -0700
Subject: [PATCH 079/234] Fixed: optimization about setting the good cursor for
 a CPTextField

---
 AppKit/CPTextField.j | 35 +++++++++++++++++++----------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j
index 6cd39a6fb..6d93a002d 100644
--- a/AppKit/CPTextField.j
+++ b/AppKit/CPTextField.j
@@ -350,6 +350,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
         _sendActionOn = CPKeyUpMask | CPKeyDownMask;
 
         [self setValue:CPLeftTextAlignment forThemeAttribute:@"alignment"];
+
+        [self _updateCursor];
     }
 
     return self;
@@ -371,6 +373,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
     if (shouldBeEditable)
         _isSelectable = YES;
 
+    [self _updateCursor];
+
     if (_isEditable)
         [self setThemeState:CPThemeStateEditable];
     else
@@ -401,6 +405,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
 - (void)setEnabled:(BOOL)shouldBeEnabled
 {
     [super setEnabled:shouldBeEnabled];
+    [self _updateCursor];
 
     // We only allow first responder status if the field is enabled.
     if (!shouldBeEnabled && [[self window] firstResponder] === self)
@@ -414,6 +419,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
 - (void)setSelectable:(BOOL)aFlag
 {
     _isSelectable = aFlag;
+
+    [self _updateCursor];
 }
 
 /*!
@@ -982,22 +989,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
         return [[[anEvent window] platformWindow] _propagateCurrentDOMEvent:YES];
 }
 
-- (void)mouseEntered:(CPEvent)anEvent
-{
-    [super mouseEntered:anEvent];
-
-    if ([self isEnabled] && ([self isSelectable] || [self isEditable]))
-        [[CPCursor IBeamCursor] set];
-}
-
-- (void)mouseExited:(CPEvent)anEvent
-{
-    [super mouseExited:anEvent];
-
-    // Make sure to have the arrow cursor when leaving a textField
-    [[CPCursor arrowCursor] set];
-}
-
 - (void)keyUp:(CPEvent)anEvent
 {
     if (!([self isEnabled] && [self isEditable]))
@@ -1149,6 +1140,16 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
     [super textDidChange:note];
 }
 
+- (void)_updateCursor
+{
+    if ([self isEnabled] && ([self isSelectable] || [self isEditable]))
+    {
+#if PLATFORM(DOM)
+        self._DOMElement.style.cursor = "text";
+#endif
+    }
+}
+
 /*!
     Returns the string in the text field.
 */
@@ -1959,6 +1960,8 @@ var CPTextFieldIsEditableKey            = "CPTextFieldIsEditableKey",
         [self setAlignment:[aCoder decodeIntForKey:CPTextFieldAlignmentKey]];
 
         [self setPlaceholderString:[aCoder decodeObjectForKey:CPTextFieldPlaceholderStringKey]];
+
+        [self _updateCursor];
     }
 
     return self;

From a783479306ba68b30628f54f6228fe73be63b61e Mon Sep 17 00:00:00 2001
From: Andrew Hankinson 
Date: Mon, 27 Oct 2014 14:47:12 -0400
Subject: [PATCH 080/234] Fixed: CPSecureTextField size was not calculated
 correctly in nib2cib.

Previously, the Secure Text Field size was slightly smaller when placed using Interface Builder.

This commit adjusts the size in nib2cib by ensuring CPTextField _adjustNib2CibSize is called on CPSecureTextField.
---
 Tools/nib2cib/NSSecureTextField.j | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Tools/nib2cib/NSSecureTextField.j b/Tools/nib2cib/NSSecureTextField.j
index f114a6e79..008c61976 100644
--- a/Tools/nib2cib/NSSecureTextField.j
+++ b/Tools/nib2cib/NSSecureTextField.j
@@ -37,6 +37,7 @@
     {
         var cell = [aCoder decodeObjectForKey:@"NSCell"];
         [self NS_initWithCell:cell];
+        [self _adjustNib2CibSize];
     }
 
     return self;

From b180f06c2a74af7ff9cf56033389dfbd66c9714e Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Tue, 28 Oct 2014 11:19:49 -0700
Subject: [PATCH 081/234] Fixed: cursor of CPTextField is not updated to
 default

Previously, when changing the mode of the CPTextField from editable to non-editable, the cursor wasn't set to default. Now it does.
---
 AppKit/CPTextField.j | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j
index 6d93a002d..5f11f1d6e 100644
--- a/AppKit/CPTextField.j
+++ b/AppKit/CPTextField.j
@@ -1146,6 +1146,12 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
     {
 #if PLATFORM(DOM)
         self._DOMElement.style.cursor = "text";
+#endif
+    }
+    else
+    {
+#if PLATFORM(DOM)
+        self._DOMElement.style.cursor = "default";
 #endif
     }
 }

From 09e3c5ecfc31447d112bbcb331335397a9a95ac0 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Tue, 28 Oct 2014 13:31:27 -0700
Subject: [PATCH 082/234] New: possibility to drag in a textual CPDatePicker

Previously it wasn't possible to update the selected element of a textual CPDatePicker when dragging.
Now we can as in Cocoa.
---
 AppKit/CPDatePicker/_CPDatePickerTextField.j | 52 +++++++++++++++++++-
 1 file changed, 51 insertions(+), 1 deletion(-)

diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j
index e871b1a5a..39935b536 100644
--- a/AppKit/CPDatePicker/_CPDatePickerTextField.j
+++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j
@@ -363,7 +363,6 @@ var CPZeroKeyCode = 48,
     [_currentTextField setValueForKeyEvent:anEvent];
 }
 
-
 #pragma mark -
 #pragma mark Layout methods
 
@@ -586,6 +585,57 @@ var CPZeroKeyCode = 48,
     [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_datePickerElementTextFieldAMPMChangedNotification:) name:CPDatePickerElementTextFieldAMPMChangedNotification object:_textFieldPMAM];
 }
 
+#pragma mark -
+#pragma mark Mouse event
+
+- (BOOL)continueTracking:(CGPoint)lastPoint at:(CGPoint)aPoint
+{
+    [self _selectTextFieldForPoint:aPoint];
+    return YES;
+}
+
+- (BOOL)startTrackingAt:(CGPoint)aPoint
+{
+    [self _selectTextFieldForPoint:aPoint];
+    return YES;
+}
+
+- (void)_selectTextFieldForPoint:(CGPoint)aPoint
+{
+    var textField = [self _textFieldForPoint:aPoint],
+        superview = [self superview];
+
+    if (!textField || [superview._currentTextField] == textField)
+        return;
+
+    [[CPNotificationCenter defaultCenter] postNotificationName:CPDatePickerElementTextFieldBecomeFirstResponder object:superview userInfo:[CPDictionary dictionaryWithObject:textField forKey:@"textField"]];
+}
+
+- (_CPDatePickerElementTextField)_textFieldForPoint:(CGPoint)aPoint
+{
+    if (![_textFieldDay isHidden] && CGRectContainsPoint([_textFieldDay frame], aPoint))
+        return _textFieldDay;
+
+    if (![_textFieldMonth isHidden] && CGRectContainsPoint([_textFieldMonth frame], aPoint))
+        return _textFieldMonth;
+
+    if (![_textFieldYear isHidden] && CGRectContainsPoint([_textFieldYear frame], aPoint))
+        return _textFieldYear;
+
+    if (![_textFieldHour isHidden] && CGRectContainsPoint([_textFieldHour frame], aPoint))
+        return _textFieldHour;
+
+    if (![_textFieldMinute isHidden] && CGRectContainsPoint([_textFieldMinute frame], aPoint))
+        return _textFieldMinute;
+
+    if (![_textFieldSecond isHidden] && CGRectContainsPoint([_textFieldSecond frame], aPoint))
+        return _textFieldSecond;
+
+    if (![_textFieldPMAM isHidden] && CGRectContainsPoint([_textFieldPMAM frame], aPoint))
+        return _textFieldPMAM;
+
+    return nil;
+}
 
 #pragma mark -
 #pragma mark Setter Getter methods

From ba20936c17eec7e6f6ee87f4ebb2b176234cb7f2 Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Wed, 29 Oct 2014 15:04:55 -0700
Subject: [PATCH 083/234] Fixed: unable to chain sheet in a window

Previously when chaining sheet on the same window, Cappuccino crashed.
Now chaining a sheet in the delegate method of the method endSheet: will open the next sheet.

Now when opening a sheet, we check if another sheet is currently closing. If yes, we wait till we get the notification of the closing of the previous sheet. And then we open the next sheet.

Fixed #2159

Test app in Tests/Manual/AttachedSheet2/SheetWindowController.j
---
 AppKit/CPApplication.j                        |  4 +-
 AppKit/CPWindow/CPWindow.j                    | 49 +++++++++++++++----
 .../AttachedSheet2/SheetWindowController.j    | 11 +++--
 3 files changed, 51 insertions(+), 13 deletions(-)

diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j
index f3783c75a..90d87c5c3 100644
--- a/AppKit/CPApplication.j
+++ b/AppKit/CPApplication.j
@@ -986,7 +986,9 @@ var CPMainCibFile               = @"CPMainCibFile",
         return;
     }
 
-    [aSheet._windowView _enableSheet:YES inWindow:aWindow];
+    if (![aWindow attachedSheet])
+        [aSheet._windowView _enableSheet:YES inWindow:aWindow];
+
     [aWindow _attachSheet:aSheet modalDelegate:aModalDelegate didEndSelector:didEndSelector contextInfo:contextInfo];
 }
 
diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j
index f770fc642..baafd32a4 100644
--- a/AppKit/CPWindow/CPWindow.j
+++ b/AppKit/CPWindow/CPWindow.j
@@ -2679,6 +2679,23 @@ CPTexturedBackgroundWindowMask
     [attachedSheet setFrame:sheetFrame display:YES animate:NO];
 }
 
+- (void)_previousSheetIsClosedNotification:(CPNotification)aNotification
+{
+    [[CPNotificationCenter defaultCenter] removeObserver:self name:CPWindowDidEndSheetNotification object:self];
+
+    var sheet = _sheetContext[@"nextSheet"],
+        modalDelegate =_sheetContext[@"nextModalDelegate"],
+        endSelector = _sheetContext[@"nextEndSelector"],
+        contextInfo = _sheetContext[@"nextContextInfo"];
+
+    // Needed, becauwe when the notification CPWindowDidEndSheetNotification is sent, the sheetContext is not up to date...
+    setTimeout(function()
+    {
+        [sheet._windowView _enableSheet:YES inWindow:self];
+        [self _attachSheet:sheet modalDelegate:modalDelegate didEndSelector:endSelector contextInfo:contextInfo];
+    }, 0)
+}
+
 /*
     Starting point for sheet session, called from CPApplication beginSheet:
 */
@@ -2687,9 +2704,24 @@ CPTexturedBackgroundWindowMask
 {
     if (_sheetContext)
     {
-        [CPException raise:CPInternalInconsistencyException
-            reason:@"The target window of beginSheet: already has a sheet, did you forget orderOut: ?"];
-        return;
+        // Here we wait till the current sheet is closed
+        if (_sheetContext[@"isClosing"])
+        {
+            // Here we save the next sheet to open
+            _sheetContext[@"nextSheet"] = aSheet;
+            _sheetContext[@"nextModalDelegate"] = aModalDelegate;
+            _sheetContext[@"nextEndSelector"] = didEndSelector;
+            _sheetContext[@"nextContextInfo"] = contextInfo;
+
+            [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_previousSheetIsClosedNotification:) name:CPWindowDidEndSheetNotification object:self];
+            return;
+        }
+        else
+        {
+            [CPException raise:CPInternalInconsistencyException
+                reason:@"The target window of beginSheet: already has a sheet, did you forget orderOut: ?"];
+            return;
+        }
     }
 
     _sheetContext = {
@@ -2741,7 +2773,12 @@ CPTexturedBackgroundWindowMask
 */
 - (void)_detachSheetWindow
 {
+    if (_sheetContext["isClosing"])
+        return;
+
     _sheetContext["isAttached"] = NO;
+    _sheetContext["isClosing"] = YES;
+    _sheetContext["opened"] = NO;
 
     // A timer seems to be necessary for the animation to work correctly.
     // It would be ideal to block here and spin the event loop, until attach is complete.
@@ -2874,12 +2911,6 @@ CPTexturedBackgroundWindowMask
         return;
     }
 
-    if (_sheetContext["isClosing"])
-        return;
-
-    _sheetContext["opened"] = NO;
-    _sheetContext["isClosing"] = YES;
-
     // The parent window can be orderedOut to disable the sheet animate out, as in Cocoa
     if ([self isVisible])
     {
diff --git a/Tests/Manual/AttachedSheet2/SheetWindowController.j b/Tests/Manual/AttachedSheet2/SheetWindowController.j
index 096beec68..41866b38f 100644
--- a/Tests/Manual/AttachedSheet2/SheetWindowController.j
+++ b/Tests/Manual/AttachedSheet2/SheetWindowController.j
@@ -399,9 +399,6 @@
 
     _returnCode = 77;
     [CPApp endSheet:[self window] returnCode:_returnCode];
-
-    if (orderOutAfter)
-        [[self window] orderOut:nil];
 }
 
 //
@@ -519,7 +516,15 @@
     // test sheet chaining. it should be possible to start another sheet from didEndSheet,
     // but only if we orderOut: the sheet before we called endSheet: This is how cocoa works too.
     if (returnCode == 77)
+    {
+        var orderOutAfter = [_orderOutAfterCheckbox state];
+
+        if (orderOutAfter)
+            [[self window] orderOut:self];
+
         [self runSheetForWindow:parentWindow];
+    }
+
         //[self runAlertSheet:parentWindow];
 }
 

From bfd0ceac53896ae933782de941f2ea6648a9766b Mon Sep 17 00:00:00 2001
From: Alexandre Wilhelm 
Date: Wed, 29 Oct 2014 21:50:46 -0700
Subject: [PATCH 084/234] Typo: becauwe instead of because

---
 AppKit/CPWindow/CPWindow.j | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j
index baafd32a4..7a9c20217 100644
--- a/AppKit/CPWindow/CPWindow.j
+++ b/AppKit/CPWindow/CPWindow.j
@@ -2688,7 +2688,7 @@ CPTexturedBackgroundWindowMask
         endSelector = _sheetContext[@"nextEndSelector"],
         contextInfo = _sheetContext[@"nextContextInfo"];
 
-    // Needed, becauwe when the notification CPWindowDidEndSheetNotification is sent, the sheetContext is not up to date...
+    // Needed, because when the notification CPWindowDidEndSheetNotification is sent, the sheetContext is not up to date...
     setTimeout(function()
     {
         [sheet._windowView _enableSheet:YES inWindow:self];

From 82c32d7dee65ef7321311e74fa2c38836fa56733 Mon Sep 17 00:00:00 2001
From: Andrew Hankinson 
Date: Fri, 31 Oct 2014 17:14:55 -0400
Subject: [PATCH 085/234] New: Implementation of the CoreFoundation CFError

This commit adds an implementation of the CoreFoundation CFError classes and functions.
---
 Objective-J/CFError.js | 158 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 158 insertions(+)
 create mode 100644 Objective-J/CFError.js

diff --git a/Objective-J/CFError.js b/Objective-J/CFError.js
new file mode 100644
index 000000000..5169de5c6
--- /dev/null
+++ b/Objective-J/CFError.js
@@ -0,0 +1,158 @@
+/*
+ * CFError.js
+ * Objective-J
+ *
+ * Created by Andrew Hankinson.
+ * Copyright 2014, Andrew Hankinson.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+GLOBAL(kCFErrorLocalizedDescriptionKey) = "CPLocalizedDescription";
+GLOBAL(kCFErrorLocalizedFailureReasonKey) = "CPLocalizedFailureReason";
+GLOBAL(kCFErrorLocalizedRecoverySuggestionKey) = "CPLocalizedRecoverySuggestion";
+GLOBAL(kCFErrorDescriptionKey) = "CPDescription";
+GLOBAL(kCFErrorUnderlyingErrorKey) = "CPUnderlyingError";
+
+GLOBAL(kCFErrorURLKey) = "_kCFErrorURLKey";
+GLOBAL(kCFErrorFilePathKey) = "_kCFErrorFilePathKey";
+
+// GLOBAL(kCFErrorDomainPOSIX) = "";
+// GLOBAL(kCFErrorDomainOSStatus) = "";
+// GLOBAL(kCFErrorDomainMach) = "";
+GLOBAL(kCFErrorDomainCappuccino) = "CPErrorDomainCappuccino";
+GLOBAL(kCFErrorDomainCocoa) = kCFErrorDomainCappuccino;
+
+
+GLOBAL(CFError) = function(/* CFString */ domain, /* int */ code, /* CFDictionary */ userInfo)
+{
+    this._domain = domain || NULL;
+    this._code = code || NULL;
+    this._userInfo = userInfo || new CFDictionary();
+    this._UID = objj_generateObjectUID();
+}
+
+CFError.prototype.domain = function ()
+{
+    return this._domain;
+}
+DISPLAY_NAME(CFError.prototype.domain)
+
+CFError.prototype.code = function ()
+{
+    return this._code;
+}
+DISPLAY_NAME(CFError.prototype.code)
+
+/*
+    This follows the same logic to generate a description as the "real" CFError.
+*/
+CFError.prototype.description = function ()
+{
+    var localizedDesc = this._userInfo.valueForKey(kCFErrorLocalizedDescriptionKey);
+    if (localizedDesc)
+        return localizedDesc;
+
+    var reason = this._userInfo.valueForKey(kCFErrorLocalizedFailureReasonKey);
+    if (reason)
+    {
+        var operationFailedStr = "The operation couldn\u2019t be completed. " + reason;
+        return operationFailedStr;
+    }
+
+    // @TODO Add the bundle localized domain handler.
+    var result = "",
+        desc = this._userInfo.valueForKey(kCFErrorDescriptionKey);
+    if (desc)
+    {
+        // we have a description key.
+        var result = "The operation couldn\u2019t be completed. (error " + this._code + "- " + desc + ")";
+    }
+    else
+    {
+        // just use error and code;
+        var result = "The operation couldn\u2019t be completed. (error " + this._code + ")";
+    }
+
+    return result;
+}
+DISPLAY_NAME(CFError.prototype.description)
+
+CFError.prototype.failureReason = function ()
+{
+    return this._userInfo.valueForKey(kCFErrorLocalizedFailureReasonKey);
+}
+DISPLAY_NAME(CFError.prototype.failureReason)
+
+CFError.prototype.recoverySuggestion = function ()
+{
+    return this._userInfo.valueForKey(kCFErrorLocalizedRecoverySuggestionKey);
+}
+DISPLAY_NAME(CFError.prototype.recoverySuggestion)
+
+CFError.prototype.userInfo = function ()
+{
+    return this._userInfo;
+}
+DISPLAY_NAME(CFError.prototype.userInfo)
+
+/*
+    CFError Bridge Functions
+    The "Create" and "Copy" in the function names do not have any meaning
+    in Cappuccino; they are bridged here for compatibility reasons only.
+*/
+GLOBAL(CFErrorCreate) = function(/* String */ domain, /*int */ code, /* CFDictionary */ userInfo)
+{
+    return new CFError(domain, code, userInfo);
+}
+
+GLOBAL(CFErrorCreateWithUserInfoKeysAndValues) = function(/* String */ domain, /* int */ code, /* array */ userInfoKeys, /* array */ userInfoValues, /* int */ numUserInfoValues)
+{
+    var userInfo = new CFDictionary();
+    while(numUserInfoValues--)
+        userInfo.setValueForKey(userInfoKeys[numUserInfoValues], userInfoValues[numUserInfoValues]);
+
+    return new CFError(domain, code, userInfo);
+}
+
+GLOBAL(CFErrorGetCode) = function(/* CFError */ err)
+{
+    return err.code;
+}
+
+GLOBAL(CFErrorGetDomain) = function(/* CFError */ err)
+{
+    return err.domain;
+}
+
+GLOBAL(CFErrorCopyDescription) = function(/* CFError */ err)
+{
+    return err.description;
+}
+
+GLOBAL(CFErrorCopyUserInfo) = function(/* CFError */ err)
+{
+    return err.userInfo;
+}
+
+GLOBAL(CFErrorCopyFailureReason) = function(/* CFError */ err)
+{
+    return err.failureReason;
+}
+
+GLOBAL(CFErrorCopyRecoverySuggestion) = function(/* CFError */err)
+{
+    return err.recoverySuggestion;
+}

From 49cb446f8b36f0e141111f258334b0bda5b7dfd0 Mon Sep 17 00:00:00 2001
From: Andrew Hankinson 
Date: Fri, 31 Oct 2014 17:15:52 -0400
Subject: [PATCH 086/234] New: Initial commit of CFNetworkErrors file

This commit adds constants for CFURL Errors to enable cross-compatibility with the Cocoa CF and CPURL error reporting functions
---
 Objective-J/CFNetworkErrors.js | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
 create mode 100644 Objective-J/CFNetworkErrors.js

diff --git a/Objective-J/CFNetworkErrors.js b/Objective-J/CFNetworkErrors.js
new file mode 100644
index 000000000..9473579b9
--- /dev/null
+++ b/Objective-J/CFNetworkErrors.js
@@ -0,0 +1,25 @@
+GLOBAL(kCFURLErrorUnknown)    = -998;
+GLOBAL(kCFURLErrorCancelled)  = -999;
+GLOBAL(kCFURLErrorBadURL)     = -1000;
+GLOBAL(kCFURLErrorTimedOut)   = -1001;
+GLOBAL(kCFURLErrorUnsupportedURL)  = -1002;
+GLOBAL(kCFURLErrorCannotFindHost)  = -1003;
+GLOBAL(kCFURLErrorCannotConnectToHost)     = -1004;
+GLOBAL(kCFURLErrorNetworkConnectionLost)   = -1005;
+GLOBAL(kCFURLErrorDNSLookupFailed)         = -1006;
+GLOBAL(kCFURLErrorHTTPTooManyRedirects)    = -1007;
+GLOBAL(kCFURLErrorResourceUnavailable)     = -1008;
+GLOBAL(kCFURLErrorNotConnectedToInternet)  = -1009;
+GLOBAL(kCFURLErrorRedirectToNonExistentLocation)  = -1010;
+GLOBAL(kCFURLErrorBadServerResponse)              = -1011;
+GLOBAL(kCFURLErrorUserCancelledAuthentication)    = -1012;
+GLOBAL(kCFURLErrorUserAuthenticationRequired)     = -1013;
+GLOBAL(kCFURLErrorZeroByteResource)         = -1014;
+GLOBAL(kCFURLErrorCannotDecodeRawData)      = -1015;
+GLOBAL(kCFURLErrorCannotDecodeContentData)  = -1016;
+GLOBAL(kCFURLErrorCannotParseResponse)      = -1017;
+GLOBAL(kCFURLErrorRequestBodyStreamExhausted)  = -1021;
+GLOBAL(kCFURLErrorFileDoesNotExist)            = -1100;
+GLOBAL(kCFURLErrorFileIsDirectory)             = -1101;
+GLOBAL(kCFURLErrorNoPermissionsToReadFile)     = -1102;
+GLOBAL(kCFURLErrorDataLengthExceedsMaximum)    = -1103;
\ No newline at end of file

From 64a15db791ab60a2387aee7dbc72b746384f9923 Mon Sep 17 00:00:00 2001
From: Antoine Mercadal 
Date: Fri, 31 Oct 2014 18:39:55 -0700
Subject: [PATCH 087/234] NEW: Environment variable to disable CommonJS
 environement building

This patch allows user to disable the commonJS build phase by setting the system environement variable IGNORE_ENV_COMMONJS.

For instance `export IGNORE_ENV_COMMONJS=1`
---
 Objective-J/CommonJS/lib/objective-j/jake/bundletask.js | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js
index a31c5d781..e71b9129f 100644
--- a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js
+++ b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js
@@ -35,7 +35,12 @@ function BundleTask(aName, anApplication)
 {
     Task.apply(this, arguments);
 
-    this.setEnvironments([environment.Browser, environment.CommonJS]);
+    var ignoreCommonJS = system.env["CAPP_IGNORE_COMMONJS_ENV"];
+
+    if (ignoreCommonJS && ignoreCommonJS.toLowerCase() == "no" || ignoreCommonJS == "1")
+        this.setEnvironments([environment.Browser]);
+    else
+        this.setEnvironments([environment.Browser, environment.CommonJS]);
 
     this._author = null;
     this._email = null;

From 0399b3daeda48760471a36d0cbfec578b2b2679a Mon Sep 17 00:00:00 2001
From: Andrew Hankinson 
Date: Sat, 1 Nov 2014 07:41:51 -0400
Subject: [PATCH 088/234] Fixed: Renamed CPCoder method to match language

Previously CPCoder had a method named "encodeValueOfObjCType" which is a misnomer.

This commit renames the method to "encodeValueOfObjJType."
---
 Foundation/CPCoder.j | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Foundation/CPCoder.j b/Foundation/CPCoder.j
index d02d918e0..0bdc7b89a 100644
--- a/Foundation/CPCoder.j
+++ b/Foundation/CPCoder.j
@@ -53,7 +53,7 @@
     @param aType the structure or object type
     @param anObject the object to be encoded
 */
-- (void)encodeValueOfObjCType:(CPString)aType at:(id)anObject
+- (void)encodeValueOfObjJType:(CPString)aType at:(id)anObject
 {
    _CPRaiseInvalidAbstractInvocation(self, _cmd);
 }

From a34e8fbc9aa5c5cdc4a3ec8d2e4ebab5fbbc42ac Mon Sep 17 00:00:00 2001
From: Andrew Hankinson 
Date: Sat, 1 Nov 2014 08:59:10 -0400
Subject: [PATCH 089/234] Fixed method calls for global CFError methods

---
 Objective-J/CFError.js | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/Objective-J/CFError.js b/Objective-J/CFError.js
index 5169de5c6..545c7eef5 100644
--- a/Objective-J/CFError.js
+++ b/Objective-J/CFError.js
@@ -26,20 +26,20 @@ GLOBAL(kCFErrorLocalizedRecoverySuggestionKey) = "CPLocalizedRecoverySuggestion"
 GLOBAL(kCFErrorDescriptionKey) = "CPDescription";
 GLOBAL(kCFErrorUnderlyingErrorKey) = "CPUnderlyingError";
 
-GLOBAL(kCFErrorURLKey) = "_kCFErrorURLKey";
-GLOBAL(kCFErrorFilePathKey) = "_kCFErrorFilePathKey";
+GLOBAL(kCFErrorURLKey) = "CPURL";
+GLOBAL(kCFErrorFilePathKey) = "CPFilePath";
 
 // GLOBAL(kCFErrorDomainPOSIX) = "";
 // GLOBAL(kCFErrorDomainOSStatus) = "";
 // GLOBAL(kCFErrorDomainMach) = "";
-GLOBAL(kCFErrorDomainCappuccino) = "CPErrorDomainCappuccino";
+GLOBAL(kCFErrorDomainCappuccino) = "CPCappuccinoErrorDomain";
 GLOBAL(kCFErrorDomainCocoa) = kCFErrorDomainCappuccino;
 
 
 GLOBAL(CFError) = function(/* CFString */ domain, /* int */ code, /* CFDictionary */ userInfo)
 {
     this._domain = domain || NULL;
-    this._code = code || NULL;
+    this._code = code || 0;
     this._userInfo = userInfo || new CFDictionary();
     this._UID = objj_generateObjectUID();
 }
@@ -78,7 +78,7 @@ CFError.prototype.description = function ()
     if (desc)
     {
         // we have a description key.
-        var result = "The operation couldn\u2019t be completed. (error " + this._code + "- " + desc + ")";
+        var result = "The operation couldn\u2019t be completed. (error " + this._code + " - " + desc + ")";
     }
     else
     {
@@ -120,7 +120,7 @@ GLOBAL(CFErrorCreate) = function(/* String */ domain, /*int */ code, /* CFDictio
 
 GLOBAL(CFErrorCreateWithUserInfoKeysAndValues) = function(/* String */ domain, /* int */ code, /* array */ userInfoKeys, /* array */ userInfoValues, /* int */ numUserInfoValues)
 {
-    var userInfo = new CFDictionary();
+    var userInfo = new CFMutableDictionary();
     while(numUserInfoValues--)
         userInfo.setValueForKey(userInfoKeys[numUserInfoValues], userInfoValues[numUserInfoValues]);
 
@@ -129,30 +129,30 @@ GLOBAL(CFErrorCreateWithUserInfoKeysAndValues) = function(/* String */ domain, /
 
 GLOBAL(CFErrorGetCode) = function(/* CFError */ err)
 {
-    return err.code;
+    return err.code();
 }
 
 GLOBAL(CFErrorGetDomain) = function(/* CFError */ err)
 {
-    return err.domain;
+    return err.domain();
 }
 
 GLOBAL(CFErrorCopyDescription) = function(/* CFError */ err)
 {
-    return err.description;
+    return err.description();
 }
 
 GLOBAL(CFErrorCopyUserInfo) = function(/* CFError */ err)
 {
-    return err.userInfo;
+    return err.userInfo();
 }
 
 GLOBAL(CFErrorCopyFailureReason) = function(/* CFError */ err)
 {
-    return err.failureReason;
+    return err.failureReason();
 }
 
 GLOBAL(CFErrorCopyRecoverySuggestion) = function(/* CFError */err)
 {
-    return err.recoverySuggestion;
+    return err.recoverySuggestion();
 }

From 0038eab6ab951750f9ee296ae3fbf59318ba7dea Mon Sep 17 00:00:00 2001
From: Andrew Hankinson 
Date: Sat, 1 Nov 2014 08:59:35 -0400
Subject: [PATCH 090/234] Add CFError and CFNetworkErrors to the Includes list

---
 Objective-J/Includes.js | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Objective-J/Includes.js b/Objective-J/Includes.js
index a4373e3a0..43adc2de2 100644
--- a/Objective-J/Includes.js
+++ b/Objective-J/Includes.js
@@ -38,6 +38,8 @@
 #include "CFHTTPRequest.js"
 #include "CFPropertyList.js"
 #include "CFDictionary.js"
+#include "CFError.js"
+#include "CFNetworkErrors.js"
 #include "CFData.js"
 #include "CFURL.js"
 #include "MarkedStream.js"

From 96135c9875d5256fba37073ebd3b2dfe35c174a7 Mon Sep 17 00:00:00 2001
From: Andrew Hankinson 
Date: Sat, 1 Nov 2014 09:01:42 -0400
Subject: [PATCH 091/234] New: Toll-free bridged CPError with CFError

This commit changes CPError to use a toll-free bridge with CFError, matching Cocoa's implementation of this class.
---
 Foundation/CPError.j | 152 +++++++++++++++++++++++++++++++------------
 1 file changed, 109 insertions(+), 43 deletions(-)

diff --git a/Foundation/CPError.j b/Foundation/CPError.j
index 4acafe2ce..7062bd08f 100644
--- a/Foundation/CPError.j
+++ b/Foundation/CPError.j
@@ -24,31 +24,52 @@
 @import "CPObject.j"
 @import "CPString.j"
 
-CPCappuccinoErrorDomain = CPCocoaErrorDomain = @"CPCappuccinoErrorDomain";
-// CPPOSIXErrorDomain      = @"CPPOSIXErrorDomain";
-// CPOSStatusErrorDomain   = @"CPOSStatusErrorDomain";
+CPCappuccinoErrorDomain                 = kCFErrorDomainCappuccino;
+CPCocoaErrorDomain                      = kCFErrorDomainCappuccino; // compat
 
-CPUnderlyingErrorKey                    = @"CPUnderlyingErrorKey";
+CPUnderlyingErrorKey                    = kCFErrorUnderlyingErrorKey;
 
-CPLocalizedDescriptionKey               = @"CPLocalizedDescriptionKey";
-CPLocalizedFailureReasonErrorKey        = @"CPLocalizedFailureReasonErrorKey";
-CPLocalizedRecoverySuggestionErrorKey   = @"CPLocalizedRecoverySuggestionErrorKey";
+CPLocalizedDescriptionKey               = kCFErrorLocalizedDescriptionKey;
+CPLocalizedFailureReasonErrorKey        = kCFErrorLocalizedFailureReasonKey;
+CPLocalizedRecoverySuggestionErrorKey   = kCFErrorLocalizedRecoverySuggestionKey;
 CPLocalizedRecoveryOptionsErrorKey      = @"CPLocalizedRecoveryOptionsErrorKey";
 CPRecoveryAttempterErrorKey             = @"CPRecoveryAttempterErrorKey";
 CPHelpAnchorErrorKey                    = @"CPHelpAnchorErrorKey";
 
 CPStringEncodingErrorKey                = @"CPStringEncodingErrorKey";
-CPURLErrorKey                           = @"CPURLErrorKey";
-CPFilePathErrorKey                      = @"CPFilePathErrorKey";
+CPURLErrorKey                           = kCFErrorURLKey;
+CPFilePathErrorKey                      = kCFErrorFilePathKey;
 
+/*!
+    @class CPError
+    @ingroup foundation
+    @brief Used for encapsulating, presenting, and recovery from errors.
 
+    CPError is toll-free bridged with CFError() methods.
+
+    An example of initializing a CPError:
+
+
+var userInfo = @{CPLocalizedDescriptionKey: @"A localized error description",
+                 CPLocalizedFailureReasonErrorKey: @"A localized failure reason",
+                 CPUnderlyingErrorKey: @"An underlying error message"},
+
+    err = [CPError errorWithDomain:CPCappuccinoErrorDomain code:-10 userInfo:userInfo];
+
+ */ @implementation CPError : CPObject { - CPInteger _code @accessors(property=code, readonly); - CPString _domain @accessors(property=domain, readonly); - CPDictionary _userInfo @accessors(property=userInfo, readonly); } ++ (id)alloc +{ + var obj = new CFError(); + obj.isa = [self class]; + + return obj; +} + + + (id)errorWithDomain:(CPString)aDomain code:(CPInteger)aCode userInfo:(CPDictionary)aDict { return [[CPError alloc] initWithDomain:aDomain code:aCode userInfo:aDict]; @@ -56,44 +77,89 @@ CPFilePathErrorKey = @"CPFilePathErrorKey"; - (id)initWithDomain:(CPString)aDomain code:(CPInteger)aCode userInfo:(CPDictionary)aDict { - if (self = [super init]) - { - _domain = aDomain; - _code = aCode; - _userInfo = aDict; - } - - return self; + var result = new CFError(aDomain, aCode, aDict); + result.isa = [self class]; + return result; } -- (CPString)localizedDescription +- (CPInteger)code { - return [_userInfo objectForKey:CPLocalizedDescriptionKey]; -} - -- (CPString)localizedFailureReason -{ - return [_userInfo objectForKey:CPLocalizedFailureReasonErrorKey]; -} - -- (CPArray)localizedRecoveryOptions -{ - return [_userInfo objectForKey:CPLocalizedRecoveryOptionsErrorKey]; -} - -- (CPString)localizedRecoverySuggestion -{ - return [_userInfo objectForKey:CPLocalizedRecoverySuggestionErrorKey]; -} - -- (id)recoveryAttempter -{ - return [_userInfo objectForKey:CPRecoveryAttempterErrorKey]; + return self.code(); } - (CPString)description { - return [CPString stringWithFormat:@"Error Domain=%@ Code=%d UserInfo=%p %@", _domain, _code, _userInfo, [self localizedDescription]]; + return self.description(); +} + +- (CPString)domain +{ + return self.domain(); +} + +- (CPString)localizedDescription +{ + return self.description(); +} + +- (CPString)localizedFailureReason +{ + return self.failureReason(); +} + +- (CPArray)localizedRecoveryOptions +{ + var userInfo = self.userInfo(), + recoveryOptions = userInfo.valueForKey(CPLocalizedRecoveryOptionsErrorKey); + + return recoveryOptions; +} + +- (CPString)localizedRecoverySuggestion +{ + return self.recoverySuggestion(); +} + +- (id)recoveryAttempter +{ + var userInfo = self.userInfo(), + recoveryAttempter = userInfo.valueForKey(CPRecoveryAttempterErrorKey); + + return recoveryAttempter; +} + +- (CPString)description +{ + return [CPString stringWithFormat:@"Error Domain=%@ Code=%d \"%@\" UserInfo=%@", self.domain(), self.code(), self.description(), self.userInfo()]; } @end + +var CPErrorCodeKey = @"CPErrorCodeKey", + CPErrorDomainKey = @"CPErrorDomainKey", + CPErrorUserInfoKey = @"CPErrorUserInfoKey"; + +@implementation CPError (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + var code = [aCoder decodeIntForKey:CPErrorCodeKey], + domain = [aCoder decodeObjectForKey:CPErrorDomainKey], + userInfo = [aCoder decodeObjectForKey:CPErrorUserInfoKey]; + + return [self initWithDomain:domain + code:code + userInfo:userInfo]; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:self.domain() forKey:CPErrorDomainKey]; + [aCoder encodeObject:self.code() forKey:CPErrorCodeKey]; + [aCoder encodeObject:self.userInfo() forKey:CPErrorUserInfoKey]; +} + +@end + +CFError.prototype.isa = CPError; + From 7811521c0895bbd334cad59674ff5453239be667 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 09:02:56 -0400 Subject: [PATCH 092/234] New: CPURLError definitions This commit adds support for the CPURLError codes, with underlying support provided by Foundation's CFURL Errors. --- Foundation/CPURLError.j | 26 ++++++++++++++++++++++++++ Foundation/Foundation.j | 1 + 2 files changed, 27 insertions(+) create mode 100644 Foundation/CPURLError.j diff --git a/Foundation/CPURLError.j b/Foundation/CPURLError.j new file mode 100644 index 000000000..a54ebdaaf --- /dev/null +++ b/Foundation/CPURLError.j @@ -0,0 +1,26 @@ + +CPURLErrorDomain = @"CPURLErrorDomain"; +CPURLErrorUnknown = -1; +CPURLErrorCancelled = kCFURLErrorCancelled; +CPURLErrorBadURL = kCFURLErrorBadURL; +CPURLErrorTimedOut = kCFURLErrorTimedOut; +CPURLErrorUnsupportedURL = kCFURLErrorUnsupportedURL; +CPURLErrorCannotFindHost = kCFURLErrorCannotFindHost; +CPURLErrorCannotConnectToHost = kCFURLErrorCannotConnectToHost; +CPURLErrorNetworkConnectionLost = kCFURLErrorNetworkConnectionLost; +CPURLErrorDNSLookupFailed = kCFURLErrorDNSLookupFailed; +CPURLErrorHTTPTooManyRedirects = kCFURLErrorHTTPTooManyRedirects; +CPURLErrorResourceUnavailable = kCFURLErrorResourceUnavailable; +CPURLErrorNotConnectedToInternet = kCFURLErrorNotConnectedToInternet; +CPURLErrorRedirectToNonExistentLocation = kCFURLErrorRedirectToNonExistentLocation; +CPURLErrorBadServerResponse = kCFURLErrorBadServerResponse; +CPURLErrorUserCancelledAuthentication = kCFURLErrorUserCancelledAuthentication; +CPURLErrorUserAuthenticationRequired = kCFURLErrorUserAuthenticationRequired; +CPURLErrorZeroByteResource = kCFURLErrorZeroByteResource; +CPURLErrorCannotDecodeRawData = kCFURLErrorCannotDecodeRawData; +CPURLErrorCannotDecodeContentData = kCFURLErrorCannotDecodeContentData; +CPURLErrorCannotParseResponse = kCFURLErrorCannotParseResponse; +CPURLErrorFileDoesNotExist = kCFURLErrorFileDoesNotExist; +CPURLErrorFileIsDirectory = kCFURLErrorFileIsDirectory; +CPURLErrorNoPermissionsToReadFile = kCFURLErrorNoPermissionsToReadFile; +CPURLErrorDataLengthExceedsMaximum = kCFURLErrorDataLengthExceedsMaximum; \ No newline at end of file diff --git a/Foundation/Foundation.j b/Foundation/Foundation.j index ab9d5fdb2..3fa485412 100755 --- a/Foundation/Foundation.j +++ b/Foundation/Foundation.j @@ -73,6 +73,7 @@ @import "CPUndoManager.j" @import "CPURL.j" @import "CPURLConnection.j" +@import "CPURLError.j" @import "CPURLRequest.j" @import "CPURLResponse.j" @import "CPUserDefaults.j" From 6fe30547388aa3925641b7786fe503988bfd7115 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 09:04:57 -0400 Subject: [PATCH 093/234] New: Unit tests for CFError methods --- Tests/Objective-J/CFErrorTest.j | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Tests/Objective-J/CFErrorTest.j diff --git a/Tests/Objective-J/CFErrorTest.j b/Tests/Objective-J/CFErrorTest.j new file mode 100644 index 000000000..b839ff723 --- /dev/null +++ b/Tests/Objective-J/CFErrorTest.j @@ -0,0 +1,60 @@ +@import + + +@implementation CFErrorTest : OJTestCase + +- (void)testCreate +{ + var err = new CFError(); + [self assertNotNull:err]; +} + +- (void)testCreateWithParams +{ + var err = new CFError(kCFErrorDomainCappuccino, -1000, nil); + [self assertNotNull:err]; + [self assert:-1000 equals:err.code()]; +} + +- (void)testCreateGlobal +{ + var err = CFErrorCreate(kCFErrorDomainCappuccino, -1000, nil); + [self assertNotNull:err]; + + [self assert:kCFErrorDomainCappuccino equals:err.domain()]; + [self assert:-1000 equals:err.code()]; + [self assert:@"CPErrorDomainCappuccino" equals:CFErrorGetDomain(err)]; +} + +- (void)testCreateWithUserInfoKeysAndValues +{ + var err = CFErrorCreateWithUserInfoKeysAndValues(kCFErrorDomainCappuccino, -1000, [kCFErrorLocalizedDescriptionKey, kCFErrorDescriptionKey], [@"A localized description", @"An error description"], 2); + [self assertNotNull:err]; + + var info = err.userInfo(); + [self assert:2 equals:info.count()]; +} + +- (void)testDescriptionCaseOne +{ + // Description case 1: Localized Key set + var err = CFErrorCreateWithUserInfoKeysAndValues(kCFErrorDomainCappuccino, -1000, [kCFErrorLocalizedDescriptionKey], [@"A localized Description Key"], 1); + [self assert:@"A localized Description Key" equals:err.description()]; + [self assert:@"A localized Description Key" equals:CFErrorCopyDescription(err)]; +} + +- (void)testDescriptionCaseTwo +{ + // Case 2: Reason set; description generated + var err = CFErrorCreateWithUserInfoKeysAndValues(kCFErrorDomainCappuccino, -1000, [kCFErrorLocalizedFailureReasonKey], [@"A localized reason"], 1); + [self assert:@"The operation couldn\u2019t be completed. A localized reason" equals:err.description()]; +} + +- (void)testDescriptionCaseThree +{ + // Case 3: Final fall-back. + var err = CFErrorCreateWithUserInfoKeysAndValues(kCFErrorDomainCappuccino, -1000, [kCFErrorDescriptionKey], [@"A description key"], 1); + [self assert:@"The operation couldn\u2019t be completed. (error -1000 - A description key)" equals:err.description()]; +} + +@end \ No newline at end of file From 2cc67f23ab93a095ba68ab7be5a94e2c39c3bc2e Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 09:12:35 -0400 Subject: [PATCH 094/234] New: CPError unit test --- Tests/Foundation/CPErrorTest.j | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Tests/Foundation/CPErrorTest.j diff --git a/Tests/Foundation/CPErrorTest.j b/Tests/Foundation/CPErrorTest.j new file mode 100644 index 000000000..4705f558a --- /dev/null +++ b/Tests/Foundation/CPErrorTest.j @@ -0,0 +1,24 @@ +@import +@import + +@implementation CPErrorTest : OJTestCase +{ +} + +- (void)testInstanceInstantiation +{ + var err = [[CPError alloc] initWithDomain:CPCappuccinoErrorDomain + code:-10 + userInfo:nil]; + [self assertNotNull:err]; +} + +- (void)testClassInstantiation +{ + var err = [CPError errorWithDomain:CPCappuccinoErrorDomain + code:-10 + userInfo:nil]; + [self assertNotNull:err]; +} + +@end \ No newline at end of file From 660d36e001dc928c7f18d0f744ea0d4ae9e38550 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 09:26:37 -0400 Subject: [PATCH 095/234] Updating CPError tests --- Tests/Foundation/CPErrorTest.j | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Tests/Foundation/CPErrorTest.j b/Tests/Foundation/CPErrorTest.j index 4705f558a..7e482a3a2 100644 --- a/Tests/Foundation/CPErrorTest.j +++ b/Tests/Foundation/CPErrorTest.j @@ -21,4 +21,23 @@ [self assertNotNull:err]; } +- (void)testUserInfoDict +{ + var userInfo = @{ + CPLocalizedDescriptionKey: @"A localized error description", + CPUnderlyingErrorKey: @"An underlying error", + CPLocalizedFailureReasonErrorKey: @"A localized error reason", + CPLocalizedRecoverySuggestionErrorKey: @"The world is about to explode. You can choose to ignore this.", + CPLocalizedRecoveryOptionsErrorKey: ["Cry", "Ignore"] + }, + err = [CPError errorWithDomain:CPCappuccinoErrorDomain + code:-10 + userInfo:userInfo]; + + [self assertNotNull:[err userInfo]]; + [self assert:[err localizedDescription] equals:@"A localized error description"]; + [self assert:[err localizedRecoveryOptions] equals:["Cry", "Ignore"]]; + [self assertNull:[err recoveryAttempter]]; +} + @end \ No newline at end of file From ef5d1d6e58cd6556021818d8c4a34650df4d4622 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 09:27:12 -0400 Subject: [PATCH 096/234] Fixed: Wrong method included on CPError --- Foundation/CPError.j | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Foundation/CPError.j b/Foundation/CPError.j index 7062bd08f..4ac772d61 100644 --- a/Foundation/CPError.j +++ b/Foundation/CPError.j @@ -87,9 +87,9 @@ var userInfo = @{CPLocalizedDescriptionKey: @"A localized error description", return self.code(); } -- (CPString)description +- (CPString)userInfo { - return self.description(); + return self.userInfo(); } - (CPString)domain @@ -97,6 +97,11 @@ var userInfo = @{CPLocalizedDescriptionKey: @"A localized error description", return self.domain(); } +/*! + By default this method returns the object in the user info dictionary for the key + NSLocalizedDescriptionKey. If the user info dictionary doesn’t contain a value for + NSLocalizedDescriptionKey, a default string is constructed from the domain and code. + */ - (CPString)localizedDescription { return self.description(); From 32c252393ab663e8a49d6c4e0800ecbd41638dd0 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 10:01:56 -0400 Subject: [PATCH 097/234] Fixed: Broken unit test --- Tests/Objective-J/CFErrorTest.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Objective-J/CFErrorTest.j b/Tests/Objective-J/CFErrorTest.j index b839ff723..cea9ba69a 100644 --- a/Tests/Objective-J/CFErrorTest.j +++ b/Tests/Objective-J/CFErrorTest.j @@ -23,7 +23,7 @@ [self assert:kCFErrorDomainCappuccino equals:err.domain()]; [self assert:-1000 equals:err.code()]; - [self assert:@"CPErrorDomainCappuccino" equals:CFErrorGetDomain(err)]; + [self assert:@"CPCappuccinoErrorDomain" equals:CFErrorGetDomain(err)]; } - (void)testCreateWithUserInfoKeysAndValues From 9621d76faa68c52b8c323c92ca8ef8779f1be652 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 12:10:23 -0400 Subject: [PATCH 098/234] Fixed: NativeHost is no longer built by default This commit removes NativeHost from the 'Tools' Jakefile, ensuring that it does not get built by default. Fixes #2239 --- Tools/Jakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/Jakefile b/Tools/Jakefile index d57ab7c6c..b0f0b52a8 100644 --- a/Tools/Jakefile +++ b/Tools/Jakefile @@ -2,6 +2,6 @@ require("../common.jake"); // nib2cib uses fontinfo and imagesize and capp uses nib2cib -subtasks(["fontinfo", "imagesize", "nib2cib", "capp", "capp_lint", "dump_theme", "NativeHost", "XcodeCapp"], ["build"/*, "clean", "clobber"*/]); +subtasks(["fontinfo", "imagesize", "nib2cib", "capp", "capp_lint", "dump_theme", "XcodeCapp"], ["build", /*"clean", "clobber"*/]); subtasks(["fontinfo", "imagesize"], ["clean", "clobber"]); From c37f0cfaa9bae48269f06fbc3889613964893f75 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 12:20:03 -0400 Subject: [PATCH 099/234] Fixed: Removed old CI scripts from the Tools directory The Tools directory contained some old scripts for a previous continuous integration system. Since we're using Travis now, these are no longer needed. --- Tools/Scripts/ci-extra-nightlies.sh | 10 -------- Tools/Scripts/ci.sh | 36 ----------------------------- Tools/Scripts/cruise_config.rb | 6 ----- Tools/Scripts/githooks/pre-commit | 3 --- 4 files changed, 55 deletions(-) delete mode 100644 Tools/Scripts/ci-extra-nightlies.sh delete mode 100755 Tools/Scripts/ci.sh delete mode 100644 Tools/Scripts/cruise_config.rb delete mode 100755 Tools/Scripts/githooks/pre-commit diff --git a/Tools/Scripts/ci-extra-nightlies.sh b/Tools/Scripts/ci-extra-nightlies.sh deleted file mode 100644 index b0726ab50..000000000 --- a/Tools/Scripts/ci-extra-nightlies.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -PACKAGE_BRANCH="nightly" jake push-packages -code=$? -if [ $code -ne 0 ]; then - echo "NIGHTLY BUILD PUSH FAILED ($code)" - exit $code -else - echo "NIGHTLY BUILD PUSH SUCCEEDED" -fi diff --git a/Tools/Scripts/ci.sh b/Tools/Scripts/ci.sh deleted file mode 100755 index 4cce6225e..000000000 --- a/Tools/Scripts/ci.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -project_home="$(dirname "$PWD")" -extras="$project_home/ci-extra.sh" - -export PATH="$HOME/narwhal/bin:$PATH" -export CAPP_AUTO_UPGRADE="yes" - -export CAPP_BUILD="$project_home/build_incremental" -time jake CommonJS test-only -code=$? -if [ $code -ne 0 ]; then - echo "INCREMENTAL BUILD FAILED ($code)" - exit $code -else - echo "INCREMENTAL BUILD SUCCEEDED" -fi - -export CAPP_BUILD="$project_home/build_clean" -rm -rf "$CAPP_BUILD" - -time jake CommonJS test-only -code=$? -if [ $code -ne 0 ]; then - echo "CLEAN BUILD FAILED ($code)" - exit $code -else - echo "CLEAN BUILD SUCCEEDED" -fi - -# run any additional ci commands not common to all branches (like nightly builds) -if [ -f "$extras" ]; then - source "$extras" -fi - -exit 0 diff --git a/Tools/Scripts/cruise_config.rb b/Tools/Scripts/cruise_config.rb deleted file mode 100644 index 17c14a20d..000000000 --- a/Tools/Scripts/cruise_config.rb +++ /dev/null @@ -1,6 +0,0 @@ -Project.configure do |project| - - project.email_notifier.emails = ['objjbuild@googlegroups.com'] - project.build_command = 'Tools/Scripts/ci.sh' - -end diff --git a/Tools/Scripts/githooks/pre-commit b/Tools/Scripts/githooks/pre-commit deleted file mode 100755 index e5f2f4587..000000000 --- a/Tools/Scripts/githooks/pre-commit +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -jake test-only From db63c91f997e7888d178ac47427948f43713fd18 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Mon, 3 Nov 2014 16:59:42 +0100 Subject: [PATCH 100/234] Manual/TableTest/ViewBasedCib: show how to bind in code a CPTableCellView subview --- .../TableTest/ViewBasedCib/AppController.j | 27 ++--- .../ViewBasedCib/Resources/TableCellView.cib | 2 +- .../ViewBasedCib/Resources/TableCellView.xib | 107 +++++++++++++----- 3 files changed, 92 insertions(+), 44 deletions(-) diff --git a/Tests/Manual/TableTest/ViewBasedCib/AppController.j b/Tests/Manual/TableTest/ViewBasedCib/AppController.j index e2b37cf87..53e6fabe2 100644 --- a/Tests/Manual/TableTest/ViewBasedCib/AppController.j +++ b/Tests/Manual/TableTest/ViewBasedCib/AppController.j @@ -98,6 +98,20 @@ CPLogRegister(CPLogConsole) return self; } +- (void)awakeFromCib +{ + // self is the owner parameter specified in -makeViewWithIdentifier:owner: + // This method is called each time a cib containing a CPTableCellView is instantiated. + // Outlets are now connected and available. + // If the view has its own xib, only the view will be instantiated and connected to the owner. + if (externalView) + { + CPLog.debug(_cmd + " loaded externalView : " + externalView); + [[externalView textField] setTextColor:[CPColor greenColor]]; + [imageView bind:CPValueURLBinding toObject:externalView withKeyPath:"objectValue.image.path" options:nil]; + } +} + - (CPView)makeOrangeView { var orangeView = [[CustomView alloc] initWithFrame:CGRectMakeZero()]; @@ -189,19 +203,6 @@ CPLogRegister(CPLogConsole) return [height intValue]; } -- (void)awakeFromCib -{ - // self is the owner parameter specified in -makeViewWithIdentifier:owner: - // This method is called each time a cib containing a CPTableCellView is instantiated. - // Outlets are now connected and available. - // If the view has its own xib, only the view will be instantiated and connected to the owner. - if (externalView) - { - CPLog.debug(_cmd + " loaded externalView : " + externalView); - [[externalView textField] setTextColor:[CPColor greenColor]]; - } -} - // CELL VIEWS ACTIONS - (IBAction)_sliderAction:(id)sender { diff --git a/Tests/Manual/TableTest/ViewBasedCib/Resources/TableCellView.cib b/Tests/Manual/TableTest/ViewBasedCib/Resources/TableCellView.cib index 9639dfe50..054532cca 100644 --- a/Tests/Manual/TableTest/ViewBasedCib/Resources/TableCellView.cib +++ b/Tests/Manual/TableTest/ViewBasedCib/Resources/TableCellView.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;45E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;46E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;47E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;33E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;35E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;31E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;33E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;52E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;53E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;54E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;56E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;57E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;58E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;59E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;60E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;61E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;62E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;59E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;64E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;65E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;66E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;68E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;69E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;70E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;71E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;72E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;73E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;70E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;75E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;76E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;77E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;79E;E;D;K;10;$classnameS;15;CPTableCellViewK;8;$classesA;S;15;CPTableCellViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;81E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;81E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;82E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;85E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;86E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;87E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;2;91E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;92E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;93E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;94E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;94E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;94E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;96E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;89E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;89E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;84E;K;11;$aalignmentD;K;6;CP$UIDd;2;80E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;80E;K;15;$aimage-scalingD;K;6;CP$UIDd;2;80E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;101E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;89E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;2;80E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;45E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;80E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;102E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;103E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;104E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;105E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;106E;K;11;$aalignmentD;K;6;CP$UIDd;2;80E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;107E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;94E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;80E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;110E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;80E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;111E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;37E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;113E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;45E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;37E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;45E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;116E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;37E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;45E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;114E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;117E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;2;94E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;2;94E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;2;92E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;2;94E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;2;92E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;2;92E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;2;92E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;2;94E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;2;92E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;118E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;119E;E;S;17;TableViewDelegateD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;12;externalViewS;9;imageViewS;9;textFieldS;4;viewS;20;contentArray: imagesS;12;contentArrayS;6;imagesD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;2;92E;E;E;S;24;content: arrangedObjectsS;7;contentS;15;arrangedObjectsD;K;6;$classD;K;6;CP$UIDd;2;55E;K;10;CP.objectsD;E;E;S;31;contentObjects: arrangedObjectsS;14;contentObjectsD;K;6;$classD;K;6;CP$UIDd;2;55E;K;10;CP.objectsD;E;E;S;35;contentValues: arrangedObjects.nameS;13;contentValuesS;20;arrangedObjects.nameD;K;6;$classD;K;6;CP$UIDd;2;55E;K;10;CP.objectsD;E;E;S;33;selectedObject: objectValue.imageS;14;selectedObjectS;17;objectValue.imageD;K;6;$classD;K;6;CP$UIDd;2;55E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;2;92E;E;E;S;25;hidden: objectValue.imageS;6;hiddenD;K;6;$classD;K;6;CP$UIDd;2;55E;K;10;CP.objectsD;K;22;CPValueTransformerNameD;K;6;CP$UIDd;3;120E;E;E;S;32;valueURL: objectValue.image.pathS;8;valueURLS;22;objectValue.image.pathD;K;6;$classD;K;6;CP$UIDd;2;55E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;2;92E;E;E;S;13;CPApplicationd;1;0S;20;{{0, 0}, {375, 108}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;37E;E;E;d;2;18S;6;normalS;22;{{107, 46}, {161, 17}}S;19;{{0, 0}, {161, 17}}d;2;45S;9;textfieldd;1;4D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;121E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;94E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;94E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;92E;E;T;S;24;Loaded From External CibF;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;95E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;123E;E;S;19;{{3, 16}, {69, 77}}S;18;{{0, 0}, {69, 77}}d;2;20D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;100E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;124E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;125E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;126E;E;S;21;{{79, 13}, {160, 25}}S;19;{{0, 0}, {160, 25}}d;2;36S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;90E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;121E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;92E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;94E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;92E;E;S;0;d;2;12d;1;2S;6;Item 1S;17;_popUpItemAction:d;1;1d;7;1048576S;6;Item 2S;6;Item 3S;19;CPMutableDictionaryS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;E;E;S;7;CPIsNilS;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;113E;E;E;S;7;CPImageS;8;brad.jpgD;K;6;$classD;K;6;CP$UIDd;2;55E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;129E;E;E;f;18;0.6862745098039216D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;128E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;130E;E;S;26;{"width":100,"height":134}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;36E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;45E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;46E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;32E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;52E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;53E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;55E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;56E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;57E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;58E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;60E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;61E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;58E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;62E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;63E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;64E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;65E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;67E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;68E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;69E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;36E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;71E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;72E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;69E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;73E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;74E;E;D;K;10;$classnameS;15;CPTableCellViewK;8;$classesA;S;15;CPTableCellViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;76E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;76E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;77E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;78E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;79E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;80E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;80E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;81E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;82E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;83E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;84E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;85E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;11;$aalignmentD;K;6;CP$UIDd;2;87E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;87E;K;6;$afontD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;80E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;80E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;81E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;90E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;91E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;87E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;75E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;81E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;81E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;81E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;93E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;87E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;87E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;94E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;15;$aimage-scalingD;K;6;CP$UIDd;2;75E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;80E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;80E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;98E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;87E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;75E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;2;75E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;44E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;75E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;99E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;100E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;87E;K;6;$afontD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;80E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;80E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;75E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;87E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;75E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;104E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;105E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;75E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;90E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;106E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;75E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;107E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;36E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;108E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;109E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;111E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;36E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;108E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;36E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;108E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;44E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;110E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;113E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;2;81E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;2;81E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;2;90E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;2;81E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;2;90E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;2;90E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;2;90E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;2;81E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;2;90E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;114E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;115E;E;S;17;TableViewDelegateD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;12;externalViewS;9;imageViewS;9;textFieldS;4;viewS;20;contentArray: imagesS;12;contentArrayS;6;imagesD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;2;90E;E;E;S;24;content: arrangedObjectsS;7;contentS;15;arrangedObjectsD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;E;E;S;31;contentObjects: arrangedObjectsS;14;contentObjectsD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;E;E;S;35;contentValues: arrangedObjects.nameS;13;contentValuesS;20;arrangedObjects.nameD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;E;E;S;33;selectedObject: objectValue.imageS;14;selectedObjectS;17;objectValue.imageD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;K;22;CPValidatesImmediatelyD;K;6;CP$UIDd;2;90E;E;E;S;25;hidden: objectValue.imageS;6;hiddenD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;K;22;CPValueTransformerNameD;K;6;CP$UIDd;3;116E;E;E;S;13;CPApplicationd;1;0S;20;{{0, 0}, {375, 108}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;36E;E;E;d;2;18S;6;normalS;6;{1, 1}F;S;22;{{106, 46}, {163, 17}}S;19;{{0, 0}, {163, 17}}d;2;45S;9;textfieldS;18;controlSizeRegulard;1;4D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;88E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;117E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;118E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;81E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;81E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;81E;E;T;S;24;Loaded From External CibD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;92E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;119E;E;S;19;{{3, 16}, {69, 77}}S;18;{{0, 0}, {69, 77}}d;2;20D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;120E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;121E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;122E;E;S;21;{{79, 16}, {160, 25}}S;19;{{0, 0}, {160, 25}}d;2;36S;12;popup-buttonS;27;bordered+controlSizeRegularS;0;d;2;12d;1;2S;6;Item 1S;17;_popUpItemAction:d;1;1d;7;1048576S;6;Item 2S;6;Item 3S;19;CPMutableDictionaryS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;E;E;S;7;CPIsNilS;17;.Lucida Grande UId;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;109E;E;E;S;7;CPImageS;8;brad.jpgD;K;6;$classD;K;6;CP$UIDd;2;54E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;125E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;104E;K;9;frameworkD;K;6;CP$UIDd;3;104E;E;E;f;18;0.6862745098039216D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;124E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;126E;E;S;26;{"width":100,"height":134}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/TableTest/ViewBasedCib/Resources/TableCellView.xib b/Tests/Manual/TableTest/ViewBasedCib/Resources/TableCellView.xib index 2aff333ee..19eba01d7 100644 --- a/Tests/Manual/TableTest/ViewBasedCib/Resources/TableCellView.xib +++ b/Tests/Manual/TableTest/ViewBasedCib/Resources/TableCellView.xib @@ -1,14 +1,14 @@ - 1070 - 11G63 - 2844 - 1138.51 - 569.00 + 101000 + 13F34 + 6250 + 1265.21 + 698.00 com.apple.InterfaceBuilder.CocoaPlugin - 2844 + 6250 NSArrayController @@ -74,6 +74,7 @@ 0 NO
+ NO YES
@@ -91,7 +92,7 @@ 272631808 Loaded From External Cib - LucidaGrande + YES 13 1044 @@ -116,6 +117,8 @@
+ NO + 1
@@ -127,7 +130,7 @@ _NS:9 YES - -2076049856 + -2076180416 2048 _NS:9 @@ -191,6 +194,7 @@ YES 2 + NO
{375, 108} @@ -209,7 +213,7 @@
- + textField @@ -258,26 +262,6 @@ 7 - - - valueURL: objectValue.image.path - - - - - - valueURL: objectValue.image.path - valueURL - objectValue.image.path - - NSValidatesImmediately - - - 2 - - - 163 - hidden: objectValue.image @@ -528,15 +512,78 @@ TableViewDelegate NSObject + + id + id + id + + + + _sliderAction: + id + + + _textFieldBezeledAction: + id + + + _textFieldNotBezeledAction: + id + + + + NSArrayController + NSView + NSImageView + NSView + NSView + NSTextField + NSTableCellView + + + + contentController + NSArrayController + + + externalView + NSView + + + imageView + NSImageView + + + personView + NSView + + + placeView + NSView + + + textField + NSTextField + + + view + NSTableCellView + + IBProjectSource - ./Classes/TableViewDelegate.h + ../.XcodeSupport/AppController.h 0 IBCocoaFramework + NO + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + YES 3 From 5bd07716eba18f5d9cb397c099dbd64a35bbd8d2 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 14:49:25 -0800 Subject: [PATCH 101/234] New: new options for the command objj This pull requests adds the following feature for the command objj: - Option -h or --help to get the help of the command - Option -I or --objj-include-paths to specify the frameworks to be used - Possibility to pass several files to the command, for example objj AppController.j Test.j --- Objective-J/CommonJS/lib/objective-j.js | 38 +++++++++++++++++++------ 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index cf5504a3f..ff89d8766 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -79,27 +79,47 @@ exports.run = function(args) // copy the args since we're going to modify them var argv = args.slice(1); - if (argv[0] === "--version") + if (argv[0] === "--version" || argv[0] === "-v") { print(exports.fullVersionString()); return; } - while (argv.length && argv[0].indexOf('-I') === 0) - OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().substr(2).split(':')); + if (argv[0] === "--help" || argv[0] === "-h") + { + print("Usage (objj): " + args[0] + " [options] [--] files..."); + print(" -v, --version print the current version of objj"); + print(" -I, --objj-include-paths specify the framework to be used") + print(" -h, --help print this help"); + return; + } + + while (argv.length && argv[0] == "-I" || argv[0] == "--objj-include-paths") + { + argv.shift(); + OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().split(":")); + } } if (argv && argv.length > 0) { - var arg0 = argv.shift(); - var mainFilePath = FILE.canonical(arg0); + while (argv.length > 0) + { + var arg0 = argv.shift(); + var mainFilePath = FILE.canonical(arg0); - exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); - if (typeof main === "function") - main([arg0].concat(argv)); + if (typeof main === "function") + main([arg0].concat(argv)); - require("browser/timeout").serviceTimeouts(); + require("browser/timeout").serviceTimeouts(); + + ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); + ObjectiveJ.StaticResource.resetRootResources(); + ObjectiveJ.FileExecutable.resetFileExecutables(); + objj_resetRegisterClasses(); + } } else { From f21dcb8265d78683f984aa70014e1fb91a191ae7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 15:25:47 -0800 Subject: [PATCH 102/234] New: Added option --parser/-p to the command objj Previously it wasn't possible to specify a custom parser for the command objj. This is needed for xCodeCapp --- Objective-J/CommonJS/lib/objective-j.js | 8 +++++++- Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index ff89d8766..47d838406 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -90,10 +90,16 @@ exports.run = function(args) print("Usage (objj): " + args[0] + " [options] [--] files..."); print(" -v, --version print the current version of objj"); print(" -I, --objj-include-paths specify the framework to be used") - print(" -h, --help print this help"); + print(" -p, --parser specify to use a specific parser") return; } + if (argv[0] === "-p" || argv[0] === "--parser") + { + argv.shift(); + optionalParserUsed = true; + } + while (argv.length && argv[0] == "-I" || argv[0] == "--objj-include-paths") { argv.shift(); diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 81e9b7cf6..0a987b2e3 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -71,6 +71,7 @@ { launchPath = self.xcc.executablePaths[@"objj"]; arguments = @[ + @"--parser", self.xcc.parserPath, self.projectPath, self.sourcePath From f74888419c4bb29d4acb7715e11b796df4b17500 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 15:33:37 -0800 Subject: [PATCH 103/234] Fixed: part of the code missing after the previous commit refs #f21dcb8265d78683f984aa70014e1fb91a191ae7 --- Objective-J/CommonJS/lib/objective-j.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 47d838406..c123e81c0 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -121,6 +121,12 @@ exports.run = function(args) require("browser/timeout").serviceTimeouts(); + if (optionalParserUsed) + { + // Here we have no idea what the parser does...this is used for xCodeCapp + break; + } + ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); ObjectiveJ.StaticResource.resetRootResources(); ObjectiveJ.FileExecutable.resetFileExecutables(); From 5678fe3b83fbb4e27f231b14ca59584b22127127 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 18:12:47 -0800 Subject: [PATCH 104/234] Fixed: change option -p in objj by bash concept -- --- Objective-J/CommonJS/lib/objective-j.js | 23 +++++++++---------- .../XcodeCapp/ProcessSourceOperation.m | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index c123e81c0..4b74070c2 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -89,17 +89,11 @@ exports.run = function(args) { print("Usage (objj): " + args[0] + " [options] [--] files..."); print(" -v, --version print the current version of objj"); - print(" -I, --objj-include-paths specify the framework to be used") - print(" -p, --parser specify to use a specific parser") + print(" -I, --objj-include-paths include a specific framework paths") + print(" -h, --help print this help"); return; } - if (argv[0] === "-p" || argv[0] === "--parser") - { - argv.shift(); - optionalParserUsed = true; - } - while (argv.length && argv[0] == "-I" || argv[0] == "--objj-include-paths") { argv.shift(); @@ -109,6 +103,8 @@ exports.run = function(args) if (argv && argv.length > 0) { + var endCommand = false; + while (argv.length > 0) { var arg0 = argv.shift(); @@ -116,16 +112,19 @@ exports.run = function(args) exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + if (argv[0] == "--") + { + endCommand = true; + argv.shift(); + } + if (typeof main === "function") main([arg0].concat(argv)); require("browser/timeout").serviceTimeouts(); - if (optionalParserUsed) - { - // Here we have no idea what the parser does...this is used for xCodeCapp + if (endCommand) break; - } ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); ObjectiveJ.StaticResource.resetRootResources(); diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 0a987b2e3..8d95e03a8 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -71,8 +71,8 @@ { launchPath = self.xcc.executablePaths[@"objj"]; arguments = @[ - @"--parser", self.xcc.parserPath, + @"--", self.projectPath, self.sourcePath ]; From 4d77e7dd6b74f010b650db3c7db74dc7a7c88f91 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 19:54:35 -0800 Subject: [PATCH 105/234] Fixed: fixed issue with press, capp and nib2cib with the new command objj --- Objective-J/CommonJS/lib/objective-j.js | 3 +++ Objective-J/CommonJS/objj-executable | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 4b74070c2..883e34e7f 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -119,7 +119,10 @@ exports.run = function(args) } if (typeof main === "function") + { main([arg0].concat(argv)); + endCommand = true; + } require("browser/timeout").serviceTimeouts(); diff --git a/Objective-J/CommonJS/objj-executable b/Objective-J/CommonJS/objj-executable index 919302c11..9f2f05a02 100755 --- a/Objective-J/CommonJS/objj-executable +++ b/Objective-J/CommonJS/objj-executable @@ -3,5 +3,5 @@ var execPath = require("file").path(module.path); var mainPath = execPath.dirname().dirname().join("lib", execPath.basename(), "main.j"); -var args = ["objj", String(mainPath)].concat(system.args.slice(1)); +var args = ["objj", String(mainPath), "--"].concat(system.args.slice(1)); require("objective-j").run(args); From 7abcc42a42962b6bfbcb75be4372709ad133fc7e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 19:55:02 -0800 Subject: [PATCH 106/234] Test: updated test ToolTest.j. Added tests for capp_lint and objj --- Tests/Tools/ToolsTest.j | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index b3e16e59e..0b4605664 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -29,6 +29,18 @@ function cleanup() { status = OS.system(["flatten", "-f", "ToolsTestApp", "FlattenTestApp"].map(OS.enquote).join(" ") + " > /dev/null"); [self assert:0 equals:status message:"flatten failed"]; + + status = OS.system(["objj", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed"]; + + status = OS.system(["objj", "ToolsTestApp/AppController.j", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed with several files"]; + + status = OS.system(["objj", "-I", "ToolsTestApp/Frameworks", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed with options -I"]; + + status = OS.system(["capp_lint", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"capp lint failed"]; } - (void)tearDown From 2bf012100a04eb67714486a1dcffd67d1c51f519 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 21:02:15 -0800 Subject: [PATCH 107/234] Test: removed test for capp_lint --- Tests/Manual/MultipleValueBindings/AppController.j | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Tests/Manual/MultipleValueBindings/AppController.j b/Tests/Manual/MultipleValueBindings/AppController.j index bbc814a2f..a39a346b4 100644 --- a/Tests/Manual/MultipleValueBindings/AppController.j +++ b/Tests/Manual/MultipleValueBindings/AppController.j @@ -6,8 +6,8 @@ * Copyright 2013, Cappuccino Foundation. All rights reserved. */ -@import -@import +@import +@import @import "Transformers.j" @@ -28,12 +28,13 @@ - (id)init { - if (self = [super init]) + if (self = super init]) { foo = nil; [self setNow]; [self setAllowColorChange:NO]; [self setCanEditPeople:YES]; + people = [ [CPDictionary dictionaryWithObjectsAndKeys:@"tom", @"firstname", @"jones", @"lastname", 27, @"age", 0, @"numberOfChildren"], [CPDictionary dictionaryWithObjectsAndKeys:@"dick", @"firstname", @"clark", @"lastname", 31, @"age", 4, @"numberOfChildren"], From 735b0f8593d5ef398bee8c664ab7778f722bad13 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 21:22:01 -0800 Subject: [PATCH 108/234] Revert "Test: removed test for capp_lint" This reverts commit 2bf012100a04eb67714486a1dcffd67d1c51f519. --- Tests/Manual/MultipleValueBindings/AppController.j | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Tests/Manual/MultipleValueBindings/AppController.j b/Tests/Manual/MultipleValueBindings/AppController.j index a39a346b4..bbc814a2f 100644 --- a/Tests/Manual/MultipleValueBindings/AppController.j +++ b/Tests/Manual/MultipleValueBindings/AppController.j @@ -6,8 +6,8 @@ * Copyright 2013, Cappuccino Foundation. All rights reserved. */ -@import -@import +@import +@import @import "Transformers.j" @@ -28,13 +28,12 @@ - (id)init { - if (self = super init]) + if (self = [super init]) { foo = nil; [self setNow]; [self setAllowColorChange:NO]; [self setCanEditPeople:YES]; - people = [ [CPDictionary dictionaryWithObjectsAndKeys:@"tom", @"firstname", @"jones", @"lastname", 27, @"age", 0, @"numberOfChildren"], [CPDictionary dictionaryWithObjectsAndKeys:@"dick", @"firstname", @"clark", @"lastname", 31, @"age", 4, @"numberOfChildren"], From 58f2d7117a825e2e56c6b3393ea1a9d2a41a56d9 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 21:22:31 -0800 Subject: [PATCH 109/234] Test: removed test for capp_lint --- Tests/Tools/ToolsTest.j | 3 --- 1 file changed, 3 deletions(-) diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index 0b4605664..b588f25c7 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -38,9 +38,6 @@ function cleanup() { status = OS.system(["objj", "-I", "ToolsTestApp/Frameworks", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed with options -I"]; - - status = OS.system(["capp_lint", "ToolsTestApp/AppController.j"]); - [self assert:0 equals:status message:"capp lint failed"]; } - (void)tearDown From ad82b0064a240232d8e9834e1703776de6edd286 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 4 Nov 2014 13:23:54 -0800 Subject: [PATCH 110/234] Fixed: added options -m for objj. This option allows you to make objj on several files --- Objective-J/CommonJS/lib/objective-j.js | 27 ++++++++++++------- Objective-J/CommonJS/objj-executable | 2 +- Tests/Tools/ToolsTest.j | 2 +- .../XcodeCapp/ProcessSourceOperation.m | 19 +++++++------ 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 883e34e7f..1bce5a864 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -68,6 +68,8 @@ with (window) // runs the objj repl or file provided in args exports.run = function(args) { + var multipleFiles = false; + if (args) { // we expect args to be in the format: @@ -91,13 +93,24 @@ exports.run = function(args) print(" -v, --version print the current version of objj"); print(" -I, --objj-include-paths include a specific framework paths") print(" -h, --help print this help"); + print(" -m, --multifiles launch objj on several files") return; } - while (argv.length && argv[0] == "-I" || argv[0] == "--objj-include-paths") + while (argv.length && argv[0].indexOf('-') === 0) { - argv.shift(); - OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().split(":")); + switch (argv[0]) + { + case "-I": + argv.shift(); + OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().split(":")); + break; + + case "-m": + argv.shift(); + multipleFiles = true; + break + } } } @@ -112,12 +125,6 @@ exports.run = function(args) exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); - if (argv[0] == "--") - { - endCommand = true; - argv.shift(); - } - if (typeof main === "function") { main([arg0].concat(argv)); @@ -126,7 +133,7 @@ exports.run = function(args) require("browser/timeout").serviceTimeouts(); - if (endCommand) + if (!multipleFiles || endCommand) break; ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); diff --git a/Objective-J/CommonJS/objj-executable b/Objective-J/CommonJS/objj-executable index 9f2f05a02..919302c11 100755 --- a/Objective-J/CommonJS/objj-executable +++ b/Objective-J/CommonJS/objj-executable @@ -3,5 +3,5 @@ var execPath = require("file").path(module.path); var mainPath = execPath.dirname().dirname().join("lib", execPath.basename(), "main.j"); -var args = ["objj", String(mainPath), "--"].concat(system.args.slice(1)); +var args = ["objj", String(mainPath)].concat(system.args.slice(1)); require("objective-j").run(args); diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index b588f25c7..000a05aa8 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -33,7 +33,7 @@ function cleanup() { status = OS.system(["objj", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed"]; - status = OS.system(["objj", "ToolsTestApp/AppController.j", "ToolsTestApp/AppController.j"]); + status = OS.system(["objj", "-m", "ToolsTestApp/AppController.j", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed with several files"]; status = OS.system(["objj", "-I", "ToolsTestApp/Frameworks", "ToolsTestApp/AppController.j"]); diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 8d95e03a8..7872f8887 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -44,7 +44,7 @@ return; NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - + NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath }; [center postNotificationName:XCCConversionDidStartNotification object:self userInfo:info]; @@ -72,7 +72,6 @@ launchPath = self.xcc.executablePaths[@"objj"]; arguments = @[ self.xcc.parserPath, - @"--", self.projectPath, self.sourcePath ]; @@ -85,21 +84,21 @@ return; [self.xcc performSelectorOnMainThread:@selector(computeIgnoredPaths) withObject:nil waitUntilDone:NO]; - + notificationTitle = @"Parsed .xcodecapp-ignore"; notificationMessage = @"Ignored paths updated"; } // Run the task and get the response if needed NSInteger status = 0; - + if (arguments) { if (self.isCancelled) return; DDLogVerbose(@"Running processing task: %@", launchPath); - + NSDictionary *taskResult = [self.xcc runTaskWithLaunchPath:launchPath arguments:arguments returnType:kTaskReturnTypeAny]; @@ -121,7 +120,7 @@ notificationTitle = @"Error converting xib"; NSString *message = [NSString stringWithFormat:@"%@\n%@", self.sourcePath.lastPathComponent, response]; - + NSDictionary *info = @{ @"projectId":self.projectId, @@ -132,7 +131,7 @@ if (self.isCancelled) return; - + [center postNotificationName:XCCConversionDidGenerateErrorNotification object:self userInfo:info]; } else @@ -153,14 +152,14 @@ [self postErrorNotificationForPath:self.sourcePath line:0 message:response status:status]; } } - + if ([self.xcc shouldShowErrorNotification]) [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } else if (!self.xcc.isLoadingProject) { BOOL showFinalNotification = YES; - + if ([self.xcc shouldProcessWithCappLint]) { showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]]; @@ -168,7 +167,7 @@ if (!showFinalNotification) [self.xcc showCappLintErrors]; } - + if (showFinalNotification) [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } From f486c02b5e99c2929e957e6e8548399a375e6f7e Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Nov 2014 10:55:19 -0800 Subject: [PATCH 111/234] FIXED: Some APIs in CPComboBox were broken Previously, when setting font, alignement, intercellSpacing or itemHeight, CPComboBox was assuming the listDelegate was already created. This patch stores the values in CPComboBox if the listDelegate is not ready, and apply them once it is. --- AppKit/CPComboBox.j | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 6b783b426..293d13ad2 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -71,6 +71,8 @@ var CPComboBoxTextSubview = @"text", BOOL _forceSelection; BOOL _hasVerticalScroller; CPString _selectedStringValue; + CGSize _intercellSpacing; + float _itemHeight; BOOL _popUpButtonCausedResign; } @@ -140,7 +142,9 @@ var CPComboBoxTextSubview = @"text", return; _hasVerticalScroller = flag; - [[_listDelegate scrollView] setHasVerticalScroller:flag]; + + if (_listDelegate) + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; } - (CGSize)intercellSpacing @@ -150,7 +154,13 @@ var CPComboBoxTextSubview = @"text", - (void)setIntercellSpacing:(CGSize)aSize { - [[_listDelegate tableView] setIntercellSpacing:aSize]; + if (_intercellSpacing && CGSizeEqualToSize(aSize, _intercellSpacing)) + return; + + _intercellSpacing = aSize; + + if (_listDelegate) + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; } - (BOOL)isButtonBordered @@ -173,10 +183,18 @@ var CPComboBoxTextSubview = @"text", - (void)setItemHeight:(float)itemHeight { - [[_listDelegate tableView] setRowHeight:itemHeight]; + if (itemHeight === _itemHeight) + return; - // FIXME: This shouldn't be necessary, but CPTableView does not tile after setRowHeight - [[_listDelegate tableView] reloadData]; + _itemHeight = itemHeight; + + if (_listDelegate) + { + [[_listDelegate tableView] setRowHeight:_itemHeight]; + + // FIXME: This shouldn't be necessary, but CPTableView does not tile after setRowHeight + [[_listDelegate tableView] reloadData]; + } } - (int)numberOfVisibleItems @@ -493,8 +511,16 @@ var CPComboBoxTextSubview = @"text", - (void)popUpList { if (!_listDelegate) + { [self setListDelegate:[[_CPPopUpList alloc] initWithDataSource:self]]; + [_listDelegate setFont:[self font]]; + [_listDelegate setAlignment:[self alignment]]; + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; + [[_listDelegate tableView] setRowHeight:_itemHeight]; + } + [self _selectMatchingItem]; // Note the offset here is 1 less than the focus ring width because the outer edge @@ -842,13 +868,17 @@ var CPComboBoxTextSubview = @"text", - (void)setFont:(CPFont)aFont { [super setFont:aFont]; - [_listDelegate setFont:aFont]; + + if (_listDelegate) + [_listDelegate setFont:aFont]; } - (void)setAlignment:(CPTextAlignment)alignment { [super setAlignment:alignment]; - [_listDelegate setAlignment:alignment]; + + if (_listDelegate) + [_listDelegate setAlignment:alignment]; } #pragma mark Pop Up Button Layout From d629f4b501b604687658dd11647c174c1350f467 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Nov 2014 11:11:03 -0800 Subject: [PATCH 112/234] STYLE: Make previous patch cleaner --- AppKit/CPComboBox.j | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 293d13ad2..b8a4481b8 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -469,6 +469,9 @@ var CPComboBoxTextSubview = @"text", // Apply our text style to the list [_listDelegate setFont:[self font]]; [_listDelegate setAlignment:[self alignment]]; + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; + [[_listDelegate tableView] setRowHeight:_itemHeight]; } - (int)indexOfItemWithObjectValue:(id)anObject @@ -511,16 +514,8 @@ var CPComboBoxTextSubview = @"text", - (void)popUpList { if (!_listDelegate) - { [self setListDelegate:[[_CPPopUpList alloc] initWithDataSource:self]]; - [_listDelegate setFont:[self font]]; - [_listDelegate setAlignment:[self alignment]]; - [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; - [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; - [[_listDelegate tableView] setRowHeight:_itemHeight]; - } - [self _selectMatchingItem]; // Note the offset here is 1 less than the focus ring width because the outer edge From 97a65059e595b07a65819c44974690ca516e9bc6 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 11:12:17 -0800 Subject: [PATCH 113/234] Fixed: when using the option -m, objj doesn't process every files in a error is raised, now it does --- Objective-J/CommonJS/lib/objective-j.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 1bce5a864..9dbf5ebd9 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -123,7 +123,23 @@ exports.run = function(args) var arg0 = argv.shift(); var mainFilePath = FILE.canonical(arg0); - exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + if (multipleFiles) + { + // This is needed to process every files passed in args + // Otherwise it would stop when an error is raised or we would like to objj the other given files + try + { + exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + } + catch(e) + { + print("\n" + e); + } + } + else + { + exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + } if (typeof main === "function") { From 459374db1cf426d82ba22919382645d201bd9c0f Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Nov 2014 11:35:14 -0800 Subject: [PATCH 114/234] FIXED: Open the popup list as a child window in CPComboBox --- AppKit/_CPPopUpList.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index f69f68f0a..2604f3652 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -229,7 +229,7 @@ var ListColumnIdentifier = @"1"; [self listWillPopUp]; - [_panel orderFront:nil]; + [[aView window] addChildWindow:_panel ordered:CPWindowAbove]; } #pragma mark Setting Display Attributes From b827b7ffce7b1e3ffe44e4409926703d5ec1daa7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 12:57:03 -0800 Subject: [PATCH 115/234] New: xCodeCapp 3.2, command objj on each processing files or on the entire project This pull requests adds a nice feature to xCodeCapp, now each time a fill is processing, xCodeCapp will launch the command objj to check the compilation issues. If it finds something, it will show them up on the classic error panel. This basically show import warnings, warnings you don't catch with your browser but only during the build of the application. Objj is only launched if no errors was found after the first parsing (the parser which translate a file to objective-c). This feature can be disabled on the preferences panel. The menu has a new menu item "Check Compilation Issues". This action will launch objj on each files of the project and shows warnings and errors found. The command objj will take automatically the OBJJ_INCLUDE_PATH in the index.html or index-debug.html. This options can be disabled in the preferences panel as well. This PR only works with the PR #2248 --- Tools/XcodeCapp/XcodeCapp/AppController.m | 32 +- Tools/XcodeCapp/XcodeCapp/Info.plist | 4 +- .../XcodeCapp/ProcessSourceOperation.m | 25 +- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 3 + Tools/XcodeCapp/XcodeCapp/UserDefaults.m | 4 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.h | 7 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 269 +++++- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 779 +++++++++++++++--- 8 files changed, 977 insertions(+), 146 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 86aa8c3d7..e72307bd3 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -138,21 +138,23 @@ AppController *SharedAppControllerInstance = nil; - (void)registerDefaultPreferences { NSDictionary *appDefaults = @{ - kDefaultLastEventId: [NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow], - kDefaultFirstLaunch: @YES, - kDefaultFirstLaunchVersion: @2.0, - kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], - kDefaultXCCReactToInodeMod: @YES, - kDefaultXCCReopenLastProject: @YES, - kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, - kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, - kDefaultXCCAutoShowNotificationOnErrors: @YES, - kDefaultXCCAutoShowNotificationOnCappLint: @YES, - kDefaultXCCProjectHistory: [NSArray new], - kDefaultMaxRecentProjects: @20, - kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], - kDefaultAutoOpenXcodeProject: @YES, - kDefaultUseSymlinkWhenCreatingProject: @YES + kDefaultLastEventId: [NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow], + kDefaultFirstLaunch: @YES, + kDefaultFirstLaunchVersion: @2.0, + kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], + kDefaultXCCReactToInodeMod: @YES, + kDefaultXCCReopenLastProject: @YES, + kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, + kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, + kDefaultXCCAutoShowNotificationOnErrors: @YES, + kDefaultXCCAutoShowNotificationOnCappLint: @YES, + kDefaultXCCProjectHistory: [NSArray new], + kDefaultMaxRecentProjects: @20, + kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], + kDefaultAutoOpenXcodeProject: @YES, + kDefaultUseSymlinkWhenCreatingProject: @YES, + kDefaultXCCUseDebugFrameworkWithObjj: @YES, + kDefaultXCCShouldProcessObjj: @YES }; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; diff --git a/Tools/XcodeCapp/XcodeCapp/Info.plist b/Tools/XcodeCapp/XcodeCapp/Info.plist index 7f59ef93d..ddb9c5a21 100644 --- a/Tools/XcodeCapp/XcodeCapp/Info.plist +++ b/Tools/XcodeCapp/XcodeCapp/Info.plist @@ -21,11 +21,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.1 + 3.2 CFBundleSignature ???? CFBundleVersion - 3.1 + 3.2 LSApplicationCategoryType public.app-category.developer-tools LSUIElement diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 81e9b7cf6..51786d82a 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -45,7 +45,7 @@ NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath }; + NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath}; [center postNotificationName:XCCConversionDidStartNotification object:self userInfo:info]; DDLogVerbose(@"Conversion started: %@", self.sourcePath); @@ -74,7 +74,7 @@ self.xcc.parserPath, self.projectPath, self.sourcePath - ]; + ]; notificationTitle = @"Objective-J source processed"; } @@ -141,7 +141,7 @@ @try { NSArray *errors = [response propertyList]; - + for (NSDictionary *error in errors) { [self postErrorNotificationForPath:error[@"path"] line:[error[@"line"] intValue] message:error[@"message"] status:status]; @@ -158,14 +158,23 @@ } else if (!self.xcc.isLoadingProject) { - BOOL showFinalNotification = YES; + BOOL showFinalNotification = NO; + + // At this point, we should only detect warnings + if ([self.xcc shouldProcessWithObjjWarnings]) + { + showFinalNotification = [self.xcc checkObjjWarningsForPath:[NSArray arrayWithObject:self.sourcePath]]; + [self.xcc showObjjWarnings]; + } + else + { + showFinalNotification = YES; + } if ([self.xcc shouldProcessWithCappLint]) { - showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]]; - - if (!showFinalNotification) - [self.xcc showCappLintErrors]; + showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]] && showFinalNotification; + [self.xcc showCappLintWarnings]; } if (showFinalNotification) diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index a89476cd0..903fd7b6c 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -19,8 +19,11 @@ extern NSString * const kDefaultXCCReactToInodeMod; extern NSString * const kDefaultXCCReopenLastProject; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; +extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnObjjWarnings; extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; +extern NSString * const kDefaultXCCUseDebugFrameworkWithObjj; +extern NSString * const kDefaultXCCShouldProcessObjj; extern NSString * const kDefaultXCCProjectHistory; extern NSString * const kDefaultLastOpenedPath; extern NSString * const kDefaultPathModificationDates; diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index aee5793ae..18e976581 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -19,6 +19,8 @@ NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors = @"XCCAutoOpenErrorsPan NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint = @"XCCAutoOpenErrorsPanelOnCappLint"; NSString * const kDefaultXCCAutoShowNotificationOnErrors = @"XCCAutoOpenShowNotificationErrors"; NSString * const kDefaultXCCAutoShowNotificationOnCappLint = @"XCCAutoShowNotificationOnCappLint"; +NSString * const kDefaultXCCUseDebugFrameworkWithObjj = @"XCCUseDebugFrameworkWithObjj"; +NSString * const kDefaultXCCShouldProcessObjj = @"XCCShouldProcessObjj"; NSString * const kDefaultXCCProjectHistory = @"XCCProjectHistory"; NSString * const kDefaultLastOpenedPath = @"LastOpenedPath"; NSString * const kDefaultPathModificationDates = @"pathModificationDates"; @@ -26,4 +28,4 @@ NSString * const kDefaultMaxRecentProjects = @"maxRecentProjects"; NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; -NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; +NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index 09f9ae64f..ef7b756c5 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -156,9 +156,14 @@ extern NSString * const XCCCappLintDidEndNotification; - (NSDictionary*)createProject:(NSString*)aPath; +- (void)showCappLintWarnings; +- (void)showObjjWarnings; + - (BOOL)shouldProcessWithCappLint; - (BOOL)checkCappLintForPath:(NSArray*)paths; -- (void)showCappLintErrors; + +- (BOOL)shouldProcessWithObjjWarnings; +- (BOOL)checkObjjWarningsForPath:(NSArray*)paths; - (void)updateCappuccino; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 36ebc6c63..52f3920f6 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -76,6 +76,8 @@ static NSArray *XCCDefaultIgnoredPathPredicates = nil; NSString * const XCCCappLintDidStartNotification = @"XCCCappLintDidStartNotification"; NSString * const XCCCappLintDidEndNotification = @"XCCCappLintDidEndNotification"; +NSString * const XCCObjjDidStartNotification = @"XCCObjjDidStartNotification"; +NSString * const XCCObjjDidEndNotification = @"XCCObjjDidEndNotification"; @interface XcodeCapp () @@ -1694,6 +1696,13 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]; } +- (BOOL)shouldProcessWithObjjWarnings +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + return ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnErrors]) && [defaults boolForKey:kDefaultXCCShouldProcessObjj]; +} + - (void)showErrors { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -1704,41 +1713,96 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } } -- (void)showCappLintErrors +- (void)showCappLintWarnings { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && self.errorList.count) + NSUInteger numberError = [self.errorList count]; + NSDictionary *firstError; + NSUInteger i = 0; + + for (i = 0; i < numberError; i++) + { + NSDictionary *dict = [self.errorList objectAtIndex:i]; + + if ([[dict valueForKey:@"type"] isEqualToString: @"capp_lint"]) + { + firstError = dict; + break; + } + } + + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && firstError) [self openErrorsPanel:self]; - if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]) + if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint] && firstError) { - NSUInteger numberError = [self.errorList count]; + NSDictionary *error = [self.errorList objectAtIndex:0]; + NSString *filename = [error objectForKey:@"path"]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:self.projectId] , @"projectId", + @"Code Style Issues", @"title", + filename.lastPathComponent , @"message", + nil]; + + [self wantUserNotificationWithInfo:dict]; + } +} + +- (void)showObjjWarnings +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + NSUInteger numberError = [self.errorList count]; + NSDictionary *firstError; + NSUInteger i = 0; + + for (i = 0; i < numberError; i++) + { + NSDictionary *dict = [self.errorList objectAtIndex:i]; - if (numberError) + if ([[dict valueForKey:@"type"] isEqualToString: @"objj"]) { - NSDictionary *error = [self.errorList objectAtIndex:0]; - NSString *filename = [error objectForKey:@"path"]; - - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:self.projectId] , @"projectId", - @"Code Style Issues", @"title", - filename.lastPathComponent , @"message", - nil]; - - [self wantUserNotificationWithInfo:dict]; + firstError = dict; + break; } } + + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && firstError) + [self openErrorsPanel:self]; + + if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnErrors] && firstError) + { + NSDictionary *error = [self.errorList objectAtIndex:0]; + NSString *filename = [error objectForKey:@"path"]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:self.projectId] , @"projectId", + @"Compiling Issues", @"title", + filename.lastPathComponent , @"message", + nil]; + + [self wantUserNotificationWithInfo:dict]; + } } - (void)pruneProcessingErrorsForProjectPath:(NSString *)path +{ + [self pruneProcessingErrorsForProjectPath:path type:nil]; +} + +- (void)pruneProcessingErrorsForProjectPath:(NSString *)path type:(NSString*)type { // Remove all errors for the path being processed NSIndexSet *matchingErrors = [self.errorList indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { - return [[obj valueForKey:@"path"] isEqualToString:path]; + if (type) + return ([[obj valueForKey:@"path"] isEqualToString:path] || [[obj valueForKey:@"realPath"] isEqualToString:path]) && [[obj valueForKey:@"type"] isEqualToString:type]; + else + return [[obj valueForKey:@"path"] isEqualToString:path] || [[obj valueForKey:@"realPath"] isEqualToString:path]; }]; - + [self.errorListController removeObjectsAtArrangedObjectIndexes:matchingErrors]; } @@ -1758,6 +1822,170 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return index != NSNotFound; } +#pragma mark - objjj check + +- (NSString*)_getObjjIncludePaths +{ + NSRegularExpression *regulareExpressionFramework = [NSRegularExpression regularExpressionWithPattern:@"OBJJ_INCLUDE_PATHS ?= ?\\[\"(.*)\"\\," options:0 error:nil]; + + NSString *indexPath; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCUseDebugFrameworkWithObjj]) + indexPath = [NSString stringWithFormat:@"%@/index-debug.html", self.projectPath]; + else + indexPath = [NSString stringWithFormat:@"%@/index.html", self.projectPath]; + + NSDictionary *taskResult = [self runTaskWithLaunchPath:@"/bin/cat" arguments:[NSMutableArray arrayWithObject:indexPath] returnType:kTaskReturnTypeAny]; + + NSString *response = taskResult[@"response"]; + + NSArray *matches = [regulareExpressionFramework matchesInString:response options:0 range:NSMakeRange(0, [response length])]; + + for (NSTextCheckingResult *match in matches) + return [response substringWithRange:[match rangeAtIndex:1]]; + + return @"Frameworks/"; +} + +- (BOOL)checkObjjWarningsForPath:(NSArray*)paths +{ + DDLogVerbose(@"Checking path %@ with objj", paths); + + NSUInteger numberOfFiles = [paths count]; + + if (!numberOfFiles) + return YES; + + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidStartNotification object:self]; + + NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"-I", [self _getObjjIncludePaths], @"-m", nil]; + [arguments addObjectsFromArray:paths]; + + NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"objj"] + arguments:arguments + returnType:kTaskReturnTypeStdOut]; + + NSInteger status = [taskResult[@"status"] intValue]; + NSString *response = taskResult[@"response"]; + + if (status == 0 && [response length] == 0) + { + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + return YES; + } + + NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; + + NSInteger numberOfErrors = [errors count]; + NSInteger i = 0; + NSMutableArray *dicts = [NSMutableArray array]; + + // When checking of the entire project, we have to be ready to find errors + NSRegularExpression *regulareExpressionFramework = [NSRegularExpression regularExpressionWithPattern:@"([\\S\\s]*)(WARNING|ERROR) line ([0-9]*) in file\\:(.*)\\: ([\\S\\s]*)" options:0 error:nil]; + + NSString *filePath; + + if ([paths count] == 1) + filePath = [paths firstObject]; + + for (i = 0; i < numberOfErrors; i++) + { + NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; + NSString *line; + NSString *path; + NSString *messageError; + + // We have an extra new line for the first error + if (i == 0) + error = (NSMutableString*)[error substringFromIndex:1]; + + NSArray *matches = [regulareExpressionFramework matchesInString:error options:0 range:NSMakeRange(0, [error length])]; + NSInteger j = 0; + + if (![matches count]) + { + DDLogVerbose(@"Error %@ has been ignored by xCodeCapp, the error doesn't respect any pattern", error); + continue; + } + + for (NSTextCheckingResult *match in matches) + { + for (j = 0; j < [match numberOfRanges]; j++) + { + switch (j) { + case 1: + messageError = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 3: + line = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 4: + path = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 5: + messageError = [NSString stringWithFormat:@"Compiling issue at line %@ of file %@:\n%@ \n%@", line, path.lastPathComponent, [error substringWithRange:[match rangeAtIndex:j]], messageError]; + break; + + default: + break; + } + } + } + + // Make sure to delete all the compilations issue form the tableView + [self pruneProcessingErrorsForProjectPath:path type:@"objj"]; + + // Path and realPath are needed, we can get error on ViewController2.j while checking ViewController.j. + // When recompiling ViewController.j, realPath is used to know which errors have to be erased form the table + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:[line intValue]], @"line", + messageError , @"message", + (filePath ? filePath:path), @"path", + @"objj", @"type", + path , @"realPath", + nil]; + + // Compiler can show several times the same errors + if (![dicts containsObject:dict] && ![self.errorList containsObject:dict]) + [dicts addObject:dict]; + + } + + [self performSelectorOnMainThread:@selector(objjCompilerDidGenerateError:) withObject:dicts waitUntilDone:YES]; + + self.isProcessing = NO; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + + return NO; +} + +- (IBAction)checkProjectWithObjj:(id)sender +{ + [self clearErrors:self]; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:self selector:@selector(objjDidEndNotification:) name:XCCObjjDidEndNotification object:nil]; + + [self performSelectorInBackground:@selector(checkObjjWarningsForPath:) withObject:self.xCodeCappTargetedFiles]; +} + +- (void)objjDidEndNotification:(NSNotification*)aNotification +{ + [self showObjjWarnings]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCObjjDidEndNotification object:nil]; +} + +- (void)objjCompilerDidGenerateError:(NSArray*)errors +{ + [self.errorListController addObjects:errors]; +} + #pragma mark - capp_lint @@ -1773,7 +2001,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (void)cappLintDidEndNotification:(NSNotification*)aNotification { - [self showCappLintErrors]; + [self showCappLintWarnings]; [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCCappLintDidEndNotification object:nil]; } @@ -1840,18 +2068,19 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; line = [errorWithoutPath substringToIndex:positionOfSecondColon]; - NSString *messageError = [NSString stringWithFormat:@"Code style issue: %@ \n%@", path.lastPathComponent, errorWithoutPath]; + NSString *messageError = [NSString stringWithFormat:@"Code style issue at line %@ of file %@:\n%@", line, path.lastPathComponent, errorWithoutPath]; NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:[line intValue]], @"line", messageError , @"message", path, @"path", + @"capp_lint", @"type", nil]; [dicts addObject:dict]; } - [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:NO]; + [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:YES]; self.isProcessing = NO; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index 3efdd46af..239798b27 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,13 +2,13 @@ 1060 - 13C1021 - 5056 - 1265.19 - 697.40 + 14A389 + 6250 + 1343.14 + 755.00 - 5056 - 5056 + 6250 + 6250 NSArrayController @@ -108,6 +108,14 @@ + + Check Compilation Issues + + 2147483647 + + + + Check Project Code Style @@ -235,7 +243,7 @@ - + 256 @@ -243,8 +251,6 @@ 268 {{164, 20}, {203, 143}} - - YES 68157504 @@ -254,7 +260,7 @@ YUBhcGFyYWppdGEuY29tCiAgICAKICAgIEFsZXhhbmRyZSBXaWxoZWxtCiAgICBhbGV4YW5kcmUud2ls aGVsbWZyQGdtYWlsLmNvbQoKT3JpZ2luYWwgQ29jb2EgdmVyc2lvbiBkZXZlbG9wZWQgYnk6CiAgICBB bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - .LucidaGrandeUI + YES 11 3100 @@ -281,7 +287,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 266 {{164, 171}, {221, 74}} - YES @@ -329,7 +334,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{17, 108}, {128, 128}} - YES @@ -349,11 +353,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {402, 247} - - - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} NO @@ -368,7 +370,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {315, 77} - + 256 @@ -384,7 +386,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 256 {550, 201} - YES NO @@ -461,20 +462,21 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{1, 1}, {550, 201}} - 4 + YES -2147483392 {{1, 273}, {512, 16}} - NO + _doScroller: + 1 _doScroller: @@ -484,16 +486,16 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2147483392 {{535, 1}, {16, 45}} - NO + _doScroller: + _doScroller: {{-1, 35}, {552, 203}} - 133682 @@ -509,7 +511,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 289 {{352, 8}, {85, 19}} - {250, 750} YES @@ -518,7 +519,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 134217728 Clear - .LucidaGrandeUI + YES 12 787 @@ -538,7 +539,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 292 {{20, 8}, {85, 19}} - {250, 750} YES @@ -563,8 +563,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 289 {{445, 8}, {85, 19}} - - {250, 750} YES @@ -585,11 +583,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {550, 237} - - - {{1440, -180}, {1920, 1058}} + {{1440, -180}, {1920, 1057}} {315, 99} {10000000000000, 10000000000000} errorPanel @@ -598,7 +594,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 3 2 - {{1964, 505}, {369, 415}} + {{1964, 505}, {369, 473}} 1618478080 Preferences NSWindow @@ -629,7 +625,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 0 Load the most recent project on launch - .LucidaGrandeUI + YES 13 1044 @@ -732,7 +728,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2076180416 2048 - .LucidaGrandeUI + YES 13 1301 @@ -804,7 +800,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - {{17, 245}, {332, 155}} + {{17, 303}, {332, 155}} @@ -813,15 +809,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 Projects - - LucidaGrande - 11 - 16 - + - - 3 - MCAwLjgAA + + 6 + System + labelColor + @@ -841,7 +835,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{146, 12}, {171, 18}} + {{149, 12}, {171, 18}} @@ -866,7 +860,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 39}, {126, 17}} + {{16, 40}, {126, 17}} @@ -886,7 +880,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{146, 38}, {171, 18}} + {{149, 37}, {171, 18}} @@ -908,14 +902,64 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO + + + 268 + {{16, 93}, {192, 18}} + + + + YES + + -2080374784 + 0 + Look for compilation issues + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 67}, {301, 18}} + + + + YES + + -2080374784 + 0 + Use include path from the index-debug file + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + - {{1, 1}, {330, 66}} + {{1, 1}, {330, 124}} - + - {{17, 159}, {332, 82}} + {{17, 159}, {332, 140}} @@ -924,12 +968,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 File processing - + - - 3 - MCAwLjgAA - + 1 @@ -1035,10 +1076,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ Code style - - 3 - MCAwLjgwMDAwMDAxMTkAA - + 1 @@ -1095,12 +1133,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 Update - + - - 3 - MCAwLjgAA - + 1 @@ -1109,12 +1144,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {369, 415} + {369, 473}
- {{1440, -180}, {1920, 1058}} + {{1440, -180}, {1920, 1057}} {10000000000000, 10000000000000} xcc-prefs YES @@ -1155,7 +1190,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} YES @@ -1186,7 +1221,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - + 256 @@ -1194,6 +1229,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{18, 22}, {251, 17}} + _NS:397 {251, 750} @@ -1216,6 +1252,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{269, 13}, {74, 32}} + + _NS:9 YES @@ -1239,6 +1277,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{20, 45}, {317, 20}} + _NS:9 {250, 250} @@ -1247,10 +1286,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {357, 84} + + _NS:21 - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} updatingCappuccinoPanel YES @@ -1258,7 +1299,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - + delegate @@ -1507,6 +1548,22 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 30N-ga-LBo + + + save: + + + + kBr-PF-Ng7 + + + + save: + + + + HyN-S0-KXD + openXcodeProject: @@ -1531,14 +1588,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 774 - - - checkProjectWithCappLint: - - - - cNV-We-Why - clearErrors: @@ -1619,6 +1668,22 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ HJ3-bt-3EP + + + checkProjectWithCappLint: + + + + bwf-Gu-ART + + + + checkProjectWithObjj: + + + + oPW-bl-Ydt + values.XCCReopenLastProject @@ -2021,6 +2086,22 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ uwx-aq-p86 + + + enabled: projectPath.length + + + + + + enabled: projectPath.length + enabled + projectPath.length + 2 + + + a7g-oH-Wxj + value: values.XCCAutoOpenShowNotificationErrors @@ -2061,6 +2142,46 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ aof-Pn-nzf + + + value: values.kDefaultXCCUseDebugFrameworkWithObjj + + + + + + value: values.kDefaultXCCUseDebugFrameworkWithObjj + value + values.kDefaultXCCUseDebugFrameworkWithObjj + + NSValidatesImmediately + + + 2 + + + 8Eb-cw-Tsj + + + + value: values.XCCShouldProcessObjj + + + + + + value: values.XCCShouldProcessObjj + value + values.XCCShouldProcessObjj + + NSValidatesImmediately + + + 2 + + + 4tf-7Y-tid + @@ -2115,6 +2236,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + @@ -2466,9 +2588,11 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 848 - + + + @@ -2699,6 +2823,37 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + + wDc-Ir-hmE + + + + + + + + beY-m1-Aia + + + + + wGK-ie-cgv + + + + + + + + fJB-o4-AhU + + + + + SNH-t4-Ay7 + + + @@ -2744,6 +2899,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + {-243.5, 329.5} com.apple.InterfaceBuilder.CocoaPlugin @@ -2757,6 +2913,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2909,6 +3066,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2958,12 +3116,18 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + ToolTip @@ -2986,6 +3150,30 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + @@ -3002,9 +3190,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ id id id - id - id - id @@ -3023,18 +3208,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ openHelp: id - - openPreferences: - id - - - showInFinder: - id - - - updateCappuccino: - id - NSPanel @@ -3092,7 +3265,53 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ IBProjectSource - ./Classes/AppController.h + ../XcodeCapp/AppController.h + + + + AppController + + id + id + id + id + id + id + id + + + + createProject: + id + + + loadProject: + id + + + openAbout: + id + + + openHelp: + id + + + openPreferences: + id + + + showInFinder: + id + + + updateCappuccino: + id + + + + IBProjectSource + ../XcodeCapp/AppController.m @@ -3168,7 +3387,373 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ IBProjectSource - ./Classes/XcodeCapp.h + ../XcodeCapp/XcodeCapp.h + + + + XcodeCapp + + id + id + id + id + id + id + id + + + + checkProjectWithCappLint: + id + + + checkProjectWithObjj: + id + + + clearErrors: + id + + + openErrorInEditor: + id + + + openErrorsPanel: + id + + + openXcodeProject: + id + + + synchronizeProject: + id + + + + IBProjectSource + ../XcodeCapp/XcodeCapp.m + + + + + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSArrayController + NSObjectController + + IBFrameworkSource + AppKit.framework/Headers/NSArrayController.h + + + + NSBox + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSBox.h + + + + NSButton + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSButton.h + + + + NSButtonCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSButtonCell.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSController + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSController.h + + + + NSFontManager + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSImageCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSImageCell.h + + + + NSImageView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSImageView.h + + + + NSManagedObjectContext + NSObject + + IBFrameworkSource + CoreData.framework/Headers/NSManagedObjectContext.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSMenuItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSMenuItemCell + NSButtonCell + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItemCell.h + + + + NSObjectController + NSController + + IBFrameworkSource + AppKit.framework/Headers/NSObjectController.h + + + + NSPanel + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSPanel.h + + + + NSPopUpButton + NSButton + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButton.h + + + + NSPopUpButtonCell + NSMenuItemCell + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButtonCell.h + + + + NSProgressIndicator + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSProgressIndicator.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSScrollView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSScrollView.h + + + + NSScroller + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSScroller.h + + + + NSTableColumn + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableColumn.h + + + + NSTableView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSUserDefaultsController + NSController + + IBFrameworkSource + AppKit.framework/Headers/NSUserDefaultsController.h + + + + NSView + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + PDFView + NSView + + id + id + id + id + id + id + id + id + id + id + + + + goBack: + id + + + goForward: + id + + + goToFirstPage: + id + + + goToLastPage: + id + + + goToNextPage: + id + + + goToPreviousPage: + id + + + selectAll: + id + + + takeBackgroundColorFrom: + id + + + zoomIn: + id + + + zoomOut: + id + + + + IBFrameworkSource + Quartz.framework/Frameworks/PDFKit.framework/Headers/PDFView.h @@ -3180,10 +3765,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin.macosx - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 @@ -3191,8 +3772,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ YES 3 - {11, 11} - {10, 3} + {12, 12} + {10, 2} {15, 15} {128, 128} From 02bbe0e6f570f687782a52b301c83cdaf6c765d7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 13:07:25 -0800 Subject: [PATCH 116/234] Fixed: removed unused constant --- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index 903fd7b6c..2843e57c7 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -19,7 +19,6 @@ extern NSString * const kDefaultXCCReactToInodeMod; extern NSString * const kDefaultXCCReopenLastProject; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; -extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnObjjWarnings; extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; extern NSString * const kDefaultXCCUseDebugFrameworkWithObjj; From 491b5dcd6f0b598d432bb6b35bbf1c62568cc2c7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 14:13:08 -0800 Subject: [PATCH 117/234] Fixed: text cursor for CPTextField class doesn't take content-inset in account Previously, the text cursor of the CPTextField didn't take in account the content-inset. This raised issue with class as the CPComboBox, when the mouse was over the popUpButton, there was still the text cursor instead of the default one. Now it works as in Cocoa. --- AppKit/CPTextField.j | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 5f11f1d6e..fc3d833d9 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -350,8 +350,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); _sendActionOn = CPKeyUpMask | CPKeyDownMask; [self setValue:CPLeftTextAlignment forThemeAttribute:@"alignment"]; - - [self _updateCursor]; } return self; @@ -373,8 +371,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if (shouldBeEditable) _isSelectable = YES; - [self _updateCursor]; - if (_isEditable) [self setThemeState:CPThemeStateEditable]; else @@ -405,7 +401,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setEnabled:(BOOL)shouldBeEnabled { [super setEnabled:shouldBeEnabled]; - [self _updateCursor]; // We only allow first responder status if the field is enabled. if (!shouldBeEnabled && [[self window] firstResponder] === self) @@ -419,8 +414,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setSelectable:(BOOL)aFlag { _isSelectable = aFlag; - - [self _updateCursor]; } /*! @@ -930,6 +923,12 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:self userInfo:nil]]; } +- (void)mouseMoved:(CPEvent)anEvent +{ + [super mouseMoved:anEvent]; + [self _updateCursorForEvent:anEvent]; +} + - (void)mouseDown:(CPEvent)anEvent { // Don't track! (ever?) @@ -1140,9 +1139,14 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [super textDidChange:note]; } -- (void)_updateCursor +- (void)_updateCursorForEvent:(CPEvent)anEvent { - if ([self isEnabled] && ([self isSelectable] || [self isEditable])) + var frame = CGRectMakeCopy([self frame]), + contentInset = [self currentValueForThemeAttribute:@"content-inset"]; + + frame = [[self superview] convertRectToBase:CGRectInsetByInset(frame, contentInset)]; + + if ([self isEnabled] && ([self isSelectable] || [self isEditable]) && CGRectContainsPoint(frame, [anEvent locationInWindow])) { #if PLATFORM(DOM) self._DOMElement.style.cursor = "text"; @@ -1966,8 +1970,6 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [self setAlignment:[aCoder decodeIntForKey:CPTextFieldAlignmentKey]]; [self setPlaceholderString:[aCoder decodeObjectForKey:CPTextFieldPlaceholderStringKey]]; - - [self _updateCursor]; } return self; From fc43ec818596c5410f0bc5ee362f5dc2bb027afa Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 14:26:34 -0800 Subject: [PATCH 118/234] Fixed: wrong content-inset for CPComboBox Previously, the content-inset of a CPComboBox was wrong, the text of the controller was over the popUPButton. --- AppKit/Themes/Aristo/ThemeDescriptors.j | 4 ++-- AppKit/Themes/Aristo2/ThemeDescriptors.j | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 3cc69832c..efbbb1c23 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1820,8 +1820,8 @@ var themedButtonValues = nil, // The right border inset has to make room for the focus ring and popup button [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], - [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), [CPThemeStateBezeled, CPThemeStateEditing]], + [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index c669539b5..f5f11c7f5 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -1312,9 +1312,9 @@ var themedButtonValues = nil, [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), [CPThemeStateBezeled, CPThemeStateDisabled]], // The right border inset has to make room for the focus ring and popup button - [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], - [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], + [@"content-inset", CGInsetMake(9.0, 30.0, 7.0, 10.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], + [@"content-inset", CGInsetMake(9.0, 30.0, 7.0, 10.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(9.0, 28.0, 7.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], From 8ef7cacddadf88ac93d353dc47bf74ef71749e31 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 6 Nov 2014 12:34:18 -0500 Subject: [PATCH 119/234] Fixed: Doxygen configuration The Doxygen configuration file caused warnings to appear about obsolete tags. (The version of doxygen that the file was created for was 1.7.1, which was released in 2010.) This commit uses the automatic doxygen updater (doxygen -u) to update it to a more recent version (1.8.7). Additionally, this commit changes the .doxygen file to build a docset by default. The effect of this is to simply emit a `Makefile` in the output directory that can be further used to compile a docset. Parameters for the project publisher and name were added for this docset. --- Tools/Documentation/Cappuccino.doxygen | 2371 +++++++++++++++--------- 1 file changed, 1529 insertions(+), 842 deletions(-) diff --git a/Tools/Documentation/Cappuccino.doxygen b/Tools/Documentation/Cappuccino.doxygen index 5cd23fc26..5a0568568 100644 --- a/Tools/Documentation/Cappuccino.doxygen +++ b/Tools/Documentation/Cappuccino.doxygen @@ -1,92 +1,122 @@ -# Doxyfile 1.7.1 +# Doxyfile 1.8.7 # This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project +# doxygen (www.doxygen.org) for a project. # -# All text after a hash (#) is considered a comment and will be ignored +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. # The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. PROJECT_NAME = " API" -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. PROJECT_NUMBER = 0.9.7-1 -PROJECT_LOGO = ./Tools/Documentation/logo.png +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + +PROJECT_LOGO = ./Tools/Documentation/logo.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. OUTPUT_DIRECTORY = Documentation -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. CREATE_SUBDIRS = NO +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. +# The default value is: YES. REPEAT_BRIEF = YES -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ @@ -101,8 +131,9 @@ ABBREVIATE_BRIEF = "The $name class" \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief +# doxygen will generate a detailed section even if there is only a brief # description. +# The default value is: NO. ALWAYS_DETAILED_SEC = NO @@ -110,153 +141,207 @@ ALWAYS_DETAILED_SEC = NO # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. +# The default value is: NO. INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. FULL_PATH_NAMES = YES -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. STRIP_FROM_INC_PATH = -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. SHORT_NAMES = NO -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. JAVADOC_AUTOBRIEF = NO -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. QT_AUTOBRIEF = NO -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. SEPARATE_MEMBER_PAGES = NO -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. ALIASES = -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. EXTENSION_MAPPING = j=Objective-C +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. +# The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. +# The default value is: NO. CPP_CLI_SUPPORT = NO -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. SIP_SUPPORT = NO -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. IDL_PROPERTY_SUPPORT = NO @@ -264,351 +349,441 @@ IDL_PROPERTY_SUPPORT = NO # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. +# The default value is: NO. DISTRIBUTE_GROUP_DOC = NO -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. SUBGROUPING = YES -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. TYPEDEF_HIDES_STRUCT = NO -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. -SYMBOL_CACHE_SIZE = 0 +LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. EXTRACT_ALL = YES -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. EXTRACT_PRIVATE = YES -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. EXTRACT_STATIC = YES -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. EXTRACT_LOCAL_CLASSES = YES -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. EXTRACT_LOCAL_METHODS = YES # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. EXTRACT_ANON_NSPACES = NO -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. HIDE_UNDOC_MEMBERS = NO -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. HIDE_UNDOC_CLASSES = NO -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. HIDE_IN_BODY_DOCS = NO -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. +# The default value is: system dependent. CASE_SENSE_NAMES = NO -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. HIDE_SCOPE_NAMES = NO -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. SHOW_INCLUDE_FILES = YES -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. FORCE_LOCAL_INCLUDES = NO -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. INLINE_INFO = YES -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. SORT_MEMBER_DOCS = YES -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. SORT_BRIEF_DOCS = YES -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. SORT_GROUP_NAMES = YES -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. SORT_BY_SCOPE_NAME = NO -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. GENERATE_TODOLIST = NO -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. GENERATE_TESTLIST = NO -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. GENERATE_BUGLIST = NO -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. GENERATE_DEPRECATEDLIST= YES -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. ENABLED_SECTIONS = -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. SHOW_USED_FILES = YES -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. SHOW_FILES = YES -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. The create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. LAYOUT_FILE = +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. Do not use file names with spaces, bibtex cannot handle them. See +# also \cite for info how to create references. + +CITE_BIB_FILES = + #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. WARNINGS = YES -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. WARN_IF_UNDOCUMENTED = NO -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. WARN_IF_DOC_ERROR = NO -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. WARN_NO_PARAMDOC = NO -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). WARN_LOGFILE = debug.txt #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. INPUT = AppKit.doc \ Foundation.doc # This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. FILE_PATTERNS = *.c \ *.cc \ @@ -643,29 +818,34 @@ FILE_PATTERNS = *.c \ *.vhdl \ *.j -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. RECURSIVE = YES -# The EXCLUDE tag can be used to specify files and/or directories that should +# The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. EXCLUDE = -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded # from the input. +# The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = _* @@ -674,683 +854,1077 @@ EXCLUDE_PATTERNS = _* # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = _* -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). EXAMPLE_PATH = ./Tools/Documentation/README.html \ ./LICENSE # If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. EXAMPLE_RECURSIVE = NO -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. FILTER_SOURCE_FILES = NO +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. SOURCE_BROWSER = YES -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. INLINE_SOURCES = NO -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. STRIP_CODE_COMMENTS = YES -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. REFERENCED_BY_RELATION = NO -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. REFERENCES_RELATION = NO -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentation. +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. REFERENCES_LINK_SOURCE = YES -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. ALPHABETICAL_INDEX = YES -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. GENERATE_HTML = YES -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a # standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. -#HTML_STYLESHEET = doxygen.css +HTML_STYLESHEET = -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the stylesheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. +# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- +# defined cascading style sheet that is included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefor more robust against future updates. +# Doxygen will copy the style sheet file to the output directory. For an example +# see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 98 -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = YES -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_DOCSET = NO +GENERATE_DOCSET = YES -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_BUNDLE_ID = org.cappuccino-project.cappuccino -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_ID = org.cappuccino-project -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_PUBLISHER_NAME = Publisher +DOCSET_PUBLISHER_NAME = "Cappuccino Project" -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be # written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. -DISABLE_INDEX = NO +DISABLE_INDEX = YES -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. -SEARCHENGINE = YES +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , / @@ -2885,6 +2965,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + {182, 582.5} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2895,11 +2976,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + {239, 248.5} com.apple.InterfaceBuilder.CocoaPlugin - - - {-243.5, 329.5} + + + {-183.5, 363} com.apple.InterfaceBuilder.CocoaPlugin @@ -3063,6 +3145,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -3084,6 +3167,18 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically + + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip @@ -3116,6 +3211,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin From 1ce6a630d2ac186e8daaaffaa00d5b050b1fc15d Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 6 Nov 2014 13:29:16 -0800 Subject: [PATCH 128/234] Fixed: warnings from objj were displayed several times --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 39 ++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index f326c2654..081f44db4 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1573,8 +1573,8 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, { id info = self.errorListController.selection; - NSString *path = [info valueForKey:@"path"]; - + NSString *path = [info valueForKey:@"realPath"] ? [info valueForKey:@"realPath"] : [info valueForKey:@"path"]; + if (path == NSNoSelectionMarker) return; @@ -1890,7 +1890,6 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; NSInteger numberOfErrors = [errors count]; - i = 0; NSMutableArray *dicts = [NSMutableArray array]; // When checking of the entire project, we have to be ready to find errors @@ -1901,6 +1900,8 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, if ([paths count] == 1) filePath = [paths firstObject]; + i = 0; + for (i = 0; i < numberOfErrors; i++) { NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; @@ -1965,10 +1966,36 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, path , @"realPath", nil]; - // Compiler can show several times the same errors - if (![dicts containsObject:dict] && ![self.errorList containsObject:dict]) - [dicts addObject:dict]; + // Block to compare dicts + BOOL (^dictComparaison)(id obj, NSUInteger idx, BOOL *stop) = ^(id obj, NSUInteger idx, BOOL *stop){ + if ([obj valueForKey:@"line"] == [dict valueForKey:@"line"]) + { + // For an unknown reason, trim doesn't work + NSString *messsageObj = [obj valueForKey:@"message"]; + NSString *messsageDict = [dict valueForKey:@"message"]; + + messsageDict = [messsageDict stringByReplacingOccurrencesOfString:@" " withString:@""]; + messsageDict = [messsageDict stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + + messsageObj = [messsageObj stringByReplacingOccurrencesOfString:@" " withString:@""]; + messsageObj = [messsageObj stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + + if ([messsageDict isEqualToString:messsageObj]) + { + *stop = YES; + return YES; + } + } + + return NO; + }; + NSUInteger isInDict = [dicts indexOfObjectPassingTest:dictComparaison]; + NSUInteger isInList = [self.errorList indexOfObjectPassingTest:dictComparaison]; + + // Compiler can show several times the same errors + if (isInDict == NSNotFound && isInList == NSNotFound) + [dicts addObject:dict]; } [self performSelectorOnMainThread:@selector(objjCompilerDidGenerateError:) withObject:dicts waitUntilDone:YES]; From de2e77cc8659fd2bca58185ddfddaf05a0f5951a Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 6 Nov 2014 17:23:27 -0500 Subject: [PATCH 129/234] Adding userInfo error keys and documenting CPURLError.j --- Foundation/CPURLError.j | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Foundation/CPURLError.j b/Foundation/CPURLError.j index a54ebdaaf..77d901256 100644 --- a/Foundation/CPURLError.j +++ b/Foundation/CPURLError.j @@ -1,5 +1,18 @@ +/* + * The CPURL Error Domain + */ CPURLErrorDomain = @"CPURLErrorDomain"; + +/* + * CPURL UserInfo Error Keys + */ +CPURLErrorFailingURLErrorKey = @"CPErrorFailingURLKey"; +CPURLErrorFailingURLStringErrorKey = @"CPURLErrorFailingURLStringKey"; + +/* + * CPURL Error Codes + */ CPURLErrorUnknown = -1; CPURLErrorCancelled = kCFURLErrorCancelled; CPURLErrorBadURL = kCFURLErrorBadURL; From 57d435b6db378a1681f861b4f269838e4a5d5d5e Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Nov 2014 14:59:40 -0800 Subject: [PATCH 130/234] NEW: .gitignore ignores .tm_properties --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9d53e1758..11a5e1abf 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ xcuserdata/ Tests/Manual/**/*.xcodeproj *.sublime-project *.sublime-workspace +*.tm_properties From ab2657b795f22817dfd1a81240b8aee077e7d582 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 6 Nov 2014 15:11:58 -0800 Subject: [PATCH 131/234] Fixed compilation warning in nib2cib --- Tools/nib2cib/NSDatePicker.j | 2 +- Tools/nib2cib/NSImageView.j | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Tools/nib2cib/NSDatePicker.j b/Tools/nib2cib/NSDatePicker.j index d3af0690c..a90983ec5 100644 --- a/Tools/nib2cib/NSDatePicker.j +++ b/Tools/nib2cib/NSDatePicker.j @@ -180,7 +180,7 @@ var NSDatePickerDefaultSize = 22, CPDateFormatter _formatter @accessors(getter=formatter); CPInteger _datePickerMode @accessors(getter=datePickerMode); CPInteger _datePickerElements @accessors(getter=datePickerElements); - CPinteger _datePickerType @accessors(getter=datePickerType); + CPInteger _datePickerType @accessors(getter=datePickerType); double _timeInterval @accessors(getter=timeInterval); CPColor _textColor @accessors(getter=textColor); CPColor _backgroundColor @accessors(getter=backgroundColor); diff --git a/Tools/nib2cib/NSImageView.j b/Tools/nib2cib/NSImageView.j index 909089fdf..02fd50f52 100644 --- a/Tools/nib2cib/NSImageView.j +++ b/Tools/nib2cib/NSImageView.j @@ -67,7 +67,7 @@ @end // NSImageCell - +@typedef NSImageAlignment NSImageAlignCenter = 0; NSImageAlignTop = 1; NSImageAlignTopLeft = 2; @@ -78,12 +78,13 @@ NSImageAlignBottomLeft = 6; NSImageAlignBottomRight = 7; NSImageAlignRight = 8; - +@typedef NSImageScaling NSImageScaleProportionallyDown = 0; NSImageScaleAxesIndependently = 1; NSImageScaleNone = 2; NSImageScaleProportionallyUpOrDown = 3; +@typedef NSImageFrameStyle NSImageFrameNone = 0; NSImageFramePhoto = 1; NSImageFrameGrayBezel = 2; From 9a307269ca6d8f7a3c680b5e0fe5d31584857875 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Fri, 7 Nov 2014 14:25:35 -0800 Subject: [PATCH 132/234] FIXED: CPButtonBar was not removing old button set from the view This patch ensure that when we are using setButtons: old buttons are actually removed from the superview --- AppKit/CPButtonBar.j | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index c524a2fcb..024924830 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -133,7 +133,11 @@ - (void)setButtons:(CPArray)buttons { for (var i = [_buttons count] - 1; i >= 0; i--) + { + [_buttons[i] removeFromSuperview]; [_buttons[i] removeObserver:self forKeyPath:@"hidden"]; + } + _buttons = [CPArray arrayWithArray:buttons]; From 664d5777fd95d442aaf7325fb8b6d8369ad5a598 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 7 Nov 2014 15:43:18 -0800 Subject: [PATCH 133/234] Fixed: CPWindow doesn't take the event when moving from another platformWindow Previously, when moving from platformWindow to another platformWindow, the targeted window didn't get the new event because the keyWindow of the application was still set to the other platformWindow. This PR fixes another issue about opening panel in a platformWindow. When opening a panel in a platformWindow, cappuccino set the new key window to the wrong platformWindow. --- AppKit/CPWindow/CPWindow.j | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index f770fc642..969d9fad7 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -1846,6 +1846,12 @@ CPTexturedBackgroundWindowMask if (_leftMouseDownView !== _firstResponder && [_leftMouseDownView acceptsFirstResponder]) [self makeFirstResponder:_leftMouseDownView]; + var keyWindow = [CPApp keyWindow]; + + // This is only when we move from a platform to another one + if ([keyWindow platformWindow] != [self platformWindow]) + [self makeKeyAndOrderFront:self]; + [CPApp activateIgnoringOtherApps:YES]; var theWindow = [anEvent window], @@ -2477,7 +2483,7 @@ CPTexturedBackgroundWindowMask if (currentWindow === self || currentWindow === menuWindow) continue; - if ([currentWindow isVisible] && [currentWindow canBecomeKeyWindow]) + if ([currentWindow isVisible] && [currentWindow canBecomeKeyWindow] && [currentWindow platformWindow] == [keyWindow platformWindow]) { [currentWindow makeKeyWindow]; break; From 0cafb3fac53df9b338940322845db5142d622065 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 10 Nov 2014 17:03:34 -0800 Subject: [PATCH 134/234] FIXED: CPViewController coming from a XIB could call viewDidLoad two times This patch ensure that CPViewController is never calling viewDidLoad more than one time. --- AppKit/CPViewController.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPViewController.j b/AppKit/CPViewController.j index 2ea3a05de..0c9bec99e 100644 --- a/AppKit/CPViewController.j +++ b/AppKit/CPViewController.j @@ -210,6 +210,7 @@ var CPViewControllerCachedCibs; [cibOwner viewControllerDidLoadCib:self]; _isLoading = NO; + _isLazy = NO; [self _viewDidLoad]; } else if (_isLazy) From 0c7b2ae7023ba18a59f75cbf868f28e0d53917f9 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 12 Nov 2014 23:59:46 -0800 Subject: [PATCH 135/234] NEW: Support for multiline mode in CPTextField This patch adds support for CPTextField with multiline content. It uses a DOM textarea when needed, instead of DOM input. It also disable the spellchecking, fixes a bug where the input element was not correctly resized when the frame changed, and refactor some code --- AppKit/CPTextField.j | 282 ++++++++++++--------- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 2 +- 2 files changed, 164 insertions(+), 120 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index fc3d833d9..63ea80fe2 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -47,9 +47,10 @@ CPTextFieldRoundedBezel = 1; /*! A textfield bezel with rounded corne CPTextFieldDidFocusNotification = @"CPTextFieldDidFocusNotification"; CPTextFieldDidBlurNotification = @"CPTextFieldDidBlurNotification"; -var CPTextFieldDOMInputElement = nil, - CPTextFieldDOMPasswordInputElement = nil, +var CPTextFieldDOMCurrentElement = nil, + CPTextFieldDOMTextAreaElement = nil, CPTextFieldDOMStandardInputElement = nil, + CPTextFieldDOMPasswordInputElement = nil, CPTextFieldInputOwner = nil, CPTextFieldTextDidChangeValue = nil, CPTextFieldInputResigning = NO, @@ -142,6 +143,9 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // NS-style Display Properties CPTextFieldBezelStyle _bezelStyle; BOOL _isBordered; + BOOL _usesSingleLineMode; + BOOL _wraps; + BOOL _scrolls; } + (Class)_binderClassForBinding:(CPString)aBinding @@ -246,95 +250,106 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); #if PLATFORM(DOM) - (DOMElement)_inputElement { - if (!CPTextFieldDOMInputElement) + if (!CPTextFieldDOMTextAreaElement) { - CPTextFieldDOMInputElement = document.createElement("input"); - CPTextFieldDOMInputElement.style.position = "absolute"; - CPTextFieldDOMInputElement.style.border = "0px"; - CPTextFieldDOMInputElement.style.padding = "0px"; - CPTextFieldDOMInputElement.style.margin = "0px"; - CPTextFieldDOMInputElement.style.whiteSpace = "pre"; - CPTextFieldDOMInputElement.style.background = "transparent"; - CPTextFieldDOMInputElement.style.outline = "none"; + CPTextFieldDOMTextAreaElement = document.createElement("textarea"); + CPTextFieldDOMTextAreaElement.style.position = "absolute"; + CPTextFieldDOMTextAreaElement.style.border = "0px"; + CPTextFieldDOMTextAreaElement.style.padding = "0px"; + CPTextFieldDOMTextAreaElement.style.margin = "0px"; + CPTextFieldDOMTextAreaElement.style.background = "transparent"; + CPTextFieldDOMTextAreaElement.style.outline = "none"; + CPTextFieldDOMTextAreaElement.style.resize = "none"; + CPTextFieldDOMTextAreaElement.style.overflow = "hidden"; + CPTextFieldDOMTextAreaElement.spellcheck = NO; + } + if (!CPTextFieldDOMStandardInputElement) + { + CPTextFieldDOMStandardInputElement = document.createElement("input"); + CPTextFieldDOMStandardInputElement.style.position = "absolute"; + CPTextFieldDOMStandardInputElement.style.border = "0px"; + CPTextFieldDOMStandardInputElement.style.padding = "0px"; + CPTextFieldDOMStandardInputElement.style.margin = "0px"; + CPTextFieldDOMStandardInputElement.style.whiteSpace = "pre"; + CPTextFieldDOMStandardInputElement.style.background = "transparent"; + CPTextFieldDOMStandardInputElement.style.outline = "none"; + CPTextFieldDOMStandardInputElement.spellcheck = NO; + } + + if (!CPTextFieldDOMPasswordInputElement) + { + CPTextFieldDOMPasswordInputElement = document.createElement("input"); + CPTextFieldDOMPasswordInputElement.style.position = "absolute"; + CPTextFieldDOMPasswordInputElement.style.border = "0px"; + CPTextFieldDOMPasswordInputElement.style.padding = "0px"; + CPTextFieldDOMPasswordInputElement.style.margin = "0px"; + CPTextFieldDOMPasswordInputElement.style.whiteSpace = "pre"; + CPTextFieldDOMPasswordInputElement.style.background = "transparent"; + CPTextFieldDOMPasswordInputElement.style.outline = "none"; + CPTextFieldDOMPasswordInputElement.type = "password"; + CPTextFieldDOMPasswordInputElement.spellcheck = NO; + } + + if (!CPTextFieldBlurHandler) + { CPTextFieldBlurHandler = function(anEvent) { return CPTextFieldBlurFunction( anEvent, CPTextFieldInputOwner, CPTextFieldInputOwner ? CPTextFieldInputOwner._DOMElement : nil, - CPTextFieldDOMInputElement, + CPTextFieldDOMCurrentElement, CPTextFieldInputResigning, @ref(CPTextFieldInputDidBlur)); }; + } - if (CPFeatureIsCompatible(CPInputOnInputEventFeature)) + if (!CPTextFieldInputFunction) + { + if (!CPFeatureIsCompatible(CPInputOnInputEventFeature)) + return; + + CPTextFieldInputFunction = function(anEvent) { - CPTextFieldInputFunction = function(anEvent) - { - if (!CPTextFieldInputOwner) - return; + if (!CPTextFieldInputOwner) + return; - var cappEvent = [CPEvent keyEventWithType:CPKeyUp - location:CGPointMakeZero() - modifierFlags:0 - timestamp:[CPEvent currentTimestamp] - windowNumber:[[CPApp keyWindow] windowNumber] - context:nil - characters:nil - charactersIgnoringModifiers:nil - isARepeat:NO - keyCode:nil]; + var cappEvent = [CPEvent keyEventWithType:CPKeyUp + location:CGPointMakeZero() + modifierFlags:0 + timestamp:[CPEvent currentTimestamp] + windowNumber:[[CPApp keyWindow] windowNumber] + context:nil + characters:nil + charactersIgnoringModifiers:nil + isARepeat:NO + keyCode:nil]; - [CPTextFieldInputOwner keyUp:cappEvent]; + [CPTextFieldInputOwner keyUp:cappEvent]; - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - } - - CPTextFieldDOMInputElement.oninput = CPTextFieldInputFunction; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; } - // FIXME make this not onblur - CPTextFieldDOMInputElement.onblur = CPTextFieldBlurHandler; + CPTextFieldDOMPasswordInputElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; - CPTextFieldDOMStandardInputElement = CPTextFieldDOMInputElement; + CPTextFieldDOMStandardInputElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; + + CPTextFieldDOMTextAreaElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMTextAreaElement.onblur = CPTextFieldBlurHandler; } - if (CPFeatureIsCompatible(CPInputTypeCanBeChangedFeature)) - { - if ([self isSecure]) - CPTextFieldDOMInputElement.type = "password"; - else - CPTextFieldDOMInputElement.type = "text"; - - return CPTextFieldDOMInputElement; - } if ([self isSecure]) - { - if (!CPTextFieldDOMPasswordInputElement) - { - CPTextFieldDOMPasswordInputElement = document.createElement("input"); - CPTextFieldDOMPasswordInputElement.style.position = "absolute"; - CPTextFieldDOMPasswordInputElement.style.border = "0px"; - CPTextFieldDOMPasswordInputElement.style.padding = "0px"; - CPTextFieldDOMPasswordInputElement.style.margin = "0px"; - CPTextFieldDOMPasswordInputElement.style.whiteSpace = "pre"; - CPTextFieldDOMPasswordInputElement.style.background = "transparent"; - CPTextFieldDOMPasswordInputElement.style.outline = "none"; - CPTextFieldDOMPasswordInputElement.type = "password"; - - CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; - } - - CPTextFieldDOMInputElement = CPTextFieldDOMPasswordInputElement; - } + CPTextFieldDOMCurrentElement = CPTextFieldDOMPasswordInputElement; + else if (_usesSingleLineMode) + CPTextFieldDOMCurrentElement = CPTextFieldDOMStandardInputElement; else - { - CPTextFieldDOMInputElement = CPTextFieldDOMStandardInputElement; - } + CPTextFieldDOMCurrentElement = CPTextFieldDOMTextAreaElement; - return CPTextFieldDOMInputElement; + return CPTextFieldDOMCurrentElement; } #endif @@ -553,6 +568,24 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); return _textFieldBackgroundColor; } +/*! @ignore */ +- (void)_setUsesSingleLineMode:(BOOL)aFlag +{ + _usesSingleLineMode = aFlag; +} + +/*! @ignore */ +- (void)_setWraps:(BOOL)aFlag +{ + _wraps = aFlag; +} + +/*! @ignore */ +- (void)_setScrolls:(BOOL)aFlag +{ + _scrolls = aFlag; +} + /*! @ignore */ - (BOOL)acceptsFirstResponder { @@ -608,28 +641,10 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _setCSSStyleForInputElement]; - var element = [self _inputElement], - font = [self currentValueForThemeAttribute:@"font"], - contentRect = [self contentRectForBounds:[self bounds]], - left = CGRectGetMinX(contentRect); - + var element = [self _inputElement]; element.value = _stringValue; - - // If the browser has a built in left padding, compensate for it. We need the input text to be exactly on top of the original text. - if (CPFeatureIsCompatible(CPInput1PxLeftPadding)) - left -= 1; - - element.style.left = left + "px"; - element.style.width = CGRectGetWidth(contentRect) + "px"; - element.style.verticalAlign = "top"; - element.style.cursor = "auto"; - _DOMElement.appendChild(element); - // The font change above doesn't work for some browsers if the element isn't already appendChild'ed. - if (!CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) - element.style.font = [font cssString]; - CPTextFieldInputIsActive = YES; if (document.attachEvent) @@ -673,37 +688,18 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); */ - (void)_setCSSStyleForInputElement { - #if PLATFORM(DOM) - var element = [self _inputElement], - font = [self currentValueForThemeAttribute:@"font"], - lineHeight = [font defaultLineHeightForFont], - contentRect = [self contentRectForBounds:[self bounds]], - verticalAlign = [self currentValueForThemeAttribute:"vertical-alignment"]; - if ([self hasThemeState:CPTextFieldStatePlaceholder]) - element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder] cssString]; - else - element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; + var element = [self _inputElement], + font = [self currentValueForThemeAttribute:@"font"], + lineHeight = [font defaultLineHeightForFont], + contentRect = [self contentRectForBounds:[self bounds]], + verticalAlign = [self currentValueForThemeAttribute:"vertical-alignment"], + left = CGRectGetMinX(contentRect); - if (CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) - element.style.font = [font cssString]; - - element.style.zIndex = 1000; - - switch ([self alignment]) - { - case CPCenterTextAlignment: - element.style.textAlign = "center"; - break; - - case CPRightTextAlignment: - element.style.textAlign = "right"; - break; - - default: - element.style.textAlign = "left"; - } + // If the browser has a built in left padding, compensate for it. We need the input text to be exactly on top of the original text. + if (CPFeatureIsCompatible(CPInput1PxLeftPadding)) + left -= 1; switch (verticalAlign) { @@ -724,12 +720,41 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); break; } - element.style.top = topPoint; - element.style.height = ROUND(lineHeight) + "px"; - element.style.lineHeight = ROUND(lineHeight) + "px"; + if ([self hasThemeState:CPTextFieldStatePlaceholder]) + element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder] cssString]; + else + element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; + + switch ([self alignment]) + { + case CPCenterTextAlignment: + element.style.textAlign = "center"; + break; + + case CPRightTextAlignment: + element.style.textAlign = "right"; + break; + + default: + element.style.textAlign = "left"; + } + + var isTextArea = element.nodeName.toUpperCase() == "TEXTAREA"; + + element.style.zIndex = 1000; + element.style.top = topPoint; + element.style.lineHeight = ROUND(lineHeight) + "px"; + element.style.height = isTextArea ? CGRectGetHeight(contentRect) + "px" : ROUND(lineHeight) + "px";; + element.style.width = CGRectGetWidth(contentRect) + "px"; + element.style.left = left + "px"; + element.style.verticalAlign = "top"; + element.style.cursor = "auto"; + element.style.font = [font cssString]; + + if (isTextArea) + element.style.whiteSpace = _wraps ? "pre" : "nowrap"; #endif - } /*! @ignore */ @@ -1054,6 +1079,9 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _didEdit]; } + console.error("newValue : >" + newValue + "<") + console.error("_stringValue : >" + _stringValue + "<") + if ([self _valueIsValid:_stringValue]) { // If _isEditing == YES then the target action can also be called via @@ -1099,7 +1127,11 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); range = [self selectedRange], element = [self _inputElement]; - element.value = [element.value stringByReplacingCharactersInRange:[self selectedRange] withString:aCharacter]; + // we don't need to do this in case of textarea + // or we will end up with 2 carriage returns + if (aCharacter != CPNewlineCharacter || element.nodeName.toUpperCase() != "TEXTAREA") + element.value = [element.value stringByReplacingCharactersInRange:[self selectedRange] withString:aCharacter]; + [self _setStringValue:element.value]; // NOTE: _stringValue is now the current input element value @@ -1944,7 +1976,11 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", CPTextFieldLineBreakModeKey = "CPTextFieldLineBreakModeKey", CPTextFieldAlignmentKey = "CPTextFieldAlignmentKey", CPTextFieldBackgroundColorKey = "CPTextFieldBackgroundColorKey", - CPTextFieldPlaceholderStringKey = "CPTextFieldPlaceholderStringKey"; + CPTextFieldPlaceholderStringKey = "CPTextFieldPlaceholderStringKey", + CPTextFieldUsesSingleLineMode = "CPTextFieldUsesSingleLineMode", + CPTextFieldWraps = "CPTextFieldWraps", + CPTextFieldScrolls = "CPTextFieldScrolls"; + @implementation CPTextField (CPCoding) @@ -1970,6 +2006,10 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [self setAlignment:[aCoder decodeIntForKey:CPTextFieldAlignmentKey]]; [self setPlaceholderString:[aCoder decodeObjectForKey:CPTextFieldPlaceholderStringKey]]; + + [self _setUsesSingleLineMode:[aCoder decodeBoolForKey:CPTextFieldUsesSingleLineMode]]; + [self _setWraps:[aCoder decodeBoolForKey:CPTextFieldWraps]]; + [self _setScrolls:[aCoder decodeBoolForKey:CPTextFieldScrolls]]; } return self; @@ -1994,6 +2034,10 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [aCoder encodeInt:[self alignment] forKey:CPTextFieldAlignmentKey]; [aCoder encodeObject:_placeholderString forKey:CPTextFieldPlaceholderStringKey]; + + [aCoder encodeBool:_usesSingleLineMode forKey:CPTextFieldUsesSingleLineMode]; + [aCoder encodeBool:_wraps forKey:CPTextFieldWraps]; + [aCoder encodeBool:_scrolls forKey:CPTextFieldScrolls]; } @end diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 31b1810ef..eeba3a894 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1143,7 +1143,7 @@ var PreventScroll = true; _mouseDownIsRightClick = button == 2 || (CPBrowserIsOperatingSystem(CPMacOperatingSystem) && button == 0 && modifierFlags & CPControlKeyMask); - if (sourceElement.tagName === "INPUT" && sourceElement != _DOMFocusElement) + if ((sourceElement.tagName === "INPUT" || sourceElement.tagName === "TEXTAREA") && sourceElement != _DOMFocusElement) { if ([CPPlatform supportsDragAndDrop]) { From e7cde2ca5ff14b193243248ccace24307fb8e73d Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 13 Nov 2014 00:10:22 -0800 Subject: [PATCH 136/234] Add support for usesMultilineMode and fix wraps and scrolls in nib2cib --- Tools/nib2cib/NSCell.j | 34 ++++++++++++++++++---------------- Tools/nib2cib/NSTextField.j | 4 ++++ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Tools/nib2cib/NSCell.j b/Tools/nib2cib/NSCell.j index 01307538a..8be4737b8 100644 --- a/Tools/nib2cib/NSCell.j +++ b/Tools/nib2cib/NSCell.j @@ -51,6 +51,7 @@ int _lineBreakMode @accessors(readonly, getter=lineBreakMode); CPFormatter _formatter @accessors(readonly, getter=formatter); int _tag @accessors(readonly, getter=tag); + BOOL _usesSingleLineMode @accessors(readonly, getter=usesSingleLineMode); } - (id)initWithCoder:(CPCoder)aCoder @@ -62,22 +63,23 @@ var flags = [aCoder decodeIntForKey:@"NSCellFlags"], flags2 = [aCoder decodeIntForKey:@"NSCellFlags2"]; - _state = (flags & 0x80000000) ? CPOnState : CPOffState; - _isHighlighted = (flags & 0x40000000) ? YES : NO; - _isEnabled = (flags & 0x20000000) ? NO : YES; - _isEditable = (flags & 0x10000000) ? YES : NO; - _isBordered = (flags & 0x00800000) ? YES : NO; - _isBezeled = (flags & 0x00400000) ? YES : NO; - _isSelectable = (flags & 0x00200000) ? YES : NO; - _isScrollable = (flags & 0x00100000) ? YES : NO; - _isContinuous = (flags & 0x00080100) ? YES : NO; - _scrolls = (flags & 0x00100000) && (flags & 0x00000040); - _wraps = (flags & 0x00100000 === 0) && (flags & 0x00000040 === 0); - _truncates = !(flags & 0x00100000) && (flags & 0x00000040); - _alignment = (flags2 & 0x1c000000) >> 26; - _lineBreakMode = (flags2 & 0x0E00) >> 9; - _controlSize = (flags2 & 0xE0000) >> 17; - _sendsActionOnEndEditing = (flags2 & 0x00400000) ? YES : NO; + _state = (flags & 0x80000000) ? CPOnState : CPOffState; + _isHighlighted = (flags & 0x40000000) ? YES : NO; + _isEnabled = (flags & 0x20000000) ? NO : YES; + _isEditable = (flags & 0x10000000) ? YES : NO; + _isBordered = (flags & 0x00800000) ? YES : NO; + _isBezeled = (flags & 0x00400000) ? YES : NO; + _isSelectable = (flags & 0x00200000) ? YES : NO; + _isScrollable = (flags & 0x00100000) ? YES : NO; + _isContinuous = (flags & 0x00080100) ? YES : NO; + _scrolls = (flags & 0x00100000) && (flags & 0x00000040) ? YES : NO; + _wraps = !(flags & 0x00100000) && !(flags & 0x00000040) ? YES : NO; + _truncates = (flags & 0x00100000) && !(flags & 0x00000040) ? YES : NO; + _alignment = (flags2 & 0x1c000000) >> 26; + _lineBreakMode = (flags2 & 0x0E00) >> 9; + _controlSize = (flags2 & 0xE0000) >> 17; + _sendsActionOnEndEditing = (flags2 & 0x00400000) ? YES : NO; + _usesSingleLineMode = (flags2 & 0xF4240) ? YES : NO; _tag = [aCoder decodeIntForKey:@"NSTag"]; diff --git a/Tools/nib2cib/NSTextField.j b/Tools/nib2cib/NSTextField.j index 711fb8f7e..cb0fa306b 100644 --- a/Tools/nib2cib/NSTextField.j +++ b/Tools/nib2cib/NSTextField.j @@ -54,6 +54,10 @@ [self setPlaceholderString:[cell placeholderString]]; + [self _setUsesSingleLineMode:[cell usesSingleLineMode]]; + [self _setWraps:[cell wraps]]; + [self _setScrolls:[cell scrolls]]; + var textColor = [cell textColor], defaultColor = [self currentValueForThemeAttribute:@"text-color"]; From de3f6d3e829cfeb8e7dd4c372651759ec82695af Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 13 Nov 2014 00:10:32 -0800 Subject: [PATCH 137/234] Add manual test --- .../CPTextFieldMultiline/AppController.j | 46 + Tests/Manual/CPTextFieldMultiline/Info.plist | 14 + Tests/Manual/CPTextFieldMultiline/Jakefile | 184 + .../Resources/MainMenu.cib | 3 + .../Resources/MainMenu.xib | 3604 +++++++++++++++++ .../CPTextFieldMultiline/index-debug.html | 191 + Tests/Manual/CPTextFieldMultiline/index.html | 161 + Tests/Manual/CPTextFieldMultiline/main.j | 18 + 8 files changed, 4221 insertions(+) create mode 100644 Tests/Manual/CPTextFieldMultiline/AppController.j create mode 100644 Tests/Manual/CPTextFieldMultiline/Info.plist create mode 100644 Tests/Manual/CPTextFieldMultiline/Jakefile create mode 100644 Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPTextFieldMultiline/index-debug.html create mode 100644 Tests/Manual/CPTextFieldMultiline/index.html create mode 100644 Tests/Manual/CPTextFieldMultiline/main.j diff --git a/Tests/Manual/CPTextFieldMultiline/AppController.j b/Tests/Manual/CPTextFieldMultiline/AppController.j new file mode 100644 index 000000000..db6ef8162 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/AppController.j @@ -0,0 +1,46 @@ +/* + * AppController.j + * CPTextFielMultine + * + * Created by You on November 12, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPTextField field1; + @outlet CPTextField field2; + @outlet CPTextField field3; + @outlet CPWindow theWindow; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var s = [field1 frameSize]; + s.height = 83; + [field1 setFrameSize:s] + + var s = [field2 frameSize]; + s.height = 83; + [field2 setFrameSize:s] + + var s = [field3 frameSize]; + s.height = 83; + [field3 setFrameSize:s] +} + +- (void)awakeFromCib +{ + [theWindow setFullPlatformWindow:YES]; +} + +- (IBAction)actionSent:(id)aSender +{ + CPLog.debug("action sent from " + aSender); +} + +@end diff --git a/Tests/Manual/CPTextFieldMultiline/Info.plist b/Tests/Manual/CPTextFieldMultiline/Info.plist new file mode 100644 index 000000000..4e6a94074 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPTextFieldMultiline + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPTextFieldMultiline/Jakefile b/Tests/Manual/CPTextFieldMultiline/Jakefile new file mode 100644 index 000000000..6d39494ac --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPTextFielMultine + * + * Created by You on November 12, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CPTextFielMultine"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPTextFielMultine.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPTextFielMultine"); + task.setIdentifier("com.yourcompany.CPTextFielMultine"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPTextFielMultine"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPTextFielMultine.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPTextFielMultine.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (ENV["CONFIGURATION"] === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib new file mode 100644 index 000000000..9affdf898 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib @@ -0,0 +1,3 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;205E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;206E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;159E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;207E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;194E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;209E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;188E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;211E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;166E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;213E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;214E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;158E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;193E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;168E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;182E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;174E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;152E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;158E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;193E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;163E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;168E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;137E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;174E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;204E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;203E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;202E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;201E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;200E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;205E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;267E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;268E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;87E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;270E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;273E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;279E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;281E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;282E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;93E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;93E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;282E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;283E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;285E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;286E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;288E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;289E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;290E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;100E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;290E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;292E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;293E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;294E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;103E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;294E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;296E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;298E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;299E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;300E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;302E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;303E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;304E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;306E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;310E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;114E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;310E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;312E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;313E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;315E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;316E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;317E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;318E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;319E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;320E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;323E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;324E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;325E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;326E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;326E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;327E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;328E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;332E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;333E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;334E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;334E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;336E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;338E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;338E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;339E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;340E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;324E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;325E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;342E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;313E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;136E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;136E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;343E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;346E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;347E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;350E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;352E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;353E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;142E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;142E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;353E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;354E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;355E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;356E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;142E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;148E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;148E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;360E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;361E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;362E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;148E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;363E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;364E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;148E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;151E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;366E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;367E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;368E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;369E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;370E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;318E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;270E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;154E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;372E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;372E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;373E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;374E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;376E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;384E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;387E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;391E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;393E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;394E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;398E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;399E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;402E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;404E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;405E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;406E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;17;CPSecureTextFieldK;8;$classesA;S;17;CPSecureTextFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;407E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;412E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;414E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;415E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;417E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;418E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;420E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;421E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;422E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;423E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;424E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;427E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;428E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;10;CPComboBoxK;8;$classesA;S;10;CPComboBoxS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;173E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;429E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;430E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;431E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;432E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;433E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;277E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;277E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;434E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;275E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;435E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;436E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;437E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;427E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;438E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;439E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;440E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;10;$classnameS;13;CPSearchFieldK;8;$classesA;S;13;CPSearchFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;441E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;443E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;277E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;275E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;444E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;445E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;446E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;447E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;12;CPTokenFieldK;8;$classesA;S;12;CPTokenFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;448E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;449E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;450E;K;11;$aalignmentD;K;6;CP$UIDd;3;371E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;451E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;371E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;1;0E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;1;0E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;453E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;184E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;454E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;455E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;456E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;457E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;458E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;371E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;371E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;371E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;461E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;462E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;463E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;460E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;464E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;465E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;466E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;469E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;470E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;398E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;472E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;473E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;474E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;475E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;476E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;477E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;405E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;480E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;481E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;482E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;483E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;484E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;485E;E;D;K;10;$classnameS;18;CPObjectControllerK;8;$classesA;S;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;152E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;488E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;489E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;490E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;491E;E;E;S;8;delegateS;6;field1S;6;field2S;6;field3S;6;field5S;6;field6S;6;field7S;9;theWindowS;7;contentS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;11;actionSent:S;28;value: selection.stringValueS;5;valueS;21;selection.stringValueD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;99E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;126E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;116E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;125E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;128E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;146E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;143E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, -73}, {865, 560}}S;21;{{0, 0}, {1440, 877}}d;1;0S;20;{{0, 0}, {865, 560}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;E;E;S;6;normalS;6;{1, 1}S;21;{{20, 20}, {268, 17}}S;19;{{0, 0}, {268, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;1;4D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;382E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;492E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;493E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;277E;E;S;19;Scrolls, multi lineD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;494E;E;S;21;{{21, 45}, {268, 49}}S;19;{{0, 0}, {268, 49}}S;16;controlSizeSmallD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;497E;E;D;K;6;$classD;K;6;CP$UIDd;3;382E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;492E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;498E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;277E;E;S;124;Add a new line with alt+enter, if the line is bigger than the width of the field, it should continue, scrolling to the rightS;21;{{16, 99}, {276, 83}}S;19;{{0, 0}, {276, 83}}S;47;bezeled+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;499E;E;S;20;line 1 +line 2 +line 3S;22;{{20, 215}, {268, 83}}S;19;{{0, 0}, {268, 83}}S;5;LabelS;22;{{21, 193}, {268, 17}}S;20;String value bindingS;22;{{20, 320}, {269, 17}}S;19;{{0, 0}, {269, 17}}S;17;Secure text fieldS;22;{{16, 363}, {276, 22}}S;19;{{0, 0}, {276, 22}}S;6;Line 1S;22;{{20, 344}, {268, 14}}S;19;{{0, 0}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;500E;E;S;40;You should not be able to alt+enter hereS;22;{{21, 396}, {268, 17}}S;22;{{20, 421}, {268, 22}}S;19;{{0, 0}, {268, 22}}S;23;{{298, 320}, {114, 17}}S;19;{{0, 0}, {114, 17}}S;19;Standard text fieldS;23;{{293, 363}, {276, 22}}S;23;{{298, 421}, {268, 22}}S;23;{{298, 396}, {268, 17}}S;23;{{298, 345}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;501E;E;S;36;You should be able to alt+enter hereS;22;{{572, 320}, {73, 17}}S;18;{{0, 0}, {73, 17}}S;9;Combo boxS;23;{{568, 364}, {276, 26}}S;19;{{0, 0}, {276, 26}}S;8;comboboxS;63;bezeled+button-bordered+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;E;E;d;1;5S;23;{{572, 345}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;505E;E;S;21;{{21, 471}, {73, 17}}S;12;Search fieldS;22;{{21, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;506E;E;S;22;{{20, 518}, {268, 22}}S;11;searchfieldS;55;bezeled+controlSizeRegular+editable+placeholder+roundedd;3;254S;22;{{296, 471}, {67, 17}}S;18;{{0, 0}, {67, 17}}S;11;Token fieldS;23;{{292, 514}, {276, 22}}S;10;tokenfieldS;35;bezeled+controlSizeRegular+editableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{296, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;507E;E;S;23;{{572, 514}, {267, 29}}S;19;{{0, 0}, {267, 29}}D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;508E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;371E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;509E;E;D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;510E;E;S;22;{{572, 471}, {71, 17}}S;18;{{0, 0}, {71, 17}}S;11;Date pickerS;23;{{572, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;511E;E;S;23;{{298, 215}, {268, 83}}S;22;{{294, 99}, {276, 83}}S;22;{{298, 20}, {268, 17}}S;17;Wraps, multi lineS;22;{{299, 45}, {268, 49}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;512E;E;S;109;Can add a new line with alt+enter, if the line is bigger than the screen, it should automatically wrap aroundS;23;{{298, 193}, {268, 17}}S;22;{{572, 99}, {276, 83}}S;23;{{576, 215}, {268, 83}}S;22;{{576, 20}, {269, 17}}S;20;Scrolls, single lineS;22;{{577, 45}, {268, 49}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;513E;E;S;116;Cannot add a new line, if the line is bigger than the width of the field, it should continue, scrolling to the rightS;23;{{576, 193}, {268, 17}}S;13;AppControllerS;19;CPMutableDictionaryS;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;514E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;515E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;516E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;517E;E;S;29;.Helvetica Neue DeskInterfaced;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;324E;E;E;S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;519E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;520E;E;E;d;2;11D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;521E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;522E;E;E;S;6;Item 1S;6;Item 2S;6;Item 3D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;523E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;524E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;525E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;E;E;d;15;-62135510400000d;14;64092297600000D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;526E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;527E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;528E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;530E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;531E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;532E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;533E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;535E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;536E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;537E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;538E;E;f;12;0.8509804606D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;f;12;0.2027027011E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib new file mode 100644 index 000000000..66031528e --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib @@ -0,0 +1,3604 @@ + + + + 1050 + 14B23 + 6250 + 1343.16 + 755.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 6250 + + + NSComboBox + NSComboBoxCell + NSCustomObject + NSDatePicker + NSDatePickerCell + NSMenu + NSMenuItem + NSObjectController + NSSearchField + NSSearchFieldCell + NSSecureTextField + NSSecureTextFieldCell + NSTextField + NSTextFieldCell + NSTokenField + NSTokenFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + + NewApplication + + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + + Spelling and Grammar + + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + + Substitutions + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + + Help + + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 7 + 2 + {{335, 390}, {865, 560}} + 1946157056 + Window + NSWindow + + + + + 256 + + + + 268 + {{20, 375}, {268, 83}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + YES + 13 + 1044 + + bGluZSAxCmxpbmUgMgpsaW5lIDM + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + NO + 1 + + + + 268 + {{18, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + labelColor + + + + NO + 1 + + + + 268 + {{296, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272629760 + Label + + _NS:526 + + + + + NO + YES + 1 + + + + 268 + {{18, 117}, {272, 22}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 117}, {272, 22}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 523}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Scrolls, multi line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{297, 172}, {268, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + Line 1 + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{20, 172}, {268, 22}} + + + + _NS:9 + YES + + 342884416 + 272630848 + + + Line 1 + _NS:9 + + YES + + + + NSAllRomanInputSourcesLocaleIdentifier + + + NO + 1 + + + + 268 + {{298, 375}, {268, 83}} + + + + _NS:9 + YES + + -1805647871 + 272629760 + + + bGluZSAxCmxpbmUgMgpsaW5lIDM + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{296, 523}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Wraps, multi line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 223}, {273, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Secure text field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 223}, {118, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Standard text field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{19, 72}, {77, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Search field + + _NS:526 + + + + + NO + 1 + + + + 268 + + NSStringPboardType + + {{296, 21}, {268, 22}} + + + + _NS:9 + YES + + 341835776 + 0 + + Line 1 + _NS:9 + + YES + + + 6 + System + controlTextColor + + + + 0.0 + 0 + + NO + 1 + 2 + + + + 268 + {{294, 72}, {71, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Token field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{570, 223}, {77, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Combo box + + _NS:526 + + + + + NO + 1 + + + + 268 + {{572, 170}, {271, 26}} + + + + _NS:9 + YES + + 342884417 + 272630784 + + + _NS:9 + + YES + + + 5 + YES + + Item 1 + Item 2 + Item 3 + + + + + 274 + {13, 63} + + + _NS:29 + YES + NO + YES + tableViewAction: + + + + 0 + 10 + 10 + 3.4028234663852886e+38 + + 67108928 + 2048 + + + YES + 11 + 3100 + + + 6 + System + headerColor + + + + 6 + System + headerTextColor + + + + + 337641536 + 268437504 + Item 3 + + + + 6 + System + controlBackgroundColor + + + + + 3 + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 19 + tableViewAction: + -765427712 + + + + 1 + -1 + 0 + YES + 0 + 1 + + + NO + 1 + + + + 268 + {{20, 20}, {268, 22}} + + + + YES + _NS:9 + YES + + 342884416 + 268436544 + + + _NS:9 + + YES + 1 + + + + 0 + 0 + search + + _searchFieldSearch: + + 138690560 + 0 + + 400 + 75 + + + 0 + 0 + clear + + + cancel + + + + + _searchFieldCancel: + + 138690560 + 0 + + 400 + 75 + + 255 + BgAAAA + + NO + 1 + + + + 268 + {{572, 21}, {270, 27}} + + + _NS:9 + YES + + 71303168 + 0 + + -595929600 + + US/Pacific + + VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ +y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ +5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g +8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ +AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg +DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ +HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g +KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ +OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg +Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ +VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg +Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ +cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg +f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + + + %Y-%m-%d %H:%M:%S %z + + + _NS:9 + + 0.0 + 224 + + + + NO + + + + 268 + {{570, 72}, {75, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Date picker + + _NS:526 + + + + + NO + 1 + + + + 268 + {{19, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Add a new line with alt+enter, if the line is bigger than the width of the field, it should continue, scrolling to the right + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 1 + + + + 268 + {{297, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Can add a new line with alt+enter, if the line is bigger than the screen, it should automatically wrap around + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 350}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 350}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 202}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 147}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 147}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 201}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{570, 201}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{294, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{570, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{576, 375}, {268, 83}} + + + + _NS:9 + YES + + -1804599231 + 272630848 + + + Line 1 + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{574, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{574, 523}, {273, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Scrolls, single line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{575, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Cannot add a new line, if the line is bigger than the width of the field, it should continue, scrolling to the right + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{574, 350}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + {865, 560} + + + + {{0, 0}, {1440, 877}} + {10000000000000, 10000000000000} + YES + + + AppController + + + YES + + + + YES + + + + YES + + + + YES + + + + YES + + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + theWindow + + + + 459 + + + + actionSent: + + + + 598 + + + + actionSent: + + + + 599 + + + + field5 + + + + 584 + + + + actionSent: + + + + 602 + + + + actionSent: + + + + 601 + + + + actionSent: + + + + 600 + + + + actionSent: + + + + 603 + + + + field6 + + + + 585 + + + + field7 + + + + 586 + + + + actionSent: + + + + 604 + + + + actionSent: + + + + 605 + + + + actionSent: + + + + 606 + + + + field1 + + + + 643 + + + + field2 + + + + 644 + + + + field3 + + + + 645 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 488 + + + + content + + + + 483 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 542 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 545 + + + + content + + + + 538 + + + + content + + + + 539 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 556 + + + + content + + + + 553 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 569 + + + + content + + + + 564 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + MainMenu + + + 19 + + + + + + + + 56 + + + + + + + + 103 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + 75 + + + + + 80 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + + + + + + 111 + + + + + 57 + + + + + + + + + + + + 58 + + + + + 136 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 450 + + + + + 480 + + + 1 + + + 533 + + + 2 + + + 535 + + + 3 + + + 551 + + + 4 + + + 562 + + + 5 + + + 460 + + + + + + + + 461 + + + + + 517 + + + + + + + + 518 + + + + + 474 + + + + + + + + 475 + + + + + 527 + + + + + + + + 528 + + + + + 530 + + + + + + + + 531 + + + + + 548 + + + + + + + + 549 + + + + + 559 + + + + + + + + 560 + + + + + 519 + + + + + + + + 520 + + + + + 521 + + + + + + + + 522 + + + + + 462 + + + + + + + + 463 + + + + + 472 + + + + + + + + 473 + + + + + 523 + + + + + + + + 526 + + + + + 524 + + + + + + + + 525 + + + + + 546 + + + + + + + + 547 + + + + + 557 + + + + + + + + 558 + + + + + 589 + + + + + + + + 590 + + + + + 570 + + + + + + + + 571 + + + + + 572 + + + + + + + + 573 + + + + + 575 + + + + + + + + 576 + + + + + 578 + + + + + + + + 579 + + + + + 587 + + + + + + + + 588 + + + + + 591 + + + + + + + + 592 + + + + + 593 + + + + + + + + 594 + + + + + 615 + + + + + + + + 616 + + + + + 617 + + + + + + + + 618 + + + + + 619 + + + + + + + + 620 + + + + + 621 + + + + + + + + 622 + + + + + 623 + + + + + + + + 624 + + + + + 625 + + + + + + + + 626 + + + + + 627 + + + + + + + + 628 + + + + + 629 + + + + + + + + 630 + + + + + 631 + + + + + + + + 632 + + + + + 633 + + + + + + + + 634 + + + + + 635 + + + + + + + + 636 + + + + + 637 + + + + + + + + 638 + + + + + 639 + + + + + + + + 640 + + + + + 641 + + + + + + + + 642 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {357.5, 439} + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 645 + + + 0 + IBCocoaFramework + NO + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + {12, 12} + {10, 2} + + + diff --git a/Tests/Manual/CPTextFieldMultiline/index-debug.html b/Tests/Manual/CPTextFieldMultiline/index-debug.html new file mode 100644 index 000000000..7a4693877 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPTextFielMultine + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextFieldMultiline/index.html b/Tests/Manual/CPTextFieldMultiline/index.html new file mode 100644 index 000000000..cb15b05a5 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPTextFielMultine + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextFieldMultiline/main.j b/Tests/Manual/CPTextFieldMultiline/main.j new file mode 100644 index 000000000..48db81b12 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPTextFielMultine + * + * Created by You on November 12, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From e2020fa7f2dfda58eba1118482a271ec82a596f5 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 13 Nov 2014 00:17:29 -0800 Subject: [PATCH 138/234] Add CPAltEnterTextAreaFeature checking. FF doesn't add a cariage return on textarea when doing alt+enter --- AppKit/CPCompatibility.j | 4 ++++ AppKit/CPTextField.j | 5 +---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index c471c1408..623249cd2 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -78,6 +78,8 @@ CPInputOnInputEventFeature = 30; CPFileAPIFeature = 31; +CPAltEnterTextAreaFeature = 32; + /* @@ -100,6 +102,7 @@ var USER_AGENT = "", // default these features to true PLATFORM_FEATURES[CPInputTypeCanBeChangedFeature] = YES; PLATFORM_FEATURES[CPInputSetFontOutsideOfDOM] = YES; +PLATFORM_FEATURES[CPAltEnterTextAreaFeature] = YES; if (typeof window !== "undefined" && typeof window.navigator !== "undefined") USER_AGENT = window.navigator.userAgent; @@ -208,6 +211,7 @@ else if (USER_AGENT.indexOf("Gecko") !== -1) // Must follow KHTML check. // Some day this might be fixed and should be version prefixed. No known fixed version yet. PLATFORM_FEATURES[CPInput1PxLeftPadding] = YES; + PLATFORM_FEATURES[CPAltEnterTextAreaFeature] = NO; // This was supposed to be added in Firefox 22, but when testing with the latest beta as of 2013-06-14 // it does not seem to work. It seems to exhibit the CPJavaScriptPasteRequiresEditableTarget problem, // and in addition doesn't seem to work with our native copy code either. diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 63ea80fe2..4b5f1dff6 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1079,9 +1079,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _didEdit]; } - console.error("newValue : >" + newValue + "<") - console.error("_stringValue : >" + _stringValue + "<") - if ([self _valueIsValid:_stringValue]) { // If _isEditing == YES then the target action can also be called via @@ -1129,7 +1126,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // we don't need to do this in case of textarea // or we will end up with 2 carriage returns - if (aCharacter != CPNewlineCharacter || element.nodeName.toUpperCase() != "TEXTAREA") + if (aCharacter != CPNewlineCharacter || element.nodeName.toUpperCase() != "TEXTAREA" || !CPFeatureIsCompatible(CPAltEnterTextAreaFeature)) element.value = [element.value stringByReplacingCharactersInRange:[self selectedRange] withString:aCharacter]; [self _setStringValue:element.value]; From a5283a26abc850a591b2990845412e41db684ff3 Mon Sep 17 00:00:00 2001 From: Christophe Serafin Date: Fri, 14 Nov 2014 13:49:33 -0800 Subject: [PATCH 139/234] Fixed: Enable CPTextField to have a specific height When setting controlSize, CPTextfield height was forced to min-size height. Now we check that the frame size is between the min and the max size. It allows to constrain a CPControl to have a fixed height by specifying a min-size equivalent to the maxsize. In CPTextField case, we only have a min-size which enable us to have a specific size. Changes has been made in Aristo2 only. --- AppKit/CPControl.j | 12 +++++++++++- AppKit/CPTextField.j | 2 +- AppKit/Themes/Aristo2/ThemeDescriptors.j | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index c2b1083ce..0c5836764 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -260,10 +260,20 @@ var CPControlBlackColor = [CPColor blackColor]; maxSize = [self currentValueForThemeAttribute:@"max-size"]; if (minSize.width > 0) + { frameSize.width = MAX(minSize.width, frameSize.width); + if (maxSize.width > 0) + frameSize.width = MIN(maxSize.width, frameSize.width); + } + if (minSize.height > 0) - frameSize.height = minSize.height; + { + frameSize.height = MAX(minSize.height, frameSize.height); + + if (maxSize.height > 0) + frameSize.height = MIN(maxSize.height, frameSize.height); + } [self setFrameSize:frameSize]; } diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index fc3d833d9..3bdb49c80 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -240,8 +240,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _sizeToControlSize]; } -#pragma mark - +#pragma mark - #if PLATFORM(DOM) - (DOMElement)_inputElement diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index f5f11c7f5..bf72661f3 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -374,7 +374,7 @@ var themedButtonValues = nil, [@"font", [CPFont boldSystemFontOfSize:11.0]], [@"min-size", CGSizeMake(32.0, 20.0), CPThemeStateControlSizeSmall], - [@"max-size", CGSizeMake(1.0, 20.0), CPThemeStateControlSizeSmall], + [@"max-size", CGSizeMake(-1.0, 20.0), CPThemeStateControlSizeSmall], [@"nib2cib-adjustment-frame", CGRectMake(3.0, 4.0, -6.0, 0.0), CPThemeStateControlSizeSmall], // CPThemeStateControlSizeMini @@ -386,7 +386,7 @@ var themedButtonValues = nil, [@"min-size", CGSizeMake(32.0, 16.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 16.0), CPThemeStateControlSizeMini], - [@"nib2cib-adjustment-frame", CGRectMake(1.0, 10.0, -3.0, 0.0), CPThemeStateControlSizeMini] + [@"nib2cib-adjustment-frame", CGRectMake(1.0, 10.0, -3.0, 0.0), CPThemeStateControlSizeMini] ]; [self registerThemeValues:themeValues forView:button]; From d30659c37c9632f5039353eea0e913a8f8799d0e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 19 Nov 2014 14:27:19 -0800 Subject: [PATCH 140/234] Fixed: CPMenu crash when opening a menu with items and then opening the menu without items Previously, when opening a menu with items and then opening another menu without items, Cappuccino simply crashed. Now it works ! --- AppKit/CPMenu/_CPMenuWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPMenu/_CPMenuWindow.j b/AppKit/CPMenu/_CPMenuWindow.j index ddf53a7dd..571e3d670 100644 --- a/AppKit/CPMenu/_CPMenuWindow.j +++ b/AppKit/CPMenu/_CPMenuWindow.j @@ -410,7 +410,7 @@ _CPMenuWindowAttachedMenuBackgroundStyle = 2; { // Don't return indexes of items that aren't visible. if (!CGRectContainsPoint([_menuClipView bounds], [_menuClipView convertPoint:aPoint fromView:nil])) - return NO; + return CPNotFound; return [_menuView itemIndexAtPoint:[_menuView convertPoint:aPoint fromView:nil]]; } From 86d24319255258446652a73fc49e34cd3b0c63f9 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 14:34:52 -0800 Subject: [PATCH 141/234] CPWebScriptObject is a class, not a typedef --- AppKit/CPPasteboard.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPPasteboard.j b/AppKit/CPPasteboard.j index 8f5c4f754..b8e0139f0 100644 --- a/AppKit/CPPasteboard.j +++ b/AppKit/CPPasteboard.j @@ -26,7 +26,7 @@ @import @import -@typedef CPWebScriptObject +@class CPWebScriptObject CPGeneralPboard = @"CPGeneralPboard"; CPFontPboard = @"CPFontPboard"; From 9e66c699e1e85b0d8f9fadf26653d242be07132f Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 14:35:33 -0800 Subject: [PATCH 142/234] FIXED: prevent to declare a type that is already declared as a class and vice-versa --- Objective-J/ObjJAcornCompiler.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index fd6f020d3..e9bc334f5 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -1674,6 +1674,9 @@ ClassDeclarationStatement: function(node, st, c) { compiler.cmBuffer = new StringBuffer(); compiler.classBodyBuffer = new StringBuffer(); // TODO: Check if this is needed + if (compiler.getTypeDef(className)) + throw compiler.error_message(className + " is already declared as type", node.classname); + if (!generate) saveJSBuffer.concat(compiler.source.substring(compiler.lastPos, node.start)); // First we declare the class @@ -2444,6 +2447,9 @@ TypeDefStatement: function(node, st, c) { if (typeDef) throw compiler.error_message("Duplicate type definition " + typeDefName, node.typedefname); + if (compiler.getClassDef(typeDefName)) + throw compiler.error_message(typeDefName + " is already declared as class", node.typedefname); + compiler.imBuffer = new StringBuffer(); compiler.cmBuffer = new StringBuffer(); From 460a60440a54e50b548108368450faf9fe248882 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 14:53:38 -0800 Subject: [PATCH 143/234] Correctly set the type of datasource in CPComboBox --- AppKit/CPComboBox.j | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 01d424664..6787948e3 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -61,19 +61,19 @@ var CPComboBoxTextSubview = @"text", @implementation CPComboBox : CPTextField { - CPArray _items; - _CPPopUpList _listDelegate; - id _dataSource; - BOOL _usesDataSource; - BOOL _completes; - BOOL _canComplete; - int _numberOfVisibleItems; - BOOL _forceSelection; - BOOL _hasVerticalScroller; - CPString _selectedStringValue; - CGSize _intercellSpacing; - float _itemHeight; - BOOL _popUpButtonCausedResign; + CPArray _items; + _CPPopUpList _listDelegate; + id _dataSource; + BOOL _usesDataSource; + BOOL _completes; + BOOL _canComplete; + int _numberOfVisibleItems; + BOOL _forceSelection; + BOOL _hasVerticalScroller; + CPString _selectedStringValue; + CGSize _intercellSpacing; + float _itemHeight; + BOOL _popUpButtonCausedResign; } + (CPString)defaultThemeClass From d106e6485bb0970131e4e7fd295d0a3a97de1972 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 16:23:56 -0800 Subject: [PATCH 144/234] Add some manual test cases for objj output --- Tests/Manual/CompilationTests/README.md | 6 ++ Tests/Manual/CompilationTests/TestCases/1.j | 13 ++++ Tests/Manual/CompilationTests/TestCases/2.j | 20 +++++ Tests/Manual/CompilationTests/TestCases/3.j | 15 ++++ Tests/Manual/CompilationTests/TestCases/4.j | 15 ++++ Tests/Manual/CompilationTests/TestCases/5.j | 22 ++++++ Tests/Manual/CompilationTests/TestCases/6.j | 16 ++++ Tests/Manual/CompilationTests/TestCases/7.j | 20 +++++ Tests/Manual/CompilationTests/TestCases/8.j | 20 +++++ Tests/Manual/CompilationTests/TestCases/9.j | 22 ++++++ Tests/Manual/CompilationTests/run.py | 82 +++++++++++++++++++++ 11 files changed, 251 insertions(+) create mode 100644 Tests/Manual/CompilationTests/README.md create mode 100644 Tests/Manual/CompilationTests/TestCases/1.j create mode 100644 Tests/Manual/CompilationTests/TestCases/2.j create mode 100644 Tests/Manual/CompilationTests/TestCases/3.j create mode 100644 Tests/Manual/CompilationTests/TestCases/4.j create mode 100644 Tests/Manual/CompilationTests/TestCases/5.j create mode 100644 Tests/Manual/CompilationTests/TestCases/6.j create mode 100644 Tests/Manual/CompilationTests/TestCases/7.j create mode 100644 Tests/Manual/CompilationTests/TestCases/8.j create mode 100644 Tests/Manual/CompilationTests/TestCases/9.j create mode 100755 Tests/Manual/CompilationTests/run.py diff --git a/Tests/Manual/CompilationTests/README.md b/Tests/Manual/CompilationTests/README.md new file mode 100644 index 000000000..04a7e90c0 --- /dev/null +++ b/Tests/Manual/CompilationTests/README.md @@ -0,0 +1,6 @@ +To run these tests: + + - open x.j + - check what is the expected output in the comments + - run objj x.j + - check you get the correct output diff --git a/Tests/Manual/CompilationTests/TestCases/1.j b/Tests/Manual/CompilationTests/TestCases/1.j new file mode 100644 index 000000000..b2585522e --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/1.j @@ -0,0 +1,13 @@ +// Expected output: 0 + +/* +*/ + + +@import + +@implementation MyCall : CPObject +{ + CPString property1; +} +@end diff --git a/Tests/Manual/CompilationTests/TestCases/2.j b/Tests/Manual/CompilationTests/TestCases/2.j new file mode 100644 index 000000000..af2c92cf1 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/2.j @@ -0,0 +1,20 @@ +// Expected output: 0 + +/* + +START_EXPECTED + MyType property1; + ^ +WARNING line 5 in file:[__PATH__]: Unknown type 'MyType' for ivar 'property1' +END_EXPECTED +*/ + + +@import + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/3.j b/Tests/Manual/CompilationTests/TestCases/3.j new file mode 100644 index 000000000..e00d77593 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/3.j @@ -0,0 +1,15 @@ +// Expected output: 0 + +/* +*/ + +@import + +@typedef MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/4.j b/Tests/Manual/CompilationTests/TestCases/4.j new file mode 100644 index 000000000..889ab3036 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/4.j @@ -0,0 +1,15 @@ +// Expected output: 0 + +/* +*/ + +@import + +@class MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/5.j b/Tests/Manual/CompilationTests/TestCases/5.j new file mode 100644 index 000000000..bcbf216ab --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/5.j @@ -0,0 +1,22 @@ +// Expected output: 0 + +/* + +START_EXPECTED + MyType property1; + ^ +WARNING line 7 in file:[__PATH__]: Unknown type 'MyType' for ivar 'property1' +END_EXPECTED + +*/ + +@import + +@global MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/6.j b/Tests/Manual/CompilationTests/TestCases/6.j new file mode 100644 index 000000000..b41c518cb --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/6.j @@ -0,0 +1,16 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10771 of file [unknown] +SyntaxError: +@typedef MyType + ^ +ERROR line 2 in file:[__PATH__]: Duplicate type definition MyType +END_EXPECTED + +*/ + +@typedef MyType +@typedef MyType diff --git a/Tests/Manual/CompilationTests/TestCases/7.j b/Tests/Manual/CompilationTests/TestCases/7.j new file mode 100644 index 000000000..cdff5aeda --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/7.j @@ -0,0 +1,20 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10001 of file [unknown] +SyntaxError: +@implementation MyType : CPObject + ^ +ERROR line 5 in file:[__PATH__]: MyType is already declared as type +END_EXPECTED + +*/ + +@import + +@typedef MyType + +@implementation MyType : CPObject +@end diff --git a/Tests/Manual/CompilationTests/TestCases/8.j b/Tests/Manual/CompilationTests/TestCases/8.j new file mode 100644 index 000000000..07a2aa769 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/8.j @@ -0,0 +1,20 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10774 of file [unknown] +SyntaxError: +@typedef MyType + ^ +ERROR line 6 in file:[__PATH__]: MyType is already declared as class +END_EXPECTED + +*/ + +@import + +@implementation MyType : CPObject +@end + +@typedef MyType diff --git a/Tests/Manual/CompilationTests/TestCases/9.j b/Tests/Manual/CompilationTests/TestCases/9.j new file mode 100644 index 000000000..0fd6c0678 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/9.j @@ -0,0 +1,22 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10014 of file [unknown] +SyntaxError: +@implementation MyType : CPObject + ^ +ERROR line 6 in file:[__PATH__]: Duplicate class MyType +END_EXPECTED + +*/ + +@import + +@implementation MyType : CPObject +@end + +@implementation MyType : CPObject +@end + diff --git a/Tests/Manual/CompilationTests/run.py b/Tests/Manual/CompilationTests/run.py new file mode 100755 index 000000000..e21eebaa3 --- /dev/null +++ b/Tests/Manual/CompilationTests/run.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import os +import commands +import re + +PATH = os.path.abspath(os.path.join(os.path.dirname(__file__))) + + +def get_tests_cases(): + ret = [] + for filename in os.listdir("TestCases"): + ret.append("TestCases/%s" % filename) + return ret + # return ["TestCases/2.j"] + +def get_expected_output(test_case): + f = open(test_case) + content = f.readlines(); + f.close() + + status = int(content[0].replace("// Expected output: ", "")) + + recording = False + output = [] + + for line in content: + if "END_EXPECTED" in line: + recording = False + break; + + if "START_EXPECTED" in line: + recording = True + continue + + if recording: + output.append(line) + + output = "".join(output); + output = output.replace("[__PATH__]", "%s/%s" % (PATH, test_case)) + output = cleanup_output(output) + + return (status, output) + + +def get_actual_output(test_case): + status, output = commands.getstatusoutput("objj %s" % test_case) + output = cleanup_output(output) + return (status, output) + + +def cleanup_output(output): + if not output: + return "" + output = output.replace(" ", "") + output = output.replace("\n", "") + output = output.replace("[0m", "") + return re.sub('[^\s!-~]', '', output) + + +if __name__ == "__main__": + + for test in get_tests_cases(): + + expected_status, expected_output = get_expected_output(test) + actual_status, actual_output = get_actual_output(test) + + print "########################################" + print "Testing %s" % test + errored = False + if expected_status != actual_status: + errored = True + print " Error in %s: Status code is different: expected %d, actual %d" % (test, expected_status, actual_status) + + if expected_output != actual_output: + errored = True + print " Error in %s. Outputs are different" % test + print " EXPECTED: %s" % expected_output + print " ACTUAL: %s" % actual_output + + if not errored: + print " OK" From 653f706f1b02b867b4ccaf65b2e7667f39494382 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 16:29:05 -0800 Subject: [PATCH 145/234] Update README --- Tests/Manual/CompilationTests/README.md | 50 ++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/Tests/Manual/CompilationTests/README.md b/Tests/Manual/CompilationTests/README.md index 04a7e90c0..c852088b8 100644 --- a/Tests/Manual/CompilationTests/README.md +++ b/Tests/Manual/CompilationTests/README.md @@ -1,6 +1,46 @@ -To run these tests: +## Run tests - - open x.j - - check what is the expected output in the comments - - run objj x.j - - check you get the correct output +./run.py + + +## Create a test case + +create a `.j` file in `TestCases` folder: + +-First line MUST be: + + // Expected output: [OBJJ_STATUS_CODE] + + +Then after that add a block comment that contains: + + /* + START_EXPECTED + [CONSOLE_OUTPUT_OF_OBJJ] + END_EXPECTED + */ + + +Be sure to replace the file path by the token `[__PATH__]` After that, add the code you want to test. + +If your test doesn't expect any output, don't put any `START_EXPECTED` and `END_EXPECTED` + + +For instance: + + /* + START_EXPECTED + Error on line 10771 of file [unknown] + SyntaxError: + @typedef MyType + ^ + ERROR line 2 in file:[__PATH__]: Duplicate type definition MyType + END_EXPECTED + */ + @import + + @implementation MyCall : CPObject + { + CPString property1; + } + @end From 37b9895878319d11409ba660363eadc852048700 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 20 Nov 2014 11:44:32 -0800 Subject: [PATCH 146/234] Add check to ensure a @class declaration is not already defined as a type --- Objective-J/ObjJAcornCompiler.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index e9bc334f5..ce3009ef7 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -2412,6 +2412,10 @@ ClassStatement: function(node, st, c) { compiler.jsBuffer.concat("//"); } var className = node.id.name; + + if (compiler.getTypeDef(className)) + throw compiler.error_message(className + " is already declared as type", node.id); + if (!compiler.getClassDef(className)) { classDef = new ClassDef(false, className); compiler.classDefs[className] = classDef; From f3090e7827b655e7eea4832ea6c668025ccc2445 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 20 Nov 2014 11:44:51 -0800 Subject: [PATCH 147/234] Update test cases --- Tests/Manual/CompilationTests/TestCases/10.j | 18 ++++++++++++++++++ Tests/Manual/CompilationTests/TestCases/6.j | 2 +- Tests/Manual/CompilationTests/TestCases/8.j | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 Tests/Manual/CompilationTests/TestCases/10.j diff --git a/Tests/Manual/CompilationTests/TestCases/10.j b/Tests/Manual/CompilationTests/TestCases/10.j new file mode 100644 index 000000000..c614eeb4d --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/10.j @@ -0,0 +1,18 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10778 of file [unknown] +SyntaxError: +@typedef mytype + ^ +ERROR line 4 in file:[__PATH__]: mytype is already declared as class +END_EXPECTED +*/ + +@import + +@class mytype +@typedef mytype + diff --git a/Tests/Manual/CompilationTests/TestCases/6.j b/Tests/Manual/CompilationTests/TestCases/6.j index b41c518cb..37a7f86bf 100644 --- a/Tests/Manual/CompilationTests/TestCases/6.j +++ b/Tests/Manual/CompilationTests/TestCases/6.j @@ -3,7 +3,7 @@ /* START_EXPECTED -Error on line 10771 of file [unknown] +Error on line 10775 of file [unknown] SyntaxError: @typedef MyType ^ diff --git a/Tests/Manual/CompilationTests/TestCases/8.j b/Tests/Manual/CompilationTests/TestCases/8.j index 07a2aa769..393371331 100644 --- a/Tests/Manual/CompilationTests/TestCases/8.j +++ b/Tests/Manual/CompilationTests/TestCases/8.j @@ -3,7 +3,7 @@ /* START_EXPECTED -Error on line 10774 of file [unknown] +Error on line 10778 of file [unknown] SyntaxError: @typedef MyType ^ From 0dcc645f229473a7221db6fd63b0928d315ff9af Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 20 Nov 2014 11:50:18 -0800 Subject: [PATCH 148/234] Fix a missing @class declaration --- AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j | 2 -- AppKit/CPWebView.j | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j index d11eceb64..30470d5c6 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j @@ -24,8 +24,6 @@ @import "CPDatePicker.j" @import "CPPopUpButton.j" -@class CPRuleEditorRowType - @global CPApp @global CPMiniControlSize @global CPSmallControlSize diff --git a/AppKit/CPWebView.j b/AppKit/CPWebView.j index 3f2ca713e..fe344027e 100644 --- a/AppKit/CPWebView.j +++ b/AppKit/CPWebView.j @@ -23,6 +23,7 @@ @import "CPView.j" @import "CPScrollView.j" +@class CPWebScriptObject // FIXME: implement these where possible: /* From fe25dbd87296402d921c7c2cbf8c2de2ed583e8a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 20 Nov 2014 15:21:07 -0800 Subject: [PATCH 149/234] New: added method addObserverForName:object::usingBlock: in CPNotificationCenter Previously, the method addObserverForName:object::usingBlock: didn't exist in Cappuccino. Now it does. To observe, you need to use the method - (id )addObserverForName:(CPString)aNotificationName object:(id)anObject usingBlock:(Function)block To unregister observations, you pass the object returned by this method to removeObserver:. You must invoke removeObserver: or removeObserver:name:object:. Test /Tests/Foundation/CPNotificationCenterTest.j Fixed #2259 --- Foundation/CPNotificationCenter.j | 68 ++++++++++++++++++--- Tests/Foundation/CPNotificationCenterTest.j | 45 ++++++++++++++ 2 files changed, 106 insertions(+), 7 deletions(-) diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j index 99ab18183..0d880276e 100644 --- a/Foundation/CPNotificationCenter.j +++ b/Foundation/CPNotificationCenter.j @@ -68,7 +68,8 @@ var CPNotificationDefaultCenter = nil; _namedRegistries = @{}; _unnamedRegistry = [[_CPNotificationRegistry alloc] init]; } - return self; + + return self; } /*! @@ -81,9 +82,35 @@ var CPNotificationDefaultCenter = nil; */ - (void)addObserver:(id)anObserver selector:(SEL)aSelector name:(CPString)aNotificationName object:(id)anObject { - var registry, + var registry = [self _registryForNotificationName:aNotificationName], observer = [[_CPNotificationObserver alloc] initWithObserver:anObserver selector:aSelector]; + [registry addObserver:observer object:anObject]; +} + +/*! + Adds an entry to the receiver’s dispatch table with a block, and optional criteria: notification name and sender. + @param aNotificationName the name of the notification the observer wants to watch + @param anObject the object in the notification the observer wants to watch + @param block the block to be executed when the notification is received. +*/ +- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject usingBlock:(Function)block +{ + var registry = [self _registryForNotificationName:aNotificationName], + observer = [[_CPNotificationObserver alloc] initWithBlock:block]; + + [registry addObserver:observer object:anObject]; + + return observer; +} + +/*! + @ignore +*/ +- (_CPNotificationRegistry)_registryForNotificationName:(CPString)aNotificationName +{ + var registry; + if (aNotificationName == nil) registry = _unnamedRegistry; else if (!(registry = [_namedRegistries objectForKey:aNotificationName])) @@ -92,7 +119,7 @@ var CPNotificationDefaultCenter = nil; [_namedRegistries setObject:registry forKey:aNotificationName]; } - [registry addObserver:observer object:anObject]; + return registry; } /*! @@ -129,7 +156,10 @@ var CPNotificationDefaultCenter = nil; [_unnamedRegistry removeObserver:anObserver object:anObject]; } else + { [[_namedRegistries objectForKey:aNotificationName] removeObserver:anObserver object:anObject]; + } + } /*! @@ -233,7 +263,8 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ observersEnumerator = [observers objectEnumerator]; while ((observer = [observersEnumerator nextObject]) !== nil) - if ([observer observer] == anObserver) + if ([observer observer] == anObserver || + ([observer block] && [anObserver respondsToSelector:@selector(block)] && [observer block] == [anObserver block])) [observers removeObject:observer]; if (![observers count]) @@ -248,7 +279,8 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ observersEnumerator = [observers objectEnumerator]; while ((observer = [observersEnumerator nextObject]) !== nil) - if ([observer observer] == anObserver) + if ([observer observer] == anObserver || + ([observer block] && [anObserver respondsToSelector:@selector(block)] && [observer block] == [anObserver block])) [observers removeObject:observer]; if (![observers count]) @@ -312,8 +344,9 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ /* @ignore */ @implementation _CPNotificationObserver : CPObject { - id _observer; - SEL _selector; + id _observer; + Function _block; + SEL _selector; } - (id)initWithObserver:(id)anObserver selector:(SEL)aSelector @@ -327,13 +360,34 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ return self; } +- (id)initWithBlock:(Function)aBlock +{ + if (self) + { + _block = aBlock; + } + + return self; +} + - (id)observer { return _observer; } +- (id)block +{ + return _block; +} + - (void)postNotification:(CPNotification)aNotification { + if (_block) + { + _block(aNotification); + return; + } + [_observer performSelector:_selector withObject:aNotification]; } diff --git a/Tests/Foundation/CPNotificationCenterTest.j b/Tests/Foundation/CPNotificationCenterTest.j index b1f3b8bf5..e630e4064 100644 --- a/Tests/Foundation/CPNotificationCenterTest.j +++ b/Tests/Foundation/CPNotificationCenterTest.j @@ -52,6 +52,51 @@ var TestNotification = @"TestNotification"; [self assert:8 equals:notificationCount message:@"observer should not be notified"]; } +- (void)testNotifyWithBlocks +{ + var center = [CPNotificationCenter defaultCenter]; + + notificationCount = 0; + + var notificationBlock = function(notification){ + notificationCount += 1; + }; + + var observer2 = [center addObserverForName:TestNotification object:2 usingBlock:notificationBlock], + observer25 = [center addObserverForName:TestNotification object:25 usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:self]; + [self assert:0 equals:notificationCount message:@"observer should only be notified for object '2'"]; + + [center postNotificationName:TestNotification object:2]; + [self assert:1 equals:notificationCount message:@"observer should be notified for object '2'"]; + + var observerNil = [center addObserverForName:TestNotification object:nil usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:2]; + [self assert:3 equals:notificationCount message:@"observer should be notified for object '2' and for any object"]; + + [center removeObserver:observer2 name:TestNotification object:2]; + [center postNotificationName:TestNotification object:2]; + [self assert:4 equals:notificationCount message:@"observer should be notified only for any object"]; + + // At this point we have TestNofication:nil observer and a TestNotification:25 observer. + observer2 = [center addObserverForName:nil object:2 usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:2]; + [self assert:6 equals:notificationCount message:@"observer should be notified for TestNofication and for object '2' (TestNotification)"]; + [center postNotificationName:@"RandomNotification" object:2]; + [self assert:7 equals:notificationCount message:@"observer should be notified for object '2' (RandomNotification)"]; + + [center removeObserver:observer2]; + [center removeObserver:observer25]; + [center removeObserver:observerNil]; + [center postNotificationName:TestNotification object:nil]; + [center postNotificationName:TestNotification object:2]; + [center postNotificationName:TestNotification object:25]; + [self assert:7 equals:notificationCount message:@"observer should not be notified"]; +} + - (void)testAddObserversDuringNotification { var center = [CPNotificationCenter defaultCenter]; From d481d9cca5348df486203e1954822547157bd1bb Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 20 Nov 2014 23:38:53 -0800 Subject: [PATCH 150/234] Fixed: added queue to the method addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(id)queue usingBlock:(Function)block --- Foundation/CPNotificationCenter.j | 6 ++---- Tests/Foundation/CPNotificationCenterTest.j | 8 ++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j index 0d880276e..78cd7d354 100644 --- a/Foundation/CPNotificationCenter.j +++ b/Foundation/CPNotificationCenter.j @@ -92,9 +92,10 @@ var CPNotificationDefaultCenter = nil; Adds an entry to the receiver’s dispatch table with a block, and optional criteria: notification name and sender. @param aNotificationName the name of the notification the observer wants to watch @param anObject the object in the notification the observer wants to watch + @param queue is ignored for the moment @param block the block to be executed when the notification is received. */ -- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject usingBlock:(Function)block +- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(id)queue usingBlock:(Function)block { var registry = [self _registryForNotificationName:aNotificationName], observer = [[_CPNotificationObserver alloc] initWithBlock:block]; @@ -156,10 +157,7 @@ var CPNotificationDefaultCenter = nil; [_unnamedRegistry removeObserver:anObserver object:anObject]; } else - { [[_namedRegistries objectForKey:aNotificationName] removeObserver:anObserver object:anObject]; - } - } /*! diff --git a/Tests/Foundation/CPNotificationCenterTest.j b/Tests/Foundation/CPNotificationCenterTest.j index e630e4064..47aab1e0f 100644 --- a/Tests/Foundation/CPNotificationCenterTest.j +++ b/Tests/Foundation/CPNotificationCenterTest.j @@ -62,8 +62,8 @@ var TestNotification = @"TestNotification"; notificationCount += 1; }; - var observer2 = [center addObserverForName:TestNotification object:2 usingBlock:notificationBlock], - observer25 = [center addObserverForName:TestNotification object:25 usingBlock:notificationBlock]; + var observer2 = [center addObserverForName:TestNotification object:2 queue:nil usingBlock:notificationBlock], + observer25 = [center addObserverForName:TestNotification object:25 queue:nil usingBlock:notificationBlock]; [center postNotificationName:TestNotification object:self]; [self assert:0 equals:notificationCount message:@"observer should only be notified for object '2'"]; @@ -71,7 +71,7 @@ var TestNotification = @"TestNotification"; [center postNotificationName:TestNotification object:2]; [self assert:1 equals:notificationCount message:@"observer should be notified for object '2'"]; - var observerNil = [center addObserverForName:TestNotification object:nil usingBlock:notificationBlock]; + var observerNil = [center addObserverForName:TestNotification object:nil queue:nil usingBlock:notificationBlock]; [center postNotificationName:TestNotification object:2]; [self assert:3 equals:notificationCount message:@"observer should be notified for object '2' and for any object"]; @@ -81,7 +81,7 @@ var TestNotification = @"TestNotification"; [self assert:4 equals:notificationCount message:@"observer should be notified only for any object"]; // At this point we have TestNofication:nil observer and a TestNotification:25 observer. - observer2 = [center addObserverForName:nil object:2 usingBlock:notificationBlock]; + observer2 = [center addObserverForName:nil object:2 queue:nil usingBlock:notificationBlock]; [center postNotificationName:TestNotification object:2]; [self assert:6 equals:notificationCount message:@"observer should be notified for TestNofication and for object '2' (TestNotification)"]; From b1d56924e6411ca123971c1d7056dc4ae636b91d Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Tue, 25 Nov 2014 17:56:04 -0500 Subject: [PATCH 151/234] Fixed: Formatting --- Objective-J/CFError.js | 60 +++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/Objective-J/CFError.js b/Objective-J/CFError.js index 545c7eef5..615bbade8 100644 --- a/Objective-J/CFError.js +++ b/Objective-J/CFError.js @@ -42,24 +42,26 @@ GLOBAL(CFError) = function(/* CFString */ domain, /* int */ code, /* CFDictionar this._code = code || 0; this._userInfo = userInfo || new CFDictionary(); this._UID = objj_generateObjectUID(); -} +}; -CFError.prototype.domain = function () +CFError.prototype.domain = function() { return this._domain; -} -DISPLAY_NAME(CFError.prototype.domain) +}; -CFError.prototype.code = function () +DISPLAY_NAME(CFError.prototype.domain); + +CFError.prototype.code = function() { return this._code; -} -DISPLAY_NAME(CFError.prototype.code) +}; + +DISPLAY_NAME(CFError.prototype.code); /* This follows the same logic to generate a description as the "real" CFError. */ -CFError.prototype.description = function () +CFError.prototype.description = function() { var localizedDesc = this._userInfo.valueForKey(kCFErrorLocalizedDescriptionKey); if (localizedDesc) @@ -87,26 +89,30 @@ CFError.prototype.description = function () } return result; -} -DISPLAY_NAME(CFError.prototype.description) +}; -CFError.prototype.failureReason = function () +DISPLAY_NAME(CFError.prototype.description); + +CFError.prototype.failureReason = function() { return this._userInfo.valueForKey(kCFErrorLocalizedFailureReasonKey); -} -DISPLAY_NAME(CFError.prototype.failureReason) +}; -CFError.prototype.recoverySuggestion = function () +DISPLAY_NAME(CFError.prototype.failureReason); + +CFError.prototype.recoverySuggestion = function() { return this._userInfo.valueForKey(kCFErrorLocalizedRecoverySuggestionKey); -} -DISPLAY_NAME(CFError.prototype.recoverySuggestion) +}; + +DISPLAY_NAME(CFError.prototype.recoverySuggestion); CFError.prototype.userInfo = function () { return this._userInfo; -} -DISPLAY_NAME(CFError.prototype.userInfo) +}; + +DISPLAY_NAME(CFError.prototype.userInfo); /* CFError Bridge Functions @@ -116,43 +122,43 @@ DISPLAY_NAME(CFError.prototype.userInfo) GLOBAL(CFErrorCreate) = function(/* String */ domain, /*int */ code, /* CFDictionary */ userInfo) { return new CFError(domain, code, userInfo); -} +}; GLOBAL(CFErrorCreateWithUserInfoKeysAndValues) = function(/* String */ domain, /* int */ code, /* array */ userInfoKeys, /* array */ userInfoValues, /* int */ numUserInfoValues) { var userInfo = new CFMutableDictionary(); - while(numUserInfoValues--) + while (numUserInfoValues--) userInfo.setValueForKey(userInfoKeys[numUserInfoValues], userInfoValues[numUserInfoValues]); return new CFError(domain, code, userInfo); -} +}; GLOBAL(CFErrorGetCode) = function(/* CFError */ err) { return err.code(); -} +}; GLOBAL(CFErrorGetDomain) = function(/* CFError */ err) { return err.domain(); -} +}; GLOBAL(CFErrorCopyDescription) = function(/* CFError */ err) { return err.description(); -} +}; GLOBAL(CFErrorCopyUserInfo) = function(/* CFError */ err) { return err.userInfo(); -} +}; GLOBAL(CFErrorCopyFailureReason) = function(/* CFError */ err) { return err.failureReason(); -} +}; GLOBAL(CFErrorCopyRecoverySuggestion) = function(/* CFError */err) { return err.recoverySuggestion(); -} +}; From 6f6938deb7356bcfb27f46868b5723537bd22f4b Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Tue, 25 Nov 2014 17:58:17 -0500 Subject: [PATCH 152/234] Fixed: Updated Comment --- Foundation/CPError.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Foundation/CPError.j b/Foundation/CPError.j index 4ac772d61..edc270514 100644 --- a/Foundation/CPError.j +++ b/Foundation/CPError.j @@ -99,8 +99,8 @@ var userInfo = @{CPLocalizedDescriptionKey: @"A localized error description", /*! By default this method returns the object in the user info dictionary for the key - NSLocalizedDescriptionKey. If the user info dictionary doesn’t contain a value for - NSLocalizedDescriptionKey, a default string is constructed from the domain and code. + CPLocalizedDescriptionKey. If the user info dictionary doesn’t contain a value for + CPLocalizedDescriptionKey, a default string is constructed from the domain and code. */ - (CPString)localizedDescription { From b36cc8f1e949f152e45f89dfd9f1448dafaa6898 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 25 Nov 2014 17:29:30 -0800 Subject: [PATCH 153/234] Fixed: Memory leak in CPTableView, CPScrollView Prevously, when removing a CPTableView or a CPScrollView, the CPNotificationCenter kept a reference of these observers in the notification center. Now, the CPNotificationCenter does only have a observer when necessary. --- AppKit/CPClipView.j | 11 +++-- AppKit/CPScrollView.j | 36 +++++++++++++--- AppKit/CPTableView.j | 99 +++++++++++++++++++++++++++---------------- 3 files changed, 101 insertions(+), 45 deletions(-) diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index 8503c4cc5..a0071ab45 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -62,6 +62,9 @@ - (void)_observeDocumentView { + if (!_documentView) + return; + var defaultCenter = [CPNotificationCenter defaultCenter]; [_documentView setPostsFrameChangedNotifications:YES]; @@ -87,15 +90,15 @@ [defaultCenter removeObserver:self name:CPViewFrameDidChangeNotification - object:_documentView]; + object:aDocumentView]; [defaultCenter removeObserver:self name:CPViewBoundsDidChangeNotification - object:_documentView]; + object:aDocumentView]; } -- (void)_addObservers +/*- (void)_addObservers { if (_isObserving) return; @@ -115,7 +118,7 @@ if (_documentView) [self _removeObserverDocumentView:_documentView]; -} +}*/ /*! Returns the document view. diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index c93543315..aef8453a9 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -264,11 +264,6 @@ var CPScrollerStyleGlobal = CPScrollerStyleOverlay, _delegate = nil; _scrollTimer = nil; _implementedDelegateMethods = 0; - - [[CPNotificationCenter defaultCenter] addObserver:self - selector:@selector(_didReceiveDefaultStyleChange:) - name:CPScrollerStyleGlobalChangeNotification - object:nil]; } return self; @@ -1270,6 +1265,37 @@ Notifies the delegate when the scroll view has finished scrolling. #pragma mark - #pragma mark Overrides + +- (void)_removeObservers +{ + if (!_isObserving) + return; + + [[CPNotificationCenter defaultCenter] removeObserver:self + name:CPScrollerStyleGlobalChangeNotification + object:nil]; + + [super _removeObservers]; +} + +- (void)_addObservers +{ + if (_isObserving) + return; + + //Make sure to have the last global style for the scroller + [self _didReceiveDefaultStyleChange:nil]; + + [[CPNotificationCenter defaultCenter] addObserver:self + selector:@selector(_didReceiveDefaultStyleChange:) + name:CPScrollerStyleGlobalChangeNotification + object:nil]; + + [super _addObservers]; +} + + + - (void)drawRect:(CGRect)aRect { [super drawRect:aRect]; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 48157b537..604ec8d23 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -320,6 +320,8 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; CPTableColumn _draggedColumn; CPArray _differedColumnDataToRemove; + + CPView _observedClipView; } /*! @@ -4454,41 +4456,15 @@ Your delegate can implement this method to avoid subclassing the tableview to ad */ - (void)viewWillMoveToSuperview:(CPView)aView { - [super viewWillMoveToSuperview:aView]; - - var superview = [self superview], - defaultCenter = [CPNotificationCenter defaultCenter]; - - if (superview) - { - [defaultCenter - removeObserver:self - name:CPViewFrameDidChangeNotification - object:superview]; - - [defaultCenter - removeObserver:self - name:CPViewBoundsDidChangeNotification - object:superview]; - } - if ([aView isKindOfClass:[CPClipView class]]) + _observedClipView = aView; + else { - [aView setPostsFrameChangedNotifications:YES]; - [aView setPostsBoundsChangedNotifications:YES]; - - [defaultCenter - addObserver:self - selector:@selector(superviewFrameChanged:) - name:CPViewFrameDidChangeNotification - object:aView]; - - [defaultCenter - addObserver:self - selector:@selector(superviewBoundsChanged:) - name:CPViewBoundsDidChangeNotification - object:aView]; + [self _stopObservingClipView]; + _observedClipView = nil; } + + [super viewWillMoveToSuperview:aView]; } /*! @@ -5138,8 +5114,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (!_isObserving) return; + [self _stopObservingClipView]; [super _removeObservers]; - [self _stopObservingFirstResponder]; } - (void)_addObservers @@ -5147,13 +5123,64 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (_isObserving) return; + [self _startObservingClipView]; [super _addObservers]; - [self _startObservingFirstResponder]; } -- (void)_startObservingFirstResponder +/*! + Called when the receiver is about to be moved to a new window. + @param aWindow the window to which the receiver will be moved. +*/ +- (void)viewWillMoveToWindow:(CPWindow)aWindow { - [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_firstResponderDidChange:) name:_CPWindowDidChangeFirstResponderNotification object:[self window]]; + [super viewWillMoveToWindow:aWindow]; + + [self _stopObservingFirstResponder]; + + if (aWindow) + [self _startObservingFirstResponderForWindow:aWindow]; +} + +- (void)_startObservingClipView +{ + if (!_observedClipView) + return; + + var defaultCenter = [CPNotificationCenter defaultCenter]; + + [_observedClipView setPostsFrameChangedNotifications:YES]; + [_observedClipView setPostsBoundsChangedNotifications:YES]; + + [defaultCenter addObserver:self + selector:@selector(superviewFrameChanged:) + name:CPViewFrameDidChangeNotification + object:_observedClipView]; + + [defaultCenter addObserver:self + selector:@selector(superviewBoundsChanged:) + name:CPViewBoundsDidChangeNotification + object:_observedClipView]; +} + +- (void)_stopObservingClipView +{ + if (!_observedClipView) + return; + + var defaultCenter = [CPNotificationCenter defaultCenter]; + + [defaultCenter removeObserver:self + name:CPViewFrameDidChangeNotification + object:_observedClipView]; + + [defaultCenter removeObserver:self + name:CPViewBoundsDidChangeNotification + object:_observedClipView]; +} + +- (void)_startObservingFirstResponderForWindow:(CPWindow)aWindow +{ + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_firstResponderDidChange:) name:_CPWindowDidChangeFirstResponderNotification object:aWindow]; } - (void)_stopObservingFirstResponder From e9f73cbb45cf01833764b53b2020471e32523d8a Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 26 Nov 2014 11:07:48 +0000 Subject: [PATCH 154/234] Minor formatting. --- Objective-J/OldBrowserCompatibility.js | 2 +- Objective-J/json2.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Objective-J/OldBrowserCompatibility.js b/Objective-J/OldBrowserCompatibility.js index 0086388ff..cd3d30517 100644 --- a/Objective-J/OldBrowserCompatibility.js +++ b/Objective-J/OldBrowserCompatibility.js @@ -37,7 +37,7 @@ if (!Object.create) // This is for IE8 support. It doesn't have the Object.keys function. if (!Object.keys) { - Object.keys = (function () + Object.keys = (function() { var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), diff --git a/Objective-J/json2.js b/Objective-J/json2.js index 8ba599eed..0252d58bf 100644 --- a/Objective-J/json2.js +++ b/Objective-J/json2.js @@ -161,7 +161,7 @@ if (!this.JSON) { JSON = {}; } -(function () { +(function() { function f(n) { // Format integers to have at least two digits. From fc5bb7417fc621bcc4b6b928dad11d1ae658ace7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 10:20:07 -0800 Subject: [PATCH 155/234] Fixed: removed useless comment in CPClipView.j --- AppKit/CPClipView.j | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index a0071ab45..655d3c36c 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -98,28 +98,6 @@ object:aDocumentView]; } -/*- (void)_addObservers -{ - if (_isObserving) - return; - - [super _addObservers]; - - if (_documentView) - [self _observeDocumentView]; -} - -- (void)_removeObservers -{ - if (!_isObserving) - return; - - [super _removeObservers]; - - if (_documentView) - [self _removeObserverDocumentView:_documentView]; -}*/ - /*! Returns the document view. */ From 31afae71d1ef73e5fbd9153c84d3f21e42f11fec Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 26 Nov 2014 11:52:25 -0800 Subject: [PATCH 156/234] Typos --- Objective-J/ObjJAcornCompiler.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index ce3009ef7..79646a0e6 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -1675,7 +1675,7 @@ ClassDeclarationStatement: function(node, st, c) { compiler.classBodyBuffer = new StringBuffer(); // TODO: Check if this is needed if (compiler.getTypeDef(className)) - throw compiler.error_message(className + " is already declared as type", node.classname); + throw compiler.error_message(className + " is already declared as a type", node.classname); if (!generate) saveJSBuffer.concat(compiler.source.substring(compiler.lastPos, node.start)); @@ -2414,7 +2414,7 @@ ClassStatement: function(node, st, c) { var className = node.id.name; if (compiler.getTypeDef(className)) - throw compiler.error_message(className + " is already declared as type", node.id); + throw compiler.error_message(className + " is already declared as a type", node.id); if (!compiler.getClassDef(className)) { classDef = new ClassDef(false, className); From 3269ba10ec4dac93d04dda64048f72175410bc9a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 12:01:40 -0800 Subject: [PATCH 157/234] Fixed: CPDatePicker doesn't have a focusRing when editing Previously, the CPDatePicker didn't have a focus ring when an user was editing it. Now it does. It works for Aristo1 and Aristo2. Test App in Tests/Manual/CPDatePickerTest --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 4 ++++ AppKit/Themes/Aristo/ThemeDescriptors.j | 20 ++++++++++++++++++++ AppKit/Themes/Aristo2/ThemeDescriptors.j | 16 ++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 39935b536..18ad45a4a 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -123,6 +123,8 @@ var CPZeroKeyCode = 48, // This is usefull when clicking on the stepper when the datePicker is not selected [_stepper setObjectValue:0]; + //[_datePicker unsetThemeState:CPThemeStateEditing]; + return YES; } @@ -1771,6 +1773,7 @@ var CPMonthDateType = 0, - (void)makeSelectable { [self setThemeState:CPThemeStateSelected]; + [_datePicker setThemeState:CPThemeStateEditing]; } /*! Unsert the theme CPThemeStateSelected @@ -1779,6 +1782,7 @@ var CPMonthDateType = 0, { _firstEvent = YES; [self unsetThemeState:CPThemeStateSelected]; + [_datePicker unsetThemeState:CPThemeStateEditing]; } diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index efbbb1c23..4bac4681a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1258,6 +1258,19 @@ var themedButtonValues = nil, ["textfield-bezel-square-disabled-8.png", 6.0, 6.0] ]), + bezelFocusedColor = PatternColor( + [ + ["textfield-bezel-square-focused-0.png", 6.0, 6.0], + ["textfield-bezel-square-focused-1.png", 1.0, 6.0], + ["textfield-bezel-square-focused-2.png", 6.0, 6.0], + ["textfield-bezel-square-focused-3.png", 6.0, 1.0], + ["textfield-bezel-square-focused-4.png", 1.0, 1.0], + ["textfield-bezel-square-focused-5.png", 6.0, 1.0], + ["textfield-bezel-square-focused-6.png", 6.0, 6.0], + ["textfield-bezel-square-focused-7.png", 1.0, 6.0], + ["textfield-bezel-square-focused-8.png", 6.0, 6.0] + ]), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -1268,6 +1281,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], @@ -1275,8 +1289,10 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -1301,10 +1317,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 3.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -1313,10 +1331,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", 2.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index bf72661f3..86a43e46f 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -824,6 +824,14 @@ var themedButtonValues = nil, height: 4.0 }), + bezelFocusedColor = PatternColor( + "textfield-bezel-square-focused{position}.png", + { + positions: "#", + width: 9.0, + height: 9.0 + }), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -835,14 +843,17 @@ var themedButtonValues = nil, [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.5], CPThemeStateDisabled], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 6.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(3.0, 0.0, 3.0, 0.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0, 0.0, -3.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -859,6 +870,7 @@ var themedButtonValues = nil, [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], [@"date-hour-margin", 7.0], [@"stepper-margin", 5.0], + [@"stepper-margin", 2.0, CPThemeStateEditing], [@"min-size", CGSizeMake(0, 29.0)], [@"max-size", CGSizeMake(-1.0, 29.0)], @@ -867,10 +879,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(2.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 0.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -879,10 +893,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(1.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", -1.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], From ad364b618438506746387bf51bd78cd33b0feef1 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 12:01:40 -0800 Subject: [PATCH 158/234] Fixed: CPDatePicker doesn't have a focusRing when editing Previously, the CPDatePicker didn't have a focus ring when an user was editing it. Now it does. It works for Aristo1 and Aristo2. Test App in Tests/Manual/CPDatePickerTest Fixed #2263 --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 4 ++++ AppKit/Themes/Aristo/ThemeDescriptors.j | 20 ++++++++++++++++++++ AppKit/Themes/Aristo2/ThemeDescriptors.j | 16 ++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 39935b536..18ad45a4a 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -123,6 +123,8 @@ var CPZeroKeyCode = 48, // This is usefull when clicking on the stepper when the datePicker is not selected [_stepper setObjectValue:0]; + //[_datePicker unsetThemeState:CPThemeStateEditing]; + return YES; } @@ -1771,6 +1773,7 @@ var CPMonthDateType = 0, - (void)makeSelectable { [self setThemeState:CPThemeStateSelected]; + [_datePicker setThemeState:CPThemeStateEditing]; } /*! Unsert the theme CPThemeStateSelected @@ -1779,6 +1782,7 @@ var CPMonthDateType = 0, { _firstEvent = YES; [self unsetThemeState:CPThemeStateSelected]; + [_datePicker unsetThemeState:CPThemeStateEditing]; } diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index efbbb1c23..4bac4681a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1258,6 +1258,19 @@ var themedButtonValues = nil, ["textfield-bezel-square-disabled-8.png", 6.0, 6.0] ]), + bezelFocusedColor = PatternColor( + [ + ["textfield-bezel-square-focused-0.png", 6.0, 6.0], + ["textfield-bezel-square-focused-1.png", 1.0, 6.0], + ["textfield-bezel-square-focused-2.png", 6.0, 6.0], + ["textfield-bezel-square-focused-3.png", 6.0, 1.0], + ["textfield-bezel-square-focused-4.png", 1.0, 1.0], + ["textfield-bezel-square-focused-5.png", 6.0, 1.0], + ["textfield-bezel-square-focused-6.png", 6.0, 6.0], + ["textfield-bezel-square-focused-7.png", 1.0, 6.0], + ["textfield-bezel-square-focused-8.png", 6.0, 6.0] + ]), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -1268,6 +1281,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], @@ -1275,8 +1289,10 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -1301,10 +1317,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 3.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -1313,10 +1331,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", 2.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index bf72661f3..86a43e46f 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -824,6 +824,14 @@ var themedButtonValues = nil, height: 4.0 }), + bezelFocusedColor = PatternColor( + "textfield-bezel-square-focused{position}.png", + { + positions: "#", + width: 9.0, + height: 9.0 + }), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -835,14 +843,17 @@ var themedButtonValues = nil, [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.5], CPThemeStateDisabled], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 6.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(3.0, 0.0, 3.0, 0.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0, 0.0, -3.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -859,6 +870,7 @@ var themedButtonValues = nil, [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], [@"date-hour-margin", 7.0], [@"stepper-margin", 5.0], + [@"stepper-margin", 2.0, CPThemeStateEditing], [@"min-size", CGSizeMake(0, 29.0)], [@"max-size", CGSizeMake(-1.0, 29.0)], @@ -867,10 +879,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(2.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 0.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -879,10 +893,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(1.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", -1.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], From 547522a0a41f559171839b50a2f655ecb5a842be Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 13:06:03 -0800 Subject: [PATCH 159/234] Fixed: Memory leak in CPClipView Previously, the CPClipView registered the documentView to the notificationCenter as an observer to be notified when the frame/bounds of the documentView change. Now, we don't use the notificationCenter anymore. The class CPView send a message to its superview (when it's a clipView) when the frame or bounds change. This fix the memory leak of the CPClipView Fixed #2264 --- AppKit/CPClipView.j | 64 --------------------------------------------- AppKit/CPView.j | 21 +++++++++++++++ 2 files changed, 21 insertions(+), 64 deletions(-) diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index 8503c4cc5..93f8aacd6 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -46,75 +46,12 @@ return; if (_documentView) - { - [self _removeObserverDocumentView:_documentView]; [_documentView removeFromSuperview]; - } _documentView = aView; if (_documentView) - { [self addSubview:_documentView]; - [self _observeDocumentView]; - } -} - -- (void)_observeDocumentView -{ - var defaultCenter = [CPNotificationCenter defaultCenter]; - - [_documentView setPostsFrameChangedNotifications:YES]; - [_documentView setPostsBoundsChangedNotifications:YES]; - - [defaultCenter - addObserver:self - selector:@selector(viewFrameChanged:) - name:CPViewFrameDidChangeNotification - object:_documentView]; - - [defaultCenter - addObserver:self - selector:@selector(viewBoundsChanged:) - name:CPViewBoundsDidChangeNotification - object:_documentView]; -} - -- (void)_removeObserverDocumentView:(CPView)aDocumentView -{ - var defaultCenter = [CPNotificationCenter defaultCenter]; - - [defaultCenter - removeObserver:self - name:CPViewFrameDidChangeNotification - object:_documentView]; - - [defaultCenter - removeObserver:self - name:CPViewBoundsDidChangeNotification - object:_documentView]; -} - -- (void)_addObservers -{ - if (_isObserving) - return; - - [super _addObservers]; - - if (_documentView) - [self _observeDocumentView]; -} - -- (void)_removeObservers -{ - if (!_isObserving) - return; - - [super _removeObservers]; - - if (_documentView) - [self _removeObserverDocumentView:_documentView]; } /*! @@ -275,7 +212,6 @@ var CPClipViewDocumentViewKey = @"CPScrollViewDocumentView"; // Don't call setDocumentView: here. It calls addSubview:, but it's A) not necessary since the // view hierarchy is fully encoded and B) dangerous if the subview is not fully decoded. _documentView = [aCoder decodeObjectForKey:CPClipViewDocumentViewKey]; - [self _observeDocumentView]; } return self; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 1a600667c..7649b45ca 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -172,6 +172,7 @@ var CPViewFlags = { }, BOOL _postsBoundsChangedNotifications; BOOL _inhibitFrameAndBoundsChangedNotifications; BOOL _inLiveResize; + BOOL _isSuperviewAClipView; #if PLATFORM(DOM) DOMElement _DOMElement; @@ -821,6 +822,8 @@ var CPViewFlags = { }, */ - (void)viewWillMoveToSuperview:(CPView)aView { + _isSuperviewAClipView = [aView isKindOfClass:[CPClipView class]]; + [self _removeObservers]; if (aView) @@ -952,6 +955,9 @@ var CPViewFlags = { }, if (_postsFrameChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewFrameDidChangeNotification object:self]; + + if (_isSuperviewAClipView) + [[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]]; } /*! @@ -1014,6 +1020,9 @@ var CPViewFlags = { }, if (_postsFrameChangedNotifications && !_inhibitFrameAndBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewFrameDidChangeNotification object:self]; + if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) + [[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]]; + #if PLATFORM(DOM) var transform = _superview ? _superview._boundsTransform : NULL; @@ -1173,6 +1182,9 @@ var CPViewFlags = { }, if (_postsFrameChangedNotifications && !_inhibitFrameAndBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewFrameDidChangeNotification object:self]; + + if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) + [[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]]; } /*! @@ -1207,6 +1219,9 @@ var CPViewFlags = { }, if (_postsBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewBoundsDidChangeNotification object:self]; + + if (_isSuperviewAClipView) + [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; } /*! @@ -1269,6 +1284,9 @@ var CPViewFlags = { }, if (_postsBoundsChangedNotifications && !_inhibitFrameAndBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewBoundsDidChangeNotification object:self]; + + if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) + [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; } /*! @@ -1307,6 +1325,9 @@ var CPViewFlags = { }, if (_postsBoundsChangedNotifications && !_inhibitFrameAndBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewBoundsDidChangeNotification object:self]; + + if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) + [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; } From e62fd4dc005902e3285788f40c52d9e0d6dba3c0 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 13:06:03 -0800 Subject: [PATCH 160/234] Merged of CPCLipView --- AppKit/CPClipView.j | 45 --------------------------------------------- AppKit/CPView.j | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 45 deletions(-) diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index 655d3c36c..93f8aacd6 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -46,56 +46,12 @@ return; if (_documentView) - { - [self _removeObserverDocumentView:_documentView]; [_documentView removeFromSuperview]; - } _documentView = aView; if (_documentView) - { [self addSubview:_documentView]; - [self _observeDocumentView]; - } -} - -- (void)_observeDocumentView -{ - if (!_documentView) - return; - - var defaultCenter = [CPNotificationCenter defaultCenter]; - - [_documentView setPostsFrameChangedNotifications:YES]; - [_documentView setPostsBoundsChangedNotifications:YES]; - - [defaultCenter - addObserver:self - selector:@selector(viewFrameChanged:) - name:CPViewFrameDidChangeNotification - object:_documentView]; - - [defaultCenter - addObserver:self - selector:@selector(viewBoundsChanged:) - name:CPViewBoundsDidChangeNotification - object:_documentView]; -} - -- (void)_removeObserverDocumentView:(CPView)aDocumentView -{ - var defaultCenter = [CPNotificationCenter defaultCenter]; - - [defaultCenter - removeObserver:self - name:CPViewFrameDidChangeNotification - object:aDocumentView]; - - [defaultCenter - removeObserver:self - name:CPViewBoundsDidChangeNotification - object:aDocumentView]; } /*! @@ -256,7 +212,6 @@ var CPClipViewDocumentViewKey = @"CPScrollViewDocumentView"; // Don't call setDocumentView: here. It calls addSubview:, but it's A) not necessary since the // view hierarchy is fully encoded and B) dangerous if the subview is not fully decoded. _documentView = [aCoder decodeObjectForKey:CPClipViewDocumentViewKey]; - [self _observeDocumentView]; } return self; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 1a600667c..7649b45ca 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -172,6 +172,7 @@ var CPViewFlags = { }, BOOL _postsBoundsChangedNotifications; BOOL _inhibitFrameAndBoundsChangedNotifications; BOOL _inLiveResize; + BOOL _isSuperviewAClipView; #if PLATFORM(DOM) DOMElement _DOMElement; @@ -821,6 +822,8 @@ var CPViewFlags = { }, */ - (void)viewWillMoveToSuperview:(CPView)aView { + _isSuperviewAClipView = [aView isKindOfClass:[CPClipView class]]; + [self _removeObservers]; if (aView) @@ -952,6 +955,9 @@ var CPViewFlags = { }, if (_postsFrameChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewFrameDidChangeNotification object:self]; + + if (_isSuperviewAClipView) + [[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]]; } /*! @@ -1014,6 +1020,9 @@ var CPViewFlags = { }, if (_postsFrameChangedNotifications && !_inhibitFrameAndBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewFrameDidChangeNotification object:self]; + if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) + [[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]]; + #if PLATFORM(DOM) var transform = _superview ? _superview._boundsTransform : NULL; @@ -1173,6 +1182,9 @@ var CPViewFlags = { }, if (_postsFrameChangedNotifications && !_inhibitFrameAndBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewFrameDidChangeNotification object:self]; + + if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) + [[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]]; } /*! @@ -1207,6 +1219,9 @@ var CPViewFlags = { }, if (_postsBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewBoundsDidChangeNotification object:self]; + + if (_isSuperviewAClipView) + [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; } /*! @@ -1269,6 +1284,9 @@ var CPViewFlags = { }, if (_postsBoundsChangedNotifications && !_inhibitFrameAndBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewBoundsDidChangeNotification object:self]; + + if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) + [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; } /*! @@ -1307,6 +1325,9 @@ var CPViewFlags = { }, if (_postsBoundsChangedNotifications && !_inhibitFrameAndBoundsChangedNotifications) [CachedNotificationCenter postNotificationName:CPViewBoundsDidChangeNotification object:self]; + + if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) + [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; } From 243024e2322b3208b298e7e3f276af275034a4fe Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 26 Nov 2014 13:12:39 -0800 Subject: [PATCH 161/234] Fix broken tests due to new objj type checks --- Tests/AppKit/CPArrayControllerTest.j | 3 +++ Tests/AppKit/CPBrowserTest.j | 3 +++ Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j | 2 ++ Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j | 4 +++- Tests/AppKit/CPOutlineViewTest.j | 3 +++ Tests/AppKit/CPTokenFieldTest.j | 2 ++ Tests/Foundation/CPKVCArrayTest.j | 3 +++ Tests/Foundation/CPKVOTest.j | 3 +++ Tests/Foundation/CPKeyValueCodingTest.j | 3 +++ .../Preprocessor/OutputTests/Class/accessors.j | 4 ++-- .../Preprocessor/OutputTests/Class/accessors.js | 13 +++++++------ .../OutputTests/Class/root-class-multiple-ivars.j | 2 +- .../OutputTests/Class/root-class-multiple-ivars.js | 3 +-- .../OutputTests/Class/root-class-one-ivar.j | 3 +-- .../OutputTests/Class/root-class-one-ivar.js | 2 +- .../Preprocessor/OutputTests/Class/root-class.j | 2 +- .../Preprocessor/OutputTests/Class/root-class.js | 2 +- 17 files changed, 40 insertions(+), 17 deletions(-) diff --git a/Tests/AppKit/CPArrayControllerTest.j b/Tests/AppKit/CPArrayControllerTest.j index 3365cfdcf..35b8e3388 100644 --- a/Tests/AppKit/CPArrayControllerTest.j +++ b/Tests/AppKit/CPArrayControllerTest.j @@ -3,6 +3,9 @@ @import @import +@class Department +@class Employee + @implementation CPArrayControllerTest : OJTestCase { CPArrayController _arrayController @accessors(property=arrayController); diff --git a/Tests/AppKit/CPBrowserTest.j b/Tests/AppKit/CPBrowserTest.j index 420dfb279..bc29049bb 100644 --- a/Tests/AppKit/CPBrowserTest.j +++ b/Tests/AppKit/CPBrowserTest.j @@ -1,5 +1,8 @@ @import +@class CPBrowserDelegate + + @implementation CPBrowserTest : OJTestCase { CPBrowser browser; diff --git a/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j b/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j index d9c0e06d1..d1bb9af84 100644 --- a/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j +++ b/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j @@ -1,6 +1,8 @@ @import +@class Track + /*! Bindings tests exercising the functionality seen in the Cocoa example "SimpleBindingsAdoption". */ diff --git a/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j b/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j index e60c456db..5757c368d 100644 --- a/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j +++ b/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j @@ -1,5 +1,7 @@ var CPMenuValidatedUserInterfaceItemTestValidatedItems = []; +@class MenuTarget + @implementation CPMenuValidatedUserInterfaceItemTest : OJTestCase { CPMenu _menu @accessors(property=menu); @@ -83,4 +85,4 @@ var CPMenuValidatedUserInterfaceItemTestValidatedItems = []; } -@end \ No newline at end of file +@end diff --git a/Tests/AppKit/CPOutlineViewTest.j b/Tests/AppKit/CPOutlineViewTest.j index 65219ea41..129c6965b 100644 --- a/Tests/AppKit/CPOutlineViewTest.j +++ b/Tests/AppKit/CPOutlineViewTest.j @@ -1,5 +1,8 @@ @import +@class TestOutlineDataSource + + @implementation CPOutlineViewTest : OJTestCase { CPOutlineView outlineView; diff --git a/Tests/AppKit/CPTokenFieldTest.j b/Tests/AppKit/CPTokenFieldTest.j index 6c8320eeb..cd65113ad 100644 --- a/Tests/AppKit/CPTokenFieldTest.j +++ b/Tests/AppKit/CPTokenFieldTest.j @@ -1,5 +1,7 @@ @import +@class TestDelegateTokenField + [CPApplication sharedApplication]; @implementation CPTokenFieldTest : OJTestCase diff --git a/Tests/Foundation/CPKVCArrayTest.j b/Tests/Foundation/CPKVCArrayTest.j index 12e5edd52..6948d4177 100644 --- a/Tests/Foundation/CPKVCArrayTest.j +++ b/Tests/Foundation/CPKVCArrayTest.j @@ -1,5 +1,8 @@ var COUNTER; +@class TestObject +@class ImplementedTestObject + @implementation CPKVCArrayTest : OJTestCase { TestObject _object @accessors(property=object); diff --git a/Tests/Foundation/CPKVOTest.j b/Tests/Foundation/CPKVOTest.j index 1fa905abd..631e2ac80 100644 --- a/Tests/Foundation/CPKVOTest.j +++ b/Tests/Foundation/CPKVOTest.j @@ -1,6 +1,9 @@ @import @import +@class CarTester +@class ToManyTester + @implementation CPKVOTest : OJTestCase { BOOL _sawInitialObservation; diff --git a/Tests/Foundation/CPKeyValueCodingTest.j b/Tests/Foundation/CPKeyValueCodingTest.j index ac57d9f02..ccf560401 100644 --- a/Tests/Foundation/CPKeyValueCodingTest.j +++ b/Tests/Foundation/CPKeyValueCodingTest.j @@ -22,6 +22,9 @@ @import +@class Department2 +@class Employee2 + var accessIVARS = YES; @implementation KVCTestClass : CPObject diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j index fe7fcc5de..820cad2f6 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j @@ -1,10 +1,10 @@ -@implementation Class +@implementation TestClass { } @end -@implementation Class (Accessors) +@implementation TestClass (Accessors) { Type ivar @accessors; } diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js index 9db2e1754..ae78cbb53 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js @@ -1,13 +1,14 @@ -var the_class=objj_allocateClassPair(Nil,"Class"),meta_class=the_class.isa; +var the_class=objj_allocateClassPair(Nil,"TestClass"),meta_class=the_class.isa; objj_registerClassPair(the_class); -var the_class=objj_getClass("Class"); +var the_class=objj_getClass("TestClass"); if(!the_class){ -throw new SyntaxError("*** Could not find definition for class \"Class\""); +throw new SyntaxError("*** Could not find definition for class \"TestClass\""); } var meta_class=the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar")]); -class_addMethods(the_class,[new objj_method(sel_getUid("ivar"),function $Class__ivar(_1,_2){ +class_addMethods(the_class,[new objj_method(sel_getUid("ivar"),function $TestClass__ivar(_1,_2){ return _1.ivar; -},["Type"]),new objj_method(sel_getUid("setIvar:"),function $Class__setIvar_(_3,_4,_5){ +},["Type"]),new objj_method(sel_getUid("setIvar:"),function $TestClass__setIvar_(_3,_4,_5){ _3.ivar=_5; -},["void","Type"])]); \ No newline at end of file +},["void","Type"])]); + diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j index 50d1fa504..603bc25e5 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j @@ -1,5 +1,5 @@ -@implementation Class +@implementation TestClass { Type ivar; CPArray array; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js index 7eba069a9..8cf16dc3b 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js @@ -1,5 +1,4 @@ - -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar"), new objj_ivar("array"), new objj_ivar("string"), new objj_ivar("integer")]); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j index 14fc4dd73..3aebab79d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j @@ -1,5 +1,4 @@ - -@implementation Class +@implementation TestClass { Type ivar; } diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js index 4c6f93642..165c23dc8 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js @@ -1,5 +1,5 @@ -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar")]); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j index f0e079126..6f4f77d3d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j @@ -1,5 +1,5 @@ -@implementation Class +@implementation TestClass { } @end diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js index c266954fc..75528fb97 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js @@ -1,5 +1,5 @@ -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; objj_registerClassPair(the_class); From 51940cea3da21190380cac6886ab704d6f9a00ec Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 15:05:22 -0800 Subject: [PATCH 162/234] Fixed: leak memory with CPTableViews delegate --- AppKit/CPTableColumn.j | 17 +-------- AppKit/CPTableView.j | 82 +++++++++++++++--------------------------- 2 files changed, 29 insertions(+), 70 deletions(-) diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 951cf45e4..44f4de504 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -28,8 +28,6 @@ @import "CPTextField.j" -@global CPTableViewColumnDidResizeNotification - @class _CPTableColumnHeaderView CPTableColumnNoResizing = 0; @@ -185,7 +183,7 @@ CPTableColumnUserResizingMask = 1 << 1; [tableView tile]; if (!_disableResizingPosting) - [self _postDidResizeNotificationWithOldWidth:oldWidth]; + [[self tableView] _didResizeTableColumn:self oldWidth:oldWidth]; } } @@ -538,19 +536,6 @@ CPTableColumnUserResizingMask = 1 << 1; return _headerToolTip; } -/*! - @ignore -*/ -- (void)_postDidResizeNotificationWithOldWidth:(float)oldWidth -{ - [[self tableView] _didResizeTableColumn:self]; - - [[CPNotificationCenter defaultCenter] - postNotificationName:CPTableViewColumnDidResizeNotification - object:[self tableView] - userInfo:@{ @"CPTableColumn": self, @"CPOldWidth": oldWidth }]; -} - @end @implementation CPTableColumnValueBinder : CPBinder diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 604ec8d23..ea9851716 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -80,10 +80,12 @@ var CPTableViewDelegate_selectionShouldChangeInTableView_ CPTableViewDelegate_tableView_typeSelectStringForTableColumn_row_ = 1 << 17, CPTableViewDelegate_tableView_willDisplayView_forTableColumn_row_ = 1 << 18, CPTableViewDelegate_tableView_willRemoveView_forTableColumn_row_ = 1 << 19, - CPTableViewDelegate_tableViewSelectionDidChange_ = 1 << 20, - CPTableViewDelegate_tableViewSelectionIsChanging_ = 1 << 21, - CPTableViewDelegate_tableViewMenuForTableColumn_row_ = 1 << 22, - CPTableViewDelegate_tableView_shouldReorderColumn_toColumn_ = 1 << 23; + CPTableViewDelegate_tableViewColumnDidMove_ = 1 << 20, + CPTableViewDelegate_tableViewColumnDidResize_ = 1 << 21, + CPTableViewDelegate_tableViewSelectionDidChange_ = 1 << 22, + CPTableViewDelegate_tableViewSelectionIsChanging_ = 1 << 23, + CPTableViewDelegate_tableViewMenuForTableColumn_row_ = 1 << 24, + CPTableViewDelegate_tableView_shouldReorderColumn_toColumn_ = 1 << 25; //CPTableViewDraggingDestinationFeedbackStyles CPTableViewDraggingDestinationFeedbackStyleNone = -1; @@ -1168,6 +1170,9 @@ NOT YET IMPLEMENTED [[CPNotificationCenter defaultCenter] postNotificationName:CPTableViewColumnDidMoveNotification object:self userInfo:@{ @"CPOldColumn": fromIndex, @"CPNewColumn": toIndex }]; + + if (_implementedDelegateMethods & CPTableViewDelegate_tableViewColumnDidMove_) + [_delegate tableViewColumnDidMove:[[CPNotification alloc] initWithName:CPTableViewColumnDidMoveNotification object:self userInfo:@{ @"CPOldColumn": fromIndex, @"CPNewColumn": toIndex }]]; } /*! @@ -1246,9 +1251,17 @@ NOT YET IMPLEMENTED /*! @ignore */ -- (void)_didResizeTableColumn:(CPTableColumn)theColumn +- (void)_didResizeTableColumn:(CPTableColumn)theColumn oldWidth:(int)oldWidth { [self _autosave]; + + [[CPNotificationCenter defaultCenter] + postNotificationName:CPTableViewColumnDidResizeNotification + object:self + userInfo:@{ @"CPTableColumn": theColumn, @"CPOldWidth": oldWidth }]; + + if (_implementedDelegateMethods & CPTableViewDelegate_tableViewColumnDidResize_) + [_delegate tableViewColumnDidResize:[[CPNotification alloc] initWithName:CPTableViewColumnDidResizeNotification object:self userInfo:@{ @"CPTableColumn": theColumn, @"CPOldWidth": oldWidth }]]; } //Selecting Columns and Rows @@ -2861,35 +2874,6 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (_delegate === aDelegate) return; - var defaultCenter = [CPNotificationCenter defaultCenter]; - - if (_delegate) - { - if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) - [defaultCenter - removeObserver:_delegate - name:CPTableViewColumnDidMoveNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) - [defaultCenter - removeObserver:_delegate - name:CPTableViewColumnDidResizeNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) - [defaultCenter - removeObserver:_delegate - name:CPTableViewSelectionDidChangeNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) - [defaultCenter - removeObserver:_delegate - name:CPTableViewSelectionIsChangingNotification - object:self]; - } - _delegate = aDelegate; _implementedDelegateMethods = 0; @@ -2964,32 +2948,16 @@ Your delegate can implement this method to avoid subclassing the tableview to ad _implementedDelegateMethods |= CPTableViewDelegate_tableView_shouldReorderColumn_toColumn_; if ([_delegate respondsToSelector:@selector(tableViewColumnDidMove:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(tableViewColumnDidMove:) - name:CPTableViewColumnDidMoveNotification - object:self]; + _implementedDelegateMethods |= CPTableViewDelegate_tableViewColumnDidMove_; if ([_delegate respondsToSelector:@selector(tableViewColumnDidResize:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(tableViewColumnDidResize:) - name:CPTableViewColumnDidResizeNotification - object:self]; + _implementedDelegateMethods |= CPTableViewDelegate_tableViewColumnDidResize_; if ([_delegate respondsToSelector:@selector(tableViewSelectionDidChange:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(tableViewSelectionDidChange:) - name:CPTableViewSelectionDidChangeNotification - object:self]; + _implementedDelegateMethods |= CPTableViewDelegate_tableViewSelectionDidChange_; if ([_delegate respondsToSelector:@selector(tableViewSelectionIsChanging:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(tableViewSelectionIsChanging:) - name:CPTableViewSelectionIsChangingNotification - object:self]; + _implementedDelegateMethods |= CPTableViewDelegate_tableViewSelectionIsChanging_; } /*! @@ -5046,6 +5014,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad postNotificationName:CPTableViewSelectionIsChangingNotification object:self userInfo:nil]; + + if (_implementedDelegateMethods & CPTableViewDelegate_tableViewSelectionIsChanging_) + [_delegate tableViewSelectionIsChanging:[[CPNotification alloc] initWithName:CPTableViewSelectionIsChangingNotification object:self userInfo:nil]]; } /*! @@ -5057,6 +5028,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad postNotificationName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]; + + if (_implementedDelegateMethods & CPTableViewDelegate_tableViewSelectionDidChange_) + [_delegate tableViewSelectionDidChange:[[CPNotification alloc] initWithName:CPTableViewSelectionDidChangeNotification object:self userInfo:nil]]; } /*! From e03b6b382416618643720ce7727a170ab2c3618d Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 15:18:39 -0800 Subject: [PATCH 163/234] Fixed: _postDidResizeNotificationWithOldWidth does not exists anymore, replace by _didResizeTableColumn:tableColumn:oldWidht: --- AppKit/CPTableHeaderView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index d22dc4f71..55e297eb8 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -625,7 +625,7 @@ var _CPTableColumnHeaderViewStringValueKey = @"_CPTableColumnHeaderViewStringVal - (void)stopResizingTableColumn:(CPInteger)aColumnIndex at:(CGPoint)aPoint { var tableColumn = [[_tableView tableColumns] objectAtIndex:aColumnIndex]; - [tableColumn _postDidResizeNotificationWithOldWidth:_columnOldWidth]; + [_tableView _didResizeTableColumn:tableColumn oldWidth:_columnOldWidth]; [tableColumn setDisableResizingPosting:NO]; [_tableView setDisableAutomaticResizing:NO]; From 392a6cfbca7a544486de571f7a24f17f1bd4e8f4 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 15:55:50 -0800 Subject: [PATCH 164/234] Fixed: memory leak when using a delegate with a CPComboBox --- AppKit/CPComboBox.j | 66 +++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index b8a4481b8..4c8f49c45 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -53,6 +53,11 @@ CPComboBoxWillPopUpNotification = @"CPComboBoxWillPopUpNotification"; CPComboBoxStateButtonBordered = CPThemeState("button-bordered"); +var CPComboBoxDelegate_comboBoxSelectionIsChanging_ = 1 << 0, + CPComboBoxDelegate_comboBoxSelectionDidChange_ = 1 << 1, + CPComboBoxDelegate_comboBoxWillPopUp_ = 1 << 2, + CPComboBoxDelegate_comboBoxWillDismiss_ = 1 << 3; + var CPComboBoxTextSubview = @"text", CPComboBoxButtonSubview = @"button", CPComboBoxDefaultNumberOfVisibleItems = 5, @@ -61,19 +66,20 @@ var CPComboBoxTextSubview = @"text", @implementation CPComboBox : CPTextField { - CPArray _items; - _CPPopUpList _listDelegate; - CPComboBoxDataSource _dataSource; - BOOL _usesDataSource; - BOOL _completes; BOOL _canComplete; - int _numberOfVisibleItems; + BOOL _completes; BOOL _forceSelection; BOOL _hasVerticalScroller; - CPString _selectedStringValue; - CGSize _intercellSpacing; - float _itemHeight; BOOL _popUpButtonCausedResign; + BOOL _usesDataSource; + CGSize _intercellSpacing; + CPArray _items; + CPComboBoxDataSource _dataSource; + CPInteger _implementedDelegateMethods; + CPString _selectedStringValue; + float _itemHeight; + int _numberOfVisibleItems; + _CPPopUpList _listDelegate; } + (CPString)defaultThemeClass @@ -228,41 +234,19 @@ var CPComboBoxTextSubview = @"text", if (aDelegate === delegate) return; - var defaultCenter = [CPNotificationCenter defaultCenter]; - - if (delegate) - { - [defaultCenter removeObserver:delegate name:CPComboBoxSelectionIsChangingNotification object:self]; - [defaultCenter removeObserver:delegate name:CPComboBoxSelectionDidChangeNotification object:self]; - [defaultCenter removeObserver:delegate name:CPComboBoxWillDismissNotification object:self]; - [defaultCenter removeObserver:delegate name:CPComboBoxWillPopUpNotification object:self]; - } - if (aDelegate) { if ([aDelegate respondsToSelector:@selector(comboBoxSelectionIsChanging:)]) - [defaultCenter addObserver:delegate - selector:@selector(comboBoxSelectionIsChanging:) - name:CPComboBoxSelectionIsChangingNotification - object:self]; + _implementedDelegateMethods |= CPComboBoxDelegate_comboBoxSelectionIsChanging_ if ([aDelegate respondsToSelector:@selector(comboBoxSelectionDidChange:)]) - [defaultCenter addObserver:delegate - selector:@selector(comboBoxSelectionDidChange:) - name:CPComboBoxSelectionDidChangeNotification - object:self]; + _implementedDelegateMethods |= CPComboBoxDelegate_comboBoxSelectionDidChange_ if ([aDelegate respondsToSelector:@selector(comboBoxWillPopUp:)]) - [defaultCenter addObserver:delegate - selector:@selector(comboBoxWillPopUp:) - name:CPComboBoxWillPopUpNotification - object:self]; + _implementedDelegateMethods |= CPComboBoxDelegate_comboBoxWillPopUp_ if ([aDelegate respondsToSelector:@selector(comboBoxWillDismiss:)]) - [defaultCenter addObserver:delegate - selector:@selector(comboBoxWillDissmis:) - name:CPComboBoxWillDismissNotification - object:self]; + _implementedDelegateMethods |= CPComboBoxDelegate_comboBoxWillDismiss_ } [super setDelegate:aDelegate]; @@ -1005,24 +989,36 @@ var CPComboBoxTextSubview = @"text", /*! @ignore */ - (void)comboBoxSelectionIsChanging:(CPNotification)aNotification { + if (_implementedDelegateMethods & CPComboBoxDelegate_comboBoxSelectionIsChanging_) + [_delegate comboBoxSelectionIsChanging:[[CPNotification alloc] initWithName:CPComboBoxSelectionIsChangingNotification object:self userInfo:nil]]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPComboBoxSelectionIsChangingNotification object:self]; } /*! @ignore */ - (void)comboBoxSelectionDidChange:(CPNotification)aNotification { + if (_implementedDelegateMethods & CPComboBoxDelegate_comboBoxSelectionDidChange_) + [_delegate comboBoxSelectionDidChange:[[CPNotification alloc] initWithName:CPComboBoxSelectionDidChangeNotification object:self userInfo:nil]]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPComboBoxSelectionDidChangeNotification object:self]; } /*! @ignore */ - (void)comboBoxWillPopUp:(CPNotification)aNotification { + if (_implementedDelegateMethods & CPComboBoxDelegate_comboBoxWillPopUp_) + [_delegate comboBoxWillPopUp:[[CPNotification alloc] initWithName:CPComboBoxWillPopUpNotification object:self userInfo:nil]]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPComboBoxWillPopUpNotification object:self]; } /*! @ignore */ - (void)comboBoxWillDismiss:(CPNotification)aNotification { + if (_implementedDelegateMethods & CPComboBoxDelegate_comboBoxWillDismiss_) + [_delegate comboBoxWillDismiss:[[CPNotification alloc] initWithName:CPComboBoxWillDismissNotification object:self userInfo:nil]]; + [[CPNotificationCenter defaultCenter] postNotificationName:CPComboBoxWillDismissNotification object:self]; } From 94f89acc8477b18c1e313af2532caca8c449d8a5 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 15:56:10 -0800 Subject: [PATCH 165/234] Fixed: memory leaks when using a delegate with a CPTextField --- AppKit/CPTextField.j | 84 ++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 56d7cdccb..1a9202c06 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -38,8 +38,13 @@ @end +var CPTextFieldDelegate_control_didFailToFormatString_errorDescription_ = 1 << 1, + CPTextFieldDelegate_controlTextDidBeginEditing_ = 1 << 2, + CPTextFieldDelegate_controlTextDidChange_ = 1 << 3, + CPTextFieldDelegate_controlTextDidEndEditing_ = 1 << 4, + CPTextFieldDelegate_controlTextDidFocus_ = 1 << 5, + CPTextFieldDelegate_controlTextDidBlur_ = 1 << 6; -var CPTextFieldDelegate_control_didFailToFormatString_errorDescription_ = 1 << 1; CPTextFieldSquareBezel = 0; /*! A textfield bezel with squared corners. */ CPTextFieldRoundedBezel = 1; /*! A textfield bezel with rounded corners. */ @@ -1146,6 +1151,9 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if ([note object] != self) return; + if (_implementedDelegateMethods & CPTextFieldDelegate_controlTextDidBlur_) + [_delegate controlTextDidBlur:note]; + [[CPNotificationCenter defaultCenter] postNotification:note]; } @@ -1155,6 +1163,9 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if ([note object] != self) return; + if (_implementedDelegateMethods & CPTextFieldDelegate_controlTextDidFocus_) + [_delegate controlTextDidFocus:note]; + [[CPNotificationCenter defaultCenter] postNotification:note]; } @@ -1165,9 +1176,36 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _continuouslyReverseSetBinding]; + if (_implementedDelegateMethods & CPTextFieldDelegate_controlTextDidChange_) + [_delegate controlTextDidChange:note]; + [super textDidChange:note]; } +- (void)textDidBeginEditing:(CPNotification)note +{ + //this looks to prevent false propagation of notifications for other objects + if ([note object] != self) + return; + + if (_implementedDelegateMethods & CPTextFieldDelegate_controlTextDidBeginEditing_) + [_delegate controlTextDidBeginEditing:[[CPNotification alloc] initWithName:CPControlTextDidBeginEditingNotification object:self userInfo:@{"CPFieldEditor": [note object]}]] + + [super textDidBeginEditing:note]; +} + +- (void)textDidEndEditing:(CPNotification)note +{ + //this looks to prevent false propagation of notifications for other objects + if ([note object] != self) + return; + + [super textDidEndEditing:note]; + + if (_implementedDelegateMethods & CPTextFieldDelegate_controlTextDidEndEditing_) + [_delegate controlTextDidEndEditing:note]; +} + - (void)_updateCursorForEvent:(CPEvent)anEvent { var frame = CGRectMakeCopy([self frame]), @@ -1712,17 +1750,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setDelegate:(id )aDelegate { - var defaultCenter = [CPNotificationCenter defaultCenter]; - - //unsubscribe the existing delegate if it exists - if (_delegate) - { - [defaultCenter removeObserver:_delegate name:CPControlTextDidBeginEditingNotification object:self]; - [defaultCenter removeObserver:_delegate name:CPControlTextDidChangeNotification object:self]; - [defaultCenter removeObserver:_delegate name:CPControlTextDidEndEditingNotification object:self]; - [defaultCenter removeObserver:_delegate name:CPTextFieldDidFocusNotification object:self]; - [defaultCenter removeObserver:_delegate name:CPTextFieldDidBlurNotification object:self]; - } + if (_delegate == aDelegate) + return; _delegate = aDelegate; _implementedDelegateMethods = 0; @@ -1731,40 +1760,19 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); _implementedDelegateMethods |= CPTextFieldDelegate_control_didFailToFormatString_errorDescription_ if ([_delegate respondsToSelector:@selector(controlTextDidBeginEditing:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(controlTextDidBeginEditing:) - name:CPControlTextDidBeginEditingNotification - object:self]; + _implementedDelegateMethods |= CPTextFieldDelegate_controlTextDidBeginEditing_; if ([_delegate respondsToSelector:@selector(controlTextDidChange:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(controlTextDidChange:) - name:CPControlTextDidChangeNotification - object:self]; - + _implementedDelegateMethods |= CPTextFieldDelegate_controlTextDidChange_; if ([_delegate respondsToSelector:@selector(controlTextDidEndEditing:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(controlTextDidEndEditing:) - name:CPControlTextDidEndEditingNotification - object:self]; + _implementedDelegateMethods |= CPTextFieldDelegate_controlTextDidEndEditing_; if ([_delegate respondsToSelector:@selector(controlTextDidFocus:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(controlTextDidFocus:) - name:CPTextFieldDidFocusNotification - object:self]; + _implementedDelegateMethods |= CPTextFieldDelegate_controlTextDidFocus_; if ([_delegate respondsToSelector:@selector(controlTextDidBlur:)]) - [defaultCenter - addObserver:_delegate - selector:@selector(controlTextDidBlur:) - name:CPTextFieldDidBlurNotification - object:self]; + _implementedDelegateMethods |= CPTextFieldDelegate_controlTextDidBlur_; } - (id)delegate From 02a47dc7b93b866c91d46b3e7313bcb013729780 Mon Sep 17 00:00:00 2001 From: Mathieu Monney Date: Thu, 27 Nov 2014 13:25:29 +0100 Subject: [PATCH 166/234] FIXED bootstrap URL due to github URL change. --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index b5a13beaa..ed10bd9e7 100644 --- a/README.markdown +++ b/README.markdown @@ -33,7 +33,7 @@ Getting Started --------------- To get started, download and install the current release version of Cappuccino: - $ curl https://raw.github.com/cappuccino/cappuccino/v0.9.7/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh + $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/0.9.7/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh If you'd just like to get started using Cappuccino for your web apps, you are done. From c3fc6a087a1d4df406599c677a03c36e4eb0adbd Mon Sep 17 00:00:00 2001 From: Mathieu Monney Date: Thu, 27 Nov 2014 13:30:31 +0100 Subject: [PATCH 167/234] Fixed URL, wasn't the tagged released one. --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index ed10bd9e7..ed87b834d 100644 --- a/README.markdown +++ b/README.markdown @@ -33,7 +33,7 @@ Getting Started --------------- To get started, download and install the current release version of Cappuccino: - $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/0.9.7/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh + $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/v0.9.7-1/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh If you'd just like to get started using Cappuccino for your web apps, you are done. From 18a6ecc79a66532cc9f1d4591a018ecd6665a973 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 27 Nov 2014 11:22:40 -0500 Subject: [PATCH 168/234] Fixed: z-index of -1000 caused a blank screen in some browsers Previously, a z-index value of -1000 caused some browsers to not display certain UI elements correctly. Setting this value to 0 instead seems to fix this. This commit changes the default value in the templates generated by `capp gen`. Fixes #2232, Refs #2194 --- Tools/capp/Resources/Templates/Application/index-debug.html | 2 +- Tools/capp/Resources/Templates/Application/index.html | 2 +- Tools/capp/Resources/Templates/NibApplication/index-debug.html | 2 +- Tools/capp/Resources/Templates/NibApplication/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Tools/capp/Resources/Templates/Application/index-debug.html b/Tools/capp/Resources/Templates/Application/index-debug.html index 525fedab5..d862fd07e 100644 --- a/Tools/capp/Resources/Templates/Application/index-debug.html +++ b/Tools/capp/Resources/Templates/Application/index-debug.html @@ -102,7 +102,7 @@ width: 100%; /* Put it at the bottom of the stack so it doesn't interfere with UI */ - z-index: -1000; + z-index: 0; } #cappuccino-body .container { diff --git a/Tools/capp/Resources/Templates/Application/index.html b/Tools/capp/Resources/Templates/Application/index.html index 9dec4e8db..414301b1e 100644 --- a/Tools/capp/Resources/Templates/Application/index.html +++ b/Tools/capp/Resources/Templates/Application/index.html @@ -72,7 +72,7 @@ width: 100%; /* Put it at the bottom of the stack so it doesn't interfere with UI */ - z-index: -1000; + z-index: 0; } #cappuccino-body .container { diff --git a/Tools/capp/Resources/Templates/NibApplication/index-debug.html b/Tools/capp/Resources/Templates/NibApplication/index-debug.html index 525fedab5..d862fd07e 100644 --- a/Tools/capp/Resources/Templates/NibApplication/index-debug.html +++ b/Tools/capp/Resources/Templates/NibApplication/index-debug.html @@ -102,7 +102,7 @@ width: 100%; /* Put it at the bottom of the stack so it doesn't interfere with UI */ - z-index: -1000; + z-index: 0; } #cappuccino-body .container { diff --git a/Tools/capp/Resources/Templates/NibApplication/index.html b/Tools/capp/Resources/Templates/NibApplication/index.html index 9dec4e8db..414301b1e 100644 --- a/Tools/capp/Resources/Templates/NibApplication/index.html +++ b/Tools/capp/Resources/Templates/NibApplication/index.html @@ -72,7 +72,7 @@ width: 100%; /* Put it at the bottom of the stack so it doesn't interfere with UI */ - z-index: -1000; + z-index: 0; } #cappuccino-body .container { From 77f962eed4c1546c88e4bd88a1b04a35e182dc2e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 28 Nov 2014 09:58:44 -0800 Subject: [PATCH 169/234] Style: removed comment in CPDatePicker --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 18ad45a4a..d1a987c7f 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -123,8 +123,6 @@ var CPZeroKeyCode = 48, // This is usefull when clicking on the stepper when the datePicker is not selected [_stepper setObjectValue:0]; - //[_datePicker unsetThemeState:CPThemeStateEditing]; - return YES; } From 56acbfc85c1edf9043d1a4ed3559c26cbd136e61 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 28 Nov 2014 10:00:27 -0800 Subject: [PATCH 170/234] Fixed: change == to === on CPTextField when assigning a delegateo --- AppKit/CPTextField.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 77d76cf7c..d3dca7380 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1751,7 +1751,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setDelegate:(id )aDelegate { - if (_delegate == aDelegate) + if (_delegate === aDelegate) return; _delegate = aDelegate; From 2484fb85e9646feac6bb2786fbba8aceff40eda4 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 1 Dec 2014 14:22:06 -0800 Subject: [PATCH 171/234] Fixed: warning raised by the compiler due to unknown type in var declarations --- AppKit/CPCursor.j | 1 + AppKit/CPEvent.j | 1 + 2 files changed, 2 insertions(+) diff --git a/AppKit/CPCursor.j b/AppKit/CPCursor.j index c6c96acdc..6e0b36cff 100755 --- a/AppKit/CPCursor.j +++ b/AppKit/CPCursor.j @@ -22,6 +22,7 @@ Cursor support by browser: */ @import +@import "CPImage.j" @global CPApp diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index d0ab4e128..a1699aa34 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -32,6 +32,7 @@ @class CPTextField @class CPWindow +@class CPGraphicsContext @global CPApp From 2e66601c19faf21416671a88886a00fa2dbd9bf3 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 1 Dec 2014 14:22:39 -0800 Subject: [PATCH 172/234] Fixed: memory leak in CPComboBox Previously, when assigning a listDelegate to a CPComboBox, we never deleted the observers added by this method. Now we add and delete these observers in the method addObservers and removeObservers. This PR fix another issue. Previously, the behavior of the panel of the comboBox wasn't the same as the one in Cocoa. Now, when closing the panel, the hit view won't be the first responder as it was. Cocoa works like this as well. --- AppKit/CPComboBox.j | 100 +++++++++++++++++++++++++++++------------- AppKit/_CPPopUpList.j | 34 +++++++++----- 2 files changed, 94 insertions(+), 40 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 844149d4b..f313e38de 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -160,7 +160,7 @@ var CPComboBoxTextSubview = @"text", - (void)setIntercellSpacing:(CGSize)aSize { - if (_intercellSpacing && CGSizeEqualToSize(aSize, _intercellSpacing)) + if (!aSize || (_intercellSpacing && CGSizeEqualToSize(aSize, _intercellSpacing))) return; _intercellSpacing = aSize; @@ -396,49 +396,53 @@ var CPComboBoxTextSubview = @"text", if (_listDelegate === aDelegate) return; - var defaultCenter = [CPNotificationCenter defaultCenter]; - - if (_listDelegate) - { - [defaultCenter removeObserver:self name:_CPPopUpListWillPopUpNotification object:_listDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListWillDismissNotification object:_listDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListDidDismissNotification object:_listDelegate]; - [defaultCenter removeObserver:self name:_CPPopUpListItemWasClickedNotification object:_listDelegate]; - - var oldTableView = [_listDelegate tableView]; - - if (oldTableView) - { - [defaultCenter removeObserver:self name:CPTableViewSelectionIsChangingNotification object:oldTableView]; - [defaultCenter removeObserver:self name:CPTableViewSelectionDidChangeNotification object:oldTableView]; - } - } + [self _removeObserversForListDelegate:_listDelegate]; _listDelegate = aDelegate; + // We only add the observers if the CPComboBox is displayed + if ([self window]) + [self _addObserversForListDelegate:_listDelegate] + + // Apply our text style to the list + [_listDelegate setFont:[self font]]; + [_listDelegate setAlignment:[self alignment]]; + + [self setHasVerticalScroller:_hasVerticalScroller]; + [self setIntercellSpacing:_intercellSpacing]; + [self setItemHeight:_itemHeight]; +} + +- (void)_addObserversForListDelegate:(_CPPopUpList)aDelegate +{ + if (!aDelegate) + return; + + var defaultCenter = [CPNotificationCenter defaultCenter]; + [defaultCenter addObserver:self selector:@selector(comboBoxWillPopUp:) name:_CPPopUpListWillPopUpNotification - object:_listDelegate]; + object:aDelegate]; [defaultCenter addObserver:self selector:@selector(comboBoxWillDismiss:) name:_CPPopUpListWillDismissNotification - object:_listDelegate]; + object:aDelegate]; [defaultCenter addObserver:self selector:@selector(listDidDismiss:) name:_CPPopUpListDidDismissNotification - object:_listDelegate]; + object:aDelegate]; [defaultCenter addObserver:self selector:@selector(itemWasClicked:) name:_CPPopUpListItemWasClickedNotification - object:_listDelegate]; + object:aDelegate]; - [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + [[aDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; - var tableView = [_listDelegate tableView]; + var tableView = [aDelegate tableView]; [defaultCenter addObserver:self selector:@selector(comboBoxSelectionIsChanging:) @@ -449,13 +453,27 @@ var CPComboBoxTextSubview = @"text", selector:@selector(comboBoxSelectionDidChange:) name:CPTableViewSelectionDidChangeNotification object:tableView]; +} - // Apply our text style to the list - [_listDelegate setFont:[self font]]; - [_listDelegate setAlignment:[self alignment]]; - [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; - [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; - [[_listDelegate tableView] setRowHeight:_itemHeight]; +- (void)_removeObserversForListDelegate:(_CPPopUpList)aDelegate +{ + if (!aDelegate) + return; + + var defaultCenter = [CPNotificationCenter defaultCenter]; + + [defaultCenter removeObserver:self name:_CPPopUpListWillPopUpNotification object:aDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListWillDismissNotification object:aDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListDidDismissNotification object:aDelegate]; + [defaultCenter removeObserver:self name:_CPPopUpListItemWasClickedNotification object:aDelegate]; + + var oldTableView = [aDelegate tableView]; + + if (oldTableView) + { + [defaultCenter removeObserver:self name:CPTableViewSelectionIsChangingNotification object:oldTableView]; + [defaultCenter removeObserver:self name:CPTableViewSelectionDidChangeNotification object:oldTableView]; + } } - (int)indexOfItemWithObjectValue:(id)anObject @@ -982,6 +1000,28 @@ var CPComboBoxTextSubview = @"text", } } + +#pragma mark - +#pragma mark Observers method + +- (void)_addObservers +{ + if (_isObserving) + return; + + [super _addObservers]; + [self _addObserversForListDelegate:_listDelegate]; +} + +- (void)_removeObservers +{ + if (!_isObserving) + return; + + [super _removeObservers]; + [self _removeObserversForListDelegate:_listDelegate]; +} + @end @implementation CPComboBox (CPComboBoxDelegate) diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index 3dd357132..845768bd6 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -96,28 +96,41 @@ var ListColumnIdentifier = @"1"; return [super sendEvent:anEvent]; } -- (void)orderFront:(id)sender -{ - [self _trapNextMouseDown]; - [super orderFront:sender]; -} - - (void)_mouseWasClicked:(CPEvent)anEvent { + // This is needed, when the user close the list with the key enter + if (![self isVisible]) + { + [CPApp sendEvent:anEvent]; + return; + } + var mouseWindow = [anEvent window], - rect = [[[self delegate] dataSource] bounds], + rect = CGRectInsetByInset([[[self delegate] dataSource] bounds], [[[self delegate] dataSource] currentValueForThemeAttribute:@"content-inset"]), point = [[[self delegate] dataSource] convertPoint:[anEvent locationInWindow] fromView:nil]; + // If we click somewhere else than the comboBox or the panel we close the panel if (mouseWindow != self && !CGRectContainsPoint(rect, point)) + { [[self delegate] close]; + } else - [self _trapNextMouseDown]; + { + // If we click on the panel, the app will know what to do + if (mouseWindow == self) + [CPApp sendEvent:anEvent]; + + // If we click on the comboBox field, we will trap the next mouse down + if (CGRectContainsPoint(rect, point)) + [self _trapNextMouseDown]; + } + } - (void)_trapNextMouseDown { - // Don't dequeue the event so clicks in controls will work - [CPApp setTarget:self selector:@selector(_mouseWasClicked:) forNextEventMatchingMask:CPLeftMouseDownMask untilDate:nil inMode:CPDefaultRunLoopMode dequeue:NO]; + // Dequeue the event and mouseWasClicked will do what it needs to do + [CPApp setTarget:self selector:@selector(_mouseWasClicked:) forNextEventMatchingMask:CPLeftMouseDownMask untilDate:nil inMode:CPDefaultRunLoopMode dequeue:YES]; } @end @@ -336,6 +349,7 @@ var ListColumnIdentifier = @"1"; [self listWillPopUp]; + [_panel _trapNextMouseDown]; [[aView window] addChildWindow:_panel ordered:CPWindowAbove]; } From e4bfd0ef5e80cf8bb7a73ff40dc8dcea63bc970c Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 1 Dec 2014 16:07:13 -0800 Subject: [PATCH 173/234] Fixed: issue when opening a popUpList of a CPComboBox. We now firstly open the panel and then we modify the content of the panel, this occured an issue with the rendering of the view --- AppKit/CPComboBox.j | 3 +-- AppKit/_CPPopUpList.j | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index f313e38de..bfc7887ef 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -518,8 +518,6 @@ var CPComboBoxTextSubview = @"text", if (!_listDelegate) [self setListDelegate:[[_CPPopUpList alloc] initWithDataSource:self]]; - [self _selectMatchingItem]; - // Note the offset here is 1 less than the focus ring width because the outer edge // of the focus ring is very transparent and it looks better if the list is closer. if (CPComboBoxFocusRingWidth < 0) @@ -530,6 +528,7 @@ var CPComboBoxTextSubview = @"text", } [_listDelegate popUpRelativeToRect:[self _borderFrame] view:self offset:CPComboBoxFocusRingWidth - 1]; + [self _selectMatchingItem]; } /*! @ignore */ diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index 845768bd6..6ee4e1ff0 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -336,6 +336,11 @@ var ListColumnIdentifier = @"1"; if ([_panel isVisible]) return; + [self listWillPopUp]; + + [_panel _trapNextMouseDown]; + [[aView window] addChildWindow:_panel ordered:CPWindowAbove]; + var rowRect = [_tableView rectOfRow:[self numberOfRowsInTableView:_tableView] - 1], frame = CGRectMake(0, 0, MAX(_listWidth, CGRectGetWidth(aRect)), CGRectGetMaxY(rowRect)); @@ -346,11 +351,6 @@ var ListColumnIdentifier = @"1"; [_scrollView setFrameSize:CGSizeMakeCopy(frame.size)]; [_tableView setEnabled:[_dataSource numberOfItemsInList:self] > 0]; [self scrollItemAtIndexToTop:[_tableView selectedRow]]; - - [self listWillPopUp]; - - [_panel _trapNextMouseDown]; - [[aView window] addChildWindow:_panel ordered:CPWindowAbove]; } #pragma mark Setting Display Attributes From 1df0da7509cdb693b91f9f9c10eeac23e0586acc Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 1 Dec 2014 16:07:48 -0800 Subject: [PATCH 174/234] Fixed: method addObservers and removeObservers were not call all the time when ordering or not a window --- AppKit/CPWindow/CPWindow.j | 29 ++++++++++++++++++---- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 8 ++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index e2836fe32..4d0ec1c12 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -907,18 +907,21 @@ CPTexturedBackgroundWindowMask - (void)_orderFront { - [[self contentView] _addObservers]; #if PLATFORM(DOM) // -dw- if a sheet is clicked, the parent window should come up too if (_isSheet) [_parentView orderFront:self]; - if (!_isVisible) - [self _setFrame:_frame display:YES animate:NO constrainWidth:YES constrainHeight:YES]; + // Save the boolean since it will be updated in the method order:window:relativeTo: + var isVisible = _isVisible; [_platformWindow orderFront:self]; [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; + + // setFrame is set after ordering the window as this method can send some notifications + if (isVisible) + [self _setFrame:_frame display:YES animate:NO constrainWidth:YES constrainHeight:YES]; #endif if (!CPApp._keyWindow) @@ -937,8 +940,26 @@ CPTexturedBackgroundWindowMask */ - (void)_parentDidOrderInChild { + } +/* + Called when the window is displayed in the DOM +*/ +- (void)_windowWillBeAddedInTheDOM +{ + [[self contentView] _addObservers]; +} + +/* + Called when the window is removed in the DOM +*/ +- (void)_windowWillBeRemovedFromTheDOM +{ + [[self contentView] _removeObservers]; +} + + /* Makes the receiver the last window in the screen ordering. @param aSender the object that requested this @@ -968,8 +989,6 @@ CPTexturedBackgroundWindowMask if (!_isVisible) return; - [[self contentView] _removeObservers]; - if ([self isSheet]) { // -dw- as in Cocoa, orderOut: detaches the sheet and animates out diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index eeba3a894..60e0166b6 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1299,7 +1299,10 @@ var PreventScroll = true; // When ordering out, ignore otherWindow, simply remove aWindow from its level. // If layer is nil, this will be a no-op. if (orderingMode === CPWindowOut) + { + [aWindow _windowWillBeRemovedFromTheDOM]; return [layer removeWindow:aWindow]; + } /* If aWindow is a child of otherWindow and is not yet visible, @@ -1345,6 +1348,8 @@ var PreventScroll = true; if (otherWindow) insertionIndex = orderingMode === CPWindowAbove ? otherWindow._index + 1 : otherWindow._index; + [aWindow _windowWillBeAddedInTheDOM]; + // Place the window at the appropriate index. [layer insertWindow:aWindow atIndex:insertionIndex]; @@ -1395,6 +1400,9 @@ var PreventScroll = true; var index = ordering === CPWindowAbove ? parent._index + 1 : parent._index; + if (!childWasVisible) + [child _windowWillBeAddInTheDOM]; + [aLayer insertWindow:child atIndex:index]; if (!childWasVisible) From f5d847f32059e1bb6da42d7f138f9e7f08094a4c Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 1 Dec 2014 16:08:49 -0800 Subject: [PATCH 175/234] Style: style in CPWindow --- AppKit/CPWindow/CPWindow.j | 1 - 1 file changed, 1 deletion(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 4d0ec1c12..31e7b156a 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -940,7 +940,6 @@ CPTexturedBackgroundWindowMask */ - (void)_parentDidOrderInChild { - } /* From ee13978115c23afdfd16ee0c768f52a12a737a30 Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Tue, 2 Dec 2014 13:54:02 +0100 Subject: [PATCH 176/234] Fixed: @ref did not generate self.x for an ivar x --- Objective-J/ObjJAcornCompiler.js | 4 ++-- .../Preprocessor/OutputTests/Misc/ref-self.j | 11 +++++++++++ .../Preprocessor/OutputTests/Misc/ref-self.js | 9 +++++++++ .../Objective-J/Preprocessor/OutputTests/OutputTest.j | 1 + 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.j create mode 100644 Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index 79646a0e6..0e9d16f98 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -2381,9 +2381,9 @@ Reference: function(node, st, c) { buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression. } buffer.concat("function(__input) { if (arguments.length) return "); - buffer.concat(node.element.name); + c(node.element, st, "Expression"); buffer.concat(" = __input; return "); - buffer.concat(node.element.name); + c(node.element, st, "Expression"); buffer.concat("; }"); if (!generate) compiler.lastPos = node.end; }, diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.j b/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.j new file mode 100644 index 000000000..d94fa2450 --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.j @@ -0,0 +1,11 @@ +@implementation TC +{ + id _control; +} + +- (id)a +{ + @ref(_control); +} + +@end diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js b/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js new file mode 100644 index 000000000..778d931d6 --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js @@ -0,0 +1,9 @@ +{var the_class = objj_allocateClassPair(Nil, "TC"), +meta_class = the_class.isa;class_addIvars(the_class, [new objj_ivar("_control")]);objj_registerClassPair(the_class); +class_addMethods(the_class, [new objj_method(sel_getUid("a"), function $TC__a(self, _cmd) +{ + function(__input) { if (arguments.length) return self._control = __input; return self._control; }; +} + +,["id"])]); +} diff --git a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j index a94c74f3b..fcd96ba3c 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j @@ -22,6 +22,7 @@ var FILENAMES = [ "Misc/regex-simple-char-classes", "Misc/empty-loops", "Misc/empty-statements", + "Misc/ref-self", ]; @implementation OutputTest : OJTestCase From c3ce0a61b6293c28d33eef970efc5038f1432810 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 2 Dec 2014 10:03:13 -0800 Subject: [PATCH 177/234] Fixed: type with the method _windowWillBeAddedToTheDOM in CPWindow --- AppKit/CPWindow/CPWindow.j | 6 +++--- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 31e7b156a..25fd9bcf8 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -914,13 +914,13 @@ CPTexturedBackgroundWindowMask [_parentView orderFront:self]; // Save the boolean since it will be updated in the method order:window:relativeTo: - var isVisible = _isVisible; + var wasVisible = _isVisible; [_platformWindow orderFront:self]; [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; // setFrame is set after ordering the window as this method can send some notifications - if (isVisible) + if (wasVisible) [self _setFrame:_frame display:YES animate:NO constrainWidth:YES constrainHeight:YES]; #endif @@ -945,7 +945,7 @@ CPTexturedBackgroundWindowMask /* Called when the window is displayed in the DOM */ -- (void)_windowWillBeAddedInTheDOM +- (void)_windowWillBeAddedToTheDOM { [[self contentView] _addObservers]; } diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 60e0166b6..80a04feae 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1348,7 +1348,7 @@ var PreventScroll = true; if (otherWindow) insertionIndex = orderingMode === CPWindowAbove ? otherWindow._index + 1 : otherWindow._index; - [aWindow _windowWillBeAddedInTheDOM]; + [aWindow _windowWillBeAddedToTheDOM]; // Place the window at the appropriate index. [layer insertWindow:aWindow atIndex:insertionIndex]; @@ -1401,7 +1401,7 @@ var PreventScroll = true; var index = ordering === CPWindowAbove ? parent._index + 1 : parent._index; if (!childWasVisible) - [child _windowWillBeAddInTheDOM]; + [child _windowWillBeAddedToTheDOM]; [aLayer insertWindow:child atIndex:index]; From 12ed70fec2a4fd517e3cc19d0e45f8968e766684 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 2 Dec 2014 16:37:02 -0800 Subject: [PATCH 178/234] Fixed: notifications CPWindowDidResignKeyNotification and CPWindowDidBecomeKeyNotification were not registered for a firstresponder textField when ordered again a window --- AppKit/CPTextField.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index d3dca7380..0d8576a45 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -882,7 +882,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [super _addObservers]; - if ([self window] === self) + if ([[self window] firstResponder] === self) [self _setObserveWindowKeyNotifications:YES]; } From b45399a045b64fd812572b6d0e455cbf340f530e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 2 Dec 2014 16:37:57 -0800 Subject: [PATCH 179/234] Test: added class notificationHelper with the method registeredNotificationsForObserver --- Tests/AppKit/CPNotificationCenterHelper.j | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Tests/AppKit/CPNotificationCenterHelper.j diff --git a/Tests/AppKit/CPNotificationCenterHelper.j b/Tests/AppKit/CPNotificationCenterHelper.j new file mode 100644 index 000000000..69aaed26c --- /dev/null +++ b/Tests/AppKit/CPNotificationCenterHelper.j @@ -0,0 +1,39 @@ +@import + +@implementation CPNotificationCenterHelper : CPObject +{ +} + ++ (void)registeredNotificationsForObserver:(id)anObserver +{ + var defaultCenter = [CPNotificationCenter defaultCenter], + names = [defaultCenter._namedRegistries keyEnumerator], + notifications = [], + name; + + while ((name = [names nextObject]) !== nil) + { + var notificationRegistry = [defaultCenter._namedRegistries objectForKey:name], + objectObservers = notificationRegistry._objectObservers, + keys = [objectObservers keyEnumerator], + key; + + // Iterate through every set of observers + while ((key = [keys nextObject]) !== nil) + { + var observers = [objectObservers objectForKey:key], + observer = nil, + observersEnumerator = [observers objectEnumerator]; + + while ((observer = [observersEnumerator nextObject]) !== nil) + { + if ([observer observer] == anObserver) + [notifications addObject:name]; + } + } + } + + return notifications.sort(); +} + +@end From ec3af04f296c355d54cd7036dc3f76914c5c5a90 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 2 Dec 2014 16:38:17 -0800 Subject: [PATCH 180/234] Test: added tests for CPComboBox --- Tests/AppKit/CPComboBoxTest.j | 78 +++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Tests/AppKit/CPComboBoxTest.j diff --git a/Tests/AppKit/CPComboBoxTest.j b/Tests/AppKit/CPComboBoxTest.j new file mode 100644 index 000000000..3d12ed91c --- /dev/null +++ b/Tests/AppKit/CPComboBoxTest.j @@ -0,0 +1,78 @@ +@import +@import +@import + +@import "CPNotificationCenterHelper.j" + +[CPApplication sharedApplication]; + +@implementation CPComboBoxTest : OJTestCase +{ + CPComboBox comboBox; + BOOL wasClicked +} + +- (void)setUp +{ + comboBox = [[CPComboBox alloc] initWithFrame:CGRectMake(0, 0, 200, 30)]; +} + +- (void)testCanCreate +{ + [self assertTrue:!!comboBox]; +} + +- (void)testPublicAccessors +{ + [comboBox setHasVerticalScroller:YES]; + [comboBox setIntercellSpacing:CGSizeMakeZero()]; + [comboBox setButtonBordered:YES]; + [comboBox setItemHeight:30]; + [comboBox setNumberOfVisibleItems:10]; +} + +- (void)testPerformClick +{ + [comboBox setTarget:self]; + [comboBox setAction:@selector(clickMe:)]; + [comboBox performClick:nil]; + [self assertTrue:wasClicked]; +} + +- (void)clickMe:(id)sender +{ + wasClicked = YES; +} + +- (void)testNotificationsRegistered +{ + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:comboBox] equals:[] message:@"Notications registered for the CPComboBox in the notification center are wrong"]; + [comboBox setListDelegate:[[_CPPopUpList alloc] initWithDataSource:comboBox]]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:comboBox] equals:[] message:@"Notications registered for the CPComboBox in the notification center are wrong"]; + + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) + styleMask:CPWindowNotSizable]; + + [[theWindow contentView] addSubview:comboBox]; + + var expectedNotifications = [@"_CPPopUpListWillPopUpNotification", @"_CPPopUpListWillDismissNotification", @"_CPPopUpListDidDismissNotification", @"_CPPopUpListItemWasClickedNotification", @"CPTableViewSelectionIsChangingNotification", @"CPTableViewSelectionDidChangeNotification"].sort(); + + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:comboBox] equals:expectedNotifications message:@"Notications registered for the CPComboBox in the notification center are wrong"]; + + [comboBox removeFromSuperview]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:comboBox] equals:[] message:@"Notications registered for the CPComboBox in the notification center are wrong"]; + + [[theWindow contentView] addSubview:comboBox]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:comboBox] equals:expectedNotifications message:@"Notications registered for the CPComboBox in the notification center are wrong"]; + + [[theWindow contentView] addSubview:comboBox]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:comboBox] equals:expectedNotifications message:@"Notications registered for the CPComboBox in the notification center are wrong"]; + + [comboBox setListDelegate:nil]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:comboBox] equals:[] message:@"Notications registered for the CPComboBox in the notification center are wrong"]; + + [comboBox setListDelegate:[[_CPPopUpList alloc] initWithDataSource:comboBox]]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:comboBox] equals:expectedNotifications message:@"Notications registered for the CPComboBox in the notification center are wrong"]; +} + +@end \ No newline at end of file From 006bf72c1735e618aa840365432d1e6c18c4a26a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 2 Dec 2014 16:38:55 -0800 Subject: [PATCH 181/234] Test: added unit test for registered notification for the scrollView --- Tests/AppKit/CPScrollViewTest.j | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Tests/AppKit/CPScrollViewTest.j b/Tests/AppKit/CPScrollViewTest.j index d95839438..379cea865 100644 --- a/Tests/AppKit/CPScrollViewTest.j +++ b/Tests/AppKit/CPScrollViewTest.j @@ -1,5 +1,9 @@ @import +@import "CPNotificationCenterHelper.j" + +[CPApplication sharedApplication]; + @implementation CPScrollViewTest : OJTestCase { } @@ -256,6 +260,24 @@ [self assertPoint:CGPointMake(0, 0) equals:visibleRect.origin message:@"VisibleRect origin not at top left corner again"]; } +-(void)testNotificationsRegistered +{ + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) + styleMask:CPWindowNotSizable]; + + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:scrollView] equals:[] message:@"Notications registered for the scrollView in the notification center are wrong"]; + + [[theWindow contentView] addSubview:scrollView]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:scrollView] equals:[@"CPScrollerStyleGlobalChangeNotification"] message:@"Notications registered for the scrollView in the notification center are wrong"]; + + [[theWindow contentView] addSubview:scrollView]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:scrollView] equals:[@"CPScrollerStyleGlobalChangeNotification"] message:@"Notications registered for the scrollView in the notification center are wrong"]; + + [scrollView removeFromSuperview]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:scrollView] equals:[] message:@"Notications registered for the scrollView in the notification center are wrong"]; +} + - (void)assertPoint:(CGPoint)expected equals:(CGPoint)actual message:(CPString)message { [self assert:expected.x equals:actual.x message:@"X: " + message]; From 8efb6f8808a0998d19f48cb8ba5af2a19518c749 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 2 Dec 2014 16:39:07 -0800 Subject: [PATCH 182/234] Test: added unit test for registered notification for the tableView --- Tests/AppKit/CPTableViewTest.j | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Tests/AppKit/CPTableViewTest.j b/Tests/AppKit/CPTableViewTest.j index c1c5d0180..ede7ed1e9 100644 --- a/Tests/AppKit/CPTableViewTest.j +++ b/Tests/AppKit/CPTableViewTest.j @@ -1,5 +1,7 @@ @import +@import "CPNotificationCenterHelper.j" + [CPApplication sharedApplication]; @implementation CPTableViewTest : OJTestCase @@ -303,6 +305,36 @@ [self assertTrue:[table bounds].size.width >= 200]; } +-(void)testNotificationsRegistered +{ + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:tableView] equals:[@"_CPWindowDidChangeFirstResponderNotification"] message:@"Notications registered for the tableView in the notification center are wrong"]; + + [tableView removeFromSuperview]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:tableView] equals:[] message:@"Notications registered for the tableView in the notification center are wrong"]; + + [[theWindow contentView] addSubview:tableView]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:tableView] equals:[@"_CPWindowDidChangeFirstResponderNotification"] message:@"Notications registered for the tableView in the notification center are wrong"]; + + [[theWindow contentView] addSubview:tableView]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:tableView] equals:[@"_CPWindowDidChangeFirstResponderNotification"] message:@"Notications registered for the tableView in the notification center are wrong"]; + + + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0, 0, 100.0, 100.0)], + expectedNotifications = [@"_CPWindowDidChangeFirstResponderNotification", @"CPViewFrameDidChangeNotification", @"CPViewBoundsDidChangeNotification"].sort(); + + [scrollView setDocumentView:tableView]; + + [[theWindow contentView] addSubview:scrollView]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:tableView] equals:expectedNotifications message:@"Notications registered for the tableView in the notification center are wrong"]; + + [[theWindow contentView] addSubview:scrollView]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:tableView] equals:expectedNotifications message:@"Notications registered for the tableView in the notification center are wrong"]; + + [scrollView removeFromSuperview]; + [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:tableView] equals:[] message:@"Notications registered for the tableView in the notification center are wrong"]; + +} + @end @implementation FirstResponderConfigurableTableView : CPTableView From c7ccff914f8b661d82a88938728eb152a601e6a7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 2 Dec 2014 16:48:44 -0800 Subject: [PATCH 183/234] Test: added basic test for ordering window --- Tests/AppKit/CPWindowTest.j | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Tests/AppKit/CPWindowTest.j b/Tests/AppKit/CPWindowTest.j index 2244a28d9..cf51e8cba 100644 --- a/Tests/AppKit/CPWindowTest.j +++ b/Tests/AppKit/CPWindowTest.j @@ -128,4 +128,12 @@ [self assertTrue:[[[self window] representedURL] class] === [CPURL class]]; } +- (void)testOrderingMethod +{ + [_window orderFront:self]; + [_window orderBack:self]; + [_window orderFront:self]; + [_window orderOut:self]; +} + @end From 46a0ce8e981627c55a4c4cbad2e6c6e3c47e4c09 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 4 Dec 2014 11:06:50 -0800 Subject: [PATCH 184/234] Fixed: wrong condition when setting the frame in CPWindow when ordering a view --- AppKit/CPWindow/CPWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 25fd9bcf8..160a03ee4 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -920,7 +920,7 @@ CPTexturedBackgroundWindowMask [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; // setFrame is set after ordering the window as this method can send some notifications - if (wasVisible) + if (!wasVisible) [self _setFrame:_frame display:YES animate:NO constrainWidth:YES constrainHeight:YES]; #endif From 8024f6a80484dfa0f485f076adf77dffb0f01347 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 4 Dec 2014 15:12:11 -0500 Subject: [PATCH 185/234] Fixed: Move CPURLRequest methods to @accessors This commit changes the simple getters/setters from CPURLRequest to use @accessors. --- Foundation/CPURLRequest.j | 59 ++++----------------------------------- 1 file changed, 5 insertions(+), 54 deletions(-) diff --git a/Foundation/CPURLRequest.j b/Foundation/CPURLRequest.j index 703c81bcc..b643264a3 100644 --- a/Foundation/CPURLRequest.j +++ b/Foundation/CPURLRequest.j @@ -35,12 +35,13 @@ */ @implementation CPURLRequest : CPObject { - CPURL _URL; + CPURL _URL @accessors(property=URL); // FIXME: this should be CPData - CPString _HTTPBody; - CPString _HTTPMethod; - CPDictionary _HTTPHeaderFields; + CPString _HTTPBody @accessors(property=HTTPBody); + CPString _HTTPMethod @accessors(property=HTTPMethod); + + CPDictionary _HTTPHeaderFields @accessors(readonly, getter=allHTTPHeaderFields); } /*! @@ -87,14 +88,6 @@ return self; } -/*! - Returns the request URL -*/ -- (CPURL)URL -{ - return _URL; -} - /*! Sets the URL for this request. @param aURL the new URL @@ -105,48 +98,6 @@ _URL = new CFURL(aURL); } -/*! - Sets the HTTP body for this request - @param anHTTPBody the new HTTP body -*/ -- (void)setHTTPBody:(CPString)anHTTPBody -{ - _HTTPBody = anHTTPBody; -} - -/*! - Returns the request's http body. -*/ -- (CPString)HTTPBody -{ - return _HTTPBody; -} - -/*! - Sets the request's http method. - @param anHTPPMethod the new http method -*/ -- (void)setHTTPMethod:(CPString)anHTTPMethod -{ - _HTTPMethod = anHTTPMethod; -} - -/*! - Returns the request's http method -*/ -- (CPString)HTTPMethod -{ - return _HTTPMethod; -} - -/*! - Returns a dictionary of the http header fields -*/ -- (CPDictionary)allHTTPHeaderFields -{ - return _HTTPHeaderFields; -} - /*! Returns the value for the specified header field. @param aField the header field to obtain a value for From d1917db47e9d5a58501cfcee4b4207e201d37306 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 4 Dec 2014 15:29:52 -0500 Subject: [PATCH 186/234] Fixed: Reworked withCredentials for XMLHTTPRequests Previously, the withCredentials parameter was accessed primarily through the CPURLConnection, which gave limited access to changing the request before it was sent off. This commit removes withCredentials from CPURLConnection and places it on CPURLRequest so that it may be more easily modified prior to sending the request. This also simplifies the logic in CPURLConnection for creating and establishing connections with credentials. In this commit, all CFHTTPRequests are assumed to not use withCredentials unless they are explicitly set. Setting [aURLRequest withCredentials] will set the withCredentials property on the underlying XMLHTTPRequest prior to the connection being opened. --- Foundation/CPURLConnection.j | 36 ++++-------------------------------- Foundation/CPURLRequest.j | 1 + Objective-J/CFHTTPRequest.js | 5 ++++- 3 files changed, 9 insertions(+), 33 deletions(-) diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index 88a1afbf8..7c4cfd81e 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -81,8 +81,6 @@ var CPURLConnectionDelegate = nil; BOOL _isCanceled; BOOL _isLocalFileConnection; - BOOL _withCredentials @accessors(property=withCredentials); - HTTPRequest _HTTPRequest; } @@ -99,25 +97,12 @@ var CPURLConnectionDelegate = nil; @return the data at the URL or \c nil if there was an error */ + (CPData)sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse -{ - var cfHTTPRequest = new CFHTTPRequest(); - - return [CPURLConnection _sendSynchronousRequest:aRequest returningResponse:aURLResponse withCFHTTPRequest:cfHTTPRequest]; -} - -+ (CPData)sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse withCredentials:(BOOL)withCredentials -{ - var cfHTTPRequest = new CFHTTPRequest(); - - cfHTTPRequest.setWithCredentials(withCredentials); - - return [CPURLConnection _sendSynchronousRequest:aRequest returningResponse:aURLResponse withCFHTTPRequest:cfHTTPRequest]; -} - -+ (CPData)_sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse withCFHTTPRequest:(CFHTTPRequest)aCFHTTPRequest { try { + var aCFHTTPRequest = new CFHTTPRequest(); + aCFHTTPRequest.setWithCredentials([aRequest withCredentials]); + aCFHTTPRequest.open([aRequest HTTPMethod], [[aRequest URL] absoluteString], NO); var fields = [aRequest allHTTPHeaderFields], @@ -152,17 +137,6 @@ var CPURLConnectionDelegate = nil; return [[self alloc] initWithRequest:aRequest delegate:aDelegate]; } -//overloaded method that allows user to set _withCredentials -+ (CPURLConnection)connectionWithRequest:(CPURLRequest)aRequest delegate:(id)aDelegate withCredentials:(BOOL)withCredentials -{ - var connection = [[self alloc] initWithRequest:aRequest delegate:aDelegate startImmediately:NO]; - - [connection setWithCredentials:withCredentials]; - [connection start]; - - return connection; -} - /* Default class initializer. Use one of the class methods instead. @param aRequest contains the URL to contact @@ -179,7 +153,6 @@ var CPURLConnectionDelegate = nil; _request = aRequest; _delegate = aDelegate; _isCanceled = NO; - _withCredentials = NO; var URL = [_request URL], scheme = [URL scheme]; @@ -191,6 +164,7 @@ var CPURLConnectionDelegate = nil; (window.location.protocol === "file:" || window.location.protocol === "app:")); _HTTPRequest = new CFHTTPRequest(); + _HTTPRequest.setWithCredentials([aRequest withCredentials]); if (shouldStartImmediately) [self start]; @@ -219,8 +193,6 @@ var CPURLConnectionDelegate = nil; { _isCanceled = NO; - _HTTPRequest.setWithCredentials(_withCredentials); - try { _HTTPRequest.open([_request HTTPMethod], [[_request URL] absoluteString], YES); diff --git a/Foundation/CPURLRequest.j b/Foundation/CPURLRequest.j index b643264a3..3b93b8d06 100644 --- a/Foundation/CPURLRequest.j +++ b/Foundation/CPURLRequest.j @@ -40,6 +40,7 @@ // FIXME: this should be CPData CPString _HTTPBody @accessors(property=HTTPBody); CPString _HTTPMethod @accessors(property=HTTPMethod); + BOOL _withCredentials @accessors(property=withCredentials); CPDictionary _HTTPHeaderFields @accessors(readonly, getter=allHTTPHeaderFields); } diff --git a/Objective-J/CFHTTPRequest.js b/Objective-J/CFHTTPRequest.js index 6186dc80f..37bdf61e8 100644 --- a/Objective-J/CFHTTPRequest.js +++ b/Objective-J/CFHTTPRequest.js @@ -103,6 +103,9 @@ GLOBAL(CFHTTPRequest) = function() this._eventDispatcher = new EventDispatcher(this); this._nativeRequest = new NativeRequest(); + // by default, all requests will assume that credentials should not be sent. + this._nativeRequest.withCredentials = false; + var self = this; this._stateChangeHandler = function() { @@ -279,7 +282,7 @@ CFHTTPRequest.prototype.setWithCredentials = function(/*Boolean*/ willSendWithCr this._nativeRequest.withCredentials = willSendWithCredentials; }; -CFHTTPRequest.prototype.getWithCredentials = function() +CFHTTPRequest.prototype.withCredentials = function() { return this._nativeRequest.withCredentials; }; From cd2e9e29d4c0b99c702c54c105ec7d1790dfe34a Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 4 Dec 2014 16:37:34 -0500 Subject: [PATCH 187/234] Tests: Fixed tests for withCredentials --- Tests/Foundation/CPURLConnectionTest.j | 6 ------ Tests/Objective-J/CFHTTPRequestTest.j | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Tests/Foundation/CPURLConnectionTest.j b/Tests/Foundation/CPURLConnectionTest.j index 91df094d3..a7486abac 100644 --- a/Tests/Foundation/CPURLConnectionTest.j +++ b/Tests/Foundation/CPURLConnectionTest.j @@ -36,10 +36,4 @@ [self assertNull:data]; } -- (void)testRequestWithCredentials -{ - var connection = [CPURLConnection connectionWithRequest:[CPURLRequest requestWithURL:@"Tests/Foundation/CPURLConnectionTest.j"] delegate:self withCredentials:YES]; - [self assertTrue:[connection withCredentials]]; -} - @end diff --git a/Tests/Objective-J/CFHTTPRequestTest.j b/Tests/Objective-J/CFHTTPRequestTest.j index f6afe5a58..c10edba85 100644 --- a/Tests/Objective-J/CFHTTPRequestTest.j +++ b/Tests/Objective-J/CFHTTPRequestTest.j @@ -7,10 +7,10 @@ - (void)testSetWithCredentials { var cfHTTPRequest = new CFHTTPRequest(); - [self assertFalse:cfHTTPRequest.getWithCredentials()]; + [self assertFalse:cfHTTPRequest.withCredentials()]; cfHTTPRequest.setWithCredentials(YES); - [self assertTrue:cfHTTPRequest.getWithCredentials()]; + [self assertTrue:cfHTTPRequest.withCredentials()]; } @end From 56b613ff8a762e5fb5bae0d3fdc7d138043b25be Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 4 Dec 2014 18:05:38 -0500 Subject: [PATCH 188/234] Tests: Unit tests for CPURLRequest --- Tests/Foundation/CPURLRequestTest.j | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Tests/Foundation/CPURLRequestTest.j diff --git a/Tests/Foundation/CPURLRequestTest.j b/Tests/Foundation/CPURLRequestTest.j new file mode 100644 index 000000000..2c9cbdb72 --- /dev/null +++ b/Tests/Foundation/CPURLRequestTest.j @@ -0,0 +1,30 @@ +@import + + +var exampleURL = "http://www.cappuccino-project.org"; + +@implementation CPURLRequestTest : OJTestCase +{ +} + +- (void)testClassMethods +{ + var url = [CPURL URLWithString:exampleURL], + req = [CPURLRequest requestWithURL:url]; + + [self assert:[req HTTPMethod] equals:@"GET"]; + [self assert:[req URL] equals:url]; +} + +- (void)testWithCredentials +{ + var url = [CPURL URLWithString:exampleURL], + req = [CPURLRequest requestWithURL:url]; + + [self assertFalse:[req withCredentials]]; + + [req setWithCredentials:YES]; + [self assertTrue:[req withCredentials]]; +} + +@end \ No newline at end of file From 2db9fd9657f7c3955729aac886df344a1ea91a13 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 4 Dec 2014 18:06:02 -0500 Subject: [PATCH 189/234] Test: Expand Unit tests for CPURLConnection These tests cover new methods added to CPURLConnection --- Tests/Foundation/CPURLConnectionTest.j | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Tests/Foundation/CPURLConnectionTest.j b/Tests/Foundation/CPURLConnectionTest.j index a7486abac..8d176c9e7 100644 --- a/Tests/Foundation/CPURLConnectionTest.j +++ b/Tests/Foundation/CPURLConnectionTest.j @@ -1,3 +1,4 @@ +@import @implementation CPURLConnectionTest : OJTestCase { @@ -36,4 +37,40 @@ [self assertNull:data]; } +- (void)testClassMethodConnectionWithCredentials +{ + var req = [CPURLRequest requestWithURL:[CPURL URLWithString:@"Tests/Foundation/CPURLConnectionTest.j"]]; + [req setWithCredentials:YES]; + var data = [CPURLConnection sendSynchronousRequest:req returningResponse:nil]; + + [self assertNotNull:data]; +} + +- (void)testInstanceMethodConnectionWithCredentials +{ + var req = [CPURLRequest requestWithURL:[CPURL URLWithString:@"Tests/Foundation/CPURLConnectionTest.j"]]; + [req setWithCredentials:YES]; + + var conn = [[CPURLConnection alloc] initWithRequest:req delegate:nil startImmediately:NO]; + + [self assertTrue:conn._HTTPRequest.withCredentials]; + + [req setWithCredentials:NO]; + [self assertTrue:conn._HTTPRequest.withCredentials]; +} + +- (void)testRequestGetters +{ + var req = [CPURLRequest requestWithURL:[CPURL URLWithString:@"Tests/Foundation/CPURLConnectionTest.j"]], + conn = [[CPURLConnection alloc] initWithRequest:req delegate:nil startImmediately:NO]; + + var originalRequest = [conn originalRequest], + currentRequest = [conn currentRequest]; + + [self assert:originalRequest._UID notEqual:currentRequest._UID]; + + [[conn currentRequest] setWithCredentials:YES]; + [self assert:[originalRequest withCredentials] notEqual:[currentRequest withCredentials]]; +} + @end From c7397187106cdeaade9517355c6bb44dd7b7189b Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 4 Dec 2014 18:08:54 -0500 Subject: [PATCH 190/234] New: CPURLConnection now has the originalRequest and currentRequest methods Previously, CPURLConnection did not implement the originalRequest and currentRequest methods (added to Cocoa in 10.8). This commit adds this functionality. NB: this is dependent on CPURLRequest having deep-copy capabilities to make a copy of the original request, which has been added in another commit on this pull request. --- Foundation/CPURLConnection.j | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index 7c4cfd81e..5a4f09f26 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -76,7 +76,8 @@ var CPURLConnectionDelegate = nil; */ @implementation CPURLConnection : CPObject { - CPURLRequest _request; + CPURLRequest _originalRequest @accessors(readonly, getter=originalRequest); + CPURLRequest _request @accessors(readonly, getter=currentRequest); id _delegate; BOOL _isCanceled; BOOL _isLocalFileConnection; @@ -151,6 +152,7 @@ var CPURLConnectionDelegate = nil; if (self) { _request = aRequest; + _originalRequest = [aRequest copy]; _delegate = aDelegate; _isCanceled = NO; From c22cf71099db2867691694dd96b4616a0c9f1458 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 4 Dec 2014 18:11:10 -0500 Subject: [PATCH 191/234] New: Added CPCopying protocol to CPURLRequest Previously it was not possible to deep-copy a CPURLRequest, which meant that a CPURLConnection could not keep track of both the original and modified versions of a request. This commit adds the copy method to CPURLRequest. --- Foundation/CPURLRequest.j | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Foundation/CPURLRequest.j b/Foundation/CPURLRequest.j index 3b93b8d06..c3d9aa40b 100644 --- a/Foundation/CPURLRequest.j +++ b/Foundation/CPURLRequest.j @@ -119,3 +119,23 @@ } @end + +/* + Implements the CPCopying Protocol for a CPURLRequest to provide deep copying for CPURLRequests +*/ +@implementation CPURLRequest (CPCopying) +{ +} + +- (id)copy +{ + var request = [[CPURLRequest alloc] initWithURL:[self URL]]; + [request setHTTPBody:[self HTTPBody]]; + [request setHTTPMethod:[self HTTPMethod]]; + [request setWithCredentials:[self withCredentials]]; + request._HTTPHeaderFields = [self allHTTPHeaderFields]; + + return request; +} + +@end From 2a16fb5e097a7a74c7a6fb001faf65e435c7e639 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 4 Dec 2014 18:11:38 -0500 Subject: [PATCH 192/234] Fixed: Properly initialize the _withCredentials variable in CPURLRequest --- Foundation/CPURLRequest.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Foundation/CPURLRequest.j b/Foundation/CPURLRequest.j index c3d9aa40b..8d6a39e3b 100644 --- a/Foundation/CPURLRequest.j +++ b/Foundation/CPURLRequest.j @@ -80,6 +80,7 @@ _HTTPBody = @""; _HTTPMethod = @"GET"; _HTTPHeaderFields = @{}; + _withCredentials = NO; [self setValue:"Thu, 01 Jan 1970 00:00:00 GMT" forHTTPHeaderField:"If-Modified-Since"]; [self setValue:"no-cache" forHTTPHeaderField:"Cache-Control"]; From 0f4a938dfc4ef7c94331d46b6c3aaa0810cef83d Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 5 Dec 2014 09:50:49 -0800 Subject: [PATCH 193/234] Fixed: attributes of the listDelegate of a CPComboBox could crash cappuccino --- AppKit/CPComboBox.j | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index bfc7887ef..a9bc2353f 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -160,7 +160,7 @@ var CPComboBoxTextSubview = @"text", - (void)setIntercellSpacing:(CGSize)aSize { - if (!aSize || (_intercellSpacing && CGSizeEqualToSize(aSize, _intercellSpacing))) + if (_intercellSpacing && CGSizeEqualToSize(aSize, _intercellSpacing)) return; _intercellSpacing = aSize; @@ -408,9 +408,12 @@ var CPComboBoxTextSubview = @"text", [_listDelegate setFont:[self font]]; [_listDelegate setAlignment:[self alignment]]; - [self setHasVerticalScroller:_hasVerticalScroller]; - [self setIntercellSpacing:_intercellSpacing]; - [self setItemHeight:_itemHeight]; + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + + if (_intercellSpacing) + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; + + [[_listDelegate tableView] setRowHeight:_itemHeight]; } - (void)_addObserversForListDelegate:(_CPPopUpList)aDelegate From 4ebb2baf06c250d8b442b484bc2d9b42ec2f6c6f Mon Sep 17 00:00:00 2001 From: kevin-xu Date: Mon, 8 Dec 2014 22:00:02 +0800 Subject: [PATCH 194/234] New: Highlighted "@typedef" in VIM. "@typedef" should be highlighted since #2254. --- Tools/Editors/Vim/objj.vim | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/Editors/Vim/objj.vim b/Tools/Editors/Vim/objj.vim index e42d14c8a..a6d9d5028 100644 --- a/Tools/Editors/Vim/objj.vim +++ b/Tools/Editors/Vim/objj.vim @@ -68,6 +68,7 @@ syn match objjImported display contained "<[-_0-9a-zA-Z.\/]*>" syn match objjImport display "^\s*\(%:\|#\|@\)\s*import\>\s*["<]" contains=objjImported " Match the important ObjJ directives +syn match objjDirective "@typedef" syn match objjDirective "@interface\|@implementation\|@protocol\|@end" syn match objjScopeDecl "@public\|@protected\|@private\|@package" syn match objjScopeDecl "@required\|@optional" From cb5fe06e58c86655131a0b516295338a8af6900f Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 8 Dec 2014 15:29:28 -0800 Subject: [PATCH 195/234] Fixed: button are always removed from the superview in layoutSubviews Previously, the button of a CPButtonBar were always removed and readded in the method layoutSubviews. Now we only remove the hidden button. --- AppKit/CPButtonBar.j | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index 024924830..47f869597 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -234,10 +234,11 @@ { var button = buttonsNotHidden[count]; - [button removeFromSuperview]; - if ([button isHidden]) + { + [button removeFromSuperview]; [buttonsNotHidden removeObject:button]; + } } var currentButtonOffset = _resizeControlIsLeftAligned ? CGRectGetMaxX([self bounds]) + 1 : -1, From 8b29369b7edd1ff2a113f59ded59c3ff3cf206a4 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 8 Dec 2014 15:36:31 -0800 Subject: [PATCH 196/234] Fixed: wrong option for the observer in _CPPopoverWindow Previously the option of the observer in _CPPopoverWindow were set to 0, now it's set to CPKeyValueObservingOptionNew. This PR fix also another issue, the popoverWindow registered the observer in the wrong order. It firstly observed the frame of the sender and then removed it directly. Now it register when ordering front the popover and remove it when closing the popover --- AppKit/_CPPopoverWindow.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 818ae6d60..bcadedcee 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -180,7 +180,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return; _isObservingFrame = YES; - [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; + [_targetView addObserver:self forKeyPath:@"frame" options:CPKeyValueObservingOptionNew context:nil]; } /*! @@ -207,7 +207,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return; var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; - [self setFrameOrigin:point]; } } @@ -362,7 +361,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self setFrameOrigin:point]; [_windowView showCursor]; [_windowView setNeedsDisplay:YES]; - [self makeKeyAndOrderFront:nil]; if (positioningView !== _targetView) { @@ -371,6 +369,8 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } + [self makeKeyAndOrderFront:nil]; + /* If _targetView's window is not a full platform window, add us as a child, because when we close we are detached from From b74d49b0bf66875ece3fef694af2c3da2e8815f1 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 8 Dec 2014 15:54:25 -0800 Subject: [PATCH 197/234] Fixed: changed option for observer in _CPPopoverWindow.j --- AppKit/_CPPopoverWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index bcadedcee..ce2a7898b 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -180,7 +180,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return; _isObservingFrame = YES; - [_targetView addObserver:self forKeyPath:@"frame" options:CPKeyValueObservingOptionNew context:nil]; + [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; } /*! From 1016c3e22f431f5972a23e2acb43a2b54a879263 Mon Sep 17 00:00:00 2001 From: Christophe Serafin Date: Mon, 8 Dec 2014 18:54:35 -0800 Subject: [PATCH 198/234] Fix controls' heights that are displayed in CPPredicateEditor Lastly, we removed the usage of max-size to enable some controls like CPTextField to have a specific height. This may caused a CPTextField to have a wrong height. As all controls in a CPPredicateEditor have a CPControlSize to small, we now force their height to the minimum size. --- AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j index 30470d5c6..80509dd16 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j @@ -122,8 +122,8 @@ { var title = [[itemsArray objectAtIndex:index] title], font = [_ruleEditor font], - width = [title sizeWithFont:font].width + 20, - rect = CGRectMake(0, 0, (width - width % 40) + 80, [_ruleEditor rowHeight]), + width = [title sizeWithFont:font].width + 35, // 35 for right arrows + margins + rect = CGRectMake(0, 0, width, [_ruleEditor rowHeight]), popup = [[CPPopUpButton alloc] initWithFrame:rect]; [popup setValue:font forThemeAttribute:@"font"]; @@ -315,8 +315,14 @@ { [ruleView setControlSize:CPSmallControlSize]; + var minSize = [ruleView currentValueForThemeAttribute:@"min-size"], + frame = [ruleView frame]; + + // Force controls to their minimum size + frame.size.height = minSize.height; + [ruleView setFrame:frame]; + [_ruleOptionViews addObject:ruleView]; - var frame = [ruleView frame]; [_ruleOptionInitialViewFrames addObject:frame]; [_ruleOptionFrames addObject:frame]; From 642dc36c4197dcf06ecdf097ca5e9884852b9b6e Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Tue, 9 Dec 2014 16:07:43 -0500 Subject: [PATCH 199/234] Test: Cross Origin Manual Test This commit adds a manual testing application for checking Cross-origin behaviour in different browsers. A README file included in this application provides details on how to run the tests. --- Tests/Manual/CrossOriginTest/AppController.j | 78 + Tests/Manual/CrossOriginTest/Info.plist | 14 + Tests/Manual/CrossOriginTest/Jakefile | 184 ++ Tests/Manual/CrossOriginTest/README.md | 45 + .../CrossOriginTest/Resources/MainMenu.xib | 1759 +++++++++++++++++ Tests/Manual/CrossOriginTest/cors-server.py | 44 + Tests/Manual/CrossOriginTest/index-debug.html | 191 ++ Tests/Manual/CrossOriginTest/index.html | 161 ++ Tests/Manual/CrossOriginTest/main.j | 18 + Tests/Manual/CrossOriginTest/resp.json | 1 + 10 files changed, 2495 insertions(+) create mode 100644 Tests/Manual/CrossOriginTest/AppController.j create mode 100644 Tests/Manual/CrossOriginTest/Info.plist create mode 100644 Tests/Manual/CrossOriginTest/Jakefile create mode 100644 Tests/Manual/CrossOriginTest/README.md create mode 100644 Tests/Manual/CrossOriginTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CrossOriginTest/cors-server.py create mode 100644 Tests/Manual/CrossOriginTest/index-debug.html create mode 100644 Tests/Manual/CrossOriginTest/index.html create mode 100644 Tests/Manual/CrossOriginTest/main.j create mode 100644 Tests/Manual/CrossOriginTest/resp.json diff --git a/Tests/Manual/CrossOriginTest/AppController.j b/Tests/Manual/CrossOriginTest/AppController.j new file mode 100644 index 000000000..2d3781175 --- /dev/null +++ b/Tests/Manual/CrossOriginTest/AppController.j @@ -0,0 +1,78 @@ +/* + * AppController.j + * CrossOriginTest + * + * Created by You on December 5, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + +var corsServer = "http://localhost:8001"; + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + @outlet CPButton theButton; + @outlet CPButton setsWithCredentials; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ +} + +- (void)awakeFromCib +{ + // This is called when the cib is done loading. + // You can implement this method on any object instantiated from a Cib. + // It's a useful hook for setting up current UI values, and other things. + + // In this case, we want the window from Cib to become our full browser window + [theWindow setFullPlatformWindow:YES]; +} + +-(void)connection:(CPURLConnection)connection didReceiveResponse:(CPHTTPURLResponse)response +{ + console.log("Response received"); +} + +-(void)connection:(CPURLConnection)connection didReceiveData:(CPString)data +{ + var wc = ([[connection originalRequest] withCredentials]) ? "YES" : "NO" + console.log("CPURLConnection was sent with credentials? " + wc + " Response: " + data); +} + +- (@action)stateOfWithCredentials:(id)aSender +{ + console.log([setsWithCredentials state]); +} + +- (@action)testCappuccinoRequest:(id)aSender +{ + var req = [CPURLRequest requestWithURL:[CPURL URLWithString:corsServer + @"/resp.json"]]; + [req setValue:@"no-cache" forHTTPHeaderField:@"Pragma"]; + [req setValue:@"no-store, no-cache, must-revalidate, post-check=0, pre-check=0" forHTTPHeaderField:@"Cache-Control"]; + [req setWithCredentials:[setsWithCredentials state]]; + [[CPURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES]; +} + +- (@action)testNativeRequest:(id)aSender +{ + var wc = ([setsWithCredentials state]) ? true : false; + var req = new XMLHttpRequest(); + function reqListener () + { + console.log("Native XHR was sent with credentials? " + wc + " Response: " + this.responseText); + } + + req.onload = reqListener; + req.withCredentials = wc; + req.open("GET", corsServer + "/resp.json", true); + req.setRequestHeader("Pragma", "no-cache"); + req.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); + + req.send(); +} + +@end diff --git a/Tests/Manual/CrossOriginTest/Info.plist b/Tests/Manual/CrossOriginTest/Info.plist new file mode 100644 index 000000000..2074fa146 --- /dev/null +++ b/Tests/Manual/CrossOriginTest/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CrossOriginTest + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, Your Company All rights reserved. + + diff --git a/Tests/Manual/CrossOriginTest/Jakefile b/Tests/Manual/CrossOriginTest/Jakefile new file mode 100644 index 000000000..6a448e9b0 --- /dev/null +++ b/Tests/Manual/CrossOriginTest/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CrossOriginTest + * + * Created by You on December 9, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CrossOriginTest"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CrossOriginTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CrossOriginTest"); + task.setIdentifier("com.yourcompany.CrossOriginTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CrossOriginTest"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + configuration = ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + configuration = ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CrossOriginTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CrossOriginTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (configuration === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CrossOriginTest/README.md b/Tests/Manual/CrossOriginTest/README.md new file mode 100644 index 000000000..6c50ecada --- /dev/null +++ b/Tests/Manual/CrossOriginTest/README.md @@ -0,0 +1,45 @@ +This test checks the withCredentials CORS functionality with Cappuccino. + +Running the test: + +You will need to start two HTTP Servers; one on localhost:8000, and one on localhost:8001. + +The first: + +`$> python -m SimpleHTTPServer` // starts it on 8000 + +In another terminal window: + +`$> python cors-server.py` // starts another on 8001 + +Visit http://localhost:8000 in your web browser. There are two buttons and a checkbox. + +One button will issue a native XMLHTTPRequest. The other will issue a CPURLConnection request. The checkbox will control whether the withCredentials option is set on both types of requests. + +With the checkbox checked, you should press either of the buttons. In the terminal with the 'cors-server.py' script running you will see output that should match the following: + +``` +INFO:root:CORS: With Credentials +127.0.0.1 - - [05/Dec/2014 18:44:48] "GET /resp.json HTTP/1.1" 200 - +``` + +If you uncheck the checkbox, you should see the following: + +``` +INFO:root:CORS: No Credentials +127.0.0.1 - - [05/Dec/2014 18:44:56] "GET /resp.json HTTP/1.1" 200 - +``` + +This error message is controlled by the presence of the 'Cookies' header. + +NOTE: The cors-server.py will set a cookie for you (mycookie=cappuccino!), but only after the first request. If you don't have a cookie set for localhost, the server message will show 'No Credentials' on the first request since the Cookie header is not set. Subsequent requests will behave correctly. + +The browser console will also provide some status information about the request and response. + +# A note about IE** + +As best I can tell, IE behaves differently than all other browsers. I have tested this in Chrome and Firefox on Mac & Windows, Safari on Mac, IE11 on Windows. In this test, unchecking the 'With Credentials' will tell the browser to not send a cookie to the server if the server and client are not on the same host. However, in IE, it will pass the cookie along if the server and host are on the same top domain, but not necessarily the same host. The corollary of this is that if the two servers are on different domains, the `withCredentials` setting in IE does absolutely nothing. + +To get it to work, you must instruct your users to adjust their cookie privacy settings and allow third-party cookies. This seemed to work for me, but dynamically adjusting the `withCredentials` parameter did nothing with this on -- IE always sent the cookies if it was configured to do so. + +* What, you expected IE to actually work like the rest of the world? \ No newline at end of file diff --git a/Tests/Manual/CrossOriginTest/Resources/MainMenu.xib b/Tests/Manual/CrossOriginTest/Resources/MainMenu.xib new file mode 100644 index 000000000..a9914bcd6 --- /dev/null +++ b/Tests/Manual/CrossOriginTest/Resources/MainMenu.xib @@ -0,0 +1,1759 @@ + + + + 1050 + 14B25 + 6250 + 1343.16 + 755.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 6250 + + + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + + NewApplication + + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + + Spelling and Grammar + + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + + Substitutions + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + + Help + + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 7 + 2 + {{335, 390}, {480, 360}} + 1946157056 + Window + NSWindow + + + + + 256 + + + + 268 + {{142, 196}, {197, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Native XMLHTTPRequest + + YES + 13 + 1044 + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{133, 163}, {215, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Cappuccino CPURLRequest + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{178, 272}, {124, 18}} + + + + _NS:9 + YES + + -2080374784 + 268435456 + With Credentials + + _NS:9 + + 1211912448 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + NO + + + {480, 360} + + + + + {{0, 0}, {1920, 1177}} + {10000000000000, 10000000000000} + YES + + + AppController + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + theButton + + + + 462 + + + + theWindow + + + + 463 + + + + setsWithCredentials + + + + 471 + + + + stateOfWithCredentials: + + + + 472 + + + + testNativeRequest: + + + + 473 + + + + testCappuccinoRequest: + + + + 474 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + MainMenu + + + 19 + + + + + + + + 56 + + + + + + + + 103 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + 75 + + + + + 80 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + + + + + + 111 + + + + + 57 + + + + + + + + + + + + 58 + + + + + 136 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + + + + + + 450 + + + + + 460 + + + + + + + + 461 + + + + + 465 + + + + + + + + 466 + + + + + 468 + + + + + + + + 469 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 474 + + + + + AppController + NSObject + + id + id + id + + + + stateOfWithCredentials: + id + + + testCappuccinoRequest: + id + + + testNativeRequest: + id + + + + NSButton + NSButton + NSWindow + + + + setsWithCredentials + NSButton + + + theButton + NSButton + + + theWindow + NSWindow + + + + IBProjectSource + ../.XcodeSupport/AppController.h + + + + + 0 + IBCocoaFramework + NO + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + {12, 12} + {10, 2} + {15, 15} + + + diff --git a/Tests/Manual/CrossOriginTest/cors-server.py b/Tests/Manual/CrossOriginTest/cors-server.py new file mode 100644 index 000000000..937f2188a --- /dev/null +++ b/Tests/Manual/CrossOriginTest/cors-server.py @@ -0,0 +1,44 @@ +import SimpleHTTPServer +import SocketServer +import logging +import cgi + +logging.basicConfig(level=logging.INFO) +PORT = 8001 + +class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): + + def end_headers (self): + self.send_header('Set-Cookie', 'mycookie=cappuccino!') + self.send_header('Access-Control-Allow-Origin', 'http://142.157.142.237:8000') + self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS') + self.send_header("Access-Control-Allow-Headers", "X-Requested-With, If-Modified-Since, Cache-Control, Pragma") + self.send_header('Access-Control-Allow-Credentials', 'true') + SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self) + + def do_OPTIONS(self): + logging.info("OPTIONS Request") + self.send_response(204, "No Content") + self.send_header('Access-Control-Allow-Origin', 'http://142.157.142.237:8000') + self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS') + self.send_header("Access-Control-Allow-Headers", "X-Requested-With, If-Modified-Since, Cache-Control, Pragma") + self.send_header('Access-Control-Allow-Credentials', 'true') + self.send_header("Access-Control-Max-Age", 10) + self.send_header("content-length", 0) + + def do_GET(self): + try: + self.headers['Cookie'] + logging.info("CORS: With Credentials") + logging.info(self.headers['Cookie']) + except KeyError, e: + logging.info("CORS: No Credentials") + SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) + +Handler = ServerHandler + +SocketServer.TCPServer.allow_reuse_address = True +httpd = SocketServer.TCPServer(("0.0.0.0", PORT), Handler) + +print "serving at port", PORT +httpd.serve_forever() \ No newline at end of file diff --git a/Tests/Manual/CrossOriginTest/index-debug.html b/Tests/Manual/CrossOriginTest/index-debug.html new file mode 100644 index 000000000..59a519b3d --- /dev/null +++ b/Tests/Manual/CrossOriginTest/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + TestIEWithCredentials + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CrossOriginTest/index.html b/Tests/Manual/CrossOriginTest/index.html new file mode 100644 index 000000000..b38196c63 --- /dev/null +++ b/Tests/Manual/CrossOriginTest/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CrossOriginTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CrossOriginTest/main.j b/Tests/Manual/CrossOriginTest/main.j new file mode 100644 index 000000000..fb705f3f3 --- /dev/null +++ b/Tests/Manual/CrossOriginTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CrossOriginTest + * + * Created by You on December 9, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/CrossOriginTest/resp.json b/Tests/Manual/CrossOriginTest/resp.json new file mode 100644 index 000000000..5d76ff1e6 --- /dev/null +++ b/Tests/Manual/CrossOriginTest/resp.json @@ -0,0 +1 @@ +{"response": "ok"} \ No newline at end of file From 9174338140a29ac6b79b0fde71ee9567411cccf9 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 9 Dec 2014 17:26:02 -0800 Subject: [PATCH 200/234] Fixed: CPDatePicker takes key code CPReturnKeyCode all the time Previously, the CPDatePicker took the key code CPReturnKeyCode all the time. It means, the key event wasn't redistributed to the other component, for example a defaultButton in a window. Now instead of returning YES, it returns [super performKeyEquivalent:anEvent] --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 8fa09afce..07889ca4e 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -338,10 +338,11 @@ var CPZeroKeyCode = 48, if ([anEvent keyCode] == CPReturnKeyCode) { [_currentTextField _endEditing]; - return YES; + + return [super performKeyEquivalent:anEvent]; } - return NO; + return [super performKeyEquivalent:anEvent]; } /*! KeyDown event From 92b997fb78b25f77f228edbb84f8db5c766b0f1b Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 9 Dec 2014 19:04:12 -0800 Subject: [PATCH 201/234] Fixed: crash when dragging the first line of a RuleEditor above the field Any Previously, cappuccino crashed when dragging the first line of a CPRuleEditor above the field any. Now we make sure, we can not drag over this limit. --- AppKit/CPRuleEditor/CPRuleEditor.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPRuleEditor/CPRuleEditor.j b/AppKit/CPRuleEditor/CPRuleEditor.j index a02b8efe7..404c5546e 100644 --- a/AppKit/CPRuleEditor/CPRuleEditor.j +++ b/AppKit/CPRuleEditor/CPRuleEditor.j @@ -2207,7 +2207,7 @@ TODO: implement indexOfDropLine = FLOOR(y / _sliceHeight), numberOfRows = [self numberOfRows]; - if (indexOfDropLine < 0 || indexOfDropLine > numberOfRows || (indexOfDropLine >= [_draggingRows firstIndex] && indexOfDropLine <= [_draggingRows lastIndex] + 1)) + if (indexOfDropLine <= 0 || indexOfDropLine > numberOfRows || (indexOfDropLine >= [_draggingRows firstIndex] && indexOfDropLine <= [_draggingRows lastIndex] + 1)) { if (_subviewIndexOfDropLine !== CPNotFound && indexOfDropLine !== _subviewIndexOfDropLine) [self _clearDropLine]; From cd511da67875ee22e9a9f9642c066d024fbe3c89 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 10 Dec 2014 10:25:10 -0800 Subject: [PATCH 202/234] Fixed: used _implementedDelegateMethods in CPComboBox at the same time in CPTextField. This occured some issues with the delegate of the comboBoxDelegate when using textField delegate. This commit fix a issue about the row height of a an element in the list of the comboBox --- AppKit/CPComboBox.j | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index a9bc2353f..06b5a6b15 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -75,7 +75,7 @@ var CPComboBoxTextSubview = @"text", CGSize _intercellSpacing; CPArray _items; id _dataSource; - CPInteger _implementedDelegateMethods; + CPInteger _implementedDelegateComboBoxMethods; CPString _selectedStringValue; float _itemHeight; int _numberOfVisibleItems; @@ -234,19 +234,21 @@ var CPComboBoxTextSubview = @"text", if (aDelegate === delegate) return; + _implementedDelegateComboBoxMethods = 0; + if (aDelegate) { if ([aDelegate respondsToSelector:@selector(comboBoxSelectionIsChanging:)]) - _implementedDelegateMethods |= CPComboBoxDelegate_comboBoxSelectionIsChanging_ + _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxSelectionIsChanging_ if ([aDelegate respondsToSelector:@selector(comboBoxSelectionDidChange:)]) - _implementedDelegateMethods |= CPComboBoxDelegate_comboBoxSelectionDidChange_ + _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxSelectionDidChange_ if ([aDelegate respondsToSelector:@selector(comboBoxWillPopUp:)]) - _implementedDelegateMethods |= CPComboBoxDelegate_comboBoxWillPopUp_ + _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxWillPopUp_ if ([aDelegate respondsToSelector:@selector(comboBoxWillDismiss:)]) - _implementedDelegateMethods |= CPComboBoxDelegate_comboBoxWillDismiss_ + _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxWillDismiss_ } [super setDelegate:aDelegate]; @@ -413,7 +415,8 @@ var CPComboBoxTextSubview = @"text", if (_intercellSpacing) [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; - [[_listDelegate tableView] setRowHeight:_itemHeight]; + if (_itemHeight) + [[_listDelegate tableView] setRowHeight:_itemHeight]; } - (void)_addObserversForListDelegate:(_CPPopUpList)aDelegate @@ -1031,7 +1034,7 @@ var CPComboBoxTextSubview = @"text", /*! @ignore */ - (void)comboBoxSelectionIsChanging:(CPNotification)aNotification { - if (_implementedDelegateMethods & CPComboBoxDelegate_comboBoxSelectionIsChanging_) + if (_implementedDelegateComboBoxMethods & CPComboBoxDelegate_comboBoxSelectionIsChanging_) [_delegate comboBoxSelectionIsChanging:[[CPNotification alloc] initWithName:CPComboBoxSelectionIsChangingNotification object:self userInfo:nil]]; [[CPNotificationCenter defaultCenter] postNotificationName:CPComboBoxSelectionIsChangingNotification object:self]; @@ -1040,7 +1043,7 @@ var CPComboBoxTextSubview = @"text", /*! @ignore */ - (void)comboBoxSelectionDidChange:(CPNotification)aNotification { - if (_implementedDelegateMethods & CPComboBoxDelegate_comboBoxSelectionDidChange_) + if (_implementedDelegateComboBoxMethods & CPComboBoxDelegate_comboBoxSelectionDidChange_) [_delegate comboBoxSelectionDidChange:[[CPNotification alloc] initWithName:CPComboBoxSelectionDidChangeNotification object:self userInfo:nil]]; [[CPNotificationCenter defaultCenter] postNotificationName:CPComboBoxSelectionDidChangeNotification object:self]; @@ -1049,7 +1052,7 @@ var CPComboBoxTextSubview = @"text", /*! @ignore */ - (void)comboBoxWillPopUp:(CPNotification)aNotification { - if (_implementedDelegateMethods & CPComboBoxDelegate_comboBoxWillPopUp_) + if (_implementedDelegateComboBoxMethods & CPComboBoxDelegate_comboBoxWillPopUp_) [_delegate comboBoxWillPopUp:[[CPNotification alloc] initWithName:CPComboBoxWillPopUpNotification object:self userInfo:nil]]; [[CPNotificationCenter defaultCenter] postNotificationName:CPComboBoxWillPopUpNotification object:self]; @@ -1058,7 +1061,9 @@ var CPComboBoxTextSubview = @"text", /*! @ignore */ - (void)comboBoxWillDismiss:(CPNotification)aNotification { - if (_implementedDelegateMethods & CPComboBoxDelegate_comboBoxWillDismiss_) + console.error(@"coucou"); + + if (_implementedDelegateComboBoxMethods & CPComboBoxDelegate_comboBoxWillDismiss_) [_delegate comboBoxWillDismiss:[[CPNotification alloc] initWithName:CPComboBoxWillDismissNotification object:self userInfo:nil]]; [[CPNotificationCenter defaultCenter] postNotificationName:CPComboBoxWillDismissNotification object:self]; From 5b4bddc2e0cd73fea395b128f94692c58ac0cd6d Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 10 Dec 2014 10:29:46 -0800 Subject: [PATCH 203/234] Fixed: removed stupid console.error(coucou).... --- AppKit/CPComboBox.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 06b5a6b15..18ef6487e 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -1061,8 +1061,6 @@ var CPComboBoxTextSubview = @"text", /*! @ignore */ - (void)comboBoxWillDismiss:(CPNotification)aNotification { - console.error(@"coucou"); - if (_implementedDelegateComboBoxMethods & CPComboBoxDelegate_comboBoxWillDismiss_) [_delegate comboBoxWillDismiss:[[CPNotification alloc] initWithName:CPComboBoxWillDismissNotification object:self userInfo:nil]]; From 47cced540e8e0cc1d0daa0d054154511271fd2bd Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 10 Dec 2014 10:31:38 -0800 Subject: [PATCH 204/234] Style: added missing semi-colon in CPComboBox --- AppKit/CPComboBox.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 18ef6487e..f6d094eb1 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -239,16 +239,16 @@ var CPComboBoxTextSubview = @"text", if (aDelegate) { if ([aDelegate respondsToSelector:@selector(comboBoxSelectionIsChanging:)]) - _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxSelectionIsChanging_ + _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxSelectionIsChanging_; if ([aDelegate respondsToSelector:@selector(comboBoxSelectionDidChange:)]) - _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxSelectionDidChange_ + _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxSelectionDidChange_; if ([aDelegate respondsToSelector:@selector(comboBoxWillPopUp:)]) - _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxWillPopUp_ + _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxWillPopUp_; if ([aDelegate respondsToSelector:@selector(comboBoxWillDismiss:)]) - _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxWillDismiss_ + _implementedDelegateComboBoxMethods |= CPComboBoxDelegate_comboBoxWillDismiss_; } [super setDelegate:aDelegate]; From 873232d5606af86299a3ae278d9320bd29d85c57 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Tue, 16 Dec 2014 18:43:08 +0100 Subject: [PATCH 205/234] FIXED : a CPOperation marked as cancelled was never started (CPOperation -start) when managed in a queue. FIXED : After an operation started, either from a queue or explicitely, its finished property was never set to true. This was causing dependant operation to never be executed. After this commit, cancelled operations are started (but not executed) and correctly marked as finished. Tests: CPOperationQueueTest and CPOperationTest for an operation managed by a queue or run explicitely. --- Foundation/CPOperation.j | 7 ++-- Foundation/CPOperationQueue.j | 4 +- Tests/Foundation/CPOperationQueueTest.j | 50 +++++++++++++++++++++++++ Tests/Foundation/CPOperationTest.j | 17 +++++++++ 4 files changed, 73 insertions(+), 5 deletions(-) diff --git a/Foundation/CPOperation.j b/Foundation/CPOperation.j index 4fbdd5612..b0b8a6154 100644 --- a/Foundation/CPOperation.j +++ b/Foundation/CPOperation.j @@ -117,10 +117,11 @@ CPOperationQueuePriorityVeryHigh = 8; [self willChangeValueForKey:@"isExecuting"]; _executing = NO; [self didChangeValueForKey:@"isExecuting"]; - [self willChangeValueForKey:@"isFinished"]; - _finished = YES; - [self didChangeValueForKey:@"isFinished"]; } + + [self willChangeValueForKey:@"isFinished"]; + _finished = YES; + [self didChangeValueForKey:@"isFinished"]; } /*! diff --git a/Foundation/CPOperationQueue.j b/Foundation/CPOperationQueue.j index 1e018df15..de9322ce6 100644 --- a/Foundation/CPOperationQueue.j +++ b/Foundation/CPOperationQueue.j @@ -70,7 +70,7 @@ var cpOperationMainQueue = nil; for (; i < count; i++) { var op = [_operations objectAtIndex:i]; - if ([op isReady] && ![op isCancelled] && ![op isFinished] && ![op isExecuting]) + if ([op isReady] && ![op isFinished] && ![op isExecuting]) { [op start]; } @@ -260,7 +260,7 @@ var cpOperationMainQueue = nil; for (; i < count; i++) { var op = [ops objectAtIndex:i]; - if ([op isReady] && ![op isCancelled] && ![op isFinished] && ![op isExecuting]) + if ([op isReady] && ![op isFinished] && ![op isExecuting]) { [op start]; } diff --git a/Tests/Foundation/CPOperationQueueTest.j b/Tests/Foundation/CPOperationQueueTest.j index 0cc5de666..23bea619e 100644 --- a/Tests/Foundation/CPOperationQueueTest.j +++ b/Tests/Foundation/CPOperationQueueTest.j @@ -16,6 +16,33 @@ globalResults = []; @end +@implementation TestOperation2 : CPOperation +{ + BOOL _started @accessors(getter=didStart); + BOOL _mained @accessors(getter=didMain); +} + +- (id)init +{ + self = [super init]; + _started = NO; + _mained = NO; + return self; +} + +- (void)main +{ + _mained = YES; +} + +- (void)start +{ + [super start]; + _started = YES; +} + +@end + @implementation TestObserver : CPObject { CPArray changedKeyPaths @accessors; @@ -167,4 +194,27 @@ globalResults = []; [self assert:@"name" equals:[[obs changedKeyPaths] objectAtIndex:4]]; } +- (void)testCancelledOperationDoesStart +{ + var op = [[TestOperation2 alloc] init], + queue = [[CPOperationQueue alloc] init]; + + [self assertFalse:[op isCancelled]]; + [self assertFalse:[op isFinished]]; + [self assertFalse:[op didMain]]; + [self assertFalse:[op didStart]]; + + [op cancel]; + + [self assertTrue:[op isCancelled]]; + [self assertFalse:[op isFinished]]; + + [queue addOperations:[op] waitUntilFinished:YES]; + + [self assertFalse:[op didMain]]; + [self assertTrue:[op didStart]]; + [self assertTrue:[op isCancelled]]; + [self assertTrue:[op isFinished]]; +} + @end \ No newline at end of file diff --git a/Tests/Foundation/CPOperationTest.j b/Tests/Foundation/CPOperationTest.j index 1c1beef56..ea424ef56 100644 --- a/Tests/Foundation/CPOperationTest.j +++ b/Tests/Foundation/CPOperationTest.j @@ -180,4 +180,21 @@ [self assert:@"isCancelled" equals:[[obs changedKeyPaths] objectAtIndex:9]]; } +- (void)testCancelledOperationIsFinished +{ + var results = @[], + funcOp = [CPFunctionOperation functionOperationWithFunction:function() {[results addObject:"funcOp"];}]; + + [funcOp cancel]; + [self assertTrue:[funcOp isCancelled]]; + [self assertFalse:[funcOp isFinished]]; + + [funcOp start]; + + [self assertTrue:[funcOp isCancelled]]; + [self assertTrue:[funcOp isFinished]]; + + [self assertTrue:([results count] == 0)]; +} + @end From e407eeea4069d92cb7b1d59d7a42b5b58a15835f Mon Sep 17 00:00:00 2001 From: cacaodev Date: Tue, 16 Dec 2014 21:43:19 +0100 Subject: [PATCH 206/234] FIXED : travis build --- Tests/Foundation/CPOperationQueueTest.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/Foundation/CPOperationQueueTest.j b/Tests/Foundation/CPOperationQueueTest.j index 23bea619e..5005a1ae7 100644 --- a/Tests/Foundation/CPOperationQueueTest.j +++ b/Tests/Foundation/CPOperationQueueTest.j @@ -16,7 +16,7 @@ globalResults = []; @end -@implementation TestOperation2 : CPOperation +@implementation TestCancelOperation : CPOperation { BOOL _started @accessors(getter=didStart); BOOL _mained @accessors(getter=didMain); @@ -196,7 +196,7 @@ globalResults = []; - (void)testCancelledOperationDoesStart { - var op = [[TestOperation2 alloc] init], + var op = [[TestCancelOperation alloc] init], queue = [[CPOperationQueue alloc] init]; [self assertFalse:[op isCancelled]]; From a48df23252e87c74ae1f45c882735d0f5cfcbf5a Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Fri, 19 Dec 2014 13:16:05 -0500 Subject: [PATCH 207/234] New: Jake command for building a Docset This commit adds the `docset` command to jake, to create a Docset from a doxygen build. It adds a shell script to the "support" directory that manages the build, and includes an Info.plist file that gets copied to the Docset when built. --- Jakefile | 9 +++++++++ Tools/Documentation/Info.plist | 13 +++++++++++++ Tools/Documentation/support/docset.sh | 25 +++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 Tools/Documentation/Info.plist create mode 100755 Tools/Documentation/support/docset.sh diff --git a/Jakefile b/Jakefile index d88f8aa73..bdcc60c5e 100644 --- a/Jakefile +++ b/Jakefile @@ -111,6 +111,15 @@ task ("documentation-no-frame", function() generateDocs(true); }); +task ("docset", function() +{ + // generateDocs(true); + var documentationDir = FILE.canonical(FILE.join("Tools", "Documentation")), + docsetShell = FILE.join(documentationDir, "support", "docset.sh"); + + OS.system([docsetShell, documentationDir]); +}); + function generateDocs(/* boolean */ noFrame) { // try to find a doxygen executable in the PATH; diff --git a/Tools/Documentation/Info.plist b/Tools/Documentation/Info.plist new file mode 100644 index 000000000..633a5938a --- /dev/null +++ b/Tools/Documentation/Info.plist @@ -0,0 +1,13 @@ + + + + + CFBundleName + Cappuccino + CFBundleIdentifier + cappuccino + DocSetPlatformFamily + cappuccino + + diff --git a/Tools/Documentation/support/docset.sh b/Tools/Documentation/support/docset.sh new file mode 100755 index 000000000..9ef87bf2b --- /dev/null +++ b/Tools/Documentation/support/docset.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +source "$1"/support/processor_setup.sh + +processor_msg "Generating Docset" + +MAKEFILE="Build/Documentation/html/Makefile" +DOCSDIR="Build/Documentation/html" + +processor_msg "Massaging Makefile" +sed -i '.bak' 's/docsetutil index \$(DOCSET_NAME)/docsetutil index -skip-text \$(DOCSET_NAME)/g' $MAKEFILE + +pushd $DOCSDIR +processor_msg "Running Make" +make + +processor_msg "Finishing up" +mv "org.cappuccino-project.cappuccino.docset" "Cappuccino.docset" +cp "$1"/Info.plist "Cappuccino.docset/Contents" +popd + +processor_msg "Moving docset to Build/Documentation" +mv "$DOCSDIR"/Cappuccino.docset "Build/Documentation" + +processor_msg "Done" From eaa966e72ba070854644b93552dc158d6341272e Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Fri, 19 Dec 2014 15:13:16 -0500 Subject: [PATCH 208/234] Fixed: docset will generate docs before running --- Jakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jakefile b/Jakefile index bdcc60c5e..56a4e30aa 100644 --- a/Jakefile +++ b/Jakefile @@ -113,7 +113,7 @@ task ("documentation-no-frame", function() task ("docset", function() { - // generateDocs(true); + generateDocs(true); var documentationDir = FILE.canonical(FILE.join("Tools", "Documentation")), docsetShell = FILE.join(documentationDir, "support", "docset.sh"); From 9edb0abda0770b36cf2cb3fa1f7544525e7cba47 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Fri, 19 Dec 2014 15:14:08 -0500 Subject: [PATCH 209/234] Fixed: Styling is removed from build docset; Existing docset is removed before moving a new one. --- Tools/Documentation/support/docset.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Tools/Documentation/support/docset.sh b/Tools/Documentation/support/docset.sh index 9ef87bf2b..d6c47ace4 100755 --- a/Tools/Documentation/support/docset.sh +++ b/Tools/Documentation/support/docset.sh @@ -17,9 +17,21 @@ make processor_msg "Finishing up" mv "org.cappuccino-project.cappuccino.docset" "Cappuccino.docset" cp "$1"/Info.plist "Cappuccino.docset/Contents" + +processor_msg "Fixing CSS on Docset" +cd Cappuccino.docset +echo -e "open(FILE, \">>\$ARGV[0]\");\nprint FILE \"\\\n#top {display:none}\\\n#side-nav {display:none}\\\n\";\nprint \"Appended CSS to \$ARGV[0]\\\n\";\nclose(FILE);" > css.pl +find . -type f -name "*.css" -exec perl css.pl {} \; +rm -rf css.pl + popd processor_msg "Moving docset to Build/Documentation" + +if [ -d "Build/Documentation/Cappuccino.docset" ]; then + rm -rf "Build/Documentation/Cappuccino.docset" +fi + mv "$DOCSDIR"/Cappuccino.docset "Build/Documentation" processor_msg "Done" From 5995b428721dd89bbe9061d39e0c2d5ebd3d92d7 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 25 Dec 2014 17:37:18 +0100 Subject: [PATCH 210/234] fixed: popover positioning --- AppKit/_CPPopoverWindow.j | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index ce2a7898b..19bfa82ac 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -581,10 +581,12 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, - (void)_orderFront { - if (![self isVisible]) - [self _addFrameObserver]; + var wasVisible = [self isVisible]; [super _orderFront]; + + if (!wasVisible) + [self _addFrameObserver]; } - (void)_parentDidOrderInChild From 00ebc265d87f2d2cd778c31709d325ebdf174db3 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 2 Jan 2015 19:35:09 +0100 Subject: [PATCH 211/234] make _targetRect an ivar --- AppKit/_CPPopoverWindow.j | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 19bfa82ac..d915b7bd5 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -64,6 +64,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, BOOL _isObservingFrame; BOOL _shouldPerformAnimation; CPInteger _implementedDelegateMethods; + CGRect _targetRect; CPWindow _targetWindow; JSObject _orderOutTransitionFunction; JSObject _transitionCompleteFunction; @@ -206,7 +207,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (![_targetView window]) return; - var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + var point = [self computeOriginFromRect:_targetRect ofView:_targetView preferredEdge:[_windowView preferredEdge]]; [self setFrameOrigin:point]; } } @@ -369,6 +370,13 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } + if (positioningView !== _targetView) + { + [[_targetView window] removeChildWindow:self]; + [self _removeFrameObserver]; + _targetView = positioningView; + } + [self makeKeyAndOrderFront:nil]; /* @@ -382,6 +390,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [[_targetView window] addChildWindow:self ordered:CPWindowAbove]; _targetWindow = targetWindow; + _targetRect = aRect; if (!wasVisible) [self _trapNextMouseDown]; From 2f9f3db19845a8dc55cb1fc3c7831e26283d791c Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 3 Jan 2015 10:21:28 +0100 Subject: [PATCH 212/234] remove accidental code duplication --- AppKit/_CPPopoverWindow.j | 7 ------- 1 file changed, 7 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index d915b7bd5..f7cc50d68 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -370,13 +370,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } - if (positioningView !== _targetView) - { - [[_targetView window] removeChildWindow:self]; - [self _removeFrameObserver]; - _targetView = positioningView; - } - [self makeKeyAndOrderFront:nil]; /* From 0f5dd991675ebc7ce4656d70a17c1d018df97a2a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 6 Jan 2015 15:20:02 -0800 Subject: [PATCH 213/234] Fixed: the method setContentSize: of the CPPopover did not take care about the rect given when displaying the popover --- AppKit/_CPPopoverWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index f7cc50d68..36fab0b48 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -419,7 +419,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if ([self isVisible]) { - var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + var point = [self computeOriginFromRect:_targetRect ofView:_targetView preferredEdge:[_windowView preferredEdge]]; [self setFrameOrigin:point]; } } From e49a9f1f064d407678b5b20f9f47df38c7b2a9f2 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 6 Jan 2015 15:28:14 -0800 Subject: [PATCH 214/234] Fixed: targetRect was assigned too late when displaying a popoverWindow. This var can be used before ordering the popoverWindow --- AppKit/_CPPopoverWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 36fab0b48..27d160e17 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -370,6 +370,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } + _targetRect = aRect; [self makeKeyAndOrderFront:nil]; /* @@ -383,7 +384,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [[_targetView window] addChildWindow:self ordered:CPWindowAbove]; _targetWindow = targetWindow; - _targetRect = aRect; if (!wasVisible) [self _trapNextMouseDown]; From fa7b71cabe851f4b19e0bf22fa8874d1320b55e8 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 9 Jan 2015 08:37:29 -0800 Subject: [PATCH 215/234] Fixed: cappuccino raised an exception when the param of constructor method of a CPDate are not a string. It now raises an warning --- Foundation/CPDate.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Foundation/CPDate.j b/Foundation/CPDate.j index 47abdfe7d..574873ef6 100644 --- a/Foundation/CPDate.j +++ b/Foundation/CPDate.j @@ -75,7 +75,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); - (id)initWithTimeIntervalSinceNow:(CPTimeInterval)seconds { if (!_isNumberType(seconds)) - [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSinceNow: has to be an integer or a float"]; + CPLog.warn(@"The parameter of the method initWithTimeIntervalSinceNow: should be an integer or a float"); self = new Date((new Date()).getTime() + seconds * 1000); return self; @@ -84,7 +84,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); - (id)initWithTimeIntervalSince1970:(CPTimeInterval)seconds { if (!_isNumberType(seconds)) - [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSince1970: has to be an integer or a float"]; + CPLog.warn(@"The parameter of the method initWithTimeIntervalSince1970: should be an integer or a float"); self = new Date(seconds * 1000); return self; @@ -93,7 +93,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); - (id)initWithTimeIntervalSinceReferenceDate:(CPTimeInterval)seconds { if (!_isNumberType(seconds)) - [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeIntervalSinceReferenceDate: has to be an integer or a float"]; + CPLog.warn(@"The parameter of the method initWithTimeIntervalSinceReferenceDate: should be an integer or a float"); self = [self initWithTimeInterval:seconds sinceDate:CPDateReferenceDate]; return self; @@ -102,7 +102,7 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)); - (id)initWithTimeInterval:(CPTimeInterval)seconds sinceDate:(CPDate)refDate { if (!_isNumberType(seconds)) - [CPException raise:CPInvalidArgumentException reason:@"The parameter of the method initWithTimeInterval:sinceDate: has to be an integer or a float"]; + CPLog.warn(@"The parameter of the method initWithTimeInterval:sinceDate: should be an integer or a float"); self = new Date(refDate.getTime() + seconds * 1000); return self; From ef0e0432a798f76b967c35961bd819e00a954ecf Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Fri, 9 Jan 2015 17:05:03 -0500 Subject: [PATCH 216/234] Fixed: Generate Treeview and activate search engine. --- Tools/Documentation/Cappuccino.doxygen | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/Documentation/Cappuccino.doxygen b/Tools/Documentation/Cappuccino.doxygen index 5a0568568..c2abad4e4 100644 --- a/Tools/Documentation/Cappuccino.doxygen +++ b/Tools/Documentation/Cappuccino.doxygen @@ -1407,7 +1407,7 @@ DISABLE_INDEX = YES # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_TREEVIEW = NO +GENERATE_TREEVIEW = YES # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. @@ -1521,7 +1521,7 @@ MATHJAX_CODEFILE = # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -SEARCHENGINE = NO +SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using Javascript. There From fa4c0af78d40d3843458700e3e2bdfea6fa3b9d4 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 12 Jan 2015 16:56:43 -0800 Subject: [PATCH 217/234] Fixed: wrong default size of CPCheckBox when using constructor checkBoxWithTitle Previously, the default size of a CPCheckBox created with the constructor method checkBoxWithTitle did not take in account the size of the checkBox view. Now when calculating the size of the control, it will firstly calculate the size of the title and then add the size of the checkBox view and the offset. Fixes #2281 --- AppKit/CPCheckBox.j | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/AppKit/CPCheckBox.j b/AppKit/CPCheckBox.j index 4e41e52e6..ab674775b 100644 --- a/AppKit/CPCheckBox.j +++ b/AppKit/CPCheckBox.j @@ -111,6 +111,30 @@ CPCheckBoxImageOffset = 4.0; return startedTracking; } + +#pragma mark - +#pragma mark Override methods from CPButton + +- (CGSize)_minimumFrameSize +{ + var size = [super _minimumFrameSize], + contentView = [self ephemeralSubviewNamed:@"content-view"]; + + if (!contentView && [[self title] length]) + { + var minSize = [self currentValueForThemeAttribute:@"min-size"], + maxSize = [self currentValueForThemeAttribute:@"max-size"]; + + // Here we always add the min size to the control which is the size of the view of the checkBox + size.width += minSize.width + CPCheckBoxImageOffset; + + if (maxSize.width >= 0.0) + size.width = MIN(size.width, maxSize.width); + } + + return size; +} + @end @implementation _CPCheckBoxValueBinder : CPBinder From b963b9547b854fd45e8def70a47a5113e6eb2797 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 12 Jan 2015 18:26:53 -0800 Subject: [PATCH 218/234] Fixed: Predicate button were blurred for Aristo2 Previously, the button + and - of a CPPredicateEditor were blurred for Aristo2. Now they are nice and not blurred anymore. This PR also add a second state for the button, the button will be darker when clicking on it. Fixes #2183 --- ...le-editor-button-add-highlighted-image.png | Bin 0 -> 3560 bytes .../rule-editor-button-add-image.png | Bin 4012 -> 3520 bytes ...editor-button-remove-highlighted-image.png | Bin 0 -> 3535 bytes .../rule-editor-button-remove-image.png | Bin 4011 -> 3490 bytes AppKit/Themes/Aristo2/ThemeDescriptors.j | 6 ++++-- 5 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 AppKit/Themes/Aristo2/Resources/rule-editor-button-add-highlighted-image.png create mode 100644 AppKit/Themes/Aristo2/Resources/rule-editor-button-remove-highlighted-image.png diff --git a/AppKit/Themes/Aristo2/Resources/rule-editor-button-add-highlighted-image.png b/AppKit/Themes/Aristo2/Resources/rule-editor-button-add-highlighted-image.png new file mode 100644 index 0000000000000000000000000000000000000000..92d3953cd237ee6d71a40601d010ede60d13c994 GIT binary patch literal 3560 zcmVP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0009MNkl%;zA@$|A1n* z{uQR;rb0Jn6GYL4U{_*cn2HcYj8eyzNns{9VP=Z4yz_qC_jWPKpwrCQDZTJ4&N(~} z=j$G!wdVhPBA3hk!&$4CAxr?RwWXA5DW(3X*XvJnxty-mYB#vj z_x(4<;o+gkWHKL*jg5UVH#hfXKA$fn5{ay7no$7DvYt1a&HDcS{x7Smt3S8f?E~N? z@TN>LK0Xe>(b16@85v2Mrde2AT>NHqbae84rJbFf?aa^5|7cm(!}Ig=CtXovXlRJz z<71IZrH1a(eV<q#l)hy03e z0>1C#c^*JO0(hS1S(f#3U|=8tFf}!GgSfG=K`(!|1(s#Ka9#JcBH%lYW4BtZ^IlWD zZOU3}E-o&9bsXmv;0FNLw(Zv5-rj@%I_2Hn-3PX9w*a>**j!p#I;hv{J0B`ouh)NC zUS2-1ZMzA$qEq%qhGC3`LZQ#A)#|tDbh_|whSF#>9?s0nd~e(KZ%V00z@-rmhqdQ< zN^7lr-|t&rUq2}pivzJ(Y~+1nCnqO6v$L~5IF8d)N<9Yt1e76!!1sL(xLRvRDHYh< z+grje(Ky)J+Nv%rENr{3`_%XS$G~&I1rUZ|0HBl- zKnNHFVnT?R5aNyyq7M+=HfpV1t#w;#-2z&`3&8H4FCm1uz80c$H6p;B4oo1}A-KRR ipxwb=fOq}C{yhLU!5ZI$^fash0000KLZ*U+< zLqi~Na&Km7Y-Iodc-oy)XH-+^7Crag^g>IBfRsybQWXdwQbLP>6pAqfylh#{fb z6;Z(vMMVS~$e@S=j*ftg6;Uh>2n?1;Gf_2w45>mM5#WQz#Kz&|EGkvK~TfD`~gdX7S-06<0ofSs5oQvjd@0AR~w zV&ec%EdXFAe}CrF0DztNnR@{MTa+Oc0iclpAQNSXL;z?z0IbheibVieFaQ*0OT;+< z*ew7sNmph_0I;_Jz|Ig0vH%DS05DOAg((08djMd_BO`bKgqZ*oM)FrY@hh$n=PCdI zc$u<1xgb(Nf#>=Hemu`nm{hXd4HK1GJ!M?;PcD?0HBc-5#WRK z{dmp}uFlRjj{U%*%WZ25jX{P*?X zzTzZ-GJjoxM+Erb!p!tcr5w+a34~(Y=8s4Gw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@ zr6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@uU1J0GOD7Ombim^G008p4Z^6_k2m^p< zgW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm2!8+oM4*8xut6L2!5A#S1{}c!+`$X{ zU^aw8B*el(5JC!MfE;pQDXfA*D2C0j9V%ci)Ic3Hz)@(1lW-0$!d18qJ#Y{DVF;eV zD7=9Q1VP9M6Ja6Rhyh}XSR;-I7nz0lA;Cxl5{o1t$%qtDB1@4qNHJ21R3KGI9r8VL z0)IJ&Tt>Q)JIDYsg8YWOM=_LvvQa(M47EeKs5csfMxqPQWOOl_j~1Yt&~mgIJ&ZP? z=g_NY5897DL&q?{=okkx#B4Aw#=}CfI4lX1W6QB3tPHEh8n9NZ1G|a!W6!a71QLNo zzzH@4cS0ax9zjT0Oju6XNT?tjBs3A)34b>U1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HGhv< zLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_bh;7Ul^#x)&{xvS=|||7=mYe3 z3=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#lnCF=fnQv8CDz++o6_Lscl}eQ+ zl^ZHARH>?_s@|##Rr6KLRFA1%Q-6J~MpZLYTc&xiMv2Yk#VimzG$o zNUKq+N9(;duI;CtroBbGS^I$wLB~obTqj3okIn_1=Tq5J-KPqt7EL`m^{y_eYo!~Z zyF_=tZl~^;p1xjyo=k72-g&*}`W$^P{Z##J`lt0r3|I!U3?v5I49*xl#WitnJRL8` z+woCDUBf^_rD2s}m*Iqwxqs0-qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>=< zrYWX7Ogl`+&CJcB&DNPUn>{htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMo zS*2K2T3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+kdXMZMJ=3XJQv; zx5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C^>JO{deZfso3oq3?Wo(Y z?l$ge?uXo;%ru`Vo_|?0bI`-cL*P;6(LW2Hl`w1HtbR{JPl0E(=OZs;FOgTR*RZ#x zcdGYc?-xGyK60PqKI1$$-ZI`u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h z%dBOEvi`+xi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2Y<3>Wmjgu&56o6maCpC&F##y z%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47EtUS1iwkmDaPpj=$ zm#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kwJ{5_It`yrBmlc25 zDBO7E8-Isy%D(e4|2y!JHg)!SRV_x(P} zzS~s+RZZ1q)n)rh`?L2yu8FGY_?G)^U9C=SaewW{1JVQi2O|!)*SXZy9nw8iQjgXv z>qid9AHM#b?{_T?HVsvcoW|lKa720J>GuiW_Z|&8+IEb4tl4MXfXY$XCot2$^elGdkVB4a$ zdw=I+&fjVeZ|}Mgbm7uP|BL54ygSZZ^0;*JvfJeoSGZT2uR33C>U8Qn{*%*B$Ge=n zny$HAYq{=vy|sI0_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq z?ybB}ykGP{?LpZ?-G|jbTmIbG@7#ZCz<+n3^U>T#_XdT7&;F71j}JoykC~6lh7E@6 zo;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|zrTyx_>lv@x z#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ;>q$gG zRCwB~l)-9SM-+y?(H;3p#4*%H3st!d7+K&eq=lf61S$)!0$C>yA%q`8#yg{hUP1H$ zitLTSfuse4bP*U+qMA~-GOkDhm4AgZx_4%}sN~wI(j=t=-(u$Q|C~8z<_K#o|K}2= zQt2OuolZyO^Z73w$N9=}oRknE31F?g(pnF-*1sGd9}h~UlI?Ulx3tn2bG-?IK&-8; zeNiYBzOGiQ-)wAbJoG#-pG+oK0IsgCUZ0(v9UmSZ{?KeTpN~ePBj7FY_kT5u#UjOG z5kO?K*?WaT;c2heYiq6TztQXU+J!>lX*Qd^2Z(FKd_E5#JkLw{zW=P>@4t+q$bJg_ ze*dNK`_DYjOI@3;udf5dbGh7;ZnxVG!_dA@y8b-UemE|+@(!~tR_CnqAE zPT#N9YL9&1e{785eP(N3%zyX&$F*ARQ97Nz4~Q5brIcQ|Tz)W5@G(PU4CQk9ft1n% zqy!d(5X+fNCjYTF`Js3wlgSGqmVpHc#I3b)*L7EB*)$rBxx(Gu-CO&utt|jt*IlvJ z#(}s5VqqBCD2gH}rTm; z@%T*`hJQH%W-^(mi;IiCwU&9@tl>NcgTarJ$>beiVnC>r8t(7!zxc0RZnxVnlu|<= zoEe^PZ*Lz3L9q9^hCvYQ@9gXxDW%SVP)x7A7nt+f-ab*$BDy^>O%E-o%k5{bke$8i!-6osSF==XlVf7EKVzO7cP--Tf~Fvk20 zyaqx5;W!QeT5AEgz%q~$LZpNccZCoOH^!5()`r&Fk+pUR3^;)|fSS!jA%wX3ECe8d tJHXv3$>}7q(=6TrqbXw`x;bF~8~|!TchOy|GM@kd002ovPDHLkV1hRkrC$I5 literal 4012 zcmZ`*2{@E(+a6xKk);U{<{P9@X2v?Up^QBu$(D$*jcsDa)?&|K5@pFQRCpyJYqHCh zB~rG*ppkX#JN@*&-}`<4e;ogP9M|*Q&v~EcdEM7_AIE(>QO4JFIM@W(0001op01|J z@f&m!EKJAGm?$9*0D!Fxi$)vkq0wMtZ=4g>-4OuLGd2Cr`)T{*fS?C}4vMDf z7WXdz*i0A&n}G=Q*|zNb$c#G-m@8TgUxOL0fF3i(S#YuQh6XdzZ9b^fV7aL@^}^Zqf>R2RfMvK?q{}g{}_D%Xa^@TkjHwJ_UvvTvvA9ZRz?| z)}`C~smCp6&K{KkKNa1e&9V4dvY(gOZjr30;;zqk$5yWOVDZIIDAj4t-dU+Sscn@# zWoq%g3k^z*l-^U(j%$6AYQH+gVi{<+x7Y{G$ZARQGI<>|laP6d<&KdTOkL798qXkI zmZvByWnzYgO_;wXm5DmYOOXC>m`HvaRdnz{0X92oV|kGO0-EuBW>&pbugS#{m2*kN zQuz8_%VDNs^UICPDVZs!p|{e+pFEo@NWU}pFe8%B@ljU~gFTqby-|3vfzg7C^@xkk z{Y{&1x4u;b83mYV&G}(}g-xCGBj!*_?@~pan`2{Xc|{3x+|m7h{$Qlv`6H-i;(_6G z+8>Jc`#GdKtg2)~M*zTEctWmBAHcX+J5uRg)~Xc0yV4&5FpXn&G-mebV?O<^#np!a zxzZ#Fj6g(&Dq65uPokM3?VvM_Ru_UHLu@M9z^%r>{721qL8%l_df3&w95oc)F=kd^ z6FYy1A0h(G!fFRL&=mS|1;~wW;q}s1iHQ5&E&(F;Uw1TRm)CH9(UXr92-VJJ?*kE7Q%Tg^v@a&_*-+sM z*|U9aKc!4V>n`hf1?N&sy=oM%rpxy5@kNl@#HU-TZdPenv%Y2f9_-fYGwC@gR%JJ) zqsraeQnr%hk9@$TCeYgoZ!B)YH9e=ets3sI?+ES$9yQzWIzvPo!P0^we5#b?51WM^#FZmjWZh1lzQy$ZkX zpYS6=D#2C%;tyrVI2rAmF9mLp3$A}Powss@mWSMXx);0`p`APT#o7h$LO&v41zloU zk}1mCdiquqnY-UVJ5V;4Hpl$aW8=dH63EmXNokFAc92$(o#&rD8_O>;lk9Eg?XHwL z=34DteZJbJ`uQ3t03CqaeY94+Ccf4-Q{2UQ(HQg?^x%vlTOp|P%r(gk=wnHlGajI3 zkSquZ6*jHS*)fQE>F{!i&Ezxix-?Iz4b z?akOL)tsD{_QgE8r3SC8f4q;@Jd@}8veV4aoSbvdbhBbU4{J40n&gO4k4_!>9&-O76lTd3 zz_iJ<4TMJYL_BD|9U&A!i+LPlAEUr8FNl&glXViD75FZwj<8GiPrW2vAXAOim-A6D zlqF+EJR(w+l2^MsyWgheQlC)i*HKgyF9SOtd$v}hR+c!qe^jQebi8yze^BzPYsSs8 z!LGARvQy6PX8qt zl^CX#*H1SPl7GBw%qCMvx$(I}C5>L~9SzXNf~JCA%VDLlfcSMszEDzZm+SKzFp=9r zx67}j7PV4K7luR|uQgr_gNOH_A?QvGVPfi|X!I@T?6Od2kF3o*6%=>M zA{D`cA$oA$=l48UCwA~$sYQu`@0?YQdKcAB`Wfk<4U1Og--UHbxL*Bw=o0^P@#hx* zZt||Qk2DQ)Xivh3R@$~o*G>n&70(2ToVGo!uG||m-V+eEE=1+~T>r7bzp<3j zoY(b|fvx|&rw5Rp91LrC_)vHlYnGB-x@3<<_nL(L1W6zrQ!Vw=XxD1jZH>8({orlg<+qou`zjkfn(Jt*6YO=g5tmA@?N7yzYMTnR zzG;bTWg)$gw+|bs#D0-aND18X$W)ah&1}ky@@;ffwQ`X6BJV6Or+ZfUM=Z0O4&_Ou z3g1$#iM?$pj?c$@3#Ny4!FG9uk#G40!KR;+CAXotH+^r0ELHshA*>mJI@xa>>MVmR73V$IXgRXT2}3>Gpgy)JZsX! z@gDA49~8K}o5n}A{#nECy}I@)`0A`mtxAuLZ~cS$=!L|1^NeBzTYT-euXB9?Q|3fl zBZ88z{B6IQ@&2WL@`!BNtU<9ety(Y;2_rj9)cU$@6=jZosibXm)8fY{(xXOWLH?svhNi&&m+R>oD0y*~Zk5Z)hKOhg5Fi zMs=EXL_T);Be&{S!uE(Gu{|OxYOR6ylq)u5=kRlU1MnhSbe$T1FTV(%S4%o8Jh=Iu zoYL9JO*(+~IY60Uuq1LWMgkJ2ryeW4wk?|YizIPaMxbBkGLGSpb^|nx0ucLj=Z7xD z#!zek*KLAFhC74}5-UDCsEo2+cIi%*hn^J)3JcJ925op=x4K$FU0sFCCll+L`?fs$ zPtdB1`aE#E})n@k{mbpDpWMT}wOwz<&B9=m4qd`~U#mAlB4^ zU}0#WjKO)p>>P0Rjxc|ZyT@z*K-FLQc|FvD=LtUXwX?_h5Ks`vNuqzo zU;89ro&J-_6aRNv#|6SqR^ZYw1pFWGW2x#1s*J{Y-1TLF{;lg=nfGz_Jghrt2BbJcymqC+ zzw#|i82G-$q`?de;FF>|z?za5;sNwXt!Qx3;7^T(oMeG#ypJR!nL=MwcTb=)Xx6>0 z>`-z=e0o-j?0N={YM`-EOxltN)nGZCoCIGlGMkVSh><&}si{%h+}!*qC@84XFV{T} z8s)x=$K&&d-2)%DO&c*WGefyp+ARj;=H}<4^?LtZZy5eAt~mN-vR2 z3P2f|nVzC%6#uX1pX#;@O9RaSUiiw74biNnE06 zeUtmC_45yJ8E|}u?p8Y>*y2kX3WXxFeX-*|MO3%8wT*wha1g5T?fRg;(y06oWpAlO zFjI-XA7Ef^qmo1-v3be^!+_+tk9m8XbVHb*51>plYip&U76mIau8U+c+4*1;rGGvi z##^OHSBTn}p2oaPOHNNe$N>mNASQ!{rFhvGJD%;65VbbN)+KGzAwozwnB@Z?6Oa$h z58izcxJRW@4_8*+RaRD-(>L|}QYPHLf3?-VLKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0008|NklJ%y!uRk! z=X>r~7-RT9k0=(4|9Y%etD;aSd}!PD$F^;!gb)sZF~(I&HI!0MkB*L>7mGzxtyce5 zE49{dFZ=uZVqjq4gQ20JPiAIjJ}s3>BbiL5;5beKz;)f1=jZ1~ySuwTudJ;6baQj_ z1h@j;$`r%H!vGu{9Ef~ApLHB(WNB&XtHHs+FWx8ZNpUKuVbdqy)Nz5Pj)%x^UM_rqk(y5TXz0l0d{56NyHn ziFSlmS64eCnw*>jAR3J(j4=@)A^|H10uuy5D5aFQ>8#y=)|xO30W1j+hGFQs?p04u zPX=IOVxl9$wneV%z6yfiFGfK7zV9^}jnhu!@=sh`T>Rqu{%b&6K;U^^V`pdQ(Osv! zy}kX&^SlNS*nm(G=3~ zwzs!8*NKPqdj0YA^z=8L=bag2&H>ks#bPE5LuHInTI;U0wY6HgT<%GwQu+6h)oQhe zQ&Usl`o4dzlsW_c0F*6+Kx=J)z!>8zrL6V!^R=EfM) z02;t6z-wD4gb?rMO0>2{9Jtql14LQ{0q`2QY2i;Ge0RaV833m86I-?5H`@RJ002ov JPDHLkV1mg}r6B+S literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo2/Resources/rule-editor-button-remove-image.png b/AppKit/Themes/Aristo2/Resources/rule-editor-button-remove-image.png index f99f803e31752f1e848a81fc2f00f26ffcfe0775..0c2bce2900bb516d228c12069da9c5e422473227 100644 GIT binary patch delta 3489 zcmV;S4PNrAAEFzOBYyx1a7bBm000*f000*f0cW4mQUCx7PiaF#P*7-ZbZ>KLZ*U+< zLqi~Na&Km7Y-Iodc-oy)XH-+^7Crag^g>IBfRsybQWXdwQbLP>6pAqfylh#{fb z6;Z(vMMVS~$e@S=j*ftg6;Uh>2n?1;Gf_2w45>mM5#WQz#Kz&|EGkvK~TfD`~gdX7S-06<0ofSs5oQvjd@0AR~w zV&ec%EdXFAe}CrF0DztNnR@{MTa+Oc0iclpAQNSXL;z?z0IbheibVieFaQ*0OT;+< z*ew7sNmph_0I;_Jz|Ig0vH%DS05DOAg((08djMd_BO`bKgqZ*oM)FrY@hh$n=PCdI zc$u<1xgb(Nf#>=Hemu`nm{hXd4HK1GJ!M?;PcD?0HBc-5#WRK z{dmp}uFlRjj{U%*%WZ25jX{P*?X zzTzZ-GJjoxM+Erb!p!tcr5w+a34~(Y=8s4Gw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@ zr6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@uU1J0GOD7Ombim^G008p4Z^6_k2m^p< zgW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm2!8+oM4*8xut6L2!5A#S1{}c!+`$X{ zU^aw8B*el(5JC!MfE;pQDXfA*D2C0j9V%ci)Ic3Hz)@(1lW-0$!d18qJ#Y{DVF;eV zD7=9Q1VP9M6Ja6Rhyh}XSR;-I7nz0lA;Cxl5{o1t$%qtDB1@4qNHJ21R3KGI9r8VL z0)IJ&Tt>Q)JIDYsg8YWOM=_LvvQa(M47EeKs5csfMxqPQWOOl_j~1Yt&~mgIJ&ZP? z=g_NY5897DL&q?{=okkx#B4Aw#=}CfI4lX1W6QB3tPHEh8n9NZ1G|a!W6!a71QLNo zzzH@4cS0ax9zjT0Oju6XNT?tjBs3A)34b>U1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HGhv< zLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_bh;7Ul^#x)&{xvS=|||7=mYe3 z3=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#lnCF=fnQv8CDz++o6_Lscl}eQ+ zl^ZHARH>?_s@|##Rr6KLRFA1%Q-6J~MpZLYTc&xiMv2Yk#VimzG$o zNUKq+N9(;duI;CtroBbGS^I$wLB~obTqj3okIn_1=Tq5J-KPqt7EL`m^{y_eYo!~Z zyF_=tZl~^;p1xjyo=k72-g&*}`W$^P{Z##J`lt0r3|I!U3?v5I49*xl#WitnJRL8` z+woCDUBf^_rD2s}m*Iqwxqs0-qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>=< zrYWX7Ogl`+&CJcB&DNPUn>{htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMo zS*2K2T3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+kdXMZMJ=3XJQv; zx5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C^>JO{deZfso3oq3?Wo(Y z?l$ge?uXo;%ru`Vo_|?0bI`-cL*P;6(LW2Hl`w1HtbR{JPl0E(=OZs;FOgTR*RZ#x zcdGYc?-xGyK60PqKI1$$-ZI`u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h z%dBOEvi`+xi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2Y<3>Wmjgu&56o6maCpC&F##y z%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47EtUS1iwkmDaPpj=$ zm#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kwJ{5_It`yrBmlc25 zDBO7E8-Isy%D(e4|2y!JHg)!SRV_x(P} zzS~s+RZZ1q)n)rh`?L2yu8FGY_?G)^U9C=SaewW{1JVQi2O|!)*SXZy9nw8iQjgXv z>qid9AHM#b?{_T?HVsvcoW|lKa720J>GuiW_Z|&8+IEb4tl4MXfXY$XCot2$^elGdkVB4a$ zdw=I+&fjVeZ|}Mgbm7uP|BL54ygSZZ^0;*JvfJeoSGZT2uR33C>U8Qn{*%*B$Ge=n zny$HAYq{=vy|sI0_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq z?ybB}ykGP{?LpZ?-G|jbTmIbG@7#ZCz<+n3^U>T#_XdT7&;F71j}JoykC~6lh7E@6 zo;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|zrTyx_>lv@x z#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ;%}GQ- zRCwB~l+SA$M;ygJqa9fiaa?L6gR5+zAPX!Z9R!8sP+2~jpx%;uuZ!`;|A`JhwFMPft${4-bFb-{1dXFc`c5E`ayXEPs_slu9K4 zkArJ>}&d<-q+S=M@dwY9dZf|dY zWvyi%(&=>8ahzAa@Bca+4u3CVfRs|Yl}hElF^1bvsZ{PuDP2HHU_l76oXKPgx1GsM zCQ}eXECUM?h+Avpi9}-MYJ}?b`i+EkcXt6uBoZsu+BguGKrD(PtCUhwN;!|SD+9(D zlu`gO380ix!{P8^X=!N%E*#rxU=$ zfG7;Z{=vb))7z%pY&M^UVb}*E2M}6oj*gDl+S>YPb#*m6kGtdJSTdP3z({NTIt;@%)oQiw`~H*v z6Z3ulNwr$7hhg|eYk&PaFanGtguobMfyi1r)mq0IjmFPX%3l^27pKW&@{Z#;Nu^XY z7!3Xhg5X7?(fHQ$yziqZ>KS8R0dIi_Ksb&AfYw?731AsW3n9`%h`U0Fg}>F4vDQY` z+JUvU5A=a|KzP-OLWuWOW~~)~1nvNLXQXCLVrMQUz+lE`mKwqJpZ#+HB{8yH(+USHs0Z>4Z>zalA z%K!#LYMw?WG33S8jNI^4D=J%MHL9;cRLa0-)G;P(jGVzi)DLOsMYNeXU2}HSXzfB#)WSt-b=_5!XU}XwrL}%&q{Rh_5n``&wv)2ke75d=j2~_Z2-dkRhdylT{7LN8 z>}~0B&Rn!nNQJXJty5=S=@RMZB(#|%%G_|#23c8NZ~n3JW&uimaAbp)tw?CyWPCld zQtYq}C5MY2-B6Edex78rIYVa}V12aG2Te_HN^m!P7dRW2c8$(T-yL>S#Oo=JN}QM@ zBPnWVgoI5Qzl$VZwv!T$JZCqR_#z_z$7gBS{FsI5kK8xV)K|0fH=DH@98485ukoAm z-9BnMNt0>J-cfp;_L>8FFIn*U%f-ADt406RaFG3z&K@coFq=y~-%1^|2^;+>8->e< zRer7_O-^+hG6pJ-!FANF$vA-si7p{nsebiXH` zld(C@jI42#7pZIa1$gjHT_gk|x|5I$LjcB?vOia3h0huRb96NuwJui3Cgux#h-ON#Y!*rDtkj z0tJn?0vprv=Kb$2H{H zdz*+G2|kENY>M2y&G7od25iGClJlnS0pkJBLBJ2X)2ok_`vej>%;{Yk%vBhyp&3C2 zD!G58fXxNQAx!5d*&|f%W{Q7_;8J~d`Q3SAHU#@V8&3qLiEjqr9;XV)i|x`{%N9FN zh*J{*uL|)(QU!Nk(rEFwT`yu8Nw}o+T$r(axlM33WL9$4V(ZQpm)c_+P4~Bb zeeXqqDkAH+e|~_tn7l~4fZ6%HgJ7a*3@0^*qwU0{C6~D7FGh3m&n9{pdAP`?jXPC% zR0vgARJ_^(`XYU?hflUDwgk6YXA3)7uNnZK0UuqEVR#ShxS%Jp1AQhUaRCEt1WE!C zP(D;u=7CN`wq5pYVbh%s34(*vnM43!} zz#BoADV+c4_vR zpkX~>j~efX@rJEOJ&Ur5lID`)QIIr}e84l$J;ZZU%sSC0>6&<+M1`aFbx&zs$qCz0 zOjwd^;%0Y8cR_L%`8k<#TY;>=NyP|a%utJ0OBbBzACqV;nk<^q9u)cNlzNvq*m;pg zat7^^{6+lx`;rjPO3#vAe;&bPt7K2NUPE55>4@yOZ|t@`C^#~@)9KY682^3V`$Y5T z%G1RMiwR_}zSR+(@2|Ba-=kT|mn(4NS0@Ddu0>Nt^D79XRi<6)73poYII@s07_&Tl3cEe~I=*Q>u80uSv&LXaIQe1xPYPm%Y~8N^^TCVkhcl;lEMA&b%3 z5-_X}xm+*R2>f^@+aycEbn0P4e zDZXxdViRdAh(mYXm)$o@QBMIE2&Mt~IV?GD%Jl|L_V|Wu^O8YbwbgY#^+nXioKDwt zEPec5{DAai+R}%H4u^)&r^{NWi1au>ZhV5chc0(cH2c?Y&#X=}3swkU5LVFj(ue5< zB+R50DcFavx5G)SjE|`8gN^f)^NtOta-O{9)#TBS*2Q*#(E@fUKoRz5Uy#y&}SCs(SmD)jVg>odv1dczioL-7f*-Bx(Wt+fv?_If0`3GFZ z$W~NmI+?NS3l%*vWC%$pR=x^vD zR^Ft*+~bc^qy(DIunzUXmdwj;0>^FJ=^Ozy{?}(6j>YF~nOm8ojZ>`BuDGZqB_N`% zZzl_ix{E3Zhv=7)JrRuD}K#!!6XjT8k#u&YlLwBMS^df&?h_A{^Xx*!t&CO5b%}uyeBB7SHZ_l+q_Ey$+ z@%6FDLvYaY2h`#Q|0=vn?9_~8|E1#W%a-0v(-a2)Fmn9r6o8}@E&zaH&=F;VH__FR zv&CXy)^=DMdzcT#?Tifo$ot5hO)>U(Yp@T-#T6&#qX7BMkUN|Ig5ePGZwlU70b-(S z07hax?7>p7>o75hA_EuP66V8$GgeF;ojcfFmFj1)&mU}mz9-; zi%GyGBt*{`qBvhyytR+0EAH}NCjatLwa3|dIJ)5-v991>zScHaPrL#I@+;6k?XP{} z9UuHVk}K}-w9XQQ|5|~I!^GhKc%Mn-f1z?nEXK{l9)~;gR}`23&HR7ZzvKMHH*mn> zv1e8AaJ1EO#oK$FiSgFIcBd%uxB7oG{@Y96!_odM>)+~s#r{w1Z@xVISK|Lsh`*}* z8$BztB7;2qpGT(1Ad4?`0stuUv{aQ*GVFtK-OgspY<2V1^9WAVm05^D?m<-(7)RK%eT#XxFl10q&?% z3;WMh*O`!Aa~@dF`+*!R1Zxb2IYm#H$Q#}2_V6Ji8jZI4Wb*ui+98-OH~{pBRr8~c z5Dr3^J6SLSs%lY*ZJ?+5IVo-)IVREMGe!V zTHQgVK@?40xbncKXj_z9`}FqV-hJ56F*QXUmDlG9jd+i_``0*a0lG+ldS;eD;&aS5 zjRl=0w&>Oja~S{B__#dTfWzbpFs?ga_Y#OJG{LuQXgjHoXsR81F$LP$%$8F8tZRbs?45s zLL=Dok$ET!uA-l#EJ4_`Yhn&-Q8XN zDlFyME7p52{~NV$ya2txZ5z{Uoqpk$DaP!nhHv{_%Xl6>e7GwJ7U9V-(5%Nb2ibKo zL!F2U{K7f$+SGQYlfq+yU}k~y5jd3mpGNPQp6bv1oFtTSFI=~}$DQP-^G xqZ-55b^&EupW>RVkn0u|*m9ltmeblT5S=e(=YbXH*%1W*XsPL`7N}SS{~u*#U_Af; diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index 86a43e46f..5fea39d42 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -2279,6 +2279,8 @@ var themedButtonValues = nil, sliceLastBottomBorderColor = [CPColor colorWithWhite:0.6 alpha:1.0], buttonAddImage = PatternImage(@"rule-editor-button-add-image.png", 20.0, 20.0), buttonRemoveImage = PatternImage(@"rule-editor-button-remove-image.png", 20.0, 20.0), + buttonAddHighlightedImage = PatternImage(@"rule-editor-button-add-highlighted-image.png", 20.0, 20.0), + buttonRemoveHighlightedImage = PatternImage(@"rule-editor-button-remove-highlighted-image.png", 20.0, 20.0), fontColor = [CPColor colorWithWhite:150 / 255 alpha:1], ruleEditorThemedValues = @@ -2292,9 +2294,9 @@ var themedButtonValues = nil, [@"font", [CPFont systemFontOfSize:10.0]], [@"font-color", fontColor], [@"add-image", buttonAddImage, CPThemeStateNormal], - [@"add-image", buttonAddImage, CPThemeStateHighlighted], + [@"add-image", buttonAddHighlightedImage, CPThemeStateHighlighted], [@"remove-image", buttonRemoveImage, CPThemeStateNormal], - [@"remove-image", buttonRemoveImage, CPThemeStateHighlighted], + [@"remove-image", buttonRemoveHighlightedImage, CPThemeStateHighlighted], [@"vertical-alignment", CPCenterVerticalTextAlignment], ]; From 31023a1a71c0d7d9eb43e4fd8d9a76abaca5888b Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 13 Jan 2015 11:46:53 -0800 Subject: [PATCH 219/234] Fixed: warnings when compiling cappuccino Previously, some warnings were raised when compiling Cappuccino. --- AppKit/CPDatePicker/_CPDatePickerClock.j | 2 +- AppKit/CPPasteboard.j | 2 ++ AppKit/CPPopover.j | 1 + AppKit/CPSegmentedControl.j | 1 + AppKit/CPSound.j | 1 + AppKit/CPWebView.j | 2 ++ AppKit/CPWindowController.j | 1 + Foundation/CPNotification.j | 1 + 8 files changed, 10 insertions(+), 1 deletion(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerClock.j b/AppKit/CPDatePicker/_CPDatePickerClock.j index 2a8866dfa..4da28de56 100644 --- a/AppKit/CPDatePicker/_CPDatePickerClock.j +++ b/AppKit/CPDatePicker/_CPDatePickerClock.j @@ -24,7 +24,7 @@ @import "CPTextField.j" @import "CPImageView.j" @import "CALayer.j" - +@import "CPGraphicsContext.j" @class _CPCibCustomResource @class CPDatePicker diff --git a/AppKit/CPPasteboard.j b/AppKit/CPPasteboard.j index b8e0139f0..5372a5bef 100644 --- a/AppKit/CPPasteboard.j +++ b/AppKit/CPPasteboard.j @@ -28,6 +28,8 @@ @class CPWebScriptObject +@typedef DataTransfer + CPGeneralPboard = @"CPGeneralPboard"; CPFontPboard = @"CPFontPboard"; CPRulerPboard = @"CPRulerPboard"; diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index 252f24fa0..38ef4dd23 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -28,6 +28,7 @@ @import "CPImageView.j" @import "CPResponder.j" @import "CPView.j" +@import "CPViewController.j" @import "_CPPopoverWindow.j" @protocol CPPopoverDelegate diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index e58d97ef1..2b9654047 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -25,6 +25,7 @@ @import "CPControl.j" @import "CPWindow_Constants.j" @import "_CPImageAndTextView.j" +@import "CPMenu.j" @global CPApp diff --git a/AppKit/CPSound.j b/AppKit/CPSound.j index bf25bda98..218b141f7 100644 --- a/AppKit/CPSound.j +++ b/AppKit/CPSound.j @@ -23,6 +23,7 @@ @import @import +@typedef HTMLAudioElement @protocol CPSoundDelegate diff --git a/AppKit/CPWebView.j b/AppKit/CPWebView.j index fe344027e..a382122d0 100644 --- a/AppKit/CPWebView.j +++ b/AppKit/CPWebView.j @@ -25,6 +25,8 @@ @class CPWebScriptObject +@typedef Window + // FIXME: implement these where possible: /* CPWebViewDidBeginEditingNotification = "CPWebViewDidBeginEditingNotification"; diff --git a/AppKit/CPWindowController.j b/AppKit/CPWindowController.j index 8fa7b527d..2cfa3669c 100644 --- a/AppKit/CPWindowController.j +++ b/AppKit/CPWindowController.j @@ -25,6 +25,7 @@ @import "CPCib.j" @import "CPResponder.j" +@import "CPViewController.j" @import "CPWindow.j" @class CPDocument diff --git a/Foundation/CPNotification.j b/Foundation/CPNotification.j index 5b9e8d51b..4ba936ea2 100644 --- a/Foundation/CPNotification.j +++ b/Foundation/CPNotification.j @@ -22,6 +22,7 @@ @import "CPException.j" @import "CPObject.j" +@import "CPDictionary.j" /*! @class CPNotification From 6213c098ce603551a0f8c5676df7323ba640b1a4 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 13 Jan 2015 13:11:35 -0800 Subject: [PATCH 220/234] New: option to active or not xCodeCapp when opening the errors & warnings panel Previously, when xCodeCapp opened the errors & warnings panel, xcc was always the new active application of the system. Now an option is available in the preferences of xcc to disable this possibility. If disable the errors & warnings panel will open itself, but your favorite text editor will still be the active application of your system (you will keep the focus). --- Tools/XcodeCapp/XcodeCapp/AppController.m | 3 +- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 1 + Tools/XcodeCapp/XcodeCapp/UserDefaults.m | 3 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 12 +- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 150 ++++++++++++++---- 5 files changed, 133 insertions(+), 36 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 4647a079f..cd37746ac 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -155,7 +155,8 @@ AppController *SharedAppControllerInstance = nil; kDefaultUseSymlinkWhenCreatingProject: @YES, kDefaultXCCUseDebugFrameworkWithObjj: @YES, kDefaultXCCShouldProcessObjj: @YES, - kDefaultXCCPanelStyleUtility: @NO + kDefaultXCCPanelStyleUtility: @NO, + kDefaultXCCPanelActiveAppWhenOpening: @NO }; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index 9e5d5b804..ee0539061 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -32,5 +32,6 @@ extern NSString * const kDefaultAutoOpenXcodeProject; extern NSString * const kDefaultUseSymlinkWhenCreatingProject; extern NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch; extern NSString * const kDefaultXCCPanelStyleUtility; +extern NSString * const kDefaultXCCPanelActiveAppWhenOpening; #endif diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index d88657a6f..88c919dd2 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -29,4 +29,5 @@ NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; -NSString * const kDefaultXCCPanelStyleUtility = @"XCCPanelStyleUtility"; \ No newline at end of file +NSString * const kDefaultXCCPanelStyleUtility = @"XCCPanelStyleUtility"; +NSString * const kDefaultXCCPanelActiveAppWhenOpening = @"XCCPanelActiveAppWhenOpening"; \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 5c0392af3..3e3b13bd7 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1565,9 +1565,17 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (IBAction)openErrorsPanel:(id)aSender { - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; [self.errorsPanel setFloatingPanel:[[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCPanelStyleUtility]]; - [self.errorsPanel makeKeyAndOrderFront:nil]; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCPanelActiveAppWhenOpening]) + { + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + [self.errorsPanel makeKeyAndOrderFront:nil]; + } + else + { + [self.errorsPanel orderFrontRegardless]; + } } - (IBAction)openErrorInEditor:(id)sender diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index 28098a798..1b8e7e2ac 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,13 +2,13 @@ 1060 - 14B17 - 6250 - 1343.15 - 755.00 + 14C94b + 6254 + 1344.60 + 757.30 - 6250 - 6250 + 6254 + 6254 NSArrayController @@ -361,12 +361,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ
- {{0, 0}, {1440, 900}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} NO
- 15 + 143 2 {{890, 663}, {550, 237}} 1613759488 @@ -602,7 +602,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - {{0, 0}, {1440, 900}} + {{0, 0}, {1440, 877}} {315, 99} {10000000000000, 10000000000000} @@ -611,7 +611,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 3 2 - {{534, 231}, {369, 510}} + {{534, 231}, {389, 528}} 1613235200 Preferences NSWindow @@ -632,7 +632,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 118}, {271, 18}} + {{16, 136}, {271, 18}} @@ -666,7 +666,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 88}, {241, 18}} + {{16, 106}, {241, 18}} @@ -691,10 +691,10 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 58}, {260, 18}} + {{16, 76}, {260, 18}} - + YES -2080374784 @@ -713,10 +713,35 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO + + + 268 + {{16, 45}, {330, 18}} + + + + YES + + -2080374784 + 0 + Active xCodeCapp when opening the Errors panel + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + 268 - {{16, 146}, {298, 18}} + {{16, 164}, {298, 18}} @@ -836,13 +861,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {330, 176}} + {{1, 1}, {353, 194}} - {{17, 303}, {332, 192}} + {{17, 303}, {355, 210}} @@ -995,13 +1020,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {330, 124}} + {{1, 1}, {353, 124}} - {{17, 159}, {332, 140}} + {{17, 159}, {355, 140}} @@ -1099,14 +1124,14 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 1
- {{1, 1}, {333, 65}} + {{1, 1}, {353, 65}} _NS:11
- {{17, 74}, {335, 81}} + {{17, 74}, {355, 81}} @@ -1160,13 +1185,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO
- {{1, 1}, {333, 38}} + {{1, 1}, {353, 38}}
- {{17, 16}, {335, 54}} + {{17, 16}, {355, 54}} @@ -1186,12 +1211,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO
- {369, 510} + {389, 528}
- {{0, 0}, {1440, 900}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} xcc-prefs YES @@ -1206,7 +1231,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - + 256 @@ -1218,6 +1243,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{0, 8}, {716, 654}} + + YES 1 NO @@ -1226,9 +1253,11 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {716, 662} + + - {{0, 0}, {1440, 900}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} YES @@ -1329,7 +1358,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ _NS:21 - {{0, 0}, {1440, 900}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} updatingCappuccinoPanel YES @@ -1610,6 +1639,14 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ A92-fj-Uci + + + save: + + + + 0Il-yd-iuZ + openXcodeProject: @@ -2076,6 +2113,26 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ dP2-Fc-one + + + value: values.XCCPanelActiveAppWhenOpening + + + + + + value: values.XCCPanelActiveAppWhenOpening + value + values.XCCPanelActiveAppWhenOpening + + NSValidatesImmediately + + + 2 + + + kgU-89-aRS + value: values.XCCPanelStyleUtility @@ -2552,9 +2609,10 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + + - @@ -2934,6 +2992,19 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + + CQP-MN-ubd + + + + + + + + GLQ-ZT-xXR + + + @@ -2976,16 +3047,17 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - {239, 248.5} + {345, 214.5} com.apple.InterfaceBuilder.CocoaPlugin - {-183.5, 363} + {-173.5, 372} com.apple.InterfaceBuilder.CocoaPlugin + {650, 268} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3165,6 +3237,18 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + If this is checked, xCodeCapp will be the main application of the system when the errors & warnings panel is about to open + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3172,13 +3256,15 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ ToolTip - If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically + If this is checked, the error panel will be a floating panel. com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + ToolTip From ca1bb8e6341b1efd05d42225b8971fec91334e18 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 13 Jan 2015 13:24:43 -0800 Subject: [PATCH 221/234] Fixed: compiling warning for the function CGContextDrawImage --- AppKit/CPDatePicker/_CPDatePickerClock.j | 1 - AppKit/CoreGraphics/CGContext.j | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerClock.j b/AppKit/CPDatePicker/_CPDatePickerClock.j index 4da28de56..2c3a76f56 100644 --- a/AppKit/CPDatePicker/_CPDatePickerClock.j +++ b/AppKit/CPDatePicker/_CPDatePickerClock.j @@ -24,7 +24,6 @@ @import "CPTextField.j" @import "CPImageView.j" @import "CALayer.j" -@import "CPGraphicsContext.j" @class _CPCibCustomResource @class CPDatePicker diff --git a/AppKit/CoreGraphics/CGContext.j b/AppKit/CoreGraphics/CGContext.j index a00199586..ed518129a 100644 --- a/AppKit/CoreGraphics/CGContext.j +++ b/AppKit/CoreGraphics/CGContext.j @@ -738,7 +738,7 @@ else if (CPFeatureIsCompatible(CPVMLFeature)) else { // I have declared these functions here to make it compile without warnings with the new compiler under rhino. - CGContextClearRect = CGContextDrawLinearGradient = CGContextClip = CGContextClipToRect = function() {throw new Error("function is not declared in this environment")} + CGContextClearRect = CGContextDrawLinearGradient = CGContextClip = CGContextClipToRect = CGContextDrawImage = function() {throw new Error("function is not declared in this environment")} } /*! @endcond From 20eb59d9b66e5609a204652d54a212c3e384d72c Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 13 Jan 2015 13:57:22 -0800 Subject: [PATCH 222/234] Fixed: compiling warning for the class CPInvocation --- Foundation/CPInvocation.j | 1 + 1 file changed, 1 insertion(+) diff --git a/Foundation/CPInvocation.j b/Foundation/CPInvocation.j index a07b48952..ca881d33a 100644 --- a/Foundation/CPInvocation.j +++ b/Foundation/CPInvocation.j @@ -21,6 +21,7 @@ */ @import "CPObject.j" +@import "CPArray.j" /*! @class CPInvocation From f5b64b495854a19fb097a352d1f9d6a45c4c4653 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 13 Jan 2015 14:11:16 -0800 Subject: [PATCH 223/234] Fixed: compiling issue for the class CPShadow --- AppKit/CPShadow.j | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/AppKit/CPShadow.j b/AppKit/CPShadow.j index 2246dbf58..06656f2c6 100644 --- a/AppKit/CPShadow.j +++ b/AppKit/CPShadow.j @@ -22,6 +22,9 @@ @import +@import "CGGeometry.j" +@import "CPColor.j" +@import "CPGraphicsContext.j" /*! @deprecated @@ -31,9 +34,9 @@ */ @implementation CPShadow : CPObject { - CGSize _offset @accessors(property=shadowOffset); + CGSize _offset @accessors(property=shadowOffset); float _blurRadius @accessors(property=shadowBlurRadius); - CPColor _color @accessors(property=shadowColor); + CPColor _color @accessors(property=shadowColor); } /*! From 2fc75be3dddf0ad91b4b942bbf18991c2aa46ca0 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Wed, 14 Jan 2015 17:12:16 -0500 Subject: [PATCH 224/234] Fixed: CPStepper class method returns `id` instead of CPStepper type Previously the CPStepper class returned the `CPStepper` type instead of the `id` type. This caused warnings to be raised when initializing subclasses of CPStepper. This commit fixes this issue by specifying the `id` type in the return values. Fixes #2293 --- AppKit/CPStepper.j | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/AppKit/CPStepper.j b/AppKit/CPStepper.j index 928180f62..3436d062f 100644 --- a/AppKit/CPStepper.j +++ b/AppKit/CPStepper.j @@ -25,7 +25,6 @@ @import "CPTextField.j" - /*! CPStepper is an implementation of Cocoa NSStepper. @@ -53,9 +52,9 @@ @param maxValue the maximal acceptable value of the stepper @return Initialized CPStepper */ -+ (CPStepper)stepperWithInitialValue:(float)aValue minValue:(float)aMinValue maxValue:(float)aMaxValue ++ (id)stepperWithInitialValue:(float)aValue minValue:(float)aMinValue maxValue:(float)aMaxValue { - var stepper = [[CPStepper alloc] initWithFrame:CGRectMakeZero()]; + var stepper = [[self alloc] initWithFrame:CGRectMakeZero()]; [stepper setDoubleValue:aValue]; [stepper setMinValue:aMinValue]; @@ -75,14 +74,14 @@ @return Initialized CPStepper */ -+ (CPStepper)stepper ++ (id)stepper { return [CPStepper stepperWithInitialValue:0.0 minValue:0.0 maxValue:59.0]; } + (Class)_binderClassForBinding:(CPString)aBinding { - if (aBinding == CPValueBinding || aBinding == CPMinValueBinding || aBinding == CPMaxValueBinding) + if (aBinding === CPValueBinding || aBinding === CPMinValueBinding || aBinding === CPMaxValueBinding) return [_CPStepperValueBinder class]; return [super _binderClassForBinding:aBinding]; @@ -90,7 +89,7 @@ - (CPString)_replacementKeyPathForBinding:(CPString)aBinding { - if (aBinding == CPValueBinding) + if (aBinding === CPValueBinding) return @"doubleValue"; return [super _replacementKeyPathForBinding:aBinding]; @@ -240,7 +239,7 @@ if (![self isEnabled]) return; - if (aSender == _buttonUp) + if (aSender === _buttonUp) [self setDoubleValue:([self doubleValue] + _increment)]; else [self setDoubleValue:([self doubleValue] - _increment)]; @@ -293,7 +292,7 @@ - (void)_updatePlaceholdersWithOptions:(CPDictionary)options forBinding:(CPString)aBinding { - var placeholder = (aBinding == CPMaxValueBinding) ? [_source maxValue] : [_source minValue]; + var placeholder = (aBinding === CPMaxValueBinding) ? [_source maxValue] : [_source minValue]; [super _updatePlaceholdersWithOptions:options]; From 9b16d3624e91cd5100a7bb94980b4cf9537e1d52 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 14 Jan 2015 17:15:37 -0800 Subject: [PATCH 225/234] Fixed: showcase of themes are broken Previously the showcase of the themes were broken. This was due to a change of the CPCollectionView, previously we used to use the delegate collectionViewDidChange. This delegate method has been removed. We now use an observer on the selectionIndexes. --- AppKit/Themes/BlendKit/BKShowcaseController.j | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/AppKit/Themes/BlendKit/BKShowcaseController.j b/AppKit/Themes/BlendKit/BKShowcaseController.j index 99e0d0b05..5a57393fd 100644 --- a/AppKit/Themes/BlendKit/BKShowcaseController.j +++ b/AppKit/Themes/BlendKit/BKShowcaseController.j @@ -137,22 +137,27 @@ var BKLearnMoreToolbarItemIdentifier = @"BKLearnMoreToolbarItemId [theWindow setFullPlatformWindow:YES]; [theWindow makeKeyAndOrderFront:self]; + + [_themesCollectionView addObserver:self forKeyPath:@"selectionIndexes" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionInitial context:nil]; } -- (void)collectionViewDidChangeSelection:(CPCollectionView)aCollectionView +- (void)observeValueForKeyPath:(CPString)keyPath ofObject:(id)object change:(CPDictionary)change context:(void)context { - var themeDescriptorClass = _themeDescriptorClasses[[[aCollectionView selectionIndexes] firstIndex]], - itemSize = [themeDescriptorClass itemSize]; + if (object == _themesCollectionView && keyPath == @"selectionIndexes") + { + var themeDescriptorClass = _themeDescriptorClasses[[[object selectionIndexes] firstIndex]], + itemSize = [themeDescriptorClass itemSize]; - // Make room for label and apply a minimum size. - itemSize.width = MAX(100.0, itemSize.width + 20.0); - itemSize.height = MAX(100.0, itemSize.height + 30.0); + // Make room for label and apply a minimum size. + itemSize.width = MAX(100.0, itemSize.width + 20.0); + itemSize.height = MAX(100.0, itemSize.height + 30.0); - [_themedObjectsCollectionView setMinItemSize:itemSize]; - [_themedObjectsCollectionView setMaxItemSize:itemSize]; + [_themedObjectsCollectionView setMinItemSize:itemSize]; + [_themedObjectsCollectionView setMaxItemSize:itemSize]; - [_themedObjectsCollectionView setContent:[themeDescriptorClass themedShowcaseObjectTemplates]]; - [BKShowcaseCell setBackgroundColor:[themeDescriptorClass showcaseBackgroundColor]]; + [_themedObjectsCollectionView setContent:[themeDescriptorClass themedShowcaseObjectTemplates]]; + [BKShowcaseCell setBackgroundColor:[themeDescriptorClass showcaseBackgroundColor]]; + } } - (BOOL)hasLearnMoreURL From f03adf727b7b767c5a270026fd2385d2b466aec7 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 15 Jan 2015 13:59:19 -0500 Subject: [PATCH 226/234] Fixed: Inconsistent naming of CPDOMDisplayServerSetStyleBackgroundSize Previously the method `CPDOMDisplayServerSetStyleBackgroundSize` was named `CPDomDisplayServerSetStyleBackgroundSize`, which was inconsistent with the names of all other similar methods in the CPDOMDisplayServer.h file. This commit fixes this and updates all instances of its use in CPView.j. --- AppKit/CPView.j | 28 ++++++++++++------------ AppKit/Platform/DOM/CPDOMDisplayServer.h | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 01e486fe2..18d09d25e 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -1095,7 +1095,7 @@ var CPViewFlags = { }, // Make sure to repeat the top and bottom pieces horizontally if they're not the exact width needed. if (top) { - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", top + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", top + "px"); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], size.width, top); partIndex++; } @@ -1103,13 +1103,13 @@ var CPViewFlags = { }, { var height = frameSize.height - top - bottom; - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", height + "px"); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], size.width, size.height - top - bottom); partIndex++; } if (bottom) { - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", bottom + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", bottom + "px"); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], size.width, bottom); } } @@ -1121,7 +1121,7 @@ var CPViewFlags = { }, // Make sure to repeat the left and right pieces vertically if they're not the exact height needed. if (left) { - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], left + "px", frameSize.height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], left + "px", frameSize.height + "px"); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], left, size.height); partIndex++; } @@ -1129,13 +1129,13 @@ var CPViewFlags = { }, { var width = (frameSize.width - left - right); - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], width + "px", frameSize.height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], width + "px", frameSize.height + "px"); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], size.width - left - right, size.height); partIndex++; } if (right) { - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], right + "px", frameSize.height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], right + "px", frameSize.height + "px"); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], right, size.height); } } @@ -1889,7 +1889,7 @@ var CPViewFlags = { }, _DOMImageParts[0].style.background = [_backgroundColor cssString]; if (patternImage) - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[0], [patternImage size].width + "px", [patternImage size].height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[0], [patternImage size].width + "px", [patternImage size].height + "px"); if (CPFeatureIsCompatible(CPOpacityRequiresFilterFeature)) _DOMImageParts[0].style.filter = "alpha(opacity=" + [_backgroundColor alphaComponent] * 100 + ")"; @@ -1903,7 +1903,7 @@ var CPViewFlags = { }, _DOMElement.style.background = colorCSS; if (patternImage) - CPDomDisplayServerSetStyleBackgroundSize(_DOMElement, [patternImage size].width + "px", [patternImage size].height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMElement, [patternImage size].width + "px", [patternImage size].height + "px"); } else { @@ -2008,7 +2008,7 @@ var CPViewFlags = { }, // Make sure to repeat the top and bottom pieces horizontally if they're not the exact width needed. if (top) { - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", top + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", top + "px"); CPDOMDisplayServerSetStyleLeftTop(_DOMImageParts[partIndex], NULL, 0.0, 0.0); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], frameSize.width, top); partIndex++; @@ -2018,14 +2018,14 @@ var CPViewFlags = { }, var height = frameSize.height - top - bottom; //_DOMImageParts[partIndex].style.backgroundSize = frameSize.width + "px " + height + "px"; - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", height + "px"); CPDOMDisplayServerSetStyleLeftTop(_DOMImageParts[partIndex], NULL, 0.0, top); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], frameSize.width, height); partIndex++; } if (bottom) { - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", bottom + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], frameSize.width + "px", bottom + "px"); CPDOMDisplayServerSetStyleLeftBottom(_DOMImageParts[partIndex], NULL, 0.0, 0.0); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], frameSize.width, bottom); } @@ -2040,7 +2040,7 @@ var CPViewFlags = { }, // Make sure to repeat the left and right pieces vertically if they're not the exact height needed. if (left) { - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], left + "px", frameSize.height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], left + "px", frameSize.height + "px"); CPDOMDisplayServerSetStyleLeftTop(_DOMImageParts[partIndex], NULL, 0.0, 0.0); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], left, frameSize.height); partIndex++; @@ -2049,14 +2049,14 @@ var CPViewFlags = { }, { var width = (frameSize.width - left - right); - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], width + "px", frameSize.height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], width + "px", frameSize.height + "px"); CPDOMDisplayServerSetStyleLeftTop(_DOMImageParts[partIndex], NULL, left, 0.0); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], width, frameSize.height); partIndex++; } if (right) { - CPDomDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], right + "px", frameSize.height + "px"); + CPDOMDisplayServerSetStyleBackgroundSize(_DOMImageParts[partIndex], right + "px", frameSize.height + "px"); CPDOMDisplayServerSetStyleRightTop(_DOMImageParts[partIndex], NULL, 0.0, 0.0); CPDOMDisplayServerSetStyleSize(_DOMImageParts[partIndex], right, frameSize.height); } diff --git a/AppKit/Platform/DOM/CPDOMDisplayServer.h b/AppKit/Platform/DOM/CPDOMDisplayServer.h index 614d10ecf..0ec941984 100644 --- a/AppKit/Platform/DOM/CPDOMDisplayServer.h +++ b/AppKit/Platform/DOM/CPDOMDisplayServer.h @@ -80,7 +80,7 @@ aDOMElement.style.bottom = ROUND(____p.y) + "px"; aDOMElement.width = MAX(0.0, ROUND(aWidth));\ aDOMElement.height = MAX(0.0, ROUND(aHeight)); -#define CPDomDisplayServerSetStyleBackgroundSize(aDOMElement, aWidth, aHeight)\ +#define CPDOMDisplayServerSetStyleBackgroundSize(aDOMElement, aWidth, aHeight)\ aDOMElement.style.backgroundSize = aWidth + ' ' + aHeight; #define CPDOMDisplayServerAppendChild(aParentElement, aChildElement) aParentElement.appendChild(aChildElement) @@ -129,7 +129,7 @@ aDOMElement.style.bottom = ROUND(____p.y) + "px"; CPDOMDisplayServerInstructions[__index + 2] = aWidth;\ CPDOMDisplayServerInstructions[__index + 3] = aHeight; -#define CPDomDisplayServerSetStyleBackgroundSize(aDOMElement, aWidth, aHeight)\ +#define CPDOMDisplayServerSetStyleBackgroundSize(aDOMElement, aWidth, aHeight)\ aDOMElement.style.backgroundSize = aWidth + ' ' + aHeight; #define CPDOMDisplayServerAppendChild(aParentElement, aChildElement)\ From 6c47fc902394e9ed316072e7719673d719ed95ae Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 15 Jan 2015 20:28:46 +0100 Subject: [PATCH 227/234] disable forbidden dates --- AppKit/CPDatePicker/_CPDatePickerCalendar.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index 2d2e51348..c4ecb3866 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -737,7 +737,7 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" [dayTile setDate:[currentDate copy]]; [dayTile setStringValue:currentDate.getDate()]; - [dayTile setDisabled:![self isEnabled] || currentDate.getMonth() !== currentMonth.getMonth()]; + [dayTile setDisabled:![self isEnabled] || currentDate.getMonth() !== currentMonth.getMonth() || currentDate < [_datePicker minDate] || currentDate > [_datePicker maxDate]]; [dayTile setHighlighted:isPresentMonth && currentDate.getDate() == now.getDate()]; } From 056a1f6a3329b4fb7ce6c9f593068e7ba2df3bd3 Mon Sep 17 00:00:00 2001 From: Udo Schneider Date: Wed, 21 Jan 2015 23:53:49 +0100 Subject: [PATCH 228/234] Fixed: Wrong value parameter in CPObjectController>>setValue:forKey: --- AppKit/CPObjectController.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j index bd1703113..6cac9a80e 100644 --- a/AppKit/CPObjectController.j +++ b/AppKit/CPObjectController.j @@ -749,7 +749,7 @@ var CPObjectControllerContentKey = @"CPObjectControllerCo - (void)setValue:(id)theValue forKey:(CPString)theKeyPath { - [self setValue:theKeyPath forKeyPath:theKeyPath]; + [self setValue:theValue forKeyPath:theKeyPath]; } - (unsigned)count From 820eeb7752c0dec0197259b001dd0905be98e72b Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sun, 25 Jan 2015 17:30:14 +0100 Subject: [PATCH 229/234] _stopObservingFirstResponder -> _stopObservingFirstResponderForWindow: --- AppKit/CPTableView.j | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index d63951d82..6b06c377e 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -488,7 +488,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; [self _initSubclass]; - [self _startObservingFirstResponder]; + [self _startObservingFirstResponderForWindow:[self window]]; } - (void)_initSubclass @@ -5044,7 +5044,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad { [super viewWillMoveToWindow:aWindow]; - [self _stopObservingFirstResponder]; + [self _stopObservingFirstResponderForWindow:aWindow]; if (aWindow) [self _startObservingFirstResponderForWindow:aWindow]; @@ -5092,9 +5092,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_firstResponderDidChange:) name:_CPWindowDidChangeFirstResponderNotification object:aWindow]; } -- (void)_stopObservingFirstResponder +- (void)_stopObservingFirstResponderForWindow:(CPWindow)aWindow { - [[CPNotificationCenter defaultCenter] removeObserver:self name:_CPWindowDidChangeFirstResponderNotification object:[self window]]; + [[CPNotificationCenter defaultCenter] removeObserver:self name:_CPWindowDidChangeFirstResponderNotification object:aWindow]; } - (void)_firstResponderDidChange:(CPNotification)aNotification From 01bdddaee477ddd4c8212adc37e27a74c36a2914 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Tue, 27 Jan 2015 13:09:33 +0100 Subject: [PATCH 230/234] Merge 34c7ded (CPSelectionHighlightStyleNone and mouse click) --- AppKit/CPTableView.j | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index f8eed2803..fff746f86 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -5003,7 +5003,12 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self getColumn:@ref(column) row:@ref(row) forView:aView]; if (![self isRowSelected:row]) - return self; + { + if (_selectionHighlightStyle == CPTableViewSelectionHighlightStyleNone) + return aView; + + return self; + } } else if (!_isViewBased && [aView isKindOfClass:[CPControl class]] && ![aView isKindOfClass:[CPTextField class]]) { @@ -5115,7 +5120,8 @@ Your delegate can implement this method to avoid subclassing the tableview to ad // This makes sure the theming effects of a focused table remain in effect even as cells are being edited in it. [self _notifyViewDidBecomeFirstResponder]; - if (_editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && !_isViewBased) + // This is for cell-based tables only. In view-based mode, we do not change the textfield apprearence during an edit. + if (!_isViewBased && _editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && [responder isEditable]) { [responder setBezeled:YES]; [self _registerForEndEditingNote:responder]; From 452e03b894bc1862750744f10315a2f91436b922 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Tue, 27 Jan 2015 22:01:32 +0100 Subject: [PATCH 231/234] FIXED: remove observation in -init. It was already handled in -viewWillMoveToWindow: --- AppKit/CPTableView.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index fff746f86..d95072415 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -487,8 +487,6 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; _sortDescriptors = []; [self _initSubclass]; - - [self _startObservingFirstResponderForWindow:[self window]]; } - (void)_initSubclass From 32a73ad4b9b8d9c1b41aacbb326d407b3985f198 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Wed, 28 Jan 2015 14:45:35 +0100 Subject: [PATCH 232/234] FIXED: The text color of a checkbox inside a selected table row was black.\n Now it is white. the text-color values match the CPTextField values for the same theme states --- AppKit/Themes/Aristo2/ThemeDescriptors.j | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index 5fea39d42..fe31a04a9 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -1482,6 +1482,8 @@ var themedButtonValues = nil, [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], CPThemeStateNormal], [@"text-color", regularDisabledTextColor, CPThemeStateDisabled], + [@"text-color", [CPColor colorWithCalibratedWhite:51.0 / 255.0 alpha:1.0], CPThemeStateTableDataView], + [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"image-offset", CPCheckBoxImageOffset], // CPThemeStateControlSizeRegular From 6a1543cb8207253b7194b7240097d9a17e3b8a64 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 3 Feb 2015 16:46:49 -0800 Subject: [PATCH 233/234] Fixed: Duplicate unit-tests Previously, some unit-tests had the same name in a test file. Now they have unique name. --- Tests/AppKit/CPStepperTest.j | 4 +-- Tests/Foundation/CPIndexSetTest.j | 38 +++++++++++---------------- Tests/Foundation/CPMutableArrayTest.j | 22 ---------------- Tests/Foundation/CPTimeZoneTest.j | 2 +- 4 files changed, 18 insertions(+), 48 deletions(-) diff --git a/Tests/AppKit/CPStepperTest.j b/Tests/AppKit/CPStepperTest.j index ffc0bbf20..59ced54d5 100644 --- a/Tests/AppKit/CPStepperTest.j +++ b/Tests/AppKit/CPStepperTest.j @@ -32,14 +32,14 @@ [self assert:1 equals:[stepper doubleValue]]; } -- (void)testPerformIncreaseWithIncrement +- (void)testPerformClickUpIncreaseWithIncrement { [stepper setIncrement:10]; [stepper performClickUp:nil]; [self assert:10 equals:[stepper doubleValue]]; } -- (void)testPerformIncreaseWithIncrement +- (void)testPerformClickDownIncreaseWithIncrement { [stepper setIncrement:10]; [stepper performClickDown:nil]; diff --git a/Tests/Foundation/CPIndexSetTest.j b/Tests/Foundation/CPIndexSetTest.j index c2b59d90e..d86054a18 100644 --- a/Tests/Foundation/CPIndexSetTest.j +++ b/Tests/Foundation/CPIndexSetTest.j @@ -251,7 +251,13 @@ function descriptionWithoutEntity(aString) { var set1 = [CPIndexSet indexSetWithIndex:7], set2 = [CPIndexSet indexSetWithIndex:7], - set3 = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(7, 2)]; + set3 = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(7, 2)], + differentSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 11)], + equalSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 10)]; + + [self assertFalse:[_set isEqualToIndexSet:differentSet]]; + [self assertTrue:[_set isEqualToIndexSet:equalSet]]; + [self assertTrue:[_set isEqualToIndexSet:_set]]; [self assertFalse:[set1 isEqualToIndexSet:nil]]; [self assertTrue:[set1 isEqualToIndexSet:set2]]; @@ -263,7 +269,14 @@ function descriptionWithoutEntity(aString) { var set1 = [CPIndexSet indexSetWithIndex:7], set2 = [CPIndexSet indexSetWithIndex:7], - set3 = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(7, 2)]; + set3 = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(7, 2)], + differentSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 11)], + equalSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 10)]; + + [self assertFalse:[_set isEqual:nil]]; + [self assertFalse:[_set isEqual:differentSet]]; + [self assertTrue:[_set isEqual:equalSet]]; + [self assertTrue:[_set isEqual:_set]]; [self assertFalse:[set1 isEqual:nil]]; [self assertFalse:[set1 isEqual:7]]; @@ -398,27 +411,6 @@ function descriptionWithoutEntity(aString) [self assert:[_set count] equals:0]; } -- (void)testIsEqual -{ - var differentSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 11)], - equalSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 10)]; - - [self assertFalse:[_set isEqual:nil]]; - [self assertFalse:[_set isEqual:differentSet]]; - [self assertTrue:[_set isEqual:equalSet]]; - [self assertTrue:[_set isEqual:_set]]; -} - -- (void)testIsEqualToIndexSet -{ - var differentSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 11)], - equalSet = [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(10, 10)]; - - [self assertFalse:[_set isEqualToIndexSet:differentSet]]; - [self assertTrue:[_set isEqualToIndexSet:equalSet]]; - [self assertTrue:[_set isEqualToIndexSet:_set]]; -} - - (void)testEnumerateIndexesUsingBlock_ { var set0 = [CPIndexSet indexSet], diff --git a/Tests/Foundation/CPMutableArrayTest.j b/Tests/Foundation/CPMutableArrayTest.j index ddc2520ce..cdc75b7b4 100644 --- a/Tests/Foundation/CPMutableArrayTest.j +++ b/Tests/Foundation/CPMutableArrayTest.j @@ -176,28 +176,6 @@ [self assert:array equals:[arrayClass array]]; } -- (void)test_removeAllObjects -{ - var arrayClass = [[self class] arrayClass], - array = [arrayClass array]; - - [array removeAllObjects]; - [self assert:0 same:[array count]]; - [self assert:[arrayClass array] equals:array]; - - array = [arrayClass arrayWithObjects:0, 1, 2, 3, 4, 5, 6]; - - [array removeAllObjects]; - [self assert:0 same:[array count]]; - [self assert:[arrayClass array] equals:array]; - - array = [arrayClass arrayWithObjects:0, 1, 2, 3, 4, 5, 6, [arrayClass arrayWithObjects:0, 1, 2]]; - - [array removeAllObjects]; - [self assert:0 same:[array count]]; - [self assert:[arrayClass array] equals:array]; -} - - (void)test_setArray_ { var arrayClass = [[self class] arrayClass], diff --git a/Tests/Foundation/CPTimeZoneTest.j b/Tests/Foundation/CPTimeZoneTest.j index 9ba2b1e1c..f23210fc1 100644 --- a/Tests/Foundation/CPTimeZoneTest.j +++ b/Tests/Foundation/CPTimeZoneTest.j @@ -83,7 +83,7 @@ [self assert:timeZone equals:nil]; } -- (void)testexceptionTimeZoneWithNilNameWithData +- (void)testexceptionTimeZoneWithNilName { try { From ef4cd6a4a75ca080f1710d934531a96e70ced914 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Fri, 6 Feb 2015 11:31:25 -0800 Subject: [PATCH 234/234] [NEW] --theme option for capp tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch provides a new option to capp. You can do ```objj capp gen [-f] [-l] -T CustomTheme1 -T CustomTheme2 MyProject ``` This will copy/symlink custom theme(s) from your CAPP_BUILD into the current project’s `Resources` folder --- Tools/capp/Generate.j | 77 ++++++++++++++++++++++++++++++++++++++++++- Tools/capp/main.j | 1 + 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/Tools/capp/Generate.j b/Tools/capp/Generate.j index 63288c6d2..a3412bdcd 100644 --- a/Tools/capp/Generate.j +++ b/Tools/capp/Generate.j @@ -48,6 +48,11 @@ parser.option("-F", "--framework", "framework", "frameworks") .push() .help("Additional framework to copy/symlink (default: Objective-J, Foundation, AppKit)"); +parser.option("-T", "--theme", "theme", "themes") + .def([]) + .push() + .help("Additional Theme to copy/symlink into Resource (default: nothing)"); + parser.option("--no-frameworks", "noFrameworks") .set(true) .help("Don't copy any default frameworks (can be overridden with -F)"); @@ -145,13 +150,17 @@ function gen(/*va_args*/) var destinationProject = destination, configuration = options.noconfig ? [Configuration defaultConfiguration] : [Configuration userConfiguration], - frameworks = options.frameworks; + frameworks = options.frameworks, + themes = options.themes; if (!options.noFrameworks) frameworks.push("Objective-J", "Foundation", "AppKit"); if (options.justFrameworks) + { createFrameworksInFile(frameworks, destinationProject, options.symlink, options.useCappBuild, options.force); + createThemesInFile(themes, destinationProject, options.symlink, options.force); + } else if (!FILE.exists(destinationProject)) { @@ -204,6 +213,11 @@ function gen(/*va_args*/) frameworkDestination = FILE.join(frameworkDestination, config.FrameworksPath); createFrameworksInFile(frameworks, frameworkDestination, options.symlink, options.useCappBuild); + + var themeDestination = destinationProject; + + if (themes.length) + createThemesInFile(themes, themeDestination, options.symlink); } else @@ -325,6 +339,67 @@ function installFramework(source, dest, force, symlink) warn("Cannot find: " + logPath(source)); } +function createThemesInFile(/*Array*/ themes, /*String*/ aFile, /*Boolean*/ symlink, /*Boolean*/ force) +{ + var destination = FILE.path(FILE.absolute(aFile)); + + if (!destination.isDirectory()) + fail("Cannot create Themes. The directory does not exist: " + destination); + + var destinationThemes = destination.join("Resources"); + + stream.print("Creating Themes in " + logPath(destinationThemes) + "..."); + + if (!(SYSTEM.env["CAPP_BUILD"])) + fail("$CAPP_BUILD must be defined to use the --theme or -T option."); + + var themesBuild = FILE.join(SYSTEM.env["CAPP_BUILD"], "Release"), + sources = []; + + themes.forEach(function(theme) + { + var themeFolder = theme + ".blend", + path = FILE.join(themesBuild, themeFolder); + + if (!FILE.isDirectory(path)) + fail("Cannot find theme " + themeFolder + " in " + themesBuild); + + sources.push([FILE.path(path), themeFolder]) + }); + + sources.forEach(function(source) + { + installTheme(source[0], FILE.path(destinationThemes).join(source[1]), force, symlink); + }); +} + +function installTheme(source, dest, force, symlink) +{ + if (dest.exists()) + { + if (force) + dest.rmtree(); + + else + { + warn(logPath(dest) + " already exists. Use --force to overwrite."); + return; + } + } + + if (source.exists()) + { + stream.print((symlink ? "Symlinking " : "Copying ") + logPath(source) + " ==> " + logPath(dest)); + + if (symlink) + FILE.symlink(source, dest); + else + FILE.copyTree(source, dest); + } + else + warn("Cannot find: " + logPath(source)); +} + function toIdentifier(/*String*/ aString) { var identifier = "", diff --git a/Tools/capp/main.j b/Tools/capp/main.j index 2ff5e9bc2..eb17585d5 100644 --- a/Tools/capp/main.j +++ b/Tools/capp/main.j @@ -47,6 +47,7 @@ function printUsage() print(" -t, --template NAME Specify the template name to use (see `capp gen --list-templates`)"); print(" -f, --frameworks Copy/symlink *only* the Frameworks directory to a new or existing project"); print(" -F, --framework NAME Additional framework to copy/symlink (default: Objective-J, Foundation, AppKit)") + print(" -T, --theme NAME Additional Theme to copy/symlink into Resource (default: nothing)") print(" --force Overwrite Frameworks directory if it already exists"); print(" --symlink Symlink the source Frameworks directory to the project, don't copy"); print(" --build Copy/symlink the Frameworks directory files from your $CAPP_BUILD directory");