text: public virtual string[] Decompose(string cmd){int parts = 0;for (int i = 0; 0 <= i && i < cmd.Length;){int next = DashEven(cmd, i);if (i == next){parts++;i = next + 2;}else{parts++;i = next;}}string[] part = new string[parts];int x = 0;for (int i = 0; 0 <= i && i < cmd.Length;){int next = DashEven(cmd, i);if (i == next){part[x++] = cmd.Substring(i, 2);i = next + 2;}else{part[x++] = (next < 0) ? cmd.Substring(i, cmd.Length - i) : cmd.Substring(i, next - i);i = next;}}return part;}