public bool DeepEquals(DestinyTalentNodeDefinition?other)
 {
     return(other is not null &&
            NodeIndex == other.NodeIndex &&
            NodeHash == other.NodeHash &&
            Row == other.Row &&
            Column == other.Column &&
            PrerequisiteNodeIndexes.DeepEqualsListNaive(other.PrerequisiteNodeIndexes) &&
            BinaryPairNodeIndex == other.BinaryPairNodeIndex &&
            AutoUnlocks == other.AutoUnlocks &&
            LastStepRepeats == other.LastStepRepeats &&
            IsRandom == other.IsRandom &&
            (RandomActivationRequirement is not null ? RandomActivationRequirement.DeepEquals(other.RandomActivationRequirement) : other.RandomActivationRequirement is null) &&
            IsRandomRepurchasable == other.IsRandomRepurchasable &&
            Steps.DeepEqualsList(other.Steps) &&
            ExclusiveWithNodeHashes.DeepEqualsListNaive(other.ExclusiveWithNodeHashes) &&
            RandomStartProgressionBarAtProgression == other.RandomStartProgressionBarAtProgression &&
            LayoutIdentifier == other.LayoutIdentifier &&
            GroupHash == other.GroupHash &&
            LoreHash == other.LoreHash &&
            NodeStyleIdentifier == other.NodeStyleIdentifier &&
            IgnoreForCompletion == other.IgnoreForCompletion);
 }
 public void Update(DestinyTalentNodeDefinition?other)
 {
     if (other is null)
     {
         return;
     }
     if (NodeIndex != other.NodeIndex)
     {
         NodeIndex = other.NodeIndex;
         OnPropertyChanged(nameof(NodeIndex));
     }
     if (NodeHash != other.NodeHash)
     {
         NodeHash = other.NodeHash;
         OnPropertyChanged(nameof(NodeHash));
     }
     if (Row != other.Row)
     {
         Row = other.Row;
         OnPropertyChanged(nameof(Row));
     }
     if (Column != other.Column)
     {
         Column = other.Column;
         OnPropertyChanged(nameof(Column));
     }
     if (!PrerequisiteNodeIndexes.DeepEqualsListNaive(other.PrerequisiteNodeIndexes))
     {
         PrerequisiteNodeIndexes = other.PrerequisiteNodeIndexes;
         OnPropertyChanged(nameof(PrerequisiteNodeIndexes));
     }
     if (BinaryPairNodeIndex != other.BinaryPairNodeIndex)
     {
         BinaryPairNodeIndex = other.BinaryPairNodeIndex;
         OnPropertyChanged(nameof(BinaryPairNodeIndex));
     }
     if (AutoUnlocks != other.AutoUnlocks)
     {
         AutoUnlocks = other.AutoUnlocks;
         OnPropertyChanged(nameof(AutoUnlocks));
     }
     if (LastStepRepeats != other.LastStepRepeats)
     {
         LastStepRepeats = other.LastStepRepeats;
         OnPropertyChanged(nameof(LastStepRepeats));
     }
     if (IsRandom != other.IsRandom)
     {
         IsRandom = other.IsRandom;
         OnPropertyChanged(nameof(IsRandom));
     }
     if (!RandomActivationRequirement.DeepEquals(other.RandomActivationRequirement))
     {
         RandomActivationRequirement.Update(other.RandomActivationRequirement);
         OnPropertyChanged(nameof(RandomActivationRequirement));
     }
     if (IsRandomRepurchasable != other.IsRandomRepurchasable)
     {
         IsRandomRepurchasable = other.IsRandomRepurchasable;
         OnPropertyChanged(nameof(IsRandomRepurchasable));
     }
     if (!Steps.DeepEqualsList(other.Steps))
     {
         Steps = other.Steps;
         OnPropertyChanged(nameof(Steps));
     }
     if (!ExclusiveWithNodeHashes.DeepEqualsListNaive(other.ExclusiveWithNodeHashes))
     {
         ExclusiveWithNodeHashes = other.ExclusiveWithNodeHashes;
         OnPropertyChanged(nameof(ExclusiveWithNodeHashes));
     }
     if (RandomStartProgressionBarAtProgression != other.RandomStartProgressionBarAtProgression)
     {
         RandomStartProgressionBarAtProgression = other.RandomStartProgressionBarAtProgression;
         OnPropertyChanged(nameof(RandomStartProgressionBarAtProgression));
     }
     if (LayoutIdentifier != other.LayoutIdentifier)
     {
         LayoutIdentifier = other.LayoutIdentifier;
         OnPropertyChanged(nameof(LayoutIdentifier));
     }
     if (GroupHash != other.GroupHash)
     {
         GroupHash = other.GroupHash;
         OnPropertyChanged(nameof(GroupHash));
     }
     if (LoreHash != other.LoreHash)
     {
         LoreHash = other.LoreHash;
         OnPropertyChanged(nameof(LoreHash));
     }
     if (NodeStyleIdentifier != other.NodeStyleIdentifier)
     {
         NodeStyleIdentifier = other.NodeStyleIdentifier;
         OnPropertyChanged(nameof(NodeStyleIdentifier));
     }
     if (IgnoreForCompletion != other.IgnoreForCompletion)
     {
         IgnoreForCompletion = other.IgnoreForCompletion;
         OnPropertyChanged(nameof(IgnoreForCompletion));
     }
 }