//called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (FGrid.SliceCount >= 1 && FGrid[0] == null) FGrid[0] = new Grid();
            SpreadMax = FIndex.SliceCount;

            //			if (!FIndex.IsChanged) return;

            FOutput.SliceCount = 0;

            int count = -1;
            List<List<Grid>> list = new List<List<Grid>>();
            foreach (Grid g in FGrid) {
                if (g.Order == 0) {
                    count++;
                    list.Add(new List<Grid>());
                }
                list[count].Add(g);
            }

            for (int i=0;i<SpreadMax;i++) {
                FOutput.AddRange( list[VMath.Zmod(FIndex[i], count+1)] );

            }

            //FLogger.Log(LogType.Debug, "hi tty!");
        }
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (FGrid.SliceCount >= 1 && FGrid[0] == null) FGrid[0] = new Grid();
            SpreadMax = FInput.SliceCount;

            //			if (!FInput.IsChanged) return;

            FIndex.SliceCount = SpreadMax;
            for (int i=0;i<SpreadMax;i++) {
                FIndex[i] = FGrid[i].GetIndex(FInput[i]);

            }

            //FLogger.Log(LogType.Debug, "hi tty!");
        }