public uint Decode(LzmaRangeDecoder rangeDecoder, uint positionState) { rangeDecoder.SaveState(); uint num1 = this.choice.Decode(rangeDecoder); if (rangeDecoder.InputRequired) { return(0); } uint num2; if (num1 == 0U) { num2 = this.lowCoder[(IntPtr)positionState].Decode(rangeDecoder); } else { num2 = 8U; uint num3 = this.choice2.Decode(rangeDecoder); if (!rangeDecoder.InputRequired) { if (num3 == 0U) { num2 += this.middleCoder[(IntPtr)positionState].Decode(rangeDecoder); } else { num2 = num2 + 8U + this.highCoder.Decode(rangeDecoder); } } if (rangeDecoder.InputRequired) { this.choice2.RestoreState(); } } if (rangeDecoder.InputRequired) { this.choice.RestoreState(); rangeDecoder.RestoreState(); } return(num2); }