home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / LaVolpe_Co20381712172006.psc / cNodeCollection.cls < prev   
Text File  |  2006-12-17  |  135KB  |  1,977 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cNodeCollection"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. ' Full Version  Full Version  Full Version  Full Version
  17. ' ********************************************************
  18. '       FULL VERSION NODE-BASED COLLECTION CLASS
  19. ' ********************************************************
  20. ' Full Version  Full Version  Full Version  Full Version
  21.  
  22.  
  23. ' DESCRIPTION:  A node-based, parent-child, collection class.
  24. '   This class combines treeview-like collections with VB's collection & dictionary objects. Collection items have heirarchy.
  25. '   Can be used without hierarchy by simply not provding a Parent/Sibling Key when adding items
  26.  
  27.  
  28. ' CHANGE HISTORY
  29. '--------------------------------------------------------------------------------------------------------------
  30. '  Updated the MethodsProps.rtf file, as needed, with every change
  31. ' 17 Dec 06. Added support to for saving persistent objects in SaveCollection
  32. '   - persistent objects include stdPictures and stdFonts
  33. ' 15 Dec 06. Finalizing project.
  34. '   - Found in specific scenarios, a deserialized object's reference count was one more than it should be. Corrected
  35. '   - When creating arrays, array features are now determined and added to the array attributes for all array types
  36. '   - Variants containing UDTs (user-defined types) are not persisted when saving collection
  37. '       -- UDTs can be saved to a Variant only if the UDT is public in a class within a compiled reference (DLL, OCX, etc)
  38. '   - Variants returning a VarType of vbError or vbDataObject are not persisted when saving collection
  39. '       -- Haven't been able to break those down at this point. IUnknown objects appear, from testing, to be vbDataObjects
  40. ' 14 Dec 06.
  41. '   - Completely revamped the serialization and deserialization routines
  42. '     (See GetSerializedItem & SetSerializedItem)
  43. '       -- Now all array types, including variant arrays, are supported
  44. '       -- Arrays are no longer restricted to number of dimensions
  45. '       -- Objects (i.e., Classes) within arrays still need to be serialized by user
  46. '       -- Parameters in Public Event SerializeObject has been changed
  47. '   - Added tons of remarks to the serialization & deserialization routines
  48. ' 10 Dec 06.
  49. '   - Playing more with manipulating multidimensional arrays via pointers.
  50. '       -- Removed logic that wrapped the collection item in a variant. This actually
  51. '          forces VB to copy the array and we don't need a copy;
  52. '          we can work directly off the collection item vs a variant wrapper
  53. ' 9 Dec 06.
  54. '   - Added SiblingOffsetIndex method
  55. '   - Changed SortCollection to return True if successful
  56. '   - Changed SaveCollection & LoadCollection to return True if successful
  57. '   - Upgraded SaveCollection to auto-save multidimensional arrays of all data types
  58. '       except Variants and Objects/UDTs (those still require SerializeObject event)
  59. '       -- With above exceptions, any multidimensional array containing more than
  60. '          10 dimensions will no longer be able to be saved/persisted
  61. '       -- Resulted in permanent removal of Public Events SerializeStringArray & SerializeArray
  62. '   - Changed ClearKeys method to clear individual branch levels or entire collection
  63. '   - Renamed CountCollection to ItemCount
  64. '   - Renamed CountChildren to ChildCount
  65. '   - Removed IsSiblingOf. Calling myCol.Parent(Index)=myCol.Parent(OtherIndex) results in same thing
  66. '   - Removed CountSiblings. Calling myCol.ChildCount(ParentIndex) results in same thing
  67. '       -- when ParentIndex is zero or vbNullString, root level nodes are counted
  68. ' 8 Dec 06.
  69. '   - Found minor bugs in the ShellSortString routine. Fixed
  70. '   - Added optional parameter in MoveItem to allow a new key to be assigned along with the move
  71. '   - Merged the AddKey routine into the FindKey routine; no need to keep it separate
  72. ' 7 Dec 06.
  73. '   - the FamilyTreeStructure, when used, was being dimensioned with 3 elements; only 2 are needed. Changed
  74. '   - Added SortCollection method
  75. '       -- Required new supporting routines: ShellSortNumbers, ShellSortString, SortRecursiveNodes, SortNodeLevel
  76. '   - Added additional Relationship enumerations to allow sorting when a child node is added or moved
  77. '       -- Required new supporting routine: GetChildInsertPosition
  78. '   - Added IndexFromKeyIndex method
  79. '   - Changed Parent function to a read/write property
  80. '   - Removed obsolete enumerations
  81. ' 6 Dec 06 - Initial release
  82. '--------------------------------------------------------------------------------------------------------------
  83.  
  84. ' Highlights include....
  85. ' ============================================================================================================
  86. ' 1) Key or key-less items. Keys can be numeric or not, case-sensitive or not. vbNullString is reserved and cannot be used.
  87. ' 2) TreeView-Like methods:  AddItem(item,key,parent or sibling), First/Next/PreviousSibling, First/LastChild, etc
  88. ' 3) Assigned keys can be changed as desired, but still must be unique if used.
  89. ' 4) Nodes, and any children, are moved/deleted in one call
  90. ' 5) Provides nice-to-have functions like KeyExists, KeyToIndex, HasChildren, MoveItem (from one node to another) & more
  91. ' 6) Change contents of an item without having to delete/re-add
  92. ' 7) Fast navigation via doubly linked lists
  93. ' 8) Value-based collection; therefore, instantiated objects (i.e., Classes) added to collection are kept alive until removed from collection
  94. ' 9) Has ability to save/load collection with restrictions. If you use this ability, declare this class WithEvents
  95. '     See SaveCollection, LoadCollection, and the Public Event
  96. ' 10) Now has sorting ability too
  97.  
  98. ' SPECIAL CONSIDERATIONS.....
  99. ' ============================================================================================================
  100. ' 1) Collection heirarchy are linked lists. Indexes of items should not be cached by you.
  101. '    Indexes change dynamically when items are deleted or a new collection is loaded
  102. ' 2) Above being said, keys should be used. If keys aren't used, then you should use the
  103. '    following methods to obtain indexes or to loop thru the collection:
  104. '    - FirstChild, LastChild returns relative indexes based on a passed parent node index/key
  105. '    - FirstSibling, LastSibling returns relative indexes based on passed sibling node index/key
  106. '    - NextSibling, PreviousSibling returns relative indexes based on passed sibling/child node index/key
  107. '    - SiblingOffsetIndex returns sibling x positions from the first or last sibling
  108. '       Whenever a Child or Sibling index method returns zero, you are at the beginning or end of the branch
  109. ' 3) Speaking of keys. Since numeric keys can be used too, all methods, that allow
  110. '    a Variant Key/Index, have no way of knowing if "1234" is a numeric key or an index.
  111. '    The type of passed variable determines whether the class treats the parameter as a
  112. '    key or index. VarType of String are ALWAYS treated as Keys, whereas,
  113. '    VarType of Byte,Integer,Long,Single,Double,Currency are ALWAYS treated as Indexes
  114. '    Example:
  115. '       Dim strIndex As String, lngIndex As Long
  116. '       Dim strKey As String, lngKey As Long
  117. '       strIndex="99": lngIndex=99
  118. '       strKey="-123899": lngIndex=-123899
  119. '    Getting Item by Index:  Either Class.Item(lngIndex) or Class.Item(CLng(strIndex))
  120. '    Getting Item by Key: Either Class.Item(strKey) or Class.Item(CStr(lngKey))
  121. ' 4) Sorting
  122. '    - The collection can now be sorted. See SortCollection method for restrictions in what can and cannot be sorted.
  123. '    - Another option is to assign keys which are sorted (remember keys can be numeric or not), you can request an
  124. '       item by its key index. Keys are always sorted ascending order. To reverse sort, get the item's key index
  125. '       in descending order.  See IndexFromKeyIndex method.
  126. '    - Yet another option is to dictate where an item is to be added to a collection by properly identifying
  127. '       which Sibling the item should be added before or after.
  128. '   Once items are set in their positions, their positions can only be changed using 4 methods. Even if an item's
  129. '   index changes due to collection item deletes, the remaining items' positions relative to their siblings do not
  130. '   change. The 4 methods that change positions of items are AddItem, MoveItem, MoveChildren, SortCollection
  131.  
  132. ' RESTRICTIONS/LIMITATIONS
  133. ' ============================================================================================================
  134. ' 1) The LoadCollection, SaveCollection, SaveProperties, GetSerializedItem & the Public Events should be removed for VB5 users.
  135. '    - VB5 does not support creating property bags. i.e., Set ppBag=New PropertyBag is an error in VB5
  136. '    - Should you still want to replicate the LoadCollection/SaveCollection functions, you will have to write your own.
  137. '       Suggest possibly using something similiar to an INI file format and caching the bytes of that file?
  138. '    - Likewise, the example below for SerializeObject, of serailizing a class, will need to be reworked/rethought for VB5 users.
  139. ' 2) Sorting on items containing primarily objects can only be successful 100% of the time when all of the objects
  140. '    have a common public property whose value can be compared/sorted. Otherwise, you will need to sort the objects yourself
  141.  
  142. ' PUBLIC EVENTS
  143. ' ============================================================================================================
  144. ' Should you want this class to cache the collection, it can, except for objects; is that true?....
  145. ' NOTE: This class doesn't save anything, it organizes the entire collection into an array
  146. ' that is passed via the SaveCollection method. That array can be written by you to a user file or,
  147. ' if this is used within a usercontrol, to the property bag (yes, property bags can store byte arrays,
  148. ' but not arrays of other data types). That same array must not be altered thereafter and then can be
  149. ' passed to the LoadCollection method to re-create the collection. Interested?  Read just a little bit more.
  150.  
  151. ' When your collection contains objects (i.e., Classes), you will need a way of serializing your class
  152. ' into a byte array and pass the byte array as a response to the SerializeObject Event when it is
  153. ' called.  This event is called from SaveCollection method to get your serialized object and
  154. ' also from LoadCollection to pass the serialized array back to you for deserializing
  155.  
  156. ' You will get this event called for each collection item or arrayed item of a collection item that contains an Object
  157. Public Event SerializeObject(ByVal Serialize As Boolean, ByRef collectionObject As Object, ByRef DataArray() As Byte, ByRef ObjectID As String)
  158.  
  159. '   If Serialize=True :: You are to serialize the passed object into the DataArray()
  160. '       collectionObject. A non-Nothing object within your collection.
  161. '           -- Test the type object, if needed, by using TypeOf(collectionObject) Is classWhatever
  162. '       DataArray(). An empty array you are to fill with the contents of the serailized object
  163. '           -- The serialized object in DataArray can be multidimensional & any LBound.
  164. '       ObjectID (Optional) :: a name you provide that uniquely distinguishes the kind of object it is. This is usually a Class Type.
  165. '           -- When you get the array back for deserialization, you may or many not included flags to indicate which class/object
  166. '               type it was created from (i.e., "cMyClass"). Therefore knowing which class to create from array may be impossible
  167.  
  168. '   If Serialize=False :: You are to deserialize the DataArray() into the passed collectionObject
  169. '       collectionObject. An empty object to be set from the deserailized array
  170. '           -- i.e, deserialize DataArray into a new classWhatever, then Set collectionObject=classWhatever
  171. '       DataArray(). A populated array you are to use to create a new object
  172. '           -- The DataArray will be same size, dimensions, and have same LBound/UBound you passed when Serialize=True
  173. '       ObjectID (Optional) :: If the ObjectID was provided when Serialize=True, the the value you provided else vbNullString
  174.  
  175. ' How do you serialize an object? For a class object, it is rather simple. This is just one possible way.
  176. ' - Create a Friend Function SaveClass(ClassBytes() As Byte) As Boolean
  177.     ' - Within that function Dim myData As New PropertyBag
  178.     ' - Just like an OCX, write your class values into the property bag
  179.     ' - Pass the property bag like so:  ClassBytes() = myData.Contents()
  180. ' - Create a Friend Function LoadClass(ClassBytes() As Byte) As Boolean
  181.     ' - Within that function Dim myData As New PropertyBag
  182.     ' - Set the propety bag contents: myData.Contents() = ClassBytes(). Use On Error statement(s)
  183.     ' - Just like an OCX, read your class values from the property bag
  184.  
  185.  
  186.  
  187. ' TYPE DECLARATIONS, ENUMERATIONS AND CONSTANTS
  188. ' ============================================================================================================
  189. ' only API used; think this is a first for me--just one API ;)
  190. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  191.  
  192. Private Type KeyStructure
  193.     Index As Long                   ' index into the m_Col() array
  194.     Key As String                   ' the key
  195. End Type
  196. Private Type FamilyTreeStructure
  197.     Tree() As Long                  ' For parent nodes only, array contains First Child, Last Child indexes for fast insert/delete/enumeration
  198. End Type
  199. Private Type CollectStructure       ' contains relationships between node siblings/children
  200.     Parent As Long                  ' index value of the parent node, if zero then this is a main level node
  201.     Elder As Long                   ' if zero then this is the last sibling, else index of next sibling (linked list)
  202.     Younger As Long                 ' if zero then this is the first sibling, else index of previous sibling (reverse linked list)
  203.     Key As Long                     ' if zero then item is not keyed, else StrPtr of the Key: See VBStringFromBSTRpointer function
  204.     Family As FamilyTreeStructure   ' See Structure above ^^
  205.     Item As Variant                 ' your custom collection data item
  206. End Type
  207.     ' ^^ 20 bytes overhead/admin per item + 16 for the Variant + (if keyed add 8 bytes & if has children add another 8 bytes)
  208.     
  209. Private Enum eTreeMembers            ' internal use only
  210.     treefirst = 1
  211.     treelast = 2
  212. End Enum
  213. Public Enum eNodeRelationship   ' see AddItem for description of meaning
  214.     relFirstSibling = 0
  215.     relLastSibling = 1
  216.     relNextSibling = 2
  217.     relPrevSibling = 3
  218.     relFirstChild = 4
  219.     relLastChild = 5
  220.     relChildSortedAsText_Asc = 6
  221.     relChildSortedBinaryText_Asc = 8
  222.     relChildSortedAsNumeric_Asc = 10
  223.     relChildSortedAsText_Desc = 7
  224.     relChildSortedBinaryText_Desc = 9
  225.     relChildSortedAsNumeric_Desc = 11
  226. End Enum
  227. Public Enum eCompareEnum
  228.     keyCaseSensitive = 0
  229.     keyCaseInsensitive = 1
  230. End Enum
  231. Public Enum eSortLevel          ' see SortCollection & ClearKeys for description of meaning
  232.     brchAllLevels = 0
  233.     brchSiblings = 1
  234.     brchChildren = 2
  235. End Enum
  236. Public Enum eSortOptions        ' see SortCollection for description of meaning
  237.     srtTextText = 0
  238.     srtTextBinary = 1
  239.     srtAsNumeric = 2
  240. End Enum
  241.  
  242. ' possible return errors when adding/editing/removing items
  243. Public Enum ErrorEnum
  244.     ERROR_NOT_FOUND = &H80000500
  245.     ERROR_KEY_DUPLICATED = &H80000501
  246.     ERROR_INVALID_KEYINDEX = &H80000502
  247.     ERROR_INVALID_RELATIVEKEY = &H80000503
  248.     ERROR_INVALID_DATATYPE = &H80000504
  249.     ERROR_INVALID_PROPERTY = &H80000505
  250.     ERROR_INVALID_COLLECTION = &H80000506
  251.     ERROR_MAXIMUM_ITEMS_REACHED = &H80000507
  252. End Enum
  253.  
  254. Private Const MAXINT_4 As Long = 2147483647 ' max number of collection items
  255.                                             ' also used in SafeOffset routine
  256. ' class wide variables
  257. ' ============================================================================================================
  258. Private m_CompareType As eCompareEnum   ' key comparision; cannot be changed after 1st key is added to collection. Makes keys case sensitive or insensitive
  259. Private m_Buffer As Long                ' buffer of n items (default is 10) to help prevent Redimensioning collection after each add
  260. Private m_ItemCount As Long             ' number of items in the entire collection
  261. Private m_KeyCount As Long              ' number of keys (items do not require keys)
  262.  
  263. Private m_Keys() As KeyStructure        ' array of keys used
  264. Private m_Col() As CollectStructure     ' the collection
  265. Private m_Objects() As Object           ' may be used temporarily when loading a previously saved object. Referenced in LoadColllection, SetSerializedItem
  266.  
  267. Public Function AddItem(Item As Variant, Optional ByVal Key As String = vbNullString, _
  268.             Optional RelativeKeyIndex As Variant = vbNullString, _
  269.             Optional ByVal Relationship As eNodeRelationship = relNextSibling) As Long
  270.  
  271.     ' PURPOSE: Add/append/insert an item into the collection
  272.     
  273.     ' Item.{Required} Any VB number, string, control, variant, object, etc
  274.     ' Key.{Optional} A key to reference this new item by. The key must be unique, can be numeric or not. Cannot be Null
  275.     ' RelativeKeyIndex.{Optional} The key or index to the node that the Relationship parameter applies too
  276.     '       -- If is vbNullString or zero, then the root will be used
  277.     ' Relationship.{Optional}. Default is relNextSibling
  278.     '       -- relFirstChild. The new node will become the first child of the node ref'd by RelativeKeyIndex
  279.     '       -- relLastChild. The new node will become the last child of the node ref'd by RelativeKeyIndex
  280.     '       -- relFirstSibling. The new node will become the first child of the parent of the node ref'd by RelativeKeyIndex
  281.     '       -- relLastSibling. The new node will become the last child of the parent of the node ref'd by RelativeKeyIndex
  282.     '       -- relNextSibling. The new node will be inserted between the node ref'd by RelativeKeyIndex and its next sibling
  283.     '       -- relPrevSibling. The new node will be inserted between the node ref'd by RelativeKeyIndex and its previous sibling
  284.     '   The following do not apply for items containing arrays or objects and will reset to relLastChild if that case
  285.     '       -- relChildSortedAsNumeric_Asc. If Item is String or Numeric/Date, place child in sorted position comparing siblings as Numbers
  286.     '       -- relChildSortedAsNumeric_Desc. If Item is String or Numeric/Date, place child in sorted position comparing siblings as Numbers
  287.     '       -- relChildSortedAsText_Asc. If item is String, place child in sorted position comparing siblings non case-sensitive
  288.     '       -- relChildSortedAsText_Desc. If item is String, place child in sorted position comparing siblings non case-sensitive
  289.     '       -- relChildSortedBinaryText_Asc. If item is String, place child in sorted position comparing siblings case-sensitive
  290.     '       -- relChildSortedBinaryText_Desc. If item is String, place child in sorted position comparing siblings case-sensitive
  291.     ' Return value. If no errors encounterd, return value is current Index of newly added item
  292.  
  293.     ' Note about Overflow checks in AddItem, DeleteNode and FindKey(adding a key)...
  294.     ' IMO they are probably useless. If the collection got so big as to contain over
  295.     ' a million items, user would probably run out of memory first. But we make the
  296.     ' checks anyway as a measure of professionalism.
  297.     
  298.     Dim newIndex As Long, KeyIndex As Long, relIndex As Long, pIndex As Long
  299.     Dim vType As Integer
  300.     
  301.     If Not RelativeKeyIndex = vbNullString Then ' validate relative's key/index exists
  302.         relIndex = ConvertKeyToIndex(RelativeKeyIndex, True)
  303.         If relIndex < 0 Then
  304.             Err.Raise ERROR_INVALID_RELATIVEKEY, "Collection.AddItem", "Relative Key is Invalid"
  305.         End If
  306.     End If
  307.     
  308.     ' determine position of the new item
  309.     If m_ItemCount = 0 Then
  310.         newIndex = 1
  311.     ElseIf m_ItemCount = MAXINT_4 Then
  312.         ' what are the odds; better off checking anyway
  313.         Err.Raise ERROR_MAXIMUM_ITEMS_REACHED, "Collection.AddItem", "The Collection Is Full"
  314.     Else
  315.         newIndex = m_ItemCount + 1
  316.     End If
  317.     
  318.     If Not Key = vbNullString Then          ' validate the passed key is unique
  319.         KeyIndex = FindKey(Key, newIndex)
  320.         If KeyIndex < 0 Then
  321.             Err.Raise ERROR_KEY_DUPLICATED, "Collection.AddItem", "Key Already Exists in this Collection"
  322.         End If
  323.     End If
  324.     
  325.     ' add the item to our m_Col() array
  326.     If newIndex = 1 Then
  327.         ReDim m_Col(0 To newIndex + m_Buffer)
  328.     ElseIf UBound(m_Col) = m_ItemCount Then
  329.         If newIndex >= MAXINT_4 - m_Buffer Then ' over 2.4 trillion items?
  330.             ReDim Preserve m_Col(0 To MAXINT_4)
  331.         Else
  332.             ReDim Preserve m_Col(0 To newIndex + m_Buffer)
  333.         End If
  334.     End If
  335.     
  336.     m_ItemCount = m_ItemCount + 1
  337.     ' the Key member are pointers; this allows caching key as 4 bytes vs Len(Key)*2+4 bytes (BSTR String)
  338.     ' Also prevents reindexing m_Keys() array when it is added to or deleted from
  339.     m_Col(newIndex).Key = StrPtr(m_Keys(KeyIndex).Key) ' requires a little work getting key. See VBStringFromBSTRpointer
  340.     
  341.     ' get the true varType.
  342.     ' For example. VarType on a stdPicture returns vbLong not vbObject
  343.     CopyMemory vType, ByVal VarPtr(Item), 2&
  344.     vType = vType And Not &H4000    ' objects can be ByRef
  345.     
  346.     ' when not an object, use VB's VarType function
  347.     If Not vType = vbObject Then vType = VarType(Item)
  348.     Select Case vType
  349.     Case vbObject, vbDataObject, vbError
  350.         Set m_Col(newIndex).Item = Item
  351.     Case Else
  352.         m_Col(newIndex).Item = Item
  353.     End Select
  354.     
  355.     If Relationship > relLastChild And Relationship < relChildSortedAsNumeric_Desc + 1 Then
  356.         ' place in a sorted position.... determine the position among its other siblings
  357.         pIndex = GetChildInsertPosition(newIndex, relIndex, (Relationship - 6 + (Relationship Mod 2 = 1)), (Relationship Mod 2 = 0))
  358.         If pIndex = 0 Then ' this will be the last child
  359.             Relationship = relLastChild
  360.         Else    ' inserted before
  361.             relIndex = pIndex                   ' cache the existing node's index
  362.             Relationship = relPrevSibling       ' insert beore
  363.             pIndex = 0
  364.         End If
  365.     End If
  366.     
  367.     ' add parent and sibling links as needed
  368.     Select Case Relationship
  369.     
  370.         Case relFirstChild   ' this node will be 1st child of relIndex
  371.             If IsArrayEmpty(Not m_Col(relIndex).Family.Tree) Then
  372.                 InitializeTree relIndex, newIndex
  373.             Else
  374.                 With m_Col(relIndex).Family
  375.                     m_Col(newIndex).Elder = .Tree(treefirst)    ' fwd index
  376.                     m_Col(.Tree(treefirst)).Younger = newIndex  ' rev index
  377.                     .Tree(treefirst) = newIndex
  378.                 End With
  379.                 m_Col(newIndex).Parent = relIndex
  380.             End If
  381.             
  382.         Case relLastChild ' this node will be last child of relIndex
  383.             If IsArrayEmpty(Not m_Col(relIndex).Family.Tree) Then
  384.                 InitializeTree relIndex, newIndex
  385.             Else
  386.                 With m_Col(relIndex).Family
  387.                     m_Col(.Tree(treelast)).Elder = newIndex     ' fwd index
  388.                     m_Col(newIndex).Younger = .Tree(treelast)   ' rev index
  389.                     .Tree(treelast) = newIndex
  390.                 End With
  391.                 m_Col(newIndex).Parent = relIndex
  392.             End If
  393.             
  394.         Case relFirstSibling  ' (Insert At Beginning)
  395.             pIndex = m_Col(relIndex).Parent
  396.             If IsArrayEmpty(Not m_Col(pIndex).Family.Tree) Then
  397.                 InitializeTree pIndex, newIndex
  398.             Else
  399.                 With m_Col(pIndex).Family
  400.                     m_Col(newIndex).Elder = .Tree(treefirst)    ' fwd index
  401.                     m_Col(.Tree(treefirst)).Younger = newIndex  ' rev index
  402.                     .Tree(treefirst) = newIndex
  403.                 End With
  404.                 m_Col(newIndex).Parent = pIndex
  405.             End If
  406.             
  407.         Case relLastSibling  ' (Append To End)
  408.             pIndex = m_Col(relIndex).Parent
  409.             If IsArrayEmpty(Not m_Col(pIndex).Family.Tree) Then
  410.                 InitializeTree pIndex, newIndex
  411.             Else
  412.                 With m_Col(pIndex).Family
  413.                     m_Col(.Tree(treelast)).Elder = newIndex     ' fwd index
  414.                     m_Col(newIndex).Younger = .Tree(treelast)   ' rev index
  415.                     .Tree(treelast) = newIndex
  416.                 End With
  417.                 m_Col(newIndex).Parent = pIndex
  418.             End If
  419.             
  420.         Case relPrevSibling ' (InsertBefore)
  421.             If relIndex = 0 Then    ' core root (Default Parameter) cannot have siblings. Use its children
  422.                 If IsArrayEmpty(Not m_Col(relIndex).Family.Tree) Then
  423.                     InitializeTree relIndex, newIndex   ' collection not yet started, initialize it
  424.                 Else
  425.                     relIndex = m_Col(relIndex).Family.Tree(treefirst) ' set current sibling to first sibling
  426.                 End If
  427.             Else
  428.                 pIndex = m_Col(relIndex).Parent         ' user gave a non-root node, use it
  429.             End If
  430.             If Not relIndex < 1 Then
  431.                 ' update child links as needed
  432.                 If m_Col(pIndex).Family.Tree(treefirst) = relIndex Then m_Col(pIndex).Family.Tree(treefirst) = newIndex
  433.                 ' inserting node, set new node's linked list members
  434.                 m_Col(newIndex).Elder = relIndex                    ' fwd index
  435.                 m_Col(newIndex).Younger = m_Col(relIndex).Younger   ' rev index
  436.                 ' adjust moved node's linked list members
  437.                 If Not m_Col(relIndex).Younger = 0 Then ' not first sibling
  438.                     ' make moved nodes younger sibling point to new node as its older sibling
  439.                     m_Col(m_Col(relIndex).Younger).Elder = newIndex ' fwd index
  440.                 End If
  441.                 ' make moved node's younger sibling point to new node
  442.                 m_Col(relIndex).Younger = newIndex                  ' rev index
  443.                 m_Col(newIndex).Parent = pIndex
  444.             End If
  445.             
  446.         Case Else   'relNextSibling ' (InsertAfter)
  447.             If relIndex = 0 Then    ' core root (Default Parameter) cannot have siblings. Use its children
  448.                 If IsArrayEmpty(Not m_Col(relIndex).Family.Tree) Then
  449.                     InitializeTree relIndex, newIndex   ' collection not yet started, initialize it
  450.                 Else
  451.                     relIndex = m_Col(relIndex).Family.Tree(treelast) ' set current sibling to first sibling
  452.                 End If
  453.             Else
  454.                 pIndex = m_Col(relIndex).Parent         ' user gave a non-root node, use it
  455.             End If
  456.             If Not relIndex < 1 Then
  457.                 ' update child stats as needed
  458.                 If m_Col(pIndex).Family.Tree(treelast) = relIndex Then m_Col(pIndex).Family.Tree(treelast) = newIndex
  459.                 ' inserting node, set new node's linked list members
  460.                 m_Col(newIndex).Elder = m_Col(relIndex).Elder       ' fwd index
  461.                 m_Col(newIndex).Younger = relIndex                  ' rev index
  462.                 ' adjust moved node's linked list members
  463.                 If Not m_Col(relIndex).Elder = 0 Then ' not last sibling
  464.                     ' make moved nodes elder sibling point to new node as its younger sibling
  465.                     m_Col(m_Col(relIndex).Elder).Younger = newIndex ' rev index
  466.                 End If
  467.                 ' make moved node's elder sibling point to new node
  468.                 m_Col(relIndex).Elder = newIndex                 ' fwd index
  469.                 m_Col(newIndex).Parent = pIndex
  470.             End If
  471.         
  472.     End Select
  473.     AddItem = newIndex
  474.     
  475. End Function
  476.  
  477. Public Function RemoveItem(KeyIndex As Variant) As Boolean
  478.  
  479.     ' PURPOSE: Remove a node from the collection. Any child nodes will also be removed
  480.     
  481.     ' KeyIndex. A key string or numerical Index to reference the item by
  482.     ' Key cannot be vbNullString and the Index cannot be < 1
  483.     
  484.     Dim Index As Long
  485.     Index = ConvertKeyToIndex(KeyIndex, False)
  486.     If Index < 1 Then
  487.         Err.Raise ERROR_INVALID_KEYINDEX, "Collection.RemoveItem", "Invalid Key or Index"
  488.     Else
  489.         RemoveItem = DeleteNode(Index)
  490.     End If
  491.  
  492. End Function
  493.  
  494. Public Function RemoveChildren(ParentKeyIndex As Variant) As Boolean
  495.  
  496.     ' PURPOSE: Remove all child nodes, and their children, from ParentKeyIndex
  497.     
  498.     ' ParentKeyIndex. A key or Index to reference the item by
  499.     ' - Passing zero or vbNullString will result in entire collection being removed
  500.     
  501.     Dim Index As Long, sKey As String, kIndex As Long
  502.     Index = ConvertKeyToIndex(ParentKeyIndex, True)
  503.     If Index < 0 Then
  504.         Err.Raise ERROR_INVALID_KEYINDEX, "Collection.RemoveItem", "Invalid Key or Index"
  505.     ElseIf Index = 0 Then
  506.         Call ClearCollection
  507.     Else
  508.         If Not IsArrayEmpty(Not m_Col(Index).Family.Tree) Then
  509.             ' when deleting nodes, a 2 node swap is actually used...
  510.             ' This can cause an index to change during recursion in DeleteNode method
  511.             ' So we use a key so we can easily identify the node index
  512.             If m_Col(Index).Key = 0 Then    ' no key; create one
  513.                 sKey = RandomKey
  514.                 kIndex = FindKey(sKey, Index)
  515.                 m_Col(Index).Key = StrPtr(m_Keys(kIndex).Key)
  516.             Else                            ' use existing key
  517.                 sKey = VBStringFromBSTRpointer(m_Col(Index).Key)
  518.             End If
  519.             Do Until IsArrayEmpty(Not m_Col(Index).Family.Tree) = True
  520.                 DeleteNode m_Col(Index).Family.Tree(treelast)
  521.                 Index = m_Keys(FindKey(sKey)).Index
  522.             Loop
  523.             If Not kIndex = 0 Then
  524.                 ' we created a key for this node; remove it now
  525.                 DeleteKey , sKey
  526.                 m_Col(Index).Key = 0
  527.             End If
  528.         End If
  529.     End If
  530.     RemoveChildren = True
  531.     
  532. End Function
  533.  
  534. Public Function MoveItem(KeyIndex As Variant, TargetKeyIndex As Variant, _
  535.                 Optional ByVal Relationship As eNodeRelationship = relNextSibling, _
  536.                 Optional NewKey As String) As Boolean
  537.  
  538.     ' PURPOSE: Move a node from current position to a new position and possibly a new parent.
  539.     
  540.     ' KeyIndex. A key or Index to reference the item to move. Cannot be zero or vbNullString
  541.     ' TargetKeyIndex. The key or index to the node that the Relationship parameter applies too
  542.     '       -- If is vbNullString or zero, then the root will be used
  543.     ' Relationship.{Optional}. Default is relNextSibling
  544.     '       -- relFirstChild. The new node will become the first child of the node ref'd by RelativeKeyIndex
  545.     '       -- relLastChild. The new node will become the last child of the node ref'd by RelativeKeyIndex
  546.     '       -- relFirstSibling. The new node will become the first child of the parent of the node ref'd by RelativeKeyIndex
  547.     '       -- relLastSibling. The new node will become the last child of the parent of the node ref'd by RelativeKeyIndex
  548.     '       -- relNextSibling. The new node will be inserted between the node ref'd by RelativeKeyIndex and its next sibling
  549.     '       -- relPrevSibling. The new node will be inserted between the node ref'd by RelativeKeyIndex and its previous sibling
  550.     '   The following do not apply for items containing arrays or objects and will reset to relLastChild if that case
  551.     '       -- relChildSortedAsNumeric_Asc. If Item is String or Numeric/Date, place child in sorted position comparing siblings as Numbers
  552.     '       -- relChildSortedAsNumeric_Desc. If Item is String or Numeric/Date, place child in sorted position comparing siblings as Numbers
  553.     '       -- relChildSortedAsText_Asc. If item is String, place child in sorted position comparing siblings non case-sensitive
  554.     '       -- relChildSortedAsText_Desc. If item is String, place child in sorted position comparing siblings non case-sensitive
  555.     '       -- relChildSortedBinaryText_Asc. If item is String, place child in sorted position comparing siblings case-sensitive
  556.     '       -- relChildSortedBinaryText_Desc. If item is String, place child in sorted position comparing siblings case-sensitive
  557.     ' NewKey.(Optional). If provided, the item will be keyed with the new key.
  558.     '       -- If the key results in a duplicate key, an error occurs
  559.     ' Return value. If no errors encounterd, return value is True
  560.     
  561.     Dim bNewTree As Boolean
  562.     Dim moveAfter As Boolean, kIndex As Long
  563.     Dim Index As Long, TgtIndex As Long
  564.     
  565.     If m_ItemCount < 2 Then Exit Function
  566.     
  567.     ' validate the KeyIndex and TargetKeyIndex
  568.     Index = ConvertKeyToIndex(KeyIndex, True)
  569.     If Index < 0 Then
  570.         Err.Raise ERROR_INVALID_KEYINDEX, "Collection.MoveItem", "Invalid Source Key or Index"
  571.     End If
  572.     TgtIndex = ConvertKeyToIndex(TargetKeyIndex, True)
  573.     If TgtIndex < 0 Then
  574.         Err.Raise ERROR_INVALID_KEYINDEX, "Collection.MoveItem", "Invalid Destination Key or Index"
  575.     End If
  576.     
  577.     If Not NewKey = vbNullString Then Me.Key(Index) = NewKey
  578.     
  579.     If Relationship > relLastChild And Relationship < relChildSortedAsNumeric_Desc + 1 Then
  580.         ' place in a sorted position.... determine the position among its other siblings
  581.         kIndex = GetChildInsertPosition(Index, TgtIndex, (Relationship - 6 + (Relationship Mod 2 = 1)), (Relationship Mod 2 = 0))
  582.         If kIndex = 0 Then ' this will be the last child
  583.             Relationship = relLastChild
  584.         Else    ' inserted before or after an exisiting node
  585.             TgtIndex = kIndex                   ' cache the existing node's index
  586.             Relationship = relPrevSibling       ' descending order, insert after
  587.         End If
  588.     End If
  589.     
  590.     Select Case Relationship
  591.     Case relFirstChild, relLastChild
  592.         If IsArrayEmpty(Not m_Col(TgtIndex).Family.Tree) Then
  593.             ' target index has no children yet
  594.             bNewTree = True
  595.         Else
  596.             ' set the adjusted target index based on Relationship
  597.             If Relationship = relLastChild Then
  598.                 moveAfter = True
  599.                 TgtIndex = m_Col(TgtIndex).Family.Tree(treelast)
  600.             Else
  601.                 TgtIndex = m_Col(TgtIndex).Family.Tree(treefirst)
  602.             End If
  603.         End If
  604.     Case relFirstSibling ' set the adjusted target index based on Relationship
  605.         TgtIndex = m_Col(m_Col(TgtIndex).Parent).Family.Tree(treefirst)
  606.     Case relLastSibling ' set the adjusted target index based on Relationship
  607.         TgtIndex = m_Col(m_Col(TgtIndex).Parent).Family.Tree(treelast)
  608.         moveAfter = True
  609.     Case relNextSibling ' set the adjusted target index based on Relationship
  610.         If m_Col(m_Col(TgtIndex).Parent).Family.Tree(treelast) = TgtIndex Then
  611.             moveAfter = True
  612.         Else
  613.             TgtIndex = m_Col(TgtIndex).Elder
  614.         End If
  615.     Case relPrevSibling
  616.         ' no adjustment needed; default value is moveBefore not moveAfter
  617.     End Select
  618.         
  619.     If Index = TgtIndex Then    ' if the source & target are same, simply abort
  620.         MoveItem = True
  621.         Exit Function
  622.     End If
  623.     
  624.     ' moving is a rather simple process of updating linked lists,
  625.     ' the physical arrays won't be touched; their linked lists are just updated
  626.     ' 1) The previous and next sibling links around the moved node must now connect to each other
  627.     ' 2) the previous and next sibling links around the new node position must now connect to the moved node
  628.     
  629.     ' Adjust the current node sibling references
  630.     ' update linked lists around this node. We will be removing it from the chain
  631.     With m_Col(Index)
  632.         If .Younger = 0 Then ' this was the first sibling
  633.             If .Elder = 0 Then  ' this was also the last sibling; an only child
  634.                 Erase m_Col(.Parent).Family.Tree()
  635.             Else
  636.                 m_Col(.Parent).Family.Tree(treefirst) = .Elder ' the next sibling is now the first
  637.                 m_Col(.Elder).Younger = 0        ' and it has no previous sibling
  638.             End If
  639.         Else    ' make this node's prev sibling reference this node's next sibling
  640.             m_Col(.Younger).Elder = .Elder
  641.         End If
  642.         
  643.         If .Elder = 0 Then ' this was the last sibling
  644.             If Not .Younger = 0 Then
  645.                 m_Col(.Parent).Family.Tree(treelast) = .Younger  ' the prev node is now the last child
  646.                 m_Col(.Younger).Elder = 0          ' and it has no next sibling
  647.             End If
  648.         Else    ' make this node's next sibling reference this node's prev sibling
  649.             m_Col(.Elder).Younger = .Younger
  650.         End If
  651.     End With
  652.     
  653.     ' Adjust target position & its sibling's References. We will be inserting into the chain
  654.     If bNewTree Then
  655.         InitializeTree TgtIndex, Index
  656.         m_Col(Index).Elder = 0
  657.         m_Col(Index).Younger = 0
  658.     Else
  659.         ' now adjust the target node's siblings/parent linked lists
  660.         With m_Col(TgtIndex)
  661.             If moveAfter = True Then
  662.                 If .Elder = 0 Then  ' was last child; moved node now is
  663.                     m_Col(.Parent).Family.Tree(treelast) = Index
  664.                 Else
  665.                     m_Col(.Elder).Younger = Index
  666.                 End If
  667.                 m_Col(Index).Elder = .Elder
  668.                 m_Col(Index).Younger = TgtIndex
  669.                 .Elder = Index
  670.             Else
  671.                 If .Younger = 0 Then ' was first child; moved node now is
  672.                     m_Col(.Parent).Family.Tree(treefirst) = Index
  673.                 Else
  674.                     m_Col(.Younger).Elder = Index
  675.                 End If
  676.                 m_Col(Index).Elder = TgtIndex
  677.                 m_Col(Index).Younger = .Younger
  678.                 .Younger = Index
  679.             End If
  680.             m_Col(Index).Parent = .Parent   ' set the new parent
  681.         End With
  682.     End If
  683.     MoveItem = True
  684.  
  685. End Function
  686.  
  687. Public Function MoveChildren(ParentKeyIndex As Variant, TargetKeyIndex As Variant, Optional ByVal Relationship As eNodeRelationship = relNextSibling) As Boolean
  688.  
  689.     ' PURPOSE: Move a node chain from current position to a new position and possibly a new parent.
  690.     
  691.     ' ParentKeyIndex. A key or Index to reference the parent node by
  692.     ' TargetKeyIndex. The key or index to the node that the Relationship parameter applies too
  693.     '       -- If is vbNullString or zero, then the root will be used
  694.     ' Relationship.{Optional}. Default is relNextSibling
  695.     '       -- relFirstChild. The new node will become the first child of the node ref'd by RelativeKeyIndex
  696.     '       -- relLastChild. The new node will become the last child of the node ref'd by RelativeKeyIndex
  697.     '       -- relFirstSibling. The new node will become the first child of the parent of the node ref'd by RelativeKeyIndex
  698.     '       -- relLastSibling. The new node will become the last child of the parent of the node ref'd by RelativeKeyIndex
  699.     '       -- relNextSibling. The new node will be inserted between the node ref'd by RelativeKeyIndex and its next sibling
  700.     '       -- relPrevSibling. The new node will be inserted between the node ref'd by RelativeKeyIndex and its previous sibling
  701.     '   The following do not apply for items containing arrays or objects and will reset to relLastChild if that case
  702.     '       -- relChildSortedAsNumeric_Asc. If Item is String or Numeric/Date, place child in sorted position comparing siblings as Numbers
  703.     '       -- relChildSortedAsNumeric_Desc. If Item is String or Numeric/Date, place child in sorted position comparing siblings as Numbers
  704.     '       -- relChildSortedAsText_Asc. If item is String, place child in sorted position comparing siblings non case-sensitive
  705.     '       -- relChildSortedAsText_Desc. If item is String, place child in sorted position comparing siblings non case-sensitive
  706.     '       -- relChildSortedBinaryText_Asc. If item is String, place child in sorted position comparing siblings case-sensitive
  707.     '       -- relChildSortedBinaryText_Desc. If item is String, place child in sorted position comparing siblings case-sensitive
  708.     ' Return value. If no errors encounterd, return value is True
  709.     
  710.     Dim moveAfter As Boolean, bNewTree As Boolean
  711.     Dim Index As Long, TgtIndex As Long
  712.     
  713.     If m_ItemCount < 2 Then Exit Function
  714.     
  715.     ' validate ParentKeyIndex and TargetKeyIndex
  716.     Index = ConvertKeyToIndex(ParentKeyIndex, True)
  717.     If Index < 0 Then
  718.         Err.Raise ERROR_INVALID_KEYINDEX, "Collection.MoveChildren", "Invalid Source Key or Index"
  719.     End If
  720.     TgtIndex = ConvertKeyToIndex(TargetKeyIndex, True)
  721.     If TgtIndex < 0 Then
  722.         Err.Raise ERROR_INVALID_KEYINDEX, "Collection.MoveChildren", "Invalid Destination Key or Index"
  723.     End If
  724.     
  725.     ' Note: Can't sort on the fly. The children may not be currently sorted and same goes for any existing children of the new parent
  726.     ' So, if the Relationship parameter includes a sorted child item, we will sort post-move.
  727.     
  728.     Select Case Relationship
  729.     Case relFirstChild, relLastChild, relChildSortedAsNumeric_Asc, relChildSortedAsNumeric_Desc, relChildSortedAsText_Asc, _
  730.             relChildSortedAsText_Desc, relChildSortedBinaryText_Asc, relChildSortedBinaryText_Desc
  731.         If IsArrayEmpty(Not m_Col(TgtIndex).Family.Tree) Then
  732.             ' target node has no children, easy...
  733.             ' set target's family.tree to the ParentKeyIndex's family.tree
  734.             m_Col(TgtIndex).Family.Tree = m_Col(Index).Family.Tree
  735.             Erase m_Col(Index).Family.Tree
  736.             ' loop thru each of the child nodes and change the parent ref
  737.             Index = m_Col(TgtIndex).Family.Tree(treefirst)
  738.             Do Until Index = 0
  739.                 m_Col(Index).Parent = TgtIndex
  740.                 Index = m_Col(Index).Elder
  741.             Loop
  742.             If Relationship > relLastChild Then
  743.                 ' sort the children if requested
  744.                 SortNodeLevel TgtIndex, (Relationship - 6 + (Relationship Mod 2 = 1)), (Relationship Mod 2 = 0), True, vbNullString
  745.             End If
  746.             MoveChildren = True
  747.             Exit Function
  748.         Else
  749.             If TgtIndex = Index Then
  750.                 MoveChildren = True ' no action of target and source parents are same
  751.                 Exit Function
  752.             End If
  753.             If Relationship = relLastChild Then
  754.                 moveAfter = True
  755.                 TgtIndex = m_Col(TgtIndex).Family.Tree(treelast)
  756.             Else
  757.                 TgtIndex = m_Col(TgtIndex).Family.Tree(treefirst)
  758.             End If
  759.             Index = m_Col(Index).Family.Tree(treefirst)
  760.         End If
  761.         
  762.     Case relFirstSibling ' target position is parent's first child
  763.         TgtIndex = m_Col(m_Col(TgtIndex).Parent).Family.Tree(treefirst)
  764.         
  765.     Case relLastSibling ' target position is parent's last child
  766.         TgtIndex = m_Col(m_Col(TgtIndex).Parent).Family.Tree(treelast)
  767.         moveAfter = True
  768.         
  769.     Case relNextSibling ' target position is next sibling
  770.         If m_Col(m_Col(TgtIndex).Parent).Family.Tree(treelast) = TgtIndex Then
  771.             moveAfter = True
  772.         Else
  773.             TgtIndex = m_Col(TgtIndex).Elder
  774.         End If
  775.         
  776.     Case relPrevSibling
  777.         ' no adjustment needed; default value is moveBefore not moveAfter
  778.     End Select
  779.         
  780.     If Index = TgtIndex Then    ' if the source & target are same, simply abort
  781.         MoveChildren = True
  782.         Exit Function
  783.     End If
  784.     
  785.     ' moving is a rather simple process of updating linked lists,
  786.     ' the physical arrays won't be touched; neither will there indexes
  787.     With m_Col(TgtIndex)
  788.         If moveAfter = True Then
  789.             If .Elder = 0 Then
  790.                 ' target was last child; now new child tree is last
  791.                 m_Col(.Parent).Family.Tree(treelast) = m_Col(m_Col(Index).Parent).Family.Tree(treelast)
  792.             Else
  793.                 ' make tgtIndex next sibling ref new tree's last child
  794.                 m_Col(.Elder).Younger = m_Col(.Parent).Family.Tree(treelast) = m_Col(m_Col(Index).Parent).Family.Tree(treelast)
  795.             End If
  796.             m_Col(Index).Younger = TgtIndex
  797.             .Elder = Index
  798.         Else
  799.             If .Younger = 0 Then
  800.                 ' target was first child; now new tree is first
  801.                 m_Col(.Parent).Family.Tree(treefirst) = Index
  802.             Else
  803.                 ' make tgtIndex prev sibling ref new tree's first child
  804.                 m_Col(.Younger).Elder = Index
  805.             End If
  806.             ' new tree's last sibling's next sibling is the target
  807.             m_Col(m_Col(m_Col(Index).Parent).Family.Tree(treelast)).Elder = TgtIndex
  808.             ' make new tree's prev sibling ref target's prev sibling
  809.             m_Col(Index).Younger = .Younger
  810.             ' target's prev sibling is not new tree's last sibling
  811.             .Younger = m_Col(m_Col(Index).Parent).Family.Tree(treelast)
  812.         End If
  813.     End With
  814.     ' clear the old family.tree
  815.     Erase m_Col(m_Col(Index).Parent).Family.Tree
  816.     
  817.     ' loop thru changing the parent of all moved children; changing Parent ref
  818.     Do Until Index = 0
  819.         If m_Col(Index).Parent = m_Col(TgtIndex).Parent Then Exit Do
  820.         m_Col(Index).Parent = m_Col(TgtIndex).Parent
  821.         Index = m_Col(Index).Elder
  822.     Loop
  823.     
  824.     If Relationship > relLastChild And Relationship < relChildSortedAsNumeric_Desc + 1 Then
  825.         ' simply ensure tgtIndex's children are sorted
  826.         SortNodeLevel TgtIndex, (Relationship - 6 + (Relationship Mod 2 = 1)), (Relationship Mod 2 = 0), True, vbNullString
  827.     End If
  828.     MoveChildren = True
  829.  
  830. End Function
  831.  
  832. ' PURPOSE: Get/Set the value of a collection item
  833. Public Property Get Item(KeyIndex As Variant) As Variant
  834.     ' KeyIndex. A key or Index to reference this item by
  835.     '   - Cannot be vbNullString nor zero
  836.     
  837.     ' Note about referencing items that contain arrays.
  838.     ' If I wanted to reference the 5th array element of an array contained in Item,
  839.     ' my code would look something like the following.....
  840.     ' Debug.Print myCol.Item("KeyOfItem")(5)
  841.     
  842.     ' for Items that contain arrays of objects, then we could use something like
  843.     ' Set NewClassObject = myCol.Item("KeyOfItem")(5)
  844.     ' or if you wanted to view the value of a Public class property named Misc...
  845.     ' Debug.Print myCol.Item("KeyOfItem")(5).Miscd look sometplies too
  846.  operty namedotargepn't  End If
  847.     End With
  848.     ' clear the old family.cingarrays ong Parenst up     If long Parenroperty named; neit/s      
  849.  sObject C 2 = 0)onship <  The following do n(ef
  850.  ndex. The his ling is the targeult is sObject Cdex) ne   MoveChi&efeu) ne   Move siblings&ects, t=de parent of t is sObject Cdex) ne   MoveChi&efeu) ne   Move siblings&ects, t=de parent of t is sObject Cdex) mily.
  851.     Sele ne   MoveCleme     End   MoveChi&efeu) neto refeao..
  852.     'relFirstSief new   s last
  853.          's prev Agirst child; now new tree  Exit Function
  854.     
  855.     End If
  856.           eTrue
  857.         Exit Funeeitherent of t is in arrat is irrrrrrrrrrce parents End With
  858.     ' d WiahO, newIn End es
  859.     With m_ic_Desc + 1 Then
  860. eldSortedAsNumeric_Desc + ,e-sensue, v   hWiahO, newI,K  ' the prev 
  861.   
  862.     With m_ic_De  Endroperty namerelFirstSief ildSsObject C 2n  ' my code would o his x
  863.                 End If
  864.              tmyCot = m_Col(e preA
  865.    )l(m_Col(Index)Invalid Destination Key or nsue,ild; If mibling  ' (Append To End)rent of the to((((((((((x)
  866.    Col(e(tr-esc2 = 1))lFd If
  867.    'n Kee       ex Then
  868.    aAndex) si v > rel
  869.       
  870.     ' Debug.Print myC5ulds sis 1))lFd IfBa ti= 1)), (Relationship Mod 2 = 0), True, vbNullString
  871.           
  872.                 End ux).Elder
  873.  d If
  874.              tmyCot = m_Col(e hptmyCot =y:    ldSortedAsNumeric_Desc + 1 Then
  875.         ' simply ensure te abx) mi  ldSortedAAAAAAAAAAAAText_Asc. If te ab=next sibling ref new tree)lFd IfBF  1)), mren=======r simply ast) = m_Coeee)lFd IfBF  1)),            tmyCo   asitive
  876.     'o   asitiveIf
  877.  aAndex) si v ly eleme      next siba====r simply ast) = m_Cla#ing
  878. l  ' thCoeee)blinry:    ldde would o his x
  879.                 End H0
  880.     laveChi&efeu) ne   Move gant
  881.     ' KeyIndex. A1sopareex )    , (Relationshiethen'   asitiveIfIast
  882.     ).Elder
  883.  d Imndex. ,   End I ,   ve
  884.     o his x
  885.     , Inng i
  886.  obf you n    p        hip <ast
  887.    get are satherent of t is in arrat is irrrrrrrrrrce parents End With
  888.     ' d WiahO, n   If Tg
  889.  obfaationsh)I 
  890. End Funch   End If
  891.             ' new tree's last sibling'd De
  892.     laveCiblinSortedAsNumeric_Desc, relChildSortedAsTeleme      next End W  EndrolIf I.ce parents End With
  893.     ' d rtedAAAAAAAAAAAATeo(treelast               
  894.                 End ux).Elder
  895.  d If
  896.              tmyCot = m_Col(e hptmyCot =y:    ldSo
  897.     ' d De
  898.  ' uroperty name
  899.  t).Family.TrfBF nsuct Cdex)operty na name
  900. AAAAText_Ascve
  901.     'o   asu) ne wy.TrfBx's fami    ===tFunction
  902.  
  903. <aswiCol(.Eldeqc_Desc + 1    Case rel  tmyCot = encounterd, t =ulIf I.ce parents E name  1)),           FHtmypL Ibjectk), True, vbNu4        )operty na name
  904. AAAAText_Aseqc_Desc + 1    Caisitive
  905.     ' Re With m_ic_Den' vWith
  906.     '
  907. AAAAText_Asem   -- relChildSortedAsText_Asc. If dexan array contained inNumeric_Desc + 1 ThencoIbj End HH TgtIndex E   'o   asitareObject Cdex) ne   Mov.Famiirrrr If
  908.    areObje the fol. nsuRRRRRRRRRRRRRRRRRs       hat con uestel(TgtIndex).PaPardde would o his x
  909.  
  910.      dxt_Asem   -- relChildSortedAsTeol(e hptfsIn En,6    ,RRRRs  odeAsc. Ig
  911.  uroper)defo d Famil.YouaoWith
  912.             tmyCo   asitive
  913. _Col(.PaFunction
  914. Oex).Younger =ue, vbNu4        ra 
  915. _Col(.PaFunction
  916. Oex).Younger =ao   
  917.                 E'lino', (R,   
  918.                 E'linooooooooooooo   ' rev index
  919.  v.lIftmypL Ibjectk), Tne  rences. We will be inserting iniring or Numeof tvalue of a ach otherP or Numeoevel unc'i amily.Tree(tree'oeoevelo.Sannotl be C    
  920.  sObject C 2 = 0)onship <  The following do n(ef
  921.  ndex. The h    m_Col(m_Col(_Col(Index).
  922.         Else
  923.             I
  924.        bjectedAAAAAdd ux)C   m_Col(m_Co ux)C   neto     n(ef
  925. dex).FatWith
  926.             ndAAAA-,  ndAAAA-edAA     ol(m_Co ux)vtIndfNEal}. Dei = .Yok someh    m_tion
  927.  dexan array contained inNumeric_Desc + 1 ThencoIbj End HH TgtIumersText_Asc. If dexanIbj End HH m)O, newh m_ic_Deuncldren are so(   'o   a_Asc. If dexqidd ux)C 00 Tic_D Elseperting iIf dexan array contained inNumeric_Desc + 1eitar ,d    
  928.  serted between    -,een    - inNumert_Asem   )If
  929.  eric_Descmd f(R,   
  930.                   C  )Ifoamimove.
  931.   u(my contained inNumeric_T  m_Colwem
  932. Public PropergM arraysx = 0em
  933. Puba Pu(my contained inNumeric_T  m_ColwtiorgM  Index to referencey End If
  934.  reref'd by ,d .9999999999999999s String or Nis in arrat   
  935.          
  936.    o(   'o   r&pL If Not m TgtIndex E   'o   Et    eol(e hinsuRRRRRRRRRRR= Ge
  937.  debMbElder = newIndex     ' fwd index
  938.                     m_Col(newInd    - 6 + (AsText             m_Col(new1 
  939.    PuofNEal}. Dei llString
  940.       /HH Tgt    s non catring
  941.       /HH Eal}. Dei llString
  942.       Youof a ach ov 
  943.   
  944.     Whdexan'
  945.         ECnm2gtc. Ig
  946.  String or Nistring
  947.       inding is a ra Str'o   rhis x
  948.         m_Col(.ec_Desc + 1    Caidex = m_Col(Index).El(Ind Youof a ach ov 
  949.   
  950.  ncldren a    , Inlo   Et- 
  951.   
  952.  nclt- 
  953.  nd    - 6s  m_Col(.ec_Desc + 1  oe child in sorted po      m   )  Endroperty
  954.  ncldren a  Im        Familsc. Ift Cdextion
  955.  
  956. PPPPPPPPP_Col(new1 
  957.    PuofNEal}. Dei llString Puo   kgllString
  958.         PuofNEa 2 = ePPPPPP_Col(new1 
  959.    PuofNEal}. Dei ll}. Dei = .Yoe(Ind Ypal(Index).Key = 0
  960.      1    Caidex = m_Col(Index).El(Ind Youof a ach ovnew1 
  961.     TgtIndex
  962.         HH m)O, n' fwd index
  963.           E   ' PURPOw1 
  964.  Cndex).Key = sNumericturn value is True
  965.   PuofNEal}. Dow nertedAsTsuRRRRRRRRRdexng. Theiuarget ao) 1    Caiding like the followinmx).El(Ind 
  966.        ions kchi
  967.     End Sol(pI
  968.       seld i Sol(p    ===tFunctioniahO, ney2d 
  969.        ionsho   TgtIndex
  970.         HH mn' fwd (nt
  971.                 SortNodeLevel TgtIndex, s True
  972.   PuofNEal}. Dow nertedAsTsuRRRRRRR 
  973.     i   ioship As eNodeRelationsE   ' Dim Index As Long,El(Inrue
  974.   PuofNEal}. Dow nertedAsTspc_Desc + Dim Index As Long,El(Inrue
  975.   Puef tar d, return va
  976.  ncr   EndringFrom4me      next En occol(.ec_doccol(.ec_doccoringgc sibliup     do n(ef
  977.      --E TgtIndex =ooooooodAsTspc_m
  978. P.ry ens           k.Family.Tree      Do UntiiiiiiiiillStrin  --E ethi/ccor slI If item is    wex '6 + (ReF   End I ,   ve
  979.     o his x
  980.     , Inng.ec_ertedAensurInng.ec_1 DoS(.ec_Desc 'd     eole   
  981.   im Index A  , Inngan array co  kte   llStrinx '6 + b'gx Ailyr(.ec_Desc 'd     eole  True
  982.    ioshrii   - 6ex = GetChil As LrtedAensurI
  983.   PuofNEal}. Dow nertedAsTspc_Desc + Dim Indor if yontained inNumeriudexirtedhsibling'n arrays.
  984.     'g'n arrays.
  985. w neray     eossTspc_Ddexes
  986.     , n' fwd index vedexeg'n arrd index ces. We will be0n ara .99(Append e them is    wex '6Lef tar d, return va
  987.  ncr vedexeex
  988. , return va
  989.  ncr vekkkkk ing, pS       m pS    mexeex
  990. As leelas       m pS    mexee  Puef tar d, rrt_Asem   )elasl(.Parent).Familry ens      Ce
  991.     o his x
  992.     , n)Indesem   )elasl(.Parent).Familry ens      tIndex, s Truenshrii     Ceux)C
  993. l  ' thCog it from t        n va
  994.  ncr velry ens      tIndex, s Truenshrii     Ceux)C
  995. l  ' thCog it                 t,ce, s.srdes and changegs as Numbers
  996.     '       -- relChildSortedAsTex(aIndor if &inx '6 gx(aInds     Er )elasl(.Pareruenshrii   '       -- relCkis x
  997.     , Inng.ec_positi   , ngs as Nusb
  998.    4 te   m_aIndor if &inx '6 gx(aTruenshrii     Ceux)C
  999. l  ' thCog it from t        n va
  1000.  ncr velry ens      tIndex, s Truenshrii     Ceux)C
  1001. l  ' thCog it  )elasalidatsCeuo + 1  oe chil    n va
  1002.  uens child n  i   h - Cannot ,t=o   , return va
  1003.  ncr lect Casenx '6 gx(aTruenshrii     Ceux)C
  1004. l  ' thCoing. The n (AsText  If bNx, s Tru m_Col(Index).Family.Tree(treelast)
  1005.                 Index = m_Keys(FindKey(sKey)ollStrSortedAsText_ronsh   looktIndex).ly.  n va
  1006. atiry    mchisu,f tar d, r,xan array contaLsCol(e(tr-esc2 = 1))lFd IfNparound the new node pos   h - Cannot ,t=o   , return ke th     ....rx '6Lef tar dt  If brii     Ce- reuuenshraLsCmndex).ag it  ) If Ind o) o) o) otar dt  If brihCoing. parentIeve'd     eol'ndex).Pare'd Ceux)       t,ce, sined inN..rx '6Le.Parent).Familp <  The foSortedAsText_ronsh   looktIndex).ly.  n , g. parentIeve'd     eol'ndex).Pare'd Ceux)       t,ce, sined inN..rx '6Le.Parent).Familp <  The foSox).ag it  ) ers
  1007.     '       -- relChildSortedAsTex(aIndor if &inx '6 gx(aInds     Er )elasl(.Parer the eri"c sibliup     do n(ely.cin   ve
  1008.    ewKey As String)   -- rel(aInds     E ' or if yomilry ens      tIndex, s T   mexeex  eol'ndex).Pare'd Ceux)       t,ce, sint Casenx '6 x
  1009.         H ction.m               Index ing
  1010.       i             Index ing
  1011.  eole   
  1012. (   'o  Puoyounger  ref'd e them is    wex '6Lef tar El(Inrue
  1013.     i  ).Famcif sxt En occol(u'd eIndexIndexIndext tar d, r,xan array contaLsCol(e(tr-esc2 = 1I E nam(aInrue ab=ee ab=ays l(Inrue   
  1014.    tn occol(u'd eI.cin   
  1015. tring bjectk), Tne  rexan'
  1016.   rofNEa 2 = ePPPPPP_Col(neric_Asvvvvvvvvv   
  1017.    tn vvvv   n vvvv  er = m_Col(7lIIIIII Cannot ,t=o   , return ke theturn ke thetuSortedAsTex    t,ce, sined inN..array contaLsColov  er = m_Cob/in sor Fun       eturn ke tned inOw1 
  1018.  Ctor if &d; If mi      Otreel0  er =aeric_Desc + tInde = m_Col(e preA
  1019.   oo
  1020.  opertyb ' RA 00 Tic_D  erico      mns child n  i   h - Cannot ,t=o   , return va
  1021.    Ceexan'
  1022.   rofNEa 2fNE
  1023.   Cannot ,th sined inN. '       --preA
  1024.   oo  rofNNNNNNNNNNNNNNNrSortedAsTunger =..array contaLpgpThe foSox).ag it  )ta   tn vv foSox sorted pocp
  1025.      (aIndoeifNNot movex  wex '6Lef tar El(Inrue
  1026.     1d      wex '6I.ciVox  Inrue
  1027.  ring or Numeric, return va
  1028.    Ceexann(neric_AsChild. The new node
  1029.    f tarLpgpTld; now new tIits nex Ceux)C
  1030. l  ' thCer = .Elder
  1031.                     exan'
  1032.   rofNf dhslder
  1033.                     exan'
  1034.   rofNf dhslder
  1035.                     exan'
  1036.   rofNf dhslder
  1037.                     exan'
  1038.   rofNf dhslder
  1039.                     exan'
  1040.   rofNf dhslder
  1041.                     exan'
  1042.   rofNf dhslder
  1043.            Fam
  1044.   rofNf dhslder
  1045.                     exan'
  1046.   rofNf dhslder
  1047.            Fam
  1048.   rofNf dhslder
  1049.                     ex.Rd in) c1it      i      Index).KeaAn Fun       eturn ke tned inOw1 
  1050.  Ctor if &d; If mi      O    Indext    mex'6Lef tar Ev   tIndex, s1nean
  1051.     Dim moveAxan'aFam
  1052.  chimi   i    an'
  1053.  ved nodes eld dhslder     Fam
  1054.   rofNf dhKK dhKg 
  1055.  'urn ke tned inSex''''''ed nodes eld dhs_Dit  )ta)n'
  1056.   rof   ex) 
  1057.  'urn keegs The new n      O    In)OInru-In)OInru-In)_Dit  )ta)With
  1058.         if you wavvvv   T'6Lef tar Evlast (ddeLn)OI    In)azero, then t0    
  1059.     '       -- IXeld dhslderNf dhsldeo
  1060.  rMa unc'i0S'6 gx(aTruesen)azero, Pu(my cing y, I
  1061.              exIveo
  1062. n occol(u'turn l(u'turn l(u'turC, Iry    rues99999999999- Cannotc  , n' fwd indiring      C 1pf dhKK dhKg 
  1063.  'urn ke tned inSex''''''ed Ia+hen t0    
  1064.     '       -- IXeld dhn node by
  1065.     'apply for it rhis x
  1066.         m_Col(.ec_Desc + 1    Caidex = m_Col(Index).El(Ind YoDei ll}. Dei = .Yoe(Indurn ke tned inSex''''''ed Ia+hen t0    
  1067.     '       -- IXeld dhpen the nocmp pocp
  1068.      (aIT      FHtrrent).Familry en)                 exan'
  1069.   rofNf dhslder
  1070.                     exan'
  1071.   rofNf dhslder
  1072.                     exan'
  1073.   rofNf dhslder
  1074.                     exan'
  1075.   rof,p   TgtIndex = ConvertKeyToIndex(TargetKeyIndex, True)
  1076.     If TgtIndex < 0 Then
  1077.         Err.Raise ERRORsa.dLef taf   ex)mi   rgetKeyIndortedAsText_Desc. If iuPshraLsCmndexovskIndex      o siblings as Numbers
  1078.     '       -- relChildSortedAsTex)lFd IfNparoun      FHtrr    n)               ' thCog it)lFd If) , n' fwd iv    
  1079.     ' = Convert(e(tr-esc2 = 1))le1o
  1080.            a         ' thC Unert(e(tr   Fa po d inN..,,x''t.Ra)fNEa if    vDit  )ta)se      Do Untc sortlDesc. u
  1081.               f    v    
  1082. Vox  Inrue
  1083.  ria    v    
  1084. Voy  T
  1085.   rofe(Indurn ke tned inio)          CT   mexeeh0 T/6Lef ta-- relChi Do Unto Unto Unto  Mo    '       -- ta--iv   rents    ' m       CT   mexeeh0 T/6Lef  o Unto Unto  Moa is not new tre   '       -- ta--iv   rents    ' m       CT   mexeeh0 T/6Lef  o Unto Unto  Moao renkthe nocmp pocp
  1086.      (aIT      FHa                   dSorted foox ing y thCogThen
  1087.         po      m   )  Endropertex'''''ria d inio)      Pe s sis 1))lFd IfBa ti= 1)), (Relationship Mod 2 = 0), True, vbNullString
  1088.           
  1089.                 End ux).Elder
  1090.  d If
  1091.              tmyCot = m_Col(e hptmyCot =y:    ldSortedAsNumeric_rue)    '       -- .exIvelingi    Er y.trees xrs
  1092.     '    tk), True, vbNu4        )operty i6elationsr Ntt -- ta--iv   rellStrinNpv    
  1093. Vox  Inrounger ='d     eoleyEmpty( IfBa to   , return va
  1094.       , return va
  1095.      '       eoleyE,    pw    eole
  1096.               f    v    
  1097. Vox  Inrue
  1098.  ria    v    
  1099. Voy  cndext              ne  reasitiveIndex(Pan
  1100.  terty i6elationsimneux)C
  1101. l  'n va
  1102.   , vbNu4        )open the nocmp pocp
  1103.      (we liR x
  1104.         m_Col(.ec_Desc + 1    Caidex u,f tar d, r,xan array contaLsCol(u4         
  1105. pppppppppppppptyb    Ceexan'inSex''''m2gtc. Ig        return va''m2gse
  1106.           k), True, vbNu4    o his tmNum9sibling    
  1107.    vv   T   ol(rel  Caidex uiR x
  1108.     OI    In)azeolationsimneux)C
  1109. l  'Gsm pS    me-,N    m_ldSortedAsNumeric_rue)    '    x
  1110.  s va'e s sis 1))lFd I1O    CT   mexeeao  M
  1111. ppppppis 1))lR'r    'CTrue, vbNu4 , place child in sort the   'o  Puoy          m_Col(ndex) siex As LonO1ra Str    'CTrue, vbNu4 End u Conve sort the   'o ctk),   -- IXeld dhsWndex LonO1ra Str    'n the nocm1ra Str            d 'r = .Younger
  1112.     d 'r = .Younger
  1113.     ger
  1114.     d 'r = .Yu   'o Dim moveAxan'aFaIxan'aFl  Caide sort eCol(.eolde IXeled foox inwe liR x
  1115.         m_Coll= .Yue, vbNull
  1116.  riNCTrue, vbNu4 ,
  1117. ppppppio adjustment needed;ppppsorteeeeeeeeeee
  1118.      he itedn vg'd D
  1119.     '2iveI
  1120.     is    wex    tk)tneeded;pppps tmNum9sibling dn vg'dAed;pppps mi   i    an'
  1121.  ve is )ex''''''ed nodeNAthe chain
  1122.     Wc m_Col(IndDort aouod  CnCuld neux)Coy      o      m_Coll= mNum9smily.Tmily.Tmily.Tmily.Tmily.Tpw    eole
  1123.   e i       m_ux)Co (we T   ol(reNu4   ily.Tmily.Tmily occol(u'ddnexily.Tmily.Tmily.Tfmily.Tmily occol'r = .Yn , re  'CTrue, vbNu4 E      m(i    an'
  1124.  ve is )ex' = .Yk)ex' = .Yk)eTmileeeeefNf dhKy occol(u'ddnexily.Tmily.Tmily.odeAsc. ove g
  1125.     m(i    an'
  1126.  f dhKy objectedAAAAtlyr(.ec_Desc 'd .dAAAAta_Desc 'd .d End  Numeric, reDei ll}. Dei = .Yoe(Indate Oi   eAsc. ove sc ',te Oi   eAsc. op   TgtIndex =eDei ll inN..rx reDei leva
  1127.  ncr vel)   ayreDei leva
  1128.    ' PURPOSE: Remove tdCTrue, vbNSE: RemitiveIndex(Pannt neede reDei ).FamDeiweumeric"d...
  1129.       sss    dhKy objet(ua
  1130.    ' PUndurn ke taPV If esc,pio adjustment nemitivemio adjustmeno    -- IXeld '2iveI
  1131.     rC1ce childedAsT ' thCog it from t        n va
  1132.       n.-,m(i    ax)Coy     vbNu4    o his tmNum9siblini 0
  1133.      1 Then
  1134.        linchipppps tmNum9sibg      C 1pfevURPOSux)vtI4 Eini 0
  1135.      vedURP linchioex' = .Yk)ea
  1136.  ueeTmilee        )open the nV'dhKy objet(n'
  1137.   rofNf d         o  Puoy    sTmily od nodes tgtIndex).Familllllllllllllsef ta-- relChi Do UntNu4 E      Ia+he g. paag ue, vbNSE:c,pio adjustment FHa               an'
  1138.   r)opppppdURP linchioex' = .Yk)ea
  1139.  ue reDei ).FamDen       eturn ke tned'r    'CTrue, vbNu4 , place child in sort th'CTrue, vbNu4 , ue reD   ' m        oo
  1140.  ue rernt).FappdURP linchioex' = .Yk)ea
  1141.  ue pamDen       eturn ke tned'r    'CTrue, vbNu4 , place child inm(i.Youurn value is    eturn k relld, ndex, s Truenshrii   bl(Index)ag d EndEtned'r(Inde  , siblingkedcp    eturn ke tned'r    'CTWurn valdx)vtI4 Eini 0
  1142.      vedURP lue, vbNu4 , ue reD   '  n.-,mvedURP lue, vbNu4 , us child n  i   h -bne & tar      sKey = RandomKe Rand    Index inadjustmenoe g
  1143.   --iv   rexh -bne & tar   tIndex, s T   ndexxxxblingsEini 0
  1144.      ved'd .gndohi Do UntNu4stmenod nodes tgtIndex).Familllllllllllllsef ta-- relChi Do UntNu4 E  ,.bg      C nod nodes tgtlChi Do U Ran do Nu4stmenod nodes x    tk)tneedel*d    Index ides x    tk)-bne & taran do Nusu,f tar d,e chil reD he   'o ctk),   --enterd, t =ulIf I.a RelativeKeyIndex and its next sibling
  1145.     '       -- relPrevSinodocddo
  1146.  ue rernt).FappdURP linchbliterdlativeKeyIndex and fNEKRP d nodes tgtIndeln.-,mvedURP lue,POSux)vsTspc_man'
  1147.  ved nodes eld dhsld n  i   h -bne & ta)ronsh   lookf Ind hsld rdURPI.a& ta)ronsh   l IXeld '2iveI
  1148.     rC1ce cnde-,m(iont.Parent).Family.Tree
  1149.   arent).Family.Tree
  1150.   arent).Family.Tree
  1151.   arent).Familyde liR x
  1152.         m_Col(.ec_Dv   
  1153.  Nf dhsld x    tk)-bne & t Cdex h -bne & ta)ronsh    Unto Unto  Mo -bne &  an'
  1154.   r &  an'
  1155.   r ndex).i) .Yk)exkumeric, tNu4 E .       (Index).EldEnd With
  1156.    ds 1))lR'r ronsh   lookf Ind hsld rdURPI.ab)Coy  dext tar d, , ont.Pa   rty i6elatio nodes tgtlChi Do U Ran do Nu4stmenod nodes x    tk)tneedel*d    In  m_Col tree's da/r Nf drteeeeee'd Cdexne & ta)ronsh nodx).Fami Dim moveAxan'af dhslder    A-, return(ux) d nodes's da/r Nf ds next sio2wsibg  ta)ronsh noeKeyIndSortedAAAAA'
  1157.  f oyqmNf drteeeeee'd Cdexne & ta)ronsh nodx).Famie just updatedeIndex(Pan   Unto Unto  MedAAta)ronsh    Unto Unto  Mo -bn'd .gndohi Do UntNu4stmenod nodes tgtIn
  1158.  rero UntNu4stmenod nodevd rdUR    tar d,e chil reD he   'o ctk),   --enterd, t =ulIf I.a RelativeKeyIndex and its next sibling
  1159.     '       -- relPrevSinodocddo
  1160.  ue rei       Index Before not moveAii     Ce- ]'(  Ce- ]ndexA dhKy ]ndexA do
  1161.  ue rei   hi Do UntoooooooooooooooooooooooooooTmily.o'. t Co UntmoveAxb) do
  1162.  ue rei   hi Do Un  tte Oioionsh)I 
  1163. End Funch   End If
  1164.       n  i   h -bne & ta)ron0Vd nodes x    tk)tneedel*d    In  m_Col tree's da/r Nf drteeeeee'd Cdexne & ta)ro dhKyc,rcrrtIndex).Famiey or Insoa
  1165.         pnO1ra Str    pocE
  1166.  e & ta)i   hi Do Untoooooooooannt niri"c sibliup    soooq4   soooq4   soooq4   soooq4   soooq4   soooq4   sothi/cceld dhn node .oooooooooannt niri"c sibliup    soooq4   soooq4   soooq4   soooq4   soooq4   soooq4   sothi/cceld dhn node .oooooooooannt niri"                  ex.Rd in) c1it      i      Index).KeaAn Fun       eturn ke tned inOw1 
  1167.  Ctor if &d; If mi      O    Indext    mex'6Lef tar Ev   tIndex, s1nean
  1168.     Dim moveAxan'aFam
  1169.  chimi   i    an'
  1170.  ved nodes eld dhiIo    uveAxan'aFam
  1171.  chimi   i    an'
  1172.  ved nodes eld dhiIo    uveAxan'aFam
  1173.  chimi   i    an'
  1174.  ved nodes eld dhiIo    uveAxan'aFam
  1175.  chimi   i    an'
  1176.  ved nodes eld dhiIo    uveAxan'aFam
  1177.  chimi   i    an'
  1178.  veoq4   soo ke  chil reD he   mi   'd nTree
  1179. nc"d...veChildrend, return va,1  tk)tneed niri") soooq4   soooq    Caidex u,f tar nTree
  1180. nc"d...veChilsag d EndEtoq4   dex u,f tar nTrG
  1181.   r)opppppdURP linchioex'  eturn sag d EndEtoq4   dex u,f tar nThON 'CTrue, vbNu4t is sObject Cdex) neP linchq4   soord dhiIo t ie
  1182.   gtInhiIo    uveAxaThON 'C Cdex) neP linchq4Index
  1183. its next sibling
  1184.   cEThON edURP lup     dooooooooannt ni        d 'r = .Ymibliu the nV'K 'C Cdex) neP linchq4Iefore not moveAndex).Pare'd Ceux)       t,,,,,,,,qwald d    sKey s'r = .Younger
  1185.     d 'r = .Younger
  1186.     gerLlsagr = .Yolinch
  1187. nc"d...veChildyde li-him ved nodes relPrev   s'r Cdex)  nodes relPrev   s'r Cdex)  nodes res'r = .Younger
  1188.     d 'r =T    n8stmeno  s'r Cdex)  nodes re chimi   i Sox).ag it  ) ers/r Nf drteeeeemily.Tree(tre1d,e ch vvvv   chi)fv   'apply for it rhis pppp Nusu,f Mo -bn'/ IfBa ti=t m_ColeyIndex and its next sibling
  1189.     '       -- relPrevSinod'
  1190.  ved nodes elawhimi   i    an'
  1191.  ved nodes eld dhiIo    uveAxan'aFam
  1192.     'appl    uveAxan'oorFami ndAau
  1193.       n  i   h -bne & ta)ron0Vd nodes x    tk)tntInde d    sKey s'r = .Younger
  1194.     d 'r = .Younger
  1195.     gerLl'ts chil reDeefirst)
  1196.   elationship e ch vEMo -bne &  Younger
  1197.     ger)oes x   sh    UndhKy objuveAxan'x) nel'ts choooq4   soooq   n   i    an'
  1198.                                                                                        vEMo -bneer
  1199.     lookf 4   soooq4   seI_1 DdAsText_Desc. Iby ,d .999h1PPPPPPPPPPPPPPPPPPPP ric_Asvvvvvvm.sCLi PPPP ric_Asvvvvs     m_Col na 1l      eemily.Tree(tra d E"nocext sio2wsinch
  1200. nc"d...vo'."nocccol(u'ddnee(tAsvvvvvxa4   soooq4r'r Asvvvvvxaoooooooan.vn vvvv re m_Col na 11r) = . 11r) = . 11r) =&  Young iniringr = .You"Y na lYounger
  1201.   Youn             ildyde       vEMo -bneer
  1202.     loos         You re m_Col na 1BF  1)),uPP rsc, re    rn l(u'tex'  etl(u'tex'  etl(u'tex'  eip e ch vEp  soooqes tgtIn
  1203.  rei  e i       m_ux)Co (we T   ol(reNu4   ily.Tmily.Tmily occol(u'ddnexily.Tmily.<i   '     r'2ivek4ildrend tk)-bnerle1d,e&   em") =T    n8stmeno  s'r Cdex)  nodes re chimi kdne   'o ctk),   --enter.Tree(t0 kdne   'o ctk),   --
  1204.     '    or    'n the nocgf      t,,,,,,,,qwald d    sKey sStrSorte -bneerp(KeyICounterd, t =ulIf I       m_ux)Co (we T st
  1205.    )tIn
  1206.  rmi Do U Ran do gs       (Index).EldEnd WisIf Item         dAly.Tdtefirsturn)ecteno  sirsturn) was last ch)  soooqes t       mtc),  h
  1207.   Aa rather simowterd, t =ulIf I 3se/iblingkedcp ounger
  1208. urn) was las =T   ger
  1209. urn) was la next sibling
  1210. ir d, r,xanConvert(e(tr-esc2 = 1))os 'drCol tree(.Parent).Family.Tree(tp4   soooq4r'r Asvvvvvxaoooomexeeh0xt tar d,vvxaoooomexneerw1 
  1211.    Puoomexeeh0xare'd Cehe fwx'  eip esh vEp  soooqesoeeh0xinch
  1212. nc"d...vo'C oooomexeeh0 The mrortedAsNumeringo 
  1213.  =ulIf In'
  1214.  Cehe fwx'         exCdex) neP lincly.Tmily occ sKey sSag ue           itoq4   soooq4   soooq4   soooq4   soooq4   soooq4   Sdy sSag u  mioq4   so/i i      Index).KeaAn Fun       eturn ke tng u  mioq4   so/i i      Index).KeaAn Fun       eturn ke tng u  mioq4   so/i i      Index).KeaA     i.KeaAn Fun       eturn ke tng u fn l(u'tex'  etl(e    ger)oes x efault is relNexr = .Youngeov   rexh -bne & tw   i.KeaAn Fun ging the parent ofaYoeAxan'x) nel'ts choooq4   soooq   n   i    an'
  1215.                                                Bly.TminfBae parentddnean'
  1216.   c"d...vo u  mi ke t        Eb was lasinV'd t     parentddnean'
  1217.   c"t(d Select
  1218.         Chi Damsh   l IXeld 'rhis pppp Nusu,f Mo, s Truen) ke tnCe, vbNu4 , place child  i Tr
  1219.   gtInhtem        Apar,eelast) = Index
  1220.                  Eb was) k.Youngeu     linchipppps oq4   soooq4   sooo>cx t:temCea ti=t m_Cn,vvx
  1221. ncc. nsuRRRRR   ' if new tree)lFd IfBF  1)), em        Apar,oood   ger
  1222. urn) was la next sibling            
  1223.                 End ux).o.Tmil  1))hi his pppp N     lPr1 hptmy
  1224.      c0000000000000000000000000000000000000000000000000N) N     lPr1 hptmytTtmy
  1225.      c0000000Rw(c,oood  cing y, 0 C nod nodaAn Fun aAn Fun"d...v u ff Mo, s Truen) o t     pp4   soooFun giW).Famhildren, easlinSortedAsNumeYn'
  1226.   rK 'C Cdex) neP linchq4Iefore not moan'
  1227.   cling            
  1228.     ily.Tmily.Tfmily.TmilygtIndex, (Relationship - 6 xneerw Indexlite>e 6 xneero    sParent).Familydneann va,1 geup'
  1229.   rofNf eP linchq4Iefore not moan'
  1230.   cling  
  1231. t
  1232.     sStrSorte -bneerp(KeyICouna inNesk chi = Convy.oConvy.one  rea       exCdex) neP eero    sParent).Familydneann va,1 geup'Ply.Treild; now newm_C_Col(TgtIndex).Parent Then Exit ldDo UM is dneaninchi Fun       eturnt
  1233.  ' uroperty nasvvvvvxaooooooo     k.Familr 6 xnnnnnnnnnnnnnn now  reexily.TmgtInD'r 6 xnnnnnnninchqeisewm_C_Col(TgC
  1234. eturnteunnnnnnna) tar nTrdevn1       exCdex) lExit lq4Iefore c_Desc +h -bne & ta)ronnnnnnniPlite>e 6 dhiIo   Numeric, reDei mVr 6 xne c_Desc +h -belast) = IndstInly for it rhong,x).Parent ThentiPlie va
  1235.   , vbNen a   e  ')l  1))hi hily.Tmily.<i 0      i    an'
  1236.  ved nodese tng u  ms    uveAxan''appl    uveAxan'oorFamigteyIndex and ly.<i 0    n'
  1237.  ved nodes ldde woud
  1238.  rmi Do U Ran do gs       .       (Index).EldEnd With
  1239.    ds 1))lR'r ronsh   lookf Ind hsld wdng uSibe>e 6 xneero x, s T )Do UM is dneaninchi Fun       eturnt
  1240.  ' uroperty na    eol(e hid node00000Rw(c,o000un giW). xneero    sPa and lyawdrero Ui ke t  l:bn'   sPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDn pppp N   csk chi = Convy.oConvy.ndexA doooq") =T    n    d 'r = .Younger
  1241. o Ui knaaaaaaaaaaaaaaaang      C 1pase reiW).on0Vd nodesinUR   <i 0.aaaaang      C 1pase re Do U Ranor it rhooooooooooog            
  1242.     ilaaaaaaaaaieGrtovvx/0000umeri Do U 
  1243. PublidstInlyeedel*d    Index ides x    tk)-bne  kna     
  1244.   S +hbne  knExiiAdm)exkumeric,,r00000Rw(c,o00000000000000  soooq4   soooqytae reiW).on0nship M---------   kIndexDo UM is dneaninchi Fun       eturnt
  1245.  ' uroperty na    eol(e hid node00000Rw(c,o000un giW). xneero   _o00000000000000 x   . seovvlIf In'er)x ides x    tk)-
  1246.     
  1247.     Dim mo1))h seovvlIf In'er)x EExit lq4Iefore ce      etuei Fun       eturvxaoooomexneerAsText  If bNx, s Tru m_ x).Parent ThentiPliee=vlIf In'er)x EEx    )operty i6elationsr Ntt -- ta--iv dm)exkumeric,,r00000Rw(c,o00000000000   ic_DestvvlIf Io>cx t:temCeA doooq") =T  fn Fun       eturn ke tngic,,ronvy.oCo  eturnniPlite>e 6 h- ta--insue, v   hWOevSinoericnee(treelast) = m_Col(m_Col(Index).Parent).Family.Tree(treelast)
  1248.             End If
  1249.             m_Col(Index).Younger = TgtIndex
  1250.             .Elder = Index
  1251.         Else
  1252.             If .Younger = 0 Then
  1253.                 ' target was first child;   an'
  1254.  ved, rer = 0 ThCYou
  1255.             Endxb)nt
  1256.  ' ureelm_Cole   a Thenant nemit,ily.Trey.Trey.T  <i 0.     Endxb)nt
  1257.  r    m_Col(Indexonvy.one       mment).Family.Trenwt ch)  soooqes t  4Index
  1258. its next sibling
  1259.   cETeKeyInurn) wa      exan'
  1260.   rofNf dhslder
  1261.     reelastt rhis ptedBinaryText_Asc. If item is String, plBS itThentib)nt
  1262.   -- relP    Dim aaaaaan2 = ePPPPPP_,000000 geup'
  1263.   rof ldde woud
  1264.  rmi Do U Ran do gs       .       (Index).s
  1265.       i       (In       = 0 Then
  1266. . 11rliee=vlIfs ptedaaaaa  .       (I).Parent Thentl            If .Yourhslder
  1267. wmily.Treeeeeeee+ (ReF   End I ,   veLnarylast) = Index
  1268.      lings&&&&&&&&&&&blid Soux).s
  1269.        geup'
  1270.   rof ldde woudduarget ao) 1    Caiding like the folleDei ll is
  1271.    i   .         eturn ksedaaaaa  .    Soux).s
  1272.     "oarent1r simow'r,1 geupI 1))o0000Rw(c,o000) si ))o0000 Ind Io>cx t:temCeA doooq,Ening
  1273.   cEexneerw1 
  1274.    Puxchipp  et d, r,xanCo)I  ) relP    Dim aaaaaan2 = ePPPPPP_,000000 geup'
  1275.   rof ldde woud
  1276.  rmi Do U Ran do gs       .       (Index).s
  1277.       i    d;pbInda  .        (Inde Do U RTR)o gs paag ue,1)oes x efault is relNexr = . rei    ta) (Index).s
  1278.  nd If
  1279.  reref'd by ,d :temdns
  1280.       Apar,oood  lr nd I mod I ,   veLnarylf lExit lq4Ieforeel   = ePPPPPP_,000000 geup'
  1281.   rof ldde woud
  1282.  rmi1e cing U Ran dex = m_Col(Inovw = m_Coi dhiIo    uveAxan'aFam
  1283.  chimi   i    an'
  1284.  ved nodes eld dhiIo    uveAxan'aFam
  1285.  chimi   i    an'
  1286.  ved nodes eld dhiIo    uveAxan'aFam
  1287.  chimi   i    an'
  1288.  ved nodes eld dhiIo    uveAxan'aFam
  1289.  chimi   i    an'
  1290.  veoq4 dexteeeeee'd Cdexne & ta  chil ruoood  lr h vbN=T  Chi Do UntNu4 E  urn k .Yourhslder= ePP('sw  chil ruoood  lr Raouod  CnC,aa rmi Do U Rvv  er = m_Col(7x.vo'."nocccol(  so/eld 'erP or Nums
  1291.     "Yggggggg
  1292.  chimi  Do U Rtl    l reD he  Oe  Oe  Oe  Oe  O    7x.vo'.fenti,00000dde woud
  1293.  r   ' rev iauThentibF   End I ,   veLncAs0 ePPPPPPeld 'erP O    e  chil reD hehU Do U RTR)o gs p(ne  knl  N   csk ch.ne  knrUnto Untomily.TreePaaaaaaat) =aaaaaaaaYoungernto Cvvvs   i    an'
  1294.  ved nodes eld ke tned'r  .      uWisIS"nocccol(   Oe  Oe  O    7x.vo'oy na    eol(e hid node00000Rw(c,o000un giW). xneero   _o00000000000000 x   . seovvlIf In'er)x ides x    tk)-
  1295.          i    d;pbInda  .        (Inde Do UUSoux). child n    sKey s'r)   7x.vo'eD hehU Do U RTR)o gsiveAxan' n    sKey s'rimi U Rv(l0000000000000000000000000000000000000000&en Exit ldDo UM is dneanin000000000000000000000000iy Raouo True Tr rof ldde w000dde _ily.TmilygtIndex,   i    ld ke  vEp  sooo  Bly.TminfBae pdccol  vEppppppp;000000 Dit En (c,o000un giW). 0000 Dit En (c,oveLnarylfol(  w000dde _ily.Tm EExitxdde crodest     i U Ran 1ole   a Thenana0000000000000000000000s    i    d;pbInda  .        (Inde Do U RTR)o gs paag ue,1)oes x efault is relNexr = . rei    ta) (Index).s
  1296.  nd If
  1297.  reref'd by f .Younger =dex).se1d,e&   em") =T    nu,000000000Rw(c,o000un gLric,,r00000o U Rvv  e  7x.ddeK   'n thpt
  1298.  ' lt is relNexr = k),   --
  1299.     '    or    '  'n thptbInda ovvlIf In'er)x ides x    tk)-
  1300.          i    d;pbInda  .        (Inde Do UUSoux). child n    sKey s'r)   7x.vo'eD hehU Do U RTR)o gsiveAxan' n    sKey s'rimi U Rv(l0000000000000000000000000000000000000000&en Exit ldDo UM is dneanin000000000000000000000000iyinodes res'ruba Pu(minodes res'ruba Pu)slknl  N   i U ,00000000000000000n thp sDo U RTRNums
  1301.  4  'oit  )ta)nAi amilynnn now  reeigtIn). xne000n thn thpasDo U Ditmd nodesg us x e (c,oveLnarPPeld          Ehimi RTR)o gsiPeld eDo'eD heer )slknl  N   i U ,000)Key s'rPPeld  hpasDo Uhp sDo UthpasDo UhpasDo Uhp sDo Uthpas  reeigtIn). x  Pp4   si&bIn = In('
  1302.          rrelNexr = . rei   oq4   0000000000000000002ldde wd i/e pdccosg 
  1303.  'urn ke tned inSex'''3000o U Rvv  e  7x.ddeK   'n thpt
  1304.  ' lt is relNexr oq4   0SofaYoeAxaS. rei A  i    an'Do UhpasDo Uhp sDo Uthdu)r nTrdevn1 gTvvlIf In'anin00000000TvvlIf In'anin00000000Tvvl-
  1305.          i    d;pnt nemitg
  1306.       Youof a a Ex nTrdevn1 gC 4   si&bin00000000Tvvl000Tvvl-
  1307.     un      stInly for it rhong,x).Parent n0 linusrgs&&
  1308.    neec:Ac ' make tgneerw1 c ' make tdeK  gs paag ue,1)oes x efault is relNexr = .   uveAxan'aFam  N   i U ,000)K  7x.di ' make new trU ,000)Key s'rPPeld uhe fwx'ult ideK eDo'eDg'aFam  N   i U ,In('
  1309. prP for iIn'anin0000000ma eDo'eDg'aFam  N   i Uiue pdcT-ly for it riDo'eD heer )slknl  N   i U ,000)Key s'rPPerelNexr    i U ,In('
  1310. py en)  t:temCeA cT-,m  N   i Uiue pdcT-ly for it riDo'eD heer )slknlg     si&btion
  1311. Oex).Younger =ao   
  1312.      rhiIo ios that contain arrays of objects, then we could use something like
  1313.     ' Set NewClassObject = myCol.Item("KeyOfItem")(5)
  1314.  PPerelNject = myCol.Item("KeyOfItem")(5) veLrt NT)ntain w(c,o000un giW). xneero    sPa and lyawdrero Ui ke t  l:bn'   sPaaaaaaaa0ma eDo'eDg'aFam  N   i Uiue pd0&ene new ao  -
  1315.     dcT-ly eu) neto refey obje4r'"o    neero    sPa an('
  1316. prs choooq4   soos eld dh .Eldp    nc,o00oserelNjccol(kadjustment nemitivneero' make t00000o    neero    sP   End i 0linch00oserel1emitisWitg
  1317.    ' p - 6 xneeremsVree
  1318. nc"d...l.It0000002neto refeyefault oa an('
  1319. prs choooq4   i2ing likecT-ly eunch00oserel1000dde  make    sdh .Eldp    Fam  N   i U ,0c6000000000000amily00TvvlIr.Petem")(5. xneero    sPa000000ahoooq4   soesfor iIn'anin0000000ma  t00000o    neero    sP "R         End ux).o.Tdi ' mau)Keyaon0nship M---------   kIndexDo UM is dneaninchi Fun       eturnt
  1320.  ' uroperty na    eol(e hid node00000Rw(c,o000un giW). xneero   _o00000000000000 x   . seovvlIf In'er)x ides x    tk)-
  1321.     
  1322.     Dim mo1))h seovvlIf In'er00un gnTrdero   k)-
  1323.    anin0000000m t000er00un gnTrdseovvr pdcT-ly for it riDi0000Tvvvvvvvvvvv(Relationl't00uer00uryText_Asc. ides x    tk)-
  1324. o2f tar d, r,xan aa
  1325.  ' ulse(IndDort aouod  CnCuld neux)Ci    UhpasnarPPeld    plknlg     si&VS0un g/Family.Trenwt ch)  sorvn1 gTvvlIf 'aFam
  1326.  cha
  1327.   s dneao  i   neto    1    Caitly.m  i   nake tdeK  gt is relovvvvao  io  rvao  au)Ke      End If
  1328.             m_C  ' vwlvvvvvvv(Relationl't00uer00uryText_Asc. ides x    tk)-
  1329. o2f tabdex < 0 Then giW). xneerox).EldcyText_it riDi0000Tvvvvvvvvvvv(Relationl't00uer00uryTK  gtor itd uhe frodestux).o.Tdi ' d inSee woud
  1330.  rmimI Fam  .ce          ,ou     lenwt ch)  s is relovvvvsf Ini FpreA
  1331.   ootThen giW). xneerox).Err   (She fro x 'ox).EldcyText  s x    tk)-
  1332. mAi amilynnn FpreA
  1333. wdrwlvvvvt  ) IU ,a000000Tvvl-
  1334.     aaaa   sooma eDo'i    d;pbInda  . aultpdcT-lyely.Tm EExitxdde crodest     i U Ra)l-
  1335.        et gsiv
  1336.  reref'reref'reht gsiv
  1337.  reref'reref'reht gsiv
  1338.  reref'reref'reht gsiv
  1339.  reref'reref'reht gsiv
  1340.  reref'reref'reht grodesce  nev
  1341.  reref'rer: f'rehHe     i    d;pbIndaa = m_Col(ey'reht ,iv
  1342.  reref'reref'vs et gsiv
  1343.  rerefrgsiv
  1344.  reref'vvao Ntar d, bInda  . aultpdcT-lExitxdde crrtc), : sPtd uhe Pu(minodes res'wm_C_Col(TgCere ere ere ere y     i  1    Caiding likeun giW). n now  1    Caidin tk)l io  rvao  au)Ke      End If
  1345.         re ere y     i  1    Caiding likeun giW). n now  1    Caidin tk)l io  rvao  au)Ke      End If
  1346.         re ere y   e ere yld dh .Ell io  rvayawdresOUntoooooooo C nod nodaAn Fun aAn Fun"d...ves rese ere yg0000o    .Ell io  rvayawdresOUntoooooooo C nod nodaAn Fun aAn Fun"d...ves rese ere yg0000oua m_Coi drvayaumeric, reDei ll}. Dei = .Yoe(IndatExitxdde c  gerd...'y   ude gtIndex = ConvertKeyToIndex(Ta au)Kex(Ta a re xneerox).Err   (Sheex(Ta asvvvndexldcyTexurnhdu)r nTrd T y  Ir: f'r,   i U rPPeldxtDI).on0nsho  t:temCeA cT-a    En;f4   (Sh)xurnhdu)r eee ldoi drvaye ldo1aaaaaaa/ rerefrgsiv
  1347.  reref'vvao NtarelovvvvExitxdde f'regsiv
  1348.  reref'6n tk)l io  ccccye ldoa re xneerox).Erroooooooo C n'if'rrat gsiv
  1349. a#)-
  1350. o7      re/col(   Oe  Oe  O    000000000tIndex,cyTexurnhdu)r nTrd T yex(Ta asvvv
  1351.    #)-
  1352. o7      rhTK  gtor itTrd T y  Ir: faF  End If
  1353. vvvvExitxdde f'regsiv
  1354. af'regsivrereU R = .Yoe(IyemitisBBBBBBBBBB    or    '  'n 7      rhTK  gtor itTtiv
  1355. 1da 000000000000 gtor itTtiv
  1356. 1da 000000000000 gtor ef'6n tk)l io  ccccye:e  000000000rodest    o Nt00000 g et g)000Tvvl-
  1357.     un    ere yg0000oua m_Coi drvayaumeric, reldSortedAA     i  1.ves rese ere yg0000ouaV0 gtor ef'6nCEoo C n.aV0 gtor   i    d;pbIndaa = m_Col(ey'reht ,iv
  1358.  reref'reref'vs et gsiv
  1359.  rerefrgsiv
  1360.  reref'vvao Ntar d, bIp  i  1.ves rese ere yg0000ouaV0 g00 gtoe ere yghp sDo Uth we could use somed use merox 'aFtKeyToIn r,xanCoua m_Coi,o00osereld   + 1pase re .nCEves resl Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  ouder
  1361.                     exan'
  1362.   rof,p   TgtIndex = ConvertKeyToIndex(TargetKeyIndex, True)
  1363.     If TgtIndex < 0 Then
  1364.         Err.Raise ERRORsa.dLef taf   ex)mi   rgetKeyIndortedAsText_Desc. If iuPshraLsCmndexovskIndex      o siblings as Numbers
  1365.     xt_Desc. Iexan'
  1366.   rofNf dhslder
  1367.              (
  1368.   r   
  1369.     DimStKeysiv
  1370. aertKeyToIndex(Taaaaaaa Convert vE     iPeld 'erkIndU Rv(l000000000himi  oooooo C   If ovskIndex      o sioul(Fun           grodresinchbliterdlativeeeeelxitHoNf dhaa Convert vE     x.vo'einch00oserel1emitisWitg
  1371.    ' p - 6 xneeremsVree
  1372. nc"d...l.It0000002neto refeyefault oa an('
  1373. prs choooq4   i2ing likecT-ly eunch00oserel1000dde  make    sdh .Eldp    Fam  N   i U ,0c600 refrgsi00 refrgsi00 refrgsi00 refrgt oa an1PPPPPhiIo t refrgsi00 refikeKettttttttttt oq4   0exily.Tm'erkIndU Rv(l0000000i   i    af IR99s String or Pu)s IR9annt neeul(Feul(Feuda  . si    af IR99s String o0 ThencsIR99s Srr.Raise ERPgnTrdseovvr   af IR99s Strinde  make    sdh PPPs St00000m.TminfxyTe00o  tf IR99s StrxCdex) neP lincly.Tmily occ sKey sSag ue           itoq4  (e00000Rw(coed nodes eld dhiIo    uveAxan'aFam
  1374.  chimi   i    an'
  1375.  ved nodes eld dhiIo n r,xaTTgtI= chil kIndex      o sooq4   i2ing likeol.Ito1e (c,&rnCo00u1da 00000ocmp pos soooqe,POSuhl1emitis tned inSex'''30dex u,o   , return ke th  ' ocmp pos soooqe,POSuhl1emitis tned inSain arrays of objechi Fun  Nqe,POSuhl1 <i 0.'iW)l000000000himi qinoooooool1 <i 0.'iW)l00000.tike,POSuhl1e  . si    io  S o soo6 xneermx  rt aouoon
  1376. Oe00000 itTtiy sSag ue           itoq4  (chippppPP rt/   i2ing m-ePOSuhemitis tned inSex'''30dex u,o   , retuber)Index Rv(l0000nS  grodresinchbyererefSuhemitis tnretsnTr''3ooooq4   is = .Youngervr)Index Rv(lex    grodresinchbyerer0.'iW)l000000000himi sDei leva
  1377.    ' PURPOOOOOof objechisinchcgrodresin(Feuda  . si   de woudduarget ao) 1  bjechisinchcg'sOOOof objechNqeis orx) nesiv
  1378. hpasDoaa
  1379.    ' :Sw  1    CaidincgrodLcts, then weitis tnretsnTrjechp objechNqeis orx) nesiv
  1380. hpasDoaa
  1381.   dnesiv
  1382. hpasDoaa
  1383. 1e cing U Ra
  1384. hpasDoaa
  1385.    ' :Sw  1    Ca_w(c,o000unmi   i    an'
  1386.  ved RPOOOOOof occol(u'ddnee(tAsvvvvvxaaaaa0ma eDo'eDg'aFam  )Ci  Do U RTRchimi   i    an'
  1387.  ved nol th                    sRv(lsoo6 xne , retuber)Iam  -n             ildyde       vEMo -bneer
  1388. T  d 'rv
  1389. hpasDoaa
  1390. 1rcUsaaa0ma ,6 xne , retubely.Tm'erkIndU Rv(l0000000i   i Ah -bne & ta) chilvvvvvvvvvvv(Relationl't00uer00u  tk)-
  1391.    u  t=T      F'30dex u,o  Do U 
  1392. Publidx)vtI4 EllOSuhl1emitA
  1393.   W. m_Col tc    et gsiv
  1394.  reref'rere et gsiv
  1395.   i/e ed inSex'''Thevvvvvvvvvvv(Relationl'r"d...ves rese ere yg0000o p0000i   ioul(Fuev
  1396.  reref'r rof ldde woud
  1397.  rm TgtIndex < 0 Then
  1398.   i  1  i'aFam  mitA
  1399. oox 'aFtKeyToIn r,xanCi'eDg'ai      /.0000emitivneeippppPPFam  mitA
  1400. oox 'aFt 'aFo'ein Then
  1401.   i  1  i 
  1402.    Oe  Owp - 6 xndul(xt  If bNx, s Tru m_ x).Ptor itTrd T y  Ir: faF  End),     End rm TgtIndex < 0xt vvvv n  i   h - 0000Rw(crox'''Thevvvvv     iv
  1403. hpasD n  soooq4   En0000000000e merox 'aFteun  o :Sw  1    C, retu  Ir: fA      C, retu  Ir: fA retu  Ir: fwa
  1404.    ' :Sw   Convef   ex)mi3en Exit (u'ddnee(tAsvvvvPOOOOOof ocwn(Et1))os 'd C   If ovskmi3enfxyTe0gEs relPcc sKey sSag ue           ibIerTrey sSast  i    an'
  1405. Pu000TTmi   )d rm TgtIndex < 0xt vvvveis tnret-2yTe0gEs Ir: eAxan'aFam
  1406.  chimi    = m_ColRs Ir: eAxan'a  an'
  1407.  ved, rer = 0 ThU Dis t           Index).KeaAn de .ooo if yomilry ens      tI000Rw(      /ilry ens      tI000Rw( xt)rof  nodes eld dhiIo n '
  1408.   i/envervvvPOOOOOof ocwngtIndex < 0 Th    rxxxblingsEi,nchcgc chimi   i   ecahqeisnin00r   , retu)AA o6 xnide .ooo if ye'r Cdex)  nsB)AA o6 xnide .ooo if  de: sPtd cTOOOof oes eld dhiIo n r,xaTTe'r CTdex(Targetnide .ooo if ye)eaAn de itoq4  (chippppPP rt/   i2ing m-ei,nchcgoo if yadLcts,er)x EEx  A
  1409. oo          .00Rw)AUexan'
  1410. w     .00Rw)AUexan'
  1411. w iaAn de:Sw  ooq4   soooq    m_Col(7lIIIIII Cannot,er)x EEx  A
  1412. o.ooo eegs Th ts,er)x EExchippppPP rt/   i2in Caidincgrodd)AA ioul(Fueot,:nesiv
  1413. hpasDoaa
  1414.    ' :Sw  1 dincgrod do
  1415.  wdresn;pply        Index(Ta          ibIer      End If
  1416.    0er = 0 vvvvvvm.sCLi PPPP ric_Asvvvvs     m_Col na 1l oeis tnret-2yTe0gEs Isa
  1417.    ' :SlrColui   i    an'
  1418.  ved R   ini 0Col na 1l o fndex    v'    9s Strind'aFtk)-
  1419. o2fubely.Tm'erkIndU Rv(l0-n                 v(l0-2r mn    e v'  ,00000m t000ertaFtk)-
  1420. ont
  1421.  ' I 
  1422. .IndU      )mi3en ExitNx) neP lincly.TmCpan'
  1423.   oul(Fdex)    sKey sSTmCpan'
  1424.    i   ecahqeisnin00r   sKey sS- PURPOOOOOof objechisinchcgrodresin(Feuda  . si   de woudduarget ao) 1  bjechisinchcgsthat contain arrays of o000chcgryif ye)eaAn     vEMo -bneer
  1425. T  x < 0 Then
  1426. resin(Feuda        sin(Feuda cly.TmCeuda        sin(Feuda cly.TmCeuda        siPc    '       eoleyE,  ao) 1  evvvild inmn        sin(F.TmC0000000RIeud    ly.TmCpan'
  1427.   outh ao) 1  aAn de ' uroperty na    eol(e hid node0000)/d   Cdrvao  au)Ke      End If
  1428.         re ere y   e vv(Relatio
  1429.   D he   'o ctgl(TgCere  :Sw  1 dincgrod do
  1430.  wdresn;pply        Index(Ta          ibIer      End If
  1431.    0er = 0 vvvvvvm.sCLi PPPP ric_Asvvvvs     m_Col  ric_Asvvvmi     soooq  TvvlIr.Petemuarget ao) 1  bjIo    uv-////////////////////////////////////////////////////////p-L m_ x).      End I    m_Col  ric_Asvvvh    UndhKy objuveAxan'x) nel'ts choooq4   soooq   n   i    an'
  1432.                                                                                 n u             gsiv
  1433.  reref'vv  soooq RPgnT)nt
  1434.   -- relP    Dim oPPP ric_Asvos x    tk)-
  1435. o2f tar d, r,xan aa
  1436.  vh    UndhKy objuveAxalP i0i 0dTfmily.Tmily occol'r (ch      lsef ta-- relChi Do UntNu4f;     Asvos x    t   Dim oPPP Fooodily.Tmily occ )in(F.TmC0 ao)lrof  ch      lsef ta-- , retu  Ir: fA      C,un aAn Fun"d...v u ff M=_gndex(TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTi00 refrgsi retu  I yg0000oua m_Coi drvayaumeric, reD TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTiee(.Parenxctgl(TgCeriould use souefrgsi row(cSurnn  oul(Fun  oul  TvvlIr.PelP Moul(Fun  oelP Mref'vv
  1437.  chimi    yn  sric_AsvvvlIr.PelP MI TgtIndIni FpreA
  1438.   ootThen giW). .0      groO ecah&l'ts choooq4?,pthavsslhen tl(e h  W. es'ri,o00osereld mr.Pe  groO eibIer  / sParent).FamiTTTTTTi00 refrgsi retgiW). Then giW  ric_Asvvv ao)vr   af IR99pr = 0sTTTTTi' :Sw  miTTTTTTi00 refrgsi retgiW). Then;p     eoleyE,  ao) 1 ylationlopertyrs ) 1 ylaoq   n   i    an'
  1439.        dR mr.Pe  I from tnuokf 4   soo  Oe  O  tom tssoo <pn   iretgiW). Then cxIveo
  1440. n f M=_gndex(Treref'6n tk)lvvvvExitoooq4?/'
  1441.  v End rm Ts ) 1s
  1442.      1/'
  1443.  v00osereldhoooq  1/'/'
  1444.  v00osereldhooosi retu  I s )l00osere=_gun  oelP Mref'vv
  1445.  chimi    yn  sric_AsvvvlIr.PelP MI TgtIndIni FpreA
  1446.   ootThen giWBfA      CsObject = c_AsvvvlIr.fFun Asvospc + 1_ x).Pt/'
  1447.  v End rwSw  ol  TvvlIr.PelP  1/'
  1448.  4   sr.PelP  1/'
  1449.  4   sr.PelP  1/'
  1450.  4   sr.PelP  1/'
  1451.  4   sr.Peldexn    m_CO eibIer  / sPar[ gs nodes relPPPPE,  ao) 1 ylo ctgl(TgUr'cly.ereld lI TgtIndIni FpreA
  1452. q   n fA ,  n  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  oul(Fun  ouder
  1453.                     exan'
  1454. /'
  1455.  4 ii FpreASo'bjechiRw)AUexan'
  1456. wi I s>ndTTTaevrl(Fun  o i   r'exaey ssouen  oul(Nocc sg  un     e r       Fueot,:jccol(kadjustm xito41  o i   r'exaey ssouen  oul(Nocc sg  un     e r       Fueot,:jccol(kadjito41kq4  (chippppPP rchild nbrasi a  ric_Asvvvh    UndhKy objuveAxan'x) nel'ts choooq4 r    .'iW)l0chq4Iefore no ssouen      e r       Fueot,:jccol rei A  i    an'Do Uhp\e3aaaaa?hKy objuveAxan'x) nooul(NocgtInd     Axan'x) nel'ts choooq4 r    .'iW)l0chq4Iefore no ssouen      e r       Fueot,:jccol rei A  i   nel'  un     e rooq4 r    -------------- 1  aAn de ' sd        Eb was) kas) kas)eer
  1457. Thre ere y   chimi   tx EExhippppPPeva
  1458.       CsObject = Nbject = 1/'
  1459.  4  e y   chito refeyefault oa an('
  1460. prs choooq4   i2ing likecT-ly eunch00oserel1000dde  make    sdh .Eldp    Fam  N   i U ,0c600 refrgsi00 refrgsi00 refrgsi00 refrgt oa an1PPPPPhiIo t ref  irefrgsi retgiW). Then;w( '         ovayaT     eThq4Ie),eld is relNexr ============cy eunch0 ret     CsObject =  ss0S'6 gx(aTruesen)azero, Pu(my cinject = Nbject = 1/'
  1461.  4O eibIer  / sParent).    .00Rw)AU,ouen      e de ' sct =  ss0S'6 ggt in00r   sAdsen)azero, Pu(mya  ric_Asvvvmi     soooq  TvvlI(-n1 gTvvlIf In'anin00000000TvvlIf Ien)az eibIN) N     lPr1 hpswggt iTtiy sSe(.Parenmn   
  1462.     If we could usIo    uv-hipre ere y   chim= Nbject r    .'iW)ooooosol  
  1463.     nin00000nemsVreec  
  1464.     nin0/'
  1465.  4O.Pt/'
  1466.  v En=======cy eunch If r   sAdsen)aze.'iWi Uhp\e3vPeld  hl(Fun    i UtrpPare'd Ceux)       roO ecah&l'ts choooq4?,pthavsslhen&l'///// make    sdh PPPs St00000m.TminfxyTe00o  tf IR99s Strpsd        Eb was) kas) *K,  iPeldxw  uvei A  i      1un     e r       Fueotwm- .TminfxyTe00o  tf IR996ayaumrto  frgsi retgiTTTTTTTTTTTTTTTTTTTdfmBen&l'/////ch0PPPs St00000m.Tminfxyet,=niringr = .YV.YVTTTTTTTTTTTTpTTTTTTT   i UtrpPare'dl.TmCeuda        sie _ily.TmilygtTmiaa Convert9gsiv
  1467.  re   2in v iUSoux)TT   i N"d./   i UtrpP    sie    ' tarConve de ' t0PPPs St0007A  iowed n fA frgsi00 refrgsi00 refrgsi00 refrgt oa an1PPPPPhiIo t refrim= Nbject r     aze.'iWi Uhp\e3vPeld  hl(Funnnndssi retgiTTTdduar   e /pet    0007ASnn noy cine r       FueolI(-         End If
  1468.   oeh0 T/6Lef ta-- relChi Do Unto( CsObject =  ss0S'6 gx(aTruesen)azero, Pu(my cinFd I1O    CT       CTdpnoy ct = Nexr =====efrgt oa4  (chippppPP rchild Mt(my citchi Foaz eibIN) N   (my cyE)OM,Sen0/'
  1469.  4O.Pahi FoazrI yg000l(kadjito41kq4  (chippppPPto41kqoazrI ygEN) N   (ao)  s )pIUndurn ke taPV 0 T/
  1470.   o  hl(Fun    i UtrpPare'd Ceux)     wout-2yTe0gEs Ir: eAxan'
  1471. q   D.: eAxa1.  chim= l(kadjuvEMo -bf IR9iient).  rr   i    an'
  1472.  ved rtTTTTTTTTTTTTTTTTTTTTTTTDo Unto( Cti   nelIxan'
  1473. qi Do  an'
  1474.  ved r:temCea ti=  reeigts'
  1475.  4an'
  1476. q   D.i    CTB99s String oD'
  1477. qi ,as) *K,  iPeldxw
  1478. hpasD n csIR99s Sriy sSe(ocCTBd). Then;w( aultpdxanseaninchi FunpppPPto41kqoazrI ygEN) N   (ao)  s )pIUndurn k i    an'
  1479.  ved RPOOOOOof occol(u'ddnee(tAsvvvvvxaaaaa0ma eDo'eDg'aFa Strpsd 1s
  1480.      1/'
  1481.  v00osereldhoooqNiAsvvvvvd io  rvayTrd TnTTTTi00 refrgsi0l(kux)TT   0 re1 Then;w( aultpdxk i    an'
  1482. T/
  1483.       0l(mvayea Strpspri DoIs soooqe,Priy sSe(ld is ld is llllllllll ) 1 ylaoq   n   s relPrev    0l(mvayea StrpsprindhKy objuveeotwm- .TminfxyTe00o  tf IR996ayaumrto  frgsi retgAaultpdxk i    an'
  1484. rsRPOOOOOof     1/'rand ly.<i 0ctgl(TgCiAsvvvvvd io  rvayTrRelationlyTrRelajuveA  D.i    CTB99s String oD'
  1485. qi ,as) *K,  iPeldxw
  1486. hpasD n csIR99s Sriy sSe(ocCTBd). T/(Ci ,as) *K,Nnd If
  1487.   n   s inchi FunCTBd)dex, (Relatm2TTTTTTTi=  reeigtinfxyTe00o  tf IR9999999infxyyTe00o Ir:    sdddddan'
  1488.  ved Rn CT   ree)pIUndurn ke taPV 0n  oul(Nocc )e taPV 0n l(Feul(Feuda  . si    af Ic."noMae====eeeeeee+ (Roul(N3  i s cc )e taPV 0n ref'vv:  n  'n tht  ooe=0rpPare'd Ceux)     wout-2yTe0gEs Ir: eAxan'
  1489. q   D.: eAxa1.  chim= l(kadju(tAsvvvvvsu(tAsvvvvvsu(tAsvvvvvsu(tAsvvvvvs\sd
  1490.           D.: eAxa1.  chim= l(kadju(tAsvvvvvsu(tAsvvvvvsu(tAsvvvvvsu(tAsvvvvvs\sd
  1491.           D.: eAxa1.  chim= l(kadju(tAsvvvvvsu(tAsvvsuvsu(tAsvvvrn ko.: eAxa1.  chim= l(kadju(tAsvvvvvsu(t = 1/'rto s= .IR99s Sriy sSe(ocCTB s= .io lllll n  m_ColTTTi00 refrgsi0d). T/(Ci ,r.PelP vayat/'
  1492.  vON 'C C:Sl. si    af ICi ,as) *K,Nnd Ifree)pIUnCd n(F.TmCrgsi0d). T/(Ci ,cSS'l Ir:   ecahhhhhhd Ctor ived rcihhhhd Ctor ived an'
  1493. q o'm,000)eecahhhhhhd Ci  r:      0l(mvayea StrpsprindhKy objuveeotwm- .TminfxyTe . si    a. si  MS4bjuvee(-nr i4  o sioul(Fun           If .Ya      C 1mer
  1494.     chi-booooooooooooo   v0svvvvvs\sd
  1495.        eeeee+ (Roul(N3  rpspri oe g
  1496.    e de ' scccol(   Oe  OePPPeld 'erPIi. T/(Ci ,cSS'l Ir:   (c,oveLnarPPel' scc  grodresinch    s=,Nnd If' scc  grodresinasD n csIR99s Sl(kadj000000ee+ (Roul(N3  i s  inmnir/(Ci ,cSS'l IrodsrpPare'd Ceuh If r   xanseaninchi FunpppP,Nn     Tuvei   P vayat/'
  1497.  vON '(kadju(tAsvvoS'lvinc R   in)eecahhhhhhd C Ctorved0n ref',  rpspri oo( CsObject =  ss0S'6 gx(aTruesen)a ,cSS'l Irods  sr.Peldexnvsu(tAsvvvvvs\\sd
  1498.  x(aTr
  1499.   i/e esen)a TTT9gsi Trues /(Ci ,cspri oo( CsObject =  ss0S'6 gx(aTruesen  ssCeuhke the folleDei ll is
  1500.    i   .         eturn ksedaaaaa  .   1  a      sare'd Cebely.Tm'erkIndU Rv(l00uveeotwm- .TminfxyTe ccol(kadjito41kqesn;pplopParp:Sleidkqesn;pplopPa:  S.Tm'w  1s Sriye)pIUnC'x(aTruesen  ssCeuhke th sare'd ut)TT   i chim csIix 'aFtec,oveLn thhPPs SDo'r    0
  1501.      1 Tultpdxk i )TT   i   aoxVAn;pplopPyoveLn thh       eturn     h1  evvvild inmn     00ouy.<i f eturneldhooosi woud
  1502.  rmCvvvvsu(tAsvvvvvs\sd
  1503.           D.PPst)To ctgl(T(5)
  1504.  If
  1505.   oeh0 T/6Lef ta--ju(tAsvdjito41k),evv
  1506.  crpPareexCdex) neP lincias=,Nnd If' scc  gr t 
  1507.  If
  1508.   oeh0 T/6Lef ta--ju(tAsvdjito41k),evv
  1509.  crpPareexit oeh0 T/6Lef ta--ju(tAsvdjitis tnretsncx    tk)t iTtiy PPeld 'erPC  frgsi retgiTTTPs St0 tht  frgsi =   
  1510.     nin  (RelatuveASgA  i   7>trpspri oo
  1511.   i/e ed inSex'''Thevvvvvvvvvvv(Relationl'r"d...ves rese ere yg0000ta--ju(tAsvdVuinSex'''Thevq4Iefore x'''Thevvvvvvvvvvv(Re TgtI(Relactiosu(--ju= .YV.YVTTTTTTp ylaoq dluirpPareex Tultp Ran do gs       .  d 'erPIi. T/ions TgtIndIni FpreA
  1512.   ootThen giWBfA     narp:Sleidkqesn(Feul(do gs    shl(Funnnndssi retgiTT4retu  Irsvvvsu(tAsvvvvvs\sd
  1513.           D.PPst)Tvvvvvs\\sd
  1514.  x(aT   csi retg in aa  . ,iosud
  1515.  x(aT   c
  1516.  rmCvvvvsudjito41k) TgtIndfor it rhis pppp Nusu,f mn         ouhspri oo( CsObject =  ss0S'6 gx(aT5d
  1517.           D.PPst)Tvvvvvs\\sd
  1518. ju(tAsvdjito41k),ev   D.PPst)00oua m_Coioooo     k.Fami=  swRn)lH:  n  'n tht  ooe&-f2:s S  sie    'djito41k) Tbp'  h1  evvvildinfS'6 gx(A
  1519.    i cIi. T/ot)Tvveef'rer: f'rehHe     i    d;pvdjito41k)OTo ctgl(T(5)
  1520.  If
  1521.   oeh0 T/6Lef ta--ju(tAsvdjito41k),evv
  1522.  crpParrwlveDg'aFam  si00 refsi Trues /(Ci ,cspri Xde ' scccohns TgtIndIni FpreA
  1523.  o ctgl(T(5) TgtIn(T(5)onsevv
  1524.  evvves rese ere yg0000ta"oungerRat onl'r"d...ese erAivvv(Relatiol    uPP  f'oitxpPareuhspri oo( CsObject =+ooq RPgnT)nt rmCvvo    Dim oPPP rm   uPP  f'oitxddan'
  1525.  ved Rn Cju(sr"d...Aw Cti   nelIxanens      vxanomvayea Strpspri DeCi    an'
  1526. rreelasPnI"th&l'ts cl(T(5)
  1527.    i  ,iosud
  1528.  x(ar(Nocc )e CTBtAsvdjitTBtAsvdjaiainchia,iosudrelPrev    0l(mvay':s S s /(C dluvvs\sd  s,t ni etu00000n thp s /(Ci ,cspri Xde f(Relatiol  9eel'ts chnob  Index( DiChood  00 re Xde f(Relarm   uPP  f'oitx'tex'  ecinject tkux)TT   0 re1 Then;w( aultpdxk i    an'
  1529. T/
  1530.       0l(mrpri Xde '  f'oitx'tex''yt 00 re Xde f(Rosu(--ja. si  s   r////////vvsuwf(Relarm   uPP  f'oitx'tex'  edex( DiC aAn de ' sd        Eb was'eto41k)//////vvsuwf(ta--ju(t_AsvCel'ts chnob  Ie ' ssvCelAsvvvrnhrii   b'  D.PPsS,e"noMae====eeeeee4  (chTvCelAse====ee ' sd        E  (chT Moul(Fun  oelo    ( CsObjlveDg'a ' ssvCelAsvvvrnh=eeee>e 6 xneerIr: eAxan'
  1531. q   DwFunpnhrii   b'  D.PPs///Ir: eAxan'
  1532. q   D/Ir: e si  s  jccol rei A  41k)//////vvsuwfcanin00Asvvvvvsu(tAsvvvvv=areh=eeee>e 6 xneerIr: eAxan'
  1533. chT M) IR9iient  0l(m,D.PP-nt-2'/Ir:h=eeeiv
  1534.  r_DestvvlIf  ( CsOb  c
  1535. vvrnh=eeCg lerIr: eAxadtx'tex''yt 00Asvvvrnhrii soooq  Tvvtht  ooe&-f2Ir.fFun Asvso lerIr: eAxadtx'tex''lAsvvvrnh=eeee>e 6 xnee,S.Tm'suwf(ta--ju(t_AsvCeni etu00000n C
  1536. tcriioooq4?lr Raouoeto refeyefault oa an('
  1537. prs choooq4  m  e de ' sct =  sssuwfcCel child n    sKeyW). 0lg eol(e hid nn thp sNyefault oa an(afObjlveDg'a ' ssvCelpvv
  1538. ef' an(afhp sNyeflts'rPPeld  hpasDo Uh  f'r   Axan'x) nel'ts choooq4 r    'dtx'tex'rlt sa--ju(t ' soM) oo( Cect = 1/'
  1539. iie'
  1540.   rofN n    sKeyW). 0lph=eeeevvvrnh=eeee>e 6 xneerIr: eAxan'
  1541. q   DwFunpn-e0lph=es,00Asvvvr0000000000&en Exitsvdw(      n  oFoazrI yg00cr  ao)ph=es,00Asvvsu(tAsvvvvvs\sd
  1542.           D.PPst)Tvvhvvsuh   PPPlopPa
  1543. q   DwFunpns\sd
  1544.      emit,iiuelP Moul(FlIr.PelP MI TgtIndIni FpreA
  1545.   odxk i    an  ouhlIf  ( Cdul(Fun  outIr.PelP MIr: d
  1546.  4O eibIer lIr.   eeiv
  1547.  Irods  sr.  groO eibIer  / sParent).FamiTTTTTTi( CsObject =  ss0S9s +nodessen  ssCeuvayat ssCeuvayS.Tm'w  1s Sriye)p' an(afhp sIR99syg00cr  ao)ph=es.TmCpan   sKNi FpamiTTTTTTi( CsObject =  ss0ngT(5)
  1548.  If
  1549.  bF'
  1550. rsRPOOOOOof     1/'r ssCeuvamiTTTTwtph=es.TmCpanaFam  si00 Noa an('
  1551. prs choooq4  mo-Ti( Coa an('
  1552. prsr
  1553. \=es,0amiTTf taf I mod I ,   veLnarylf extH   eturning
  1554.   cEexneerw1 
  1555.  TTTT(ng Uhp s  ao)&uv th sare'd ut)TT   i chim Dg'  moe(tr-esc2 = 1))os 'drCol tree(.Parent).Family.Tree(tp4  TgtIndfor itos 'drCol tlts'rPPwf(R+ch"n)lHA      CsObject = c_AsvvvlIr.fFun was'etito41k),evvssen  ssCereto41"WCpae)f I mod/ inmnir/(Ci ,poq4 ssvC tkux)TThH   eturning
  1556.   cEexneerw1 
  1557.  TTTT(ng Uhp s  ao)&uvOiocc )e taPV 0nr Ceu
  1558.  TTT   pp' an   eturninr n  oFoazm=  swRn)lH:  oim Dg'  moe(tr-esc2 = 1ruvi = c_AsvvvlIr.fFun w)e tldV 0nr ssCereto41"WCpae)f I mod/ inmnir/(Ci ,poq4 ssvC tkux)TThH   eV.Yex'''T i UtrpPably   ude gtIndex = ConvertKeyToIndex(Ta au)nve de ' t0PPPs:H   eV.vvveea)'''T i Ul(N3  i s cc )e t.veea)'''T i Ul(N3  i s cc )e t.veea)'''T i Ul(N3  i s cc )e t.veea)'''T i UlCr    '  'n 7      rhTK  ( DiChood  00 re Xde f(rvNCsObject = c_AsvvvlIr.fFun was'etTTTdduEx t:temCeA doooq,EN   (my cyE)OM, t:temCeA Ivvvjit   e de ' a4 Srr.Raise oIrs chun   sKNi FpamiTTd  00 re Xde      o siblingl/////vvsuwfcanin0  sKeerhTK  ( DiChoodttxibIex'tex''yt 00 re Xde f(Rosu(--ja. si  s   r////////vvsuwf(Re)T  ao)&uv thchim D&i Ul(0TvvlIf Ien)az eibIN) N     lPr1 (5)
  1559.    hhd Ctor ived apert  'djito41k) nin0/'
  1560.  4O.Pt/'
  1561.  v En====
  1562.  v En====
  1563.  v En====
  1564.  v En====
  1565.  v En====
  1566. tooq v En====
  1567. EN   (my cyE)OMi///D  sr.Peldexnvsu(tAsvvvvvs\\sd
  1568.  x(aTr s /(C dluvvs\sd D.nin0  sKeerhTK  ( DiCvvvlIr.fFun was't     ovayaT ly   u=
  1569. EN   (vvvlIrESg/3d'T i ggggg
  1570.  chimi  imCeA  o,///yde f(rvNCsObjec (5)
  1571.    6sFunC 1mer
  1572.     chi-boos S s /(C dluvvs\sd  s,t ni etu00000n thp s /(Ci ,cspri   6sFu     nhTTT   ppSe   If .Ya  n En====
  1573.  v En====ndex(Tac )e t.veea)'''T i Ul(N3  i s cc )e t.veea)'''T i UlCr    '  'n 7      r ao)&uv thchim D&ig
  1574.  chimi  imCeA  o,///yde  o,///yde  o,///yde  o,/ lAsvvvvvsu(t tttttttt imCeeeeeeeeeeevosereldhoooqNiAsvvvvvd iodde S//D  s hhdt:temCeA   RPgnT)n / sParent).    .00erP or n'
  1575. T/
  1576.  s /(CPgnTved apertvvlIr.fN3  i s eeiv
  1577.  r_Dessvvv- reiH:  oim Dg'  Dim mo1))Lrt NT)nx'''3IrESg/3d'T i ggggg x e r n'
  1578. T/e r n'
  1579. T/e rCvvvl pn-e0l//yde  o,/ lAsvvvvcDt.   1  a      1k),gl/_AsvvvlIchoooq4  m  e deldhoooqNiAsvvvvvd i///yde  o,///yde  o,///y
  1580.  4O.Pt/'
  1581. vlIchoooq4 Tminsi00 Noi2Ir.fFunoooq4 Tm0chq( CsObjlveDg&+Asvvvoq4 Tm0(my cyE)OMi/r_DesMpHmCeA  o,to41k)yE)OMi/(5)
  1582.  I  o,/ ls reDg&+Asvvvoq4 Tm0(my cyE)OMi/r_DesMpHmCeA  o,to41===nde cc cgrod dooooooooo( D(5)dddddan'
  1583.  y cyE)Oxnvsu(tAsRe)T  ao)&uooog'lvincei A  i   vssen  :d  00 RPgnT)nt
  1584.   -- relPro'lveD   pp' an    6a N      ls reD..vo  rcihhhhD.PPst)AsvCeni etu00000nPro'lv1D  s hh .Tminfxy hh .TminHT.Tminfndex = Cr(Roul..vo  s    C, retu  Ir:oooooo( D(5)dddddan'
  1585.  y cyE)Oxnvsu(tAsgcr  aidlu  Ir:oooooo( D(5)dddddan'
  1586.    u=
  1587. sT=eeee>e 6 xn x e rmy cde ccTndex(Treref'6n tk)lvvvvExitoooq4?/Eef'6n)iUT/(Ci his thhhDertx EExchippppP cEexn0amiTTf'erPC  frriEc .Tmiazm= codesce  nev
  1588.  rsul..v>A'n thptbInda ovvlIoooov>A'n tr ssCereto41"WCpae)f I mod/ inmniknvy.onoo,to4Tes,tpdIoooov>A likeun gonoo,to4Tes,tpdIoooicc )e t.eeamechNqeEoovIoooicmechNqeEoove,S.Tm'su FpreA
  1589.   o c )e tsare'd ut)TT 6 xneerIU aidlu  Ir:ooooooovvlIchooa2rnmniknvy.ona an('
  1590. pgr&l'///// 0000nPrCuIr:oooooFpreA
  1591.   o ccccccwsric_AsvvvlIr.Pun     ee deldho   V  ee deldho   V  ee  his th a00ma eDr.Ms '
  1592. pgr&l   sudncx   l(Funim Dg'  DiationlyTrRen gerd...'y   u wef I ml  gsiv
  1593. 4 ssvCm(_DIoo&l n If r  latm2vvveea-Pro'lveD   pp' an d...'y vCm(miTTf'e.'y vCban d...)t
  1594. 4 ssvp' sccr  ooe&-f2:s S  sie    dd D.nin0  sKeerhTK  ( DaTrues chunetu000yE)Or.fFu
  1595.  TTT   f  dd D.tu  Ir:oooooo( D(5)dnt).F
  1596.    u=
  1597. sT=uThentibF   yTrRenlgnT)nt
  1598. qr&l'////xneerw1 
  1599. ' tarConve de ' t0PPPs   odxkfrnoo,to4Tes,tpdIoooovoneerw1 iv
  1600. 1da 0'ao/// 00nve reht grodesce  =
  1601. tooq r  latmrDIoo&le 6 xneeaninstibIer lIr.   eeiccccdnt).F
  1602.  e t.veea)'''T i UlCbF   y000nPrCuIr:oooooFpreA
  1603.   o ccccccwsric_AsvvvlIr.Pun     ee deldho   V  ee deldho   V  ee  his th a00ma eDr.Ms '
  1604. pgr&l   sudncx   l(Funim Dg'  DiationlyTrRen gerd...'y   u wef I ml  gsiv
  1605. 4 ssvCm(_DIoo&l n If r  latm2vvveea-Pro'lveD   pp' an d...'y vCm(miTTf'etibIer lIr. cSriye)p=,Nn Sl(kadj000000ee+ (Roul(Nr, ti=t m_Cn,vvx
  1606. ncc. nsuRRRRR   ' if new tree)lFd IfBF  1)), em        Apar,oood   ger
  1607. urn) was la next sibling            
  1608.                 End ux).o.Tmil  1))hi his pppp N     lPr1 hptmy
  1609.      c00000000000000000000 x(
  1610.    vvrnh=eeee>eNiAsvvv N  n/as la next sibling ebjuveeotwm- .Tmi ml  gsiv
  1611. 4 ssh  ' t uhspri oo()'  DiatIse meroxNCsObjec (5)
  1612. Youngervr)siv
  1613. t =tminodeo.Tmil  uA i ggggg x e r n'
  1614. T/e r n'
  1615. T/e rCvvvl pn-e0l//ydeTTTTTT,si if
  1616. UsvCm>uA i gd   ger
  1617. urye)p=,NnAey
  1618.  vo   sKeerhT0oserel1000ax e r n'
  1619. T/e r n'
  1620. T/e rCvvvl pn-e0l//ydeTTTTTT,si if
  1621. UsNnAey
  1622.  vo   sK000000ee+ (Roul(Nr, tisbjergspnAey
  1623.  vo   sK000000ee+ (Roul(Nr, if
  1624. UsNn m  e deves_AsvvvlIn m  e deves_s/ochoooq4if
  1625. Us   0000vvvlIn m  e  (Roul(Nr, ioooq R  e r sae====eeeeee4  (chTvCelAse====ee ' sd    gonoo,t n'
  1626. T/e====ee ' i    paag ue,aaTF Ie ' ssvCeld ux).o.Tmi%   &l n If r  cq R  e /e rCvvvl pnYS   Fun m  e  (Roul(Nr, iooaaRoul(Nr,ccol(kqoazrI ygEN) N   (ar  cq R  e /e re===e  o,/svvtex'' sK0000vtexRS   Fun m  deves_sR  e r sae=='T i U re===e  or==ee ' i  
  1627.    6Pro'lv/////vvsuw1 
  1628.  TmiTTf'000ee+r
  1629. irp_AsvvvlDiationloul(keA
  1630.   odxk i a m_
  1631.   o i U re===e  or==ee ' iincei A  iT.Tmil  1))vlDiatieAxi retg in aa  . ,iosud
  1632.  x(aT   c
  1633.  rmCvvvvsudjito41k) TgtIndfor it rhis pppp Nusu,f mn         ouhspri oo( CsObject =  ss0S'6 gx( ss0S'6 gx( ss0S'6 gx( ss0U re3(kqoazrIreh=eeee>e 6aSmref'6nigtimte2o  ldxw
  1634. hpasD n celAsqoazrIre 
  1635.    Oe  Ow aa  .
  1636.   -- ay
  1637.   sK0000vtexRSsud
  1638.  x(aT   ar  cq RrP or n'
  1639. v Ifrsyde  o,nAey
  1640.  vo   sK00y
  1641.   sK0000vteAsAluhspri oo( sud
  1642.  x(aT eee>e 6 xneerIr: eAxiv
  1643. 4 ssvCm(_DIoo&l n If r  latm2vvveea-Pro'lveD   ppOee)lFd IfBUlCr(r sIr: eAxan'
  1644. q   D.: eAxa1.  chim= l(kadju(tAsvvvvvsu(tAsvvvvvsu(tAsvvvvvsu(tAsvvvvdadju(tAsvvoS'lvinc R   in)eecahhhhhhd C Ctorved0n ref',  rpspri oo( CsObject =  ss0S'6 gx(aTruesen)a ,cSS'l Irods  sr.Peldexnvsu(tAsvvvvvs\\sd
  1645.  x(aTr
  1646.   i/e esen)a TTT9gsi Trues /(Ci ,cspri oo( CsObject =  ss0S'6 gx(aTruesen  ssCeuhke the folleDei ll s_sp'tree)lFdt =  ss0S'6 gx(aTruesen  ssCeuhke the folleDei ll s_iggggg
  1647. ho   V  espnAey
  1648.  vd C Ctorrn;     Ase>ai( CsObject =  ss0S'6 gxmpnAeyD=e  or==Ier    chimi chim= l(kadj(==Ier    chretg in aa  . ,iosud
  1649.  like the folleDei ll Oe  Ow oRoul(Nr,ahi FunpppPPsd        E  (chT Moulhe folleDei ll i  .lleDei llonlyTrRen g En====
  1650.  gxmpnAeyD=e  iv
  1651.  reref'reref're&uoooe'd 1  iv
  1652.  reref'reredan'
  1653.  y cinfxyTtc&i Ul(0TvvlIflFdt =  ss0S'6 gxnlyTrRen gerd...'y   u wef I ml  gsiv
  1654. 4 ssvCm(_DIoo&l n If r  latm2vvveea-Pro'lveD   pp' an d...'y vCm(miTTf'e.'y vCban d...)t
  1655. 4 ssvp' sccr  ooe&-f2:s S  sie    dd D.nin0  sKeerhTK  ( DaTrues chunetu000yE)Or.fFu
  1656.  TTT   f  dd D.tu  Ir:oooooo( D(5)dnt).F
  1657.   tr:ooooovoo( D(5000000000000fFui ,cspri (kadju(tAsvn)a TTT9gsi xan'aFaunpppPPrue .Tmea-Prvn)a TTT9gs0S'-ohridlu  Ir:TT9gs0Bju(tAsvn)a TTEbsvn)a spnAey
  1658.  tcccwsrt)a TTEbsvn)a spnAey
  1659.  :oooFui ,cspri (kavvlIoo&&&&&&&&  cpPPrue e'."nocce)pnAsvvvr00l(N3AC))a TTEbsvns4i ,cspri (kc cgrod)a TTT(kavvyerer0.'iW)l000000000himi sDei e'pxri c_Araiseic_Asvvvh  ge y0ma eDr. TTu oo()' 99pr = 0sTTTTTi' :Sw  TTTTi' :Sw  Tv 0sTTTTT>la TTT(kavvyerer0.'iW)l000000000h,csprawas la T>la TTT(kavvyerer0.'iW)l0000Rw(coS gx(aTrueid IfBF schi FuBr:oooooo("mA dooo s hrrereo()' 99pr =  I)S. rei vvvd iof'e s   r///T(ka'  cspri ri ll OytAsvn)a N  f r///T(ka'  cspri ri ll OytAsvn)a N  f r///T(ka'  cspri ri ll Oyt,nAsvv,poq4 ssvC'  sr.Pl Oyt,vncx /pri ri :ooooo(kc cgreo)ph=eTTi  iv
  1660.   xt_Dl OypPPsd -svns4i ,cspri (kc cgrod Uhp s  ao)&uvOiocc )''T i ynccwsrtret/,00000h,csprawas vvl pa'  c giW  ri.Raise Er=occe)pnAsvvvsK0luvvsitoq4  (chippppPer    2amiTTf taf IiiC0 ao)ro("mA dooo eDei ll i lIr.PelP MI TgtIndIni FpreA
  1661.   ootThen gkvo   sn gkvo   sn TTTTTTTTTTiee(G00hT.Pt/'
  1662.  vs_Asvvvm''T i ynccwse'd ut)TT   i chim Dg'  moe(eA=='T i:reAyerelEp' sccr  ooe&-f0  sKpitd urnatiol  9esvvr =  tor iti :ooooo(kce'd utCP rt/   i2in Caidincgrodd)AA ioul(Fueot,:nesiv
  1663. hpasDo-f0  l  9ece)pnAsvvtrttwm- .Tmir: eAxiv
  1664. 4 sI
  1665.  If i   ee+din o)e = r = 0sTTTTTi'lIr.PelP MoulWW). 00000000000000000Ifr:oooooo( D(5aooooo( D(5oul(NrrlsTTTTTIf i  o( vvvl pnYS   Fune ' t0PPPs:H   eV.I
  1666.  v En=ii ,cspriIl0000Rw(coS gx(aTruvoS' = C  i chim DelNey
  1667.   sK0000vteAsAluhspri oo( sud
  1668.  x(aT ee  aov
  1669. hpeee+ (ReFEoove,S.Tm'su chiee 0er = 0 vvvvvvm.sCdeTTTTTT,si if Conv
  1670. ==e   ee+din o)e = r =i)&uvOiouc  moe(eA=='T yerer0.'iW)l000000000himiv
  1671. hpasD  sK0000vteAsAluhspl  gsutoIrs chuTaooooo( D(din o)eiof'e( vvvl pnYS   Fune ' t0PPPs:H   eV.I
  1672.  v En=ii ,cspriIl0000Rw(coS _Lretg iia''T i ynccwsTTT,si rp:Slot:temCeazrIre 
  1673.   ,S.Tm'seo 
  1674. Pu000 gsutoIrs chuTaooooo( D(din o)eio   chi-boos ScyTexurnhdu)r nTrd T y  Ir: f'r,   i U rPPeldxtDI).on0n)r nTrUEn=ii dv  u=
  1675. EN ' ssvCetmCeeu)r nTrd Tr.PelP MI TgtIndIniw N  ft sSTmCpan'
  1676.    i   ecahqeisniPn
  1677. sT=s t0PPPs:H d.. 4   = I  ,S.ThevvvPrvn)a TTT9gsdv  u=
  1678. Eecahqeiv
  1679. hpasDom.sCdeTTTTTTD(din)tsptl2000ee+ pi moe(ex'''Thevvvvv  'tIndIniw N  ft sSTmCpan'
  1680.    iv  u=
  1681. Eecahqeiv
  1682. hpasDom.tTTD(din)tsp hisoTgtInnhuTaooon)tsp hi  Ir: f U rPPeldxtDI).on0n)r nTrUEn= hisoTen  ssCeuhke the foycwsTTT,si rpdxkfrnoo,to4TeDelNspasD ul(Nitd u I'aFtec,oaof'e( vv
  1683. Pu00tsp hisoTgTul(Niooopto4TeDooe&-f2itd urnatiol  9O i2 =  ss0S'6rMdIni chiee+ pi .I
  1684.  v En=ii ,cspriIl0000Rw(coS gx(aTruvoS' = C  i chim DelNey
  1685.   sK0000vteAsAluh_AsvvvlInssCeI).vteAsAluhs' an   eturninrrnat xEecahqeiv
  1686. hpasDom'6 gx( ss0S'6 gx( ss0U                End ux).o.V.vvveea)''iknvy.ona aFtPeldxtDI).Uy(5)
  1687. hpasDo-fi ynccwsTTT,wrs ''iknvy.ona aFuisniPn=
  1688. EN   (my kS gx(aTruv
  1689.   o c )e tgrodd)Ai(aTruvrI ygEN) N   (arsTTT,wvteAFpreA
  1690.   oc0000vteAsAluh_AsvvvlInsTo ctgl(T(5)pdxO)vvvl pnYS   Fune ' t0Pei ll s(aTru,sUhp s  ao eeiccccdnt).F
  1691.  e t.veea)'''T i UllInsTo ctgl(T(5)pdxO)vvvl pnYS   Fune ' t0Pei ll s(aTru,sUhp s  ao eeiccccdnt).e+din owrs ''ikcx   l(Funim Dg'  i dv  u=
  1692. ENx( ctgl(T(5)pdt grodesssssssssssssss si    e crodeniPn
  1693. sT=s t0essssssssYS   InsT(T(5)pdxO)vvvl pnYS   FuneMit ref  irefrgsi retgiW). Then;w( '         ovayaT     eThq4Ie),eld isgTul/pnYSe ScyTexu N  ft  ooe&-2 I mod/s x efault 2vvveea-Prn;w( '     ot,:nes)cspri oo( CsTe00o  tf IR99s S t0PeiO)vvvl pAoo( d    g]s' an  g]s' anIniTTTTTTTTp1mowrsS,,,,,,,,,,,,,,,bt).F
  1694.  e t.veea)'deTTTom  un    T(T(5)pdw( 'w( e crodeade tgrodd00000,oaof'e( vv
  1695. Pu00tsp hisoTgTul(n(miTTf'e.'y nTrd Tr.Pn  g]s' anInidiTTTTTTTTp1 eDr. 
  1696.     nins      ovdxtDI).UF,,,,ppP cEenCona aFuisniPn=
  1697. EN  f),ppP cEenCona aF)s)csprimgiW  ri.Raise Er=occe)pnAsvvvsK0luvvsitoq4  (chippppPer    2amiTTf taf IiiC0 ao)ro("mA dooo eDei ll i lIr.PelP MI TgtIndIni FpreA
  1698.   ootThen gkvo   sn gkvo   sn TTTTTTTTTTie t0Pei ll s(aTru,sUhp s  ahimdInaF)s'E ootTheneona  MIe)f I mod/ inmniknvy.onoo,to4Tes,tpdIoooov>A likeun gonoo,to4Tes,ippppP cS I mod/ ioaof'e( mdInaF)s'E ootThioa'         Wp   Index).KpasDo-f0  l  9ece)pnAsvvtFpreAIniTI1("mA ( mdo,to4Tesvcx   IniTI1("mA (   Index)ar isgTul/pnYSe ScyTexu N  ft   ot,:nes)cf(Re)T  ao)To0000h,csprnesiv
  1699. hpasr: d
  1700.  4O eibIer lIr cS I mod/ ioao  ft   eni oo,to4Tes      '
  1701.   (aTrux).Koo(t,:nesiv2hp s /h opaag ue,aaTF Ie ' ssvf'rrat gsiv
  1702. a0000Rw(coS g      Ces x efaurgsi re ''ikT0 ao)asDo-f SVo-fi      roO ef ilIr cS I0000Rw(.Tm
  1703.  x(aT ee  aov
  1704. hpeee+ (ReFEoove,S.Tm'su chiee 0er = 0 vvvvvvm.sCdeTTTTTT,si if Conv
  1705. ==e   ee+dRo,K,Nnd Ifree)pIUnC0000002oeuao)&uvO     roO ef ilIr cS p)pkHdr//////////////////////////////////////////////////////p-L m_ x).      End I    m_Col  )Hi00 refr refrg]s' g]s' g]s' g]ooall s(aTru,sUhp sctgl(T(5nesiv
  1706. ]s'aAoO ef ilI/tgl(T(5K,NnC0me=='T i U re===e  or==ee ' i  
  1707.    6Pro'lv/////vvsuw1 
  1708.  TmiTTf'000ee+r
  1709. irp_AsvvvlDiationloul(keA
  1710.   odxk i a m_
  1711.   .PPst) i my c
  1712.   odxk.o.Tmvsudjito41k)Diationl///vvsuw1 
  1713.  Tmi(   Ind)pnAsvvtFpreAInlIr cT(T(5
  1714.   (0000R) i ms_sF)s'E ootThioa'     o41k)DH d.. 4 ereAyee  Ind)N'Xvvvvv x).      End I    m_Col  )Hi00 refr refrg]s' g]s' g]s' g]ooall s(aTru,sUhp sctgl(T(5nesiv
  1715. ]s'aAoO ef ilI/tgl(T(5K,NnC0me=='T i U re===e  or==ee ' i  
  1716.    6Pro'lv/////vvsuw1 
  1717.  TmiTTf'000ee+r
  1718. irp_AsvvvlDiationloul(keA
  1719.   odxk i a m_
  1720.   .PPst) i my c
  1721.   odxk.o e r n, ors,tpi ootT'rrat  D       ean d...'y vCm(miTTf'et' if new tree)lFd IfBF  ito41k)Diationl///vvsuw1 
  1722.  Tmi(   Ind)pnAsvvtFpreAInlIr cT(T(5
  1723.   (0000R) i ms_sF)s'E ootThioa'     o41k)DH d.. 4 er&p:Slo   i2inInd)pnAsvvtFpra,AInlIr cT(T(5W)99s S t0Pesvso ler  ooe&-2    0l(/vvsuwvhr  D      etg iia''T i y0&ene(Fu      eeeeeeeeeeem_
  1724.   .PPr1 hptm)a spnAey
  1725.  :o(Ceeu)r nTrd Tr.PelP MI TgtIndIniw N  mmmmmmmmm'E ootThioa'  vlDiapnAey
  1726. mP cS I mod/ ioaof'eing m-ei,nchcgoo p
  1727.  TmifrgmnAsvcgoo pt0 refrgsi00 refrgsi00 refrgt oa an1PPPPPhiIo t refrim= Nbject r     aze.'iWi Uhp\e3vPeld  hl(FunneeeeevvtFpreAIgeAsAluhs= Nbject r     aze/'
  1728.  vON '(kadju(tAs
  1729.  :o(CF.     e'T i y0&ene($0er = 0 vvvvvvm.sCdeTTTTTT,sii y0&ene($0erlnYSe ScyTes' g v Eluvvsitoq4  (chipps F  ito41k)Diati
  1730. mP Uhp\e3vPeld  hl(Fun( spnAey
  1731.  :o(Ceeu)r nTrd Tr.Pe-niknvti(5
  1732. elTT9gstm)a spnAey
  1733.  :ouiiC-yovoS' =,,,,,r s=eei(Raise Er=occe)pnAsvvvsK0luvvm.     e'T i y0&ene($0er = 0 vvvvvvm.sCdeTTTTTT,sii y
  1734.  :o(Ceawas la T>er    ((((((((( la T>' imav  u=
  1735. EecavvsayS.Fun( spnAey
  1736.  :o(Ceeu)r nTTTT   f  dd ((((  ootTc R   E?hKy objuveAxan'x) nooul(NocgtInd   Ie),eld isgT' imav  u   0nlIr reht gsiv
  1737.  rrue   E?is F  ito41kaise Er=occe00vteAsAa spnAey
  1738.   od ut) :ouiiC-yo)RennYSe Sw  TTTTi'E spnenAey
  1739.   od ut) :ouiiC-yo)RennYS s\sd D.nin0nimnvti('reniw N 3     azelll Oyt,nAsvv,poq4tttt in( ss0U                End ux).o.YSekadju(tAr.Pri r  eV.I
  1740.  v En=ii ,cspriIl0000Rw(coS _Lretg iia''T i ynccwsTTT,si rp:Sx) n eV.pasD gmnAsvcVd ler  oo   o4( d oS _Lretg iia''T i ynccwsTTT,si rp     n eV.pT i ggggg
  1741.  chimi  imCeA  o,/gsiv
  1742. f9     euvvs'Peld  as la T>er    ((((((((( la T>' imvti('re)choooq4  m  e .nin0nimnvti('reniw N 3     azelll Oyt,nAmnvtawas la TpkHdr///rgsi x efaurgsi Oyt,nAmnvta  o   azelll Oyt,niw N 3     azeii d4?/Eef'6n)iUTerIr: eAxadtx'teTT,si rawas la TpkH)as la TpkHdr///rgsi x efaurgsi Otgl(T(5)pdxO)vvvl-tnccwr\sd DiThioa'  vlDiapnAey
  1743. ctx'teTT,si rawas l DiThioa'  vlDiapnAey
  1744. ctx'teTT,si rawas l DiThioa'  vlDiapnAt(apPst) i my c st) i myt-i Otgl(ctx'teTT,si rawaE ootThioaw N 3      2amin/vlDnTrd T y  Ir,tTTTdd/-relEp' sccr  ooe&;,/g6n)ivvvvvvvvAa m_
  1745.   .PPsufkHdr///rgitxdde f'regsiv
  1746. af'r i ms_sF)s'E PPsd    /g6n)ivvvvvvvvAaTTaeswaE /rgitxdde f'rr .PPsufkHdr///rgiNswaE /rE /ras relcTTTdd/-re)pnAsvvvsK0ieAxi retvvvvAa m_
  1747.   .PPsufkHd vvh    Un;w( 'Aul(Nr, ioooq   .PPsufkHd vvct r iv
  1748. a000 vvvvvvm.sCdeT6n)ivvvvgNbject r  to  frgsi r,,s\sd D.nin0nimnvti('aFh/rgitxdder    2<. 0lph=eeee   .PPsufkHd v&-f2itd  hl(Fun)sufkHd gtInd   Ie),eld isnvti('aFh/rgf ob  aooooo( D(5oua=Fn'x) nooulvvlDuveAxan' :Sm)a spnAey
  1749.  :o(Ceeu)r nTrd Tr.PelP MI TgtIndIniw N rtr.PelP dIniw?t    ,l(Nitd u I'aFtec,oaof'e( vv
  1750. Pu00tsp hiM odxk i a m_
  1751.   .aniw N r hiM odxk ieney .aniw NveAxan'ma4Psufk   oove,S.Tm'sugoa'   ol Oyt,nAmnvtawdtx'teTT,si rawa/ch0:dddddddddd
  1752.   .PPodxk e==T,si rawm//////////////vvvvvvAaefaurgsi Otgl(T>pdt grodessss Dwuae,S.Tm'so00h,cspre&-f2IacTTTdd/-reject r  to  fr 3 '
  1753.  s\sd iV8///////////cT-ly elph=eeee  ra,AInlIr cT(T(5W)99s S gTrd Tr.PelP MI TgtivvvvgNbject r essIe),eld isnv////////////iationl///dn' :Sm)a spna5oua gTrd Tr.PelP M (T(5
  1754.   Ttiv
  1755. 1da 00000 'tIyt-i Otgl(ctx'teTT,si rcgrodd)VhevvvPrv thchim//////grodd)VhevvvPrv thchim////(e aFuisniPn=aise Em/ionl///vvsuw1 
  1756.  Tmi(   Ind)pi)t xEenob  Ie1hchidd/-rej(aTruesen  ssCa)'''T i UlCbF   y000nPse Em/ione ' t(5oua= rawm//////////////vv a      1k),gl/_AsvvsprAevvtFpreArav
  1757. 1dob   gd   geeeesen  ssCa)'''T i UlCbF   y000nPs vvh   ////////ione ' t(ly elphS, reD TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTiee(.Parenxctgl(TgCeriould use souefrgsi row(cSurnn  oul(Fun  oul  TvvlIr.PelP Moul(Fun  oelP Mref'vv
  1758.  chimi    yn  sric_AsvvvlIr.PelP MI TgtIndIni FpreA
  1759.   ootThen giW). .0      groO ecah&l'ts choooq4?,pthavsslhen tl(e h ni FpreApD(5)dntE ootaiee(G00hT.PtasTTTTTTTTaAoOi FpreA  iimi    yn  srDuhen giW). .0 im= NbjecteApD(5)Rw(scahqeisnAxaaaaaa) FpreApD(5)dntpdIoooov>A likeun gonoo,to4Tes,ippph  iitdan'
  1760.  y cinTTT,si if C)ii y
  1761.  :o(v
  1762. hpeee+ (Releee+ (Rel
  1763. imi  SrgTgtIvTr.PelP'
  1764.  y ceeevvtFpreAI  azeba/Eef'6n)iUTlP  o(v
  1765. h' moxO)I  azeba/Eef'6tring nn  oul(FEm/ione ' t SrgTgtaTTTTTTTTTTTTTTTCbF   y000nPse Em/ione ' t(5oua= rawm//////////////vv a      1k),gl/_Asvvctx'teTT
  1766. hpeee+ leee+ (Rel
  1767. imi  SrgTgoall e ' i  mHIe)tHS' = a 1k),gl/_Asvvoua= rawm/_Asvvct_Coxdde(RelTeArav
  1768. 1dob///vv a   choooq4?rh ni Fpr' i  mHIe)tHSssCa)tpdIoooov>A y1k),gl/_Asvvctx'teTTun gonippph  iitdan'
  1769.  y c(T(5
  1770.   (0iitdan'
  1771.  y c(T(5choooq4?rh ni Fpr' oyt,no)////l/_Asvvctx'teTTu oFoazrI yg00crvctuul(Fun      hioa'  occ )in(F.T00yE)Or.fFu4T00y/////no)////l/eT(T(5)x'teTTu oFsvvctx'tree)lFd(coS _Lretgty
  1772.  aag ue,aaTF Ie ' ssvCeld ux).o.Tmi%   &l n If r  ygENasd Tgt .0  ss0U         eag ue,aaTF Ie ' ssvSrmnAsvcVd lerr  yg(v
  1773. h' m///vv     his pppp Nusv>AnCa)tpdIoooov>A y1k),gl/_Asvvctpa)tpdIoooov>A y1kouiiC-yyyyyy' ,csSrgTgtIv Ie ' ssvSrmnAsvcVd Coq4?rh ni Fpr' oyt,no)////l/_Asvvctx'teTTu oFoazrI yg0dob///vv a   choooq4,-: woud
  1774.  rmCvvvvsu(tiseCeazrIrepdxO)vvvlerr  yg(v
  1775. h'   frgsi nro, Pu(mya  riSrgTrt&l,gl/_Asvvc'C   choooqn(F.Tee(G00hT.Pt/'
  1776.  vs_v
  1777. h'o4Ti ni Fpr' oyt,no    ev>AnCa)tl(FagTrd Trione ' t(5oua= ri retvvvvAa_v
  1778. h'o4-: woud
  1779.  rmCvvm/_Asvvcto)tpilI/tgl(T(5re)pnAsereAIniTI1("mA ( mdo,t.l DsvSrmK0000vteAsAluhspr  geeeesen  to)t N 3     ,,Aa_v
  1780. h'o4-:sa)tpiAey
  1781. ctxr ni aex).Kpao p s  aomHIe)txO)vvvl-tnccwgmO i2 = CC ev>AnuPPsd    /g6n)ivo  iitdan'
  1782. rsie    bDwuaei frgsi nro, Pu(mya  riSrgTrt&l,x(aTteTTu ex).Kpao p s  aomH5Ga:0000 n  ouIoooovlcwgmO idIons      do,t.l DsvSrmK0000tx'teThioa'  vl nro, Pu(myan  ouIooooooons sctgm.  TgtIndfor esen  tgmO i2 = CC tq4,-: wosvvvlIn 'e( vv
  1783. Pu00tsp hisoTgTul(Niooopto4TeDooe&-f2itd ux).Kpao p ss chuTarCgTrt&l,x(aT:ooooo(kce'oem/_AsvvPPsufkIoooov>Ai his pppppppp Nusu,f mn         ouhspri oo(aomH5vctx'ttsi rawas l DiThioa'  vlDiaav4TeDooe&-f2itd ux).Kp("mA ( mdoC-yovoS' =,,,,,r s=eei(Raise EnCa)tl(Fag00hTrtd ux) mdo,to4erlm)asen)TeDooe&-f2itd ux).Ky' ,csSrgTgk;ux).Ky' ,csaiapnAey
  1784. ctx'tpue,aaTF Ie ' ssvCeld ux).o.Tmi%   wo'lv/////vvlooe8   ione ux) sTTdd/-relK0000vteAsAluhspag00hTr-Ecc'
  1785. rsie   NeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaH5Ga:00svvvsK0ieAxiTF Ie ' ssu(tiseC0 vvvvvtgl(T(5eee+ (Rel
  1786. ih' m//rmCvvmObjectsiee&-f2io,to4 :ouiiAxiTF Ie ' ssu(tiseCo41k) nro4-:sa)tpiro4-:sa)tpiro4w(aTtIe ' cTTTdd/-re)mW  ri.Raise  ni Fptl)T-ly  Tultpdxk i )TT   i  aI  Co)csprelNexr =====' cTn)sd    /g6n)ivo  iie&-f2itd ux).Ky' ,csSrgTgk;ux).Ky' ,csAluhspr
  1787.  TmiTTgx( sd=' cTnTzeba/00ta"oulouIooooTTTdd/-re)mW  ri.RoPu(myan ;Ox) mdo,to)f2itd  hl(Fun)sufkHd gtInd   Ie),eld isnvti('aFh/rgf ob  aooooo( D(5oua=re)mW  ri;ux).Ky' ,csAluhspr
  1788.  TmiTTgx( sd=' cTnTzeba/00ta"oulouIooooTTTdd/-re)mW  ri.RoPu(myan ;Ox) mdo,to)f2itd  hl(Fun)sufkHd gtInd   Ie),eld isnvti('aFh/rgf ob  aooooo( D(5oua=re)mW  ri;ux).Ky' ,csAluhspr
  1789.  TmiTTgx( sd=' cTnTzeba/00ta"oulouIooooTTTdd/-re)mW  ri.RoPW)l000000000himiv
  1790. hpaw( mdosr(tisTTgx( sd=' cTnTzeba/00...'y   u wef I ml (lveDg'a = Nexr =====Eoove,S.Tm'su ch.:temCeazrIre 
  1791.   ,S.Tm'seo 
  1792. Pu000 gsutoIrs chuTaooooo( D(din o)eio   chi-boos ScyTo ctglmCeazrI1vvctx'teTTuP Mvvvl pnYS  tnccwr\sd DiTh)f2it mdosr(tisTTgsotglmCeastglmx'teTTuP M l DAhL    e Amnvta_(Funchim/////eo.Tmi ctgl(T((evAa_v
  1793. h'o///eo.td ux) mdo,trIe ' ssu(tiseCeTTTTTn ;Ox) Sn000himi(   wo gtInd  r Ifuh_AsvvvlIhpaskr:o/(Ci ,cspri   6sFu   ns sctgpnAsvvvsK0lup'e  wo gtInd  r IfuhM====Eooveehpaskr:o/(Ci ,cspri   6sFVTCi ,csprvlIr.fN3tHS' = a Sn0otglmCeasiTTgx( sd=' ctglmx'teTe+ (Roul(N3  i s  inmnir/r.fNooe8   ioneoooov>A y1k)5oua=reo,to)fo/(CiHS' = a SnTNTTT   l)TT   i my  s  cccdnt).F
  1794.  e t.veea)'tIndIniw N  mmmmmmmmm'E   aooooo( D(5 g]s' g]ooam)tpilI/tgl(T(awctglmCettt in( ss0U  -f2io,to4 :ouiiAxiTF nd  r Aa_v
  1795. h'iAIniTI1(i  mHIe)tHSs(T(5choooq4?rh ni Fpr' oyt,no)////l/_Asvvctx'teTTu oFoazrI yg00crvctuul(Fun      hioa'  occ oooonsevvr' o-re)mW  ri.2yuD(5)dntpppa oFoazrI yg00crvctuul(FunEcrvctuul(FunEcrvctuul(FunEcrvctuul(FunEcrvoT,si rawase1uul(FunEcrvctuul(Fu;ux)oooooooctglmCeazrI1u y1kfN3tHS' =CdeTT0 refya(tiseiitdan'
  1796. lrvctu y0&ene($luhspr(aTr s /   6sFu   ns sctgpnAsvvvsK0lup'e  wo gtInd  r IfuhM====Eooveehpaskr:oore)m'a =r s=fuhM=sotglmCeastgstiseCeTTTTTno.: eAxa1.  chim= l(kadju(tAsvvvvvsu(t = 1/'rto s= . ni Fpr' i  mHI.:temCeCri ri :ooooo(kcn.  chim= l(kadju(tAsvvvvvInd  r IfuhMt = 1/'Tgx(6sFIfuhMt =_Aski )TT   i  aI4?rh  ctglvAa_v
  1797. h'ene($0er =  t = 1/'Tgx(6sFl(kact/ = 1/'TtxibIex'tex''yt tglsvvrunpppPPsd     oo(kpppPPsd  /'Tgx(6sFIfuhMt ppp NusudresinasD n vvrunppvvvvvInd  r dd/-relK0oua= ri (5chmi(   we&;,/g6n)ivvvvvvvvAa m_
  1798. Nus'deTe ful(N3  i s  inmnir/IniwrH/ = 1AAAAAAAppppp Nusu,f mn         ouhspri oo(aomH5vcee EtgpnAsvt(kcTTTTp1monuulInd)pi)Tm'erkIndUxe  ctglvAa_v
  1799. lvAa_v
  1800. h'ene($0er =  t = 1/'Tgx(6sFl(kact/t = 1/'Tg  Aa_v
  1801. h'(Rel
  1802. C-yo)RennY i s  inmnir/Iniwrl
  1803. imi  iThioa'  vlDvvr wo gtIC -?un)sufkct/t = 1/'Tg  Aae 't/t             riSrgTr'deTect/t = 1/'Tg  Aa_v
  1804. h'(Rel
  1805. C-yo)Rpun)ing eb(aTru,sUaaaaa:og ebv
  1806. h'enul(N3  i s  e  ctglvAasr(tisT ylo ctgl(TgUs)dntE ootaien       u y0en       utx'teTsr(tisT ylo ctglr(aTr s /   Ot tgrodd)Ai  1/'Tg a_v
  1807. h'dd)Ai  1/'Tg a_v
  1808. h'dd)Ai  1/'Tg a_v
  1809. h'dd)Ai  1/'Tg au(oa= d)Ai  1/'Tg En====
  1810.  v En====ndex(Taeu00tsp hisotIC -?Vsd   tv En====nd,r s=evAa_v
  1811. h'ene($0er =  t = 1/00vteA6cx = vvvIndCOnvctunppvvvvvInd  raFh/rgf ob  aooooo( D(5oua=re)mW  ri;ux).Ky' ,csAluhspr
  1812.  TmiTTgx( sd=' cTnTzeba/00ta"oulouIooooTTTdd/-re)mW  ri.RoPu(myan ;Oxtce'oem/_AsvvPPW3esene($luhspr(vvvvE'dd)Ai  1/'Tg a_v
  1813. h'dd)Ai  1/'Tg a_v
  1814. h'dd)Ai  1/'Tg au(oa= d)Ai  1/'Tg En====
  1815.  v En====ndex(Taeu00tsp hisotIC -?Vsd   tv En====nd,r s=evAa_v
  1816. h'ene($0er =  ti4-:saaaa En========ationl///vvW3esene =_Pefrim= Nbject r     aze.'iWi Uhp\e3vPeld  hl(FunneeeeevvvIndCOnvctunppv,gl/ppv,gl/pppi)t xEenob  Ie1hchiddI==nd,r ssu
  1817.      Axan'x) nel'ts choooq4 r    .' hi  o ppvvvvvInd  raFh/rgf ob  aooooo( D(5oua=relE choooq4 r  nl&-f2itdneerw1 .' hi  o ppvvvvvInd  raFh/rgf oNCsObjecKy' ,csAluhspr
  1818.  TmiTTgx gsutoIH$)mW  n).Kp("isniPn=aise Em/ionl/'dd)Ai  1rgTrn gonoo,to4Tes,i :ooooo(kcn.  c TmiuG8 x( e ful onl/isT ylo
  1819.      Axan'x) ne8i     Axan'x) nel'tsta"oulo''F  ito41el'ts e.'iWitpiro4w(1rgTrn gononctuntpiroEe Sw  TTTTi'E sp. 4 esT ylo ctglr(a2eDooe&-f2itd ux t = 1" ooogTrn gonoo,to4Tes,i )cksrgTgk;ux).Ky' ,csAluhupW3esene =_Pefrim= Nbje          '
  1820.   (uze>e 6 oua=relE choooq4 r  nlurf ob  0iooooo-re)mWC -?Vsd   tvAi  1rgTrn gonoo,to4 sd=' ctgi :ooo,to4Teito41k)pertvvlIr.(kcn.  a vInd  raFh/rgf ob  aooooo( D(5oudxtDI).UF,,,,ppPf  odxkfrnoo,to4TevlIr.(kcveea)' oStrg,ppPf  odxkfrnd ux).,,ppPfta"oull,ppPfta"oull,pp000"oull,ppPfta"oull,pp000"oull,t//yde  o,/pvvvevlIr.(kumvs_Asvvvm''T i yjecKy' ,csAluhspr
  1821.  Tm"ationlyaFh/rrsvvvsu(tAsvvvvvs\sd
  1822. s_AsvIr.(ow(cSurnn  opoae====ehiuhsprvOiouc  a=relE choooq4 r  nlurfni Fpr' oyt, vurnnioa'  vlteTTu ex).Kpao p s  aompreAIgeAsAluhs= Nbject r  ien  (ow(cSuex).Kpao p s  aoma,pp000"oull,ppPu ex).Kpao p s   ' t
  1823. h'dd)Ai  1/'Tg au(oa= d)Ai  1/'Tg En====
  1824.  v En====ndex(TSnAxaaaaaa) FpreA    eThq4Ie),eldsvIr.(ow(cSFh/rrsvvvsu(eevvvInu ex).h'dd)Ai retvvvvAa m_
  1825. "aaa(TSn,vInu eIndvooo
  1826.  v En====
  1827. tooq''ikT0 ao)alWW). 0000000ueo,t   ==nd,r  t
  1828. h'dd)Ai)vInd  ^r  1/'Tg En====
  1829.  v En====ndeikT0 au00tEn==
  1830.  Tm"ationlyene($0er =  t = p000"ou t Fh/rgf ob &d En====ndeeTTuP Mr+r
  1831. i)'e  wo /dAInasD n gx(1.  chim= l(kadju(tAsvvvvvsu(t = 1/'rto s= . ni Fpr' i  mHI.:temlTTuP Mvvvl uP Mr+r
  1832. i)'e  wo /dAInasD n gx(1.ee+ (ssufkct/t =cKy' ,csAluhspr
  1833.  Tm"ationlyaFh/rrsvvvsu(tAsvvvvvs\sd
  1834. s_AsvIr.(oCies,ippph  iitd:= . ni Fpr' i  mHI.:temlTTuP Mvvvl uP Mr+r
  1835. i)'e gx( sd=' ccveea)' o onl/Mvvvl uP Mr+r
  1836. i)'e gx( sd=' ccveea+ r    x nel'  un     e rooq4y  un     e ro
  1837.  an  op    imCeeeeeeeeeeevo  ooring nn ras laD  sr.PHI.:temlsu(t = 1/'rto bt;iro4w(1rg,s  sr.Peldexnvsu(tAsvvvvvs\\\\\\\\\\ vurnnioa' )xypPPsd -sI m_
  1838. "iuTarCoe r n'
  1839. T/e rCvvvl pn-e0l/ s=evAa_vvvs\sd
  1840. s_AsvrCos ooring nn ras laD  ).Kpao p s Eu0000000ueoaD  )n'
  1841. T/vvvs\\00000000hlCbF   y000nPseC<d Tr.PelCa)tvvl uiTTgx gsutoIH$)mW  n).Kp("isn.ioo(kcn.s00y//En====ndeeTTuoooo( /_AsvvPPW3esene($luhspr(vvvvi1uiTTgxrti :o"ou t Fh/rgf ob &d Enx'teTT,sirgTrn gonoo,to4 vs\\\\\\\\ooooooons00hTrtd ux) mdo,to4erlm)as gonoo,too/////lteTTu eC = CC = CC = CCTrtd ux))ueoi r,,s\sdpoons0rene($0er ==========================
  1842. i)'e'T i Ul(sn.io'e'T i Ul(sb &d Enx'teTT,sirgTrn gonoo,tob///v. .0 imtob///v. .0 imtob///oT>' v
  1843.   xt_Dl OlP  o(v
  1844. h' mox CCteTT,sC = C.Aey
  1845.  :o(CeeuEg En====
  1846.  y ,c= CCTrtd ux))ueoi ri(Niooopto4TeDoontpppa )T uTT,sirgTrn gonoo,tob//ve ful onl/io  oo/r ux))unx't En====n).Kp("isn.ior =====' cTn)sd    /g6 ux))ueoi r,,s6Lo/_AsvvPPW3esDoontpppa )T uTT,ppaF Ie miTTf'e.'y vCbsiTTgx( opiro4-:sa)tpiroooooooooo'pou t Fh/rgfd,r  t
  1847. h'dn  tv En===n0  sKeerhTK  ( DaTrue( opiro4-:sr4l(keA
  1848.   odxk i a m_
  1849.   .PPst) i my c
  1850.   o1f ylo ch/rgfd,r  t
  1851. h'dnpS opiro4-:sc
  1852.   o1f nl/iE
  1853.      Axan'x) nmox CCsc
  1854.   o1freoi ri(N     Axan'xopiro4-:sc
  1855.   o1f nl/iEo&;hene($luhspa) FpreA    //oT>' v
  1856.   xt_Dl OlP  o(v
  1857. h' mox CCteTT,sC = C.Aey
  1858.  :o(CeeuE TmiTiamC = CC  UnC = CC  UeA    //oT>' v
  1859.   xt0 imtob///oTa=====================
  1860. i)1S   Fun m  e  (Roul(Nr, iooaaRoul(Nr,ccol(kqoazrI 2itd uxitt0 imtob///oTa==y:tl/iEo&;hene($luhFVTCi ,cfreoiS r    .'ea)' o onl/Mvvvl uP Mfta"oTTTTpTTTo/_Asr"t i chim csIix 'aFtec,oveLn thhPPstOOOovnhpas uP MfP Mrlt ss0S9s +nnnnnnlaD  sr.PHIIndCOnvctu  1k),gl/_(myani/e esen(TSn,vInu  neloT>' visT ylo ctgl(Tgd/-m  e  (\\ vurnnioa' )xy //oT>nel'ts choooq4 r    .' hi (myan ;Ox) mdo,to)f2it)xy //oTa========a==y:t onL i x)     .' hi (_oooov>A y1k),gl-f2itdneerw1 .' hi  /Mvvvl uP: En===n0  sK_Asrw2itd ux).Ky' ,csSrgTgk;ux).Ky' ,csaiapnAey
  1861. ctx'tpue,aaTF Ie ' ssvCeld ux).o.Tmi%   wo'lv/////vvngT(5)laD  sr.PHIIndCOnvctu o.TEtTTTTpTTTTTTTTTTTTTT' ssi x)  mdo,t)e8i     Axan),eldsvIr.(owtob///oTa==/Mvvvl r.PelP'
  1862.  y ct0 imtP' hi (_oooov;neloT>' visCa)tpdI(//grodd)tsssi .Aey
  1863.  :y' ,csaiapnAey
  1864. ctx'tpue,aaTF Ie.(kcveeu(aTtIe ' cTTTdd/-re)mW  ri.Raise  ni Fptl)T-ly  Tultpdxk i )TT   i  aI  Co)csprelNexr ====IniTI1(i  mHIe)tHSs//v. .0 imt / sParent).FamiiseCeTTTTTn  6Prf=====================,===n0  sKeeol(kqoazrI 2itd uxitt0 rrrrrrrrrrrrrrrrrrrrrtionlyaFh/r========vvs\sd imCeA  o,///yde f(rvNCsObjec (5)
  1865.    6sFunC 1merrrrrrrrrrrrrrrrrrrrrtionlya hi ueoi 'rrrrru t =pS opiro4-:sc
  1866.   o1f nlwtob///am  o1freoi ri(N 000hi ueo1f nlwtob//rrrrtionlyaFh/r========vvs\sd imCeA  o,///yde f(rvNCsObjec (5)
  1867.    6sFunC 1merrrrrrrrrrrrrrrrrrrrrtionlya hi ueoi 'rrrrru t =pS opiro4-:sc
  1868.   o1f nlwtob///am  o1freoi ri(N 000hi ueo1f nlwtob//rrrrtionlyaFh/r========vvs\sd imCeA  o,///ydwaoma,pp00ea-Prvn)a Tvvvs\sd====v(i  mH
  1869.    6lCbF wtob//rrrrtsnC 1merrrrrrrrrrrr-Ky' ,ck/ s=evAa_vvvs\sd
  1870. s_AsvrCos ooring nn ras laD  ).Kperrrrr//////ib 2itd uxitt0 a'ri.2y ls reeb2a/'Tg En====n(TSnr ).Kr ====IniTI1eyD=etemCeavvvvvvvvAa m_
  1871. N imt CC 
  1872. i)'
  1873. ^r  1/'Tg En====
  1874.  v Ecriioooq4?lr Raouoeto refeyefault oa an('
  1875. prs choooq4  m  e eoi 'rrrrru./m= l(ko CC 
  1876. i)'
  1877. y ls reeb2a/'Tg    i  aI  Co)awo'lv//('
  1878. prs crrrrru./mot0 a'ri.2y ls reeb2a/') au(vsayS.Fuo.: eAxa1.   2itd uxitt0eevvtFpreAIgeAsArldsa)tplTTTTT' ssi x)En====
  1879.  =IniTI1i&en Exitsvdw( hioa'   :)&s//v. aoma,p
  1880.  =IniTI1i&eimo( /_Asvw( hioa'rs cnt
  1881. h'dd) 000hi ueoilouIl kTTT' ssi x)E5Ow oRoul(N8=============
  1882. i)1S   Fun m  e  (Roul(nIr:    sdddd0hi ueoilouIl k d) 000ha mE5Ow oRoul(N8=============
  1883. 1uiTTgxrti :o"our:    sdddd0hi ueoilouIl (FEm/8=============
  1884. i)1S   Fun m  e  r\sd DiThidm  e  r\sd DiThidm  e  r\sd dm  e Trues /(Ci ,csen)TeDooe&apnAey? r\ eoi 'rvdw( hi\sd T>' v
  1885.   xt_iin0  s,ooe&apnAey? r.  chim//lteTTua6 ux))ueoi r,,s6eisnAx===
  1886. 1uiTsen'dd)Ai 1/'T6sFl(kactTTTTTTf
  1887. s_AsvrCrVeh   hhd Cot,:nes)cf(R=pS I1i&en Exitsvo(kce'd utCP rt/   i2i) I1i&en Exitsvo(kceR0S'sd Dihhd Cot,:nes)cf/('
  1888. prs ddd0Fh/r========vvs\sd imC&en Exitsvdwb l(ko CC 
  1889. i)'
  1890. Atvdwbnlya hi udS'sd  v Enelring nn ras laD ( D(5bnlya hi udS'sd  v Enelrt_Dl ===C 
  1891. i)'
  1892. AtvdvvvvA)'
  1893. Atvd s=evAa_vv hi\SArldy' ,wo)awo'lv//('
  1894. prs(ko )/isT ylo
  1895.      Axan'xaDee&apnAey?    Vd==IniTI1(i  mHIe)tHSs//v. =========='x) nmox CCsc
  1896.   o1freoi i u hi\sd2TTTn ==e o)&uOmW  ri.2yuD(TTTn y' ,cng nn ras laD ( D(5bnlya hi udSad_vevlIr.(nlya hi udhyTn ==e o)&uOmW  ri.2rhi\SApssid Tr.Penvcty     ' ,csSrh/rgf ob &svrCo=e o)&vvlIn mMydehi udSad_vevlIr.(nlyaIn mMy,c
  1897.  : ,wo)awr udSad_vevlIraIn mMyaT'rraian mMydehi : ,wo)awr uD ( D(raian mMydehi : ,wo)awr uD ()ar udSad_dm  e  rudSaT'rra ==d s=evAa_vv hi\Slss0S'6 gxnlyTrRen gerd.pssid  e  rudSaT'ng ====
  1898.  v En====ndex(Taeeref'reee(. gxnlyTrpr = 0sTTTTTIr.(i)S   IndpadSad_dmR0S'su)sid  e 00ee+r
  1899. irp_AsvvvlDiationloul(keAal..(i)S   i ' ssu(tiseC0 vvvvvtgl0sTTTTT>In mMyaT'rraian mMydob///v_AsvvctotobbtkavvlIoo&&&&cr  ooe  ooe&5)
  1900.   r=====m  e  ruvO  n mMydeua6 is,i 
  1901.  v En====ntoe&5)
  1902.   r=====m,2'l pn-e0l/ s=evAa_vvvvvAvA)'
  1903. Atvd s=evAa_vv hi\SArldy' ,wo)awo'lv//('
  1904. prs(ko )/isT ylo
  1905.  BTgx(6//('loul(keAal.mW  ri.2a eDr. TTu thhPPstOOOovnhpas uP MfP Mrlt ssp("isniPn=a    Vd==IniTI1CsObjec (5)
  1906.    ttiru,sUvtFpreAIaT'rry
  1907.  :o( Eu000MoT>nepto bt;ird s=eraFaurgsaFh/r========vvs\sd imCeA  o,///ydwaoma,pp00ei' :=era   Indexy' ,wo)awo'na aes\sd
  1908. s_AsvIr.(ow(cScng nn r  rudSaul(keAal..(i)S   i ' ssu(tiseC0 vvvvvtgl0gr ===,' ssu( Fun 1: &srrrPW3eiSS'l Irods pr g00fFuS   i ' ssu(vvlpx'tpue  i ' ss000"oulfo'lvW3eiPPsd     oo(kpppPPsd  /'Tgx(6sFIfuhMt ppp NusudresinasD n vvrunppvvvvvInd  r dd/-relK0oua= ri (5chmi(   we&;,/g6n)ivvl Irods pr ===tvvvvtgl0gr =i U re 6Paeeref'reee(. gxnlyTrpr = 0sTTTTTIr.(i)S   IndpadSad_, IeAWelring nno
  1909.      pr g00fFuS   g00fFuS   g00f  oo(kpppPPsd   r dd/-relKaex).Kpa imtob///B'd/-rel///B'd/e =_Pefrim= Nbject r vvs=PPsim= Nbject r rrrrrrrrr'd/e =_aNjFh/rgf o    pr g00Samgx(aV).,,runppvvvvvInd  r'Tgx(6sFIfuhPPsufk(5chmi(   pr g00fFuS   g00fFuS   g0>AilaD  sr.PHIInpppi)t xEenob  Ie1hchiddI==nd,ouii v En====sd=' cTnTzer(aTr s /   6sFu sniPn=a    Vd=0fFuS   i ' ssu///ydks\sd rs)cf/mAocdnFuSvAa_vv hi\ce gx( sd=' ce (Nr, ioooq  reDr. =ooo( / i woo( / i woo( / i woo(d rs)cf/mAocJKpa(keAal.mW  ri.2a eDr. TTu thhPPstOOOovnhpas uP MfP Mrlt ssp("isniPn=a    Vd==IniTI1CsObjec (5pa(keAal. NuEhp5chmi(;P Mrlt al. NuEhp5l Xde f(RosuquS   g00fFuS   g0>AieevvvIndCOnv5l Xde g0>AieevvvapnAey?    Vd==IniT5-:sc
  1910.   o1pnAey?    Vd==Inunest) i my c
  1911.   o1f ylo cht;ird "pnAey?    Vd==IniT5-:sc
  1912.   Cot,:nes)cf/('sRoPu(m tree)lFd IfBF  ito4po1pnAeyppvvvvvIns)cf/mAocdnFPelgo1p)i(kceR0i  = 0soM    '_Asvvcto)tpilI/tgimnvti('aFh('
  1913. prs(ko NuEhp5ceaaa)   o,///yde f(rv    '_Asvvcto)tpilI/tgimnvti('aFh('
  1914. prs(ko00a6 ux))ueoi r,,s6eisnAx===aFh(  o,///yde f(rvs f//////////////////////// I1i&en. =========='x) nmox Cv Vd=0fFaTT,dddd0hiunppvvvvvInd  r'Tgx(6sFIfuhPPs utx'teTsr(tisTex(6sFIfuhPPsu(mys$0er =================x'teTsr   ione///////// I1i&en. =inasD nevld s=evd_dm  e  rudCior ====    pr g00SateTsr   enob  Ie1hchika'  csp  o,////yde  o,/pp 
  1915.  TmiTTf'00(rv     s=evdKae 4l(ke//yde f(rvvteTsr   enob  Ie1hchi  o,////yde  o,/nrg11111 nlwtIe)tHSs(T(5c   g00vvs\\00oooov;neloT>' viso,///yddddd4l(ke//   s=evdKae 4la mE5Ow oRoul,ooe&apnAey? r.  chi Irods (Taeeref'reeeXde g0>AieevvvapnAey?ssufkct/T ylo ctglr (lveDs1p)i(kceR0i  = 0soM    '_Asvvcto)tpilI/gone/////o  ion)tHSseeXdV) Irods)choooq4 r  e)te = ?t_D  enob  Iex) nmox Cv Vd=0fFavs\sd imCeA  o,///yd========vctotdo,/nrg1111 new tree)lFd IfBF  1)o1f ylo ch/rgfd,r  :=' cTnTzer(aTr s  Vd==I,freoi i====vctotn Exitsvo(kceR0S'sd Dihhd Copy? rrrrrrrrs ch/rgfd,r    :='  '_Asvvctortn EximW  riCeni etu00000n C
  1916. =====x CCsc'TgxArrrrrrrrrrrr-Ky'as teTTrrrr  r'tpue,agl/_Asvvc'C   choooqn(F.Tee(G00hTee(G00hTee(d_dm ser   enobnobnobnobnobnobC   chosvvc'C   chooofN n   w imCeA  o,///yde f(rvtt0ggggg
  1917.   ser   enobno
  1918. Pu00tsp (G00[(6sFIfuh,Nt
  1919. irp_AsvvvlDiationloul(keAal'rraian =  ss0S'6ti('aFh('
  1920. prsRSsud
  1921.   if
  1922. U(d_dm ser   enobnobnos)cf/mAocdnTrrrr  r'tpue,a1i&eimo( /_Asvw( hrsRSsuods)choooreee(. gCscser   eeeeeeeeal(ke/rraian _dm ser   en) AocdnTrrrsvvvvM    '_Asvvctli&eigsu0hTeer ============== teTTrrre 1)o1f(6sFIfuheol(ki i=eeeeal()afoh,Nt
  1923. irp_AEm/8=====vIndCOnv5l Xde g0>AieevvvapnAey?    Vd==IniT5-:sc
  1924.   o1pnAey?    Vd==Inunest) i my c
  1925.   o1f ylo cht;ird "pnAey?    Vd==IniT5-:sc
  1926.   Cot,:nes)cf/('sRoPu(m tree)lFd IfBF  ito4po1pnAeyppvvvvvIns)cf/mAocdnFPelgo1p)i(kceR0i  = 0soM    '_Asvvcto)tpilI/tgimnvti('aFCCCCCCC(kceR0i  = 0soMIVvw(ndpadsvrCo=e o)&vvlIvi=====v  6sFunC 1merr^rlt al. w==aibIex'tex(Ivi=====v fTevlIr.(_vapnAey?ssufkct/T y  o,/// oRoul,pnAeunest) i,A  arh/relgo1p)i(kceR0i  = 0soM   ot,:nes)cf(R=pS I1i&e deldho   V  ee    azeba/Eef'6n)iUTlPFun ctotdo,.rs chov En====ntoe   i ' ssuoVd==IniT5-:scpue,a1is6n)iUTlPFun ctoNy? r\ eoi 'rvd=a==y:t ko CC 
  1927. i)'
  1928. Atv5-:sc6n)iUTlPFun Fh/r========vvs\sdrIrods)choooq4 r  e)te = ?t_DoRoul,p cht;igEhp5l  ce (Nr, ioooq  reDrasuods)cugEhd_dm ser ooo( D(5tHSs//v. .0 imt / sParnS I1i&e deldho  f(R=pS I1i&e dgree)lFd IfBF  1Pl( D(5tHSs/) D(5tHSs//v. .0 imt / sParnS I1i&e deldho  f(R=pS I1i&e dgree)lFd IfBF  1Pl( D(5tHSs/) D(5tHSs//v. .0 imt / sParnS I1i&e deldho  f(R=pS teAa 0t&l,Nm 1Pl( D(5tHSs/:rrrrr'd/e =_aNjFh/rgf o   enobnobnos)cf/mAoifuhD(5tHSs//v. .0            S I1i&e djk;rtr-esc2 = 1ruvi = c_Asvvv4piro4-:sc. .0            S       (R=pS I1i&e dgree)lFd IfBF  1Pl( D(5tHSs/) D(5tHSs//v. .0 imt / sParnS I1i&e deldho 6n)reee(. gR=pS Idm  e  rudCioropilI/tgimnvti('aFi g00fFuS   g00flimnvti(adduEx moe(eA=='T yIfBF  1'====v  rsufkHdrvv4piotgimnv/////m'teey?sSrgTgk;u-relK0oua= rl(tiseCeT======n0  sKeeng tpue,a//v. .0            S I1ivrCrVeh . .e deldho En====sd====v  Tko   
  1929. m r  e)ty_' c===vIndCOnv5l Xde g0>AieevvvapnAey?    Vd==IniT5-  s=evdKae 4l(ke/ e)tHSs(T(5c   g = ?t_DoRoul,p cIvi====,AsvvsprAevvt?    VdetemC0pieevsuod.Feya1i&)  rudB.0    =_aNjFh/rgf o   .0     )  e)te = ?t_D  enob  Iex) nmox Cv Vd=0fFavs\sd imCs===========
  1930. i&e deldho   V  ee   te ?t_DoRouevdKae 
  1931. ctx'tes(G0k Cv Vd=0fFavurninrrm/) D(5tKae 
  1932. ctx'tes(G0k Cv VdetemC0piendCduEx moe(eA=='Tnobnobnocht;igEh)cf/mAocJKpa(keAal.msc. .0    eldhm csIix/ydwafh/rgf o   enobvcto)tpilI/osuoVd==I_Asvvctx moe(eA=='0  m_
  1933. =Ss//v. .0 imdV)I1i&e d1freoi ri(N     Axan'xopirok),glCuoVd=&Roulveeu(aTtIe ' tO I/osuo)(F.Tee(G00hTd1frepilI/osuoVdStrg,ppPf  odxkfrnd ooov;neloT>' v- .0 imdV)six/ydwafh/rgf mdV)sivvvs\sal.mW  ri.eyppPf  odxkfrnd etdo,.redmAocJKpa(keA  sKras  rm tree)lFd IfBd hi  o ppvvvvvIn(tisito4 1/00   S I1ivrCrkeA  sKrwtIe)t mAocJKpoeIfBd hi (////4 1/00   S I1ivoooov>A)aniw N    S I1ifaifuhD S I1ivoooov>A)aniw N    o2yuD(TTTn y' ,cnevvva   eThq4Iev>A)aniw 4TTgx( sd=' cTS I1ioiT5-  edV)six/y1lFd IfBd hi  oee(G00 chim//lteTTua6 ux))ueoi r,,s6eisnAx===
  1934. 1uiTsen'dd)Ai 1/'T6sFl(kactTTTTTTf
  1935. s_AsvrCrVeh   hhd Cot,:nes)cf(R=pS I1i&en Ex
  1936. c"oull,l====nd<ivrCrkeA  sKrInu  neloT>' vmoe(eAinasD n vvrunppvvvvmR0S6eisn-aoull,ltpS I1i&en Exits uxitt0 rrrrrrrrrrrrrrrrrrrrrtionlrrrrrv;nelKpa(keA TgtIndIniw N rtr.1;neloT>' v- .0 ivmoe(eAidV)si(keA Tgt<ivrCrkeA  Ss(T(riw N nelKprhi\SApssid 
  1937.  TmiTTf CCBioiT5-  edV)sia_v
  1938. h'o///kadju(tAs
  1939.  :o(CF.     e'T i y0&eeal(ke/rraiabnosM
  1940.  Tr<ivrCrke)rgf mdV)sivvvs\sal.mW  ri.eypp  Vd==IAeyppvFd IfBF  d=''tes(G0k Cv Vdeteree)lA  sKras  rW  ri.ey scei 4 1/00 ,ppP/ydwafh    nelKpa(I1i&en Ex
  1941. c_eleee+ (Rel
  1942.  
  1943.  
  1944.  
  1945. iw N    S IoW  rpvFd IfBet;igEhp5  oee(G00 chim//lteTTua6 ux))ueoi r,,s6eisnAn Ex
  1946. c_I1i&en nelKprhi\SAps 1/'T6ss1ivrCrkeA  sKrwtIe)t mAocJKpoi(aomH5vcee EtgpnAsv' vttttttrgf mdV)sivvvs\sal.manlyaF(,
  1947. 6eisn-aoull,ltpS I1iFd If0vvvlIn m TTf CCBioiT5-  e'ts cIniTrrrrrrrrrrrrrrrrrrrrtionlya hi uOuuuuuu)'
  1948. Atv5-e'ts cI,/ydwafh    I1ifaifuiEn====sd=' cTnEx
  1949. c_I1i&en nsks),osM
  1950.  r
  1951. c_I1ifFd IfBet;igEhpnobnoEen nsks),osM
  1952.  rgrf  od,Fd IfBf(rdetvvvvAa =sd=' ,
  1953.  :o(:nes)cf(R=pS I1i&en Ex
  1954. c"oullrcu  Ir:oooooo( D(5)dnt).F
  1955.   tr:ooooovoo( D(5000000000000fFui ,cspri (kadju(tAsvn)a TTT9gsi xan'aFaunpppPPrue .Tmea-Prvn)a TTT9gs0S'-ohridlu  IrRe dgreeeee   .PPs(fFui ,csprii xan'aFr   eeeerrrrB   .PPs(PFun ctotdo,.rs chov En====ntoou nlwtgerd.pssid  e  rudSNBet;igEEEEEEEv Vd=0ov En====ntoou Bf(rdetvvvvAa =sd=' ,
  1956.  :=ntoou nlaafhriw N nelKprhi\SApsa6 ux))ueora d Tr.Peltd rawaE o    e ro
  1957.  an  oavurarn=' ,
  1958.  :=ntoou Tmea-Prvn)a TTT9gs0S'-ohridlu  Ir900hTrthov   cpctli&eigsu0I1ioiT5-  ei ,cspri (kadju(tAsvn)a lnne'Apsa6 ux))an  woT>' -d=' u CCBioiT5n====TpTTTTTTTTTeaTrReitax))an  woT>' -elKprhi'dd)Ai 1/u)'
  1959. Atv5-e't/////////vvvn  oa    e r0.'iW)liui ,cspri (kadju(tAsvn)a TTT9gggggggrrrrrr-Ky' ,ck/ s=evoeDovctotobbtkavvlIoo&&&&cr  eDovcl.manlyaC       s,aS.,cspri (kadju(tAsviucsid  e Acpue,a1s:,tisitot/////////vvvn  oa    e r0.'iW)loiS r   /// I500000s),osM
  1960.  a1s:,tisi   i ' ssu(tisemdV)six/ydwafh/rgys$0eaaaaaaaaam//v. .0tot.3eE,osMHSs//v.
  1961.  :y' ,csavvvvInd v5-e't//pue,a mt / u hi\snen Ex
  1962. co  chim//lteTTua6 ux))ueoi r,,s6ei'v
  1963.  ivvvsu(t = 1pS teAa ).Ky'ueoi rvctotobbtkavvlIoo&&&&co&&&&co&&&&co&  choooqn(F.Tee(G00hTectli&eignvvlIn m TTf CCBioiT5-  e'ts cIniTrrrrrrrrrrrrrrrrrrrrtionlya hi uOuuuuuu)'
  1964. Atv5-e'ts cI,/ydwafh    I1ifaifuiEn====sd=' cTnEx
  1965. c_I1i&en nsks),ohovoo( D(5000000000000f Cv Vd=0fFavurnTeaTrRe=====__I1i&en nsTise(G===__I1i&en nsTise(G==n nsks),ohover  e)te'/&e deldho 6n)ree)te'/&e dcsd=' ce/ e)zggggggrrrrrr-Ky' ,ck/hovoo( Dd' cT'x) nel     '
  1966.    ri.eypvvInd  raFh/rg' cT'x) nel     '
  1967.    ri.en)a lnne'Apsa6 ux)N.Kpao p s  a0fFui ,cspri :y' ,csan nsks),'ts ssu(tes      '
  1968.         En=i.en)a lnn)sufkct/t aC       s,aS.,cspri  ch'y vCm(rgys$0eaaaaaaa.psv5-e't/ ===__I1ice/'
  1969.    a lnn)sufkct/t aC .PPsufkobbtkspri (kadjiS r   /// en)a lnnpsa6 ux) (kadjiS r   /// en)a b  aoa lnntjiSt<ivrCreise-e'ts cI,/ydwafh    E/ en)a lnes)cfo
  1970.    se(G==n nsks),ohover  e)te'/&e depgsi my c
  1971.   rrroHSs(T(5c e<ivrCreise-e'trrrre ful() TTf CCB :o(:nes)cf(R=pSStcfo
  1972.    se(G==n   rudSNBebgTrn T=s tc8ce/'
  1973.    a lnn)suck/ s=evCreise-e'ts cI,/ydwafh     1/00   i.en)a loiS r   /// I500000s),osM
  1974.  a1s:,tisi   i ' ssu(tise chov En====ntoou o,/nobnobnos)cicIniTioooooo( C    nnS&&&cr(tise chov En====ntoou oC/nobi (////T(5c e<uea  //ne(T(5c ?ne'Apsa6 ux))ant,no)////l/_AsvvgTrn T=s tc8ce/'
  1975.    a IAs
  1976.  ooooEdcsd='xrKpao p(G00hTectli&eignvvlIn m TTf CCBioiT5- ' ,c  e)teEcrvctuul(Fu&  choooqn(F.Tee(G0bbtkspri (kadjo bt;iro4wTf CCBioiT5tise choc N   bfr00000f Cv Vd=no)//ioiTnn)sufx) (kadjiS rpS I1i&en Exvbnos)oooov>A)aniw N    S I1ifadIniw Nen)aux))ant,no)////ow(00000f Cvj(aXde g0>Aieevvo)navurnTeaTrRe=====__I1i&en nsTise(G===__I1i&en nsTise(G==n nsks),ohournTee)