Inheritance: SObj
 public void CreateVarlink(PNode p1, SVar end)
 {
     SBox start = (SBox)p1.Parent.Parent.Parent;
     IExportEntry startExport = pcc.getExport(start.Index);
     string linkDesc = null;
     foreach (VarLink l in start.Varlinks)
     {
         if (l.node == p1)
         {
             if (l.Links.Contains(end.Index))
                 return;
             linkDesc = l.Desc;
             break;
         }
     }
     if(linkDesc == null)
         return;
     var varLinksProp = startExport.GetProperty<ArrayProperty<StructProperty>>("VariableLinks");
     if (varLinksProp != null)
     {
         foreach (var prop in varLinksProp)
         {
             if (prop.GetProp<StrProperty>("LinkDesc") == linkDesc)
             {
                 prop.GetProp<ArrayProperty<ObjectProperty>>("LinkedVariables").Add(new ObjectProperty(end.Index + 1));
                 startExport.WriteProperty(varLinksProp);
             }
         }
     }
 }
 public void CreateVarlink(PNode p1, SVar end)
 {
     SBox start = (SBox)p1.Parent.Parent.Parent;
     byte[] buff = pcc.Exports[start.Index].Data;
     List<byte> ListBuff = new List<byte>(buff);
     VarLink link = new VarLink();
     bool firstLink = false;
     foreach (VarLink l in start.Varlinks)
     {
         if (l.node == p1)
         {
             if (l.Links.Contains(end.Index))
                 return;
             if (l.Links[0] == -1)
             {
                 firstLink = true;
                 l.Links.RemoveAt(0);
                 l.offsets.RemoveAt(0);
             }
             else
             {
                 l.offsets.Add(l.offsets[l.offsets.Count -1] + 4);
             }
             l.Links.Add(end.Index);
             link = l;
             break;
         }
     }
     if(link.Links == null)
         return;
     BitConverter.IsLittleEndian = true;
     List<PropertyReader.Property> p = PropertyReader.getPropList(pcc, buff);
     int f = -1;
     for (int i = 0; i < p.Count(); i++)
     {
         if (pcc.getNameEntry(p[i].Name) == "VariableLinks")
         {
             
             byte[] sizebuff = BitConverter.GetBytes(BitConverter.ToInt32(p[i].raw, 16) + 4);
             for (int j = 0; j < 4; j++)
             {
                 ListBuff[p[i].offsetval - 8 + j] = sizebuff[j];
             }
             f = i;
             break;
         }
     }
     if (f != -1)
     {
         int pos = 28;
         byte[] global = p[f].raw;
         int count = BitConverter.ToInt32(global, 24);
         for(int j = 0; j < count; j++)
         {
             List<PropertyReader.Property> p2 = PropertyReader.ReadProp(pcc, global, pos);
             for (int i = 0; i < p2.Count(); i++)
             {
                 if (pcc.getNameEntry(p2[i].Name) == "LinkedVariables" && p2[i + 1].Value.StringValue == link.Desc + '\0')
                 {
                     if (firstLink)
                         link.offsets.Add(pos + 28);
                     int count2 = BitConverter.ToInt32(p2[i].raw, 24);
                     byte[] countbuff = BitConverter.GetBytes(count2 + 1);
                     byte[] sizebuff = BitConverter.GetBytes(BitConverter.ToInt32(p2[i].raw, 16) + 4);
                     for(int k = 0; k < 4; k++)
                     {
                         ListBuff[p[f].offsetval + pos + k] = countbuff[k];
                         ListBuff[p[f].offsetval + pos - 8 + k] = sizebuff[k];
                     }
                     ListBuff.InsertRange(p[f].offsetval + pos + 4 + count2 * 4, BitConverter.GetBytes(end.Index + 1));
                     pcc.Exports[start.Index].Data = ListBuff.ToArray();
                     j = count; //break outer loop
                     break;
                 }
                 pos += p2[i].raw.Length;
             }
         }
     }
     refreshView();
 }