public static void ImportBP(this DysonSphere _this, BinaryReader r)
        {
            int num = r.ReadInt32();

            if (num == 0)
            {
                _this.ResetNew();
                return;
            }
            _this.randSeed   = r.ReadInt32();
            _this.layerCount = r.ReadInt32();
            int num3 = r.ReadInt32();

            for (int i = 1; i < num3; i++)
            {
                int num4 = r.ReadInt32();
                if (num4 != 0)
                {
                    Assert.True(i == num4);
                    if (i != num4)
                    {
                        throw new Exception("dyson layerId doesn't match! (1)");
                    }
                    DysonSphereLayer dysonSphereLayer = new DysonSphereLayer(_this);
                    dysonSphereLayer.Init();
                    if (i < _this.layersIdBased.Length)
                    {
                        _this.layersIdBased[i]    = dysonSphereLayer;
                        _this.layersSorted[i - 1] = dysonSphereLayer;
                    }
                    dysonSphereLayer.ImportBP(r);
                    Assert.True(i == dysonSphereLayer.id);
                    if (i != dysonSphereLayer.id)
                    {
                        throw new Exception("dyson layerId doesn't match! (2)");
                    }
                }
            }
            _this.LayerSort();
            _this.autoNodeCount = r.ReadInt32();
            num3 = r.ReadInt32();
            for (int l = 0; l < num3; l++)
            {
                int num6 = r.ReadInt32();
                if (num6 > 0)
                {
                    int layerId = r.ReadInt32();
                    int nodeId  = r.ReadInt32();
                    if (l < _this.autoNodes.Length)
                    {
                        _this.autoNodes[l] = _this.FindNode(layerId, nodeId);
                    }
                }
            }
            _this.ArrangeAutoNodes();
            if (num >= 2)
            {
                Traverse.Create(_this).Method("SetNrdCapacity", r.ReadInt32()).GetValue();
                _this.nrdCursor        = r.ReadInt32();
                _this.nrdRecycleCursor = r.ReadInt32();
                for (int m = 1; m < _this.nrdCursor; m++)
                {
                    _this.nrdPool[m].Import(r);
                }
                for (int n = 0; n < _this.nrdRecycleCursor; n++)
                {
                    _this.nrdRecycle[n] = r.ReadInt32();
                }
                _this.nrdBuffer.SetData(_this.nrdPool);
            }
            else
            {
                Traverse.Create(_this).Method("SetNrdCapacity", 128).GetValue();
                for (int num7 = 0; num7 < 10; num7++)
                {
                    DysonSphereLayer dysonSphereLayer2 = _this.layersIdBased[num7];
                    if (dysonSphereLayer2 != null)
                    {
                        for (int num8 = 1; num8 < dysonSphereLayer2.nodeCursor; num8++)
                        {
                            if (dysonSphereLayer2.nodePool[num8] != null && dysonSphereLayer2.nodePool[num8].id == num8)
                            {
                                _this.AddDysonNodeRData(dysonSphereLayer2.nodePool[num8], false);
                            }
                        }
                    }
                }
                _this.nrdBuffer.SetData(_this.nrdPool);
            }
            if (_this.autoNodeCount == 0)
            {
                _this.PickAutoNode();
                _this.PickAutoNode();
                _this.PickAutoNode();
                _this.PickAutoNode();
            }
        }