 
 extension Unicode.UTF8 : UnicodeEncoding {
   public struct ForwardDecoder {
-    public init() { _bufferStorage = 0; _bitsInBuffer = 0 }
-    var _bufferStorage: UInt32
-    var _bitsInBuffer: UInt8
-  }
-
+    public typealias Buffer = _UIntBuffer<UInt32, UInt8>
+    public init() { buffer = Buffer() }
+    public var buffer: Buffer
+  }
   public struct ReverseDecoder {
-    public init() { _bufferStorage = 0; _bitsInBuffer = 0 }
-    var _bufferStorage: UInt32
-    var _bitsInBuffer: UInt8
+    public typealias Buffer = _UIntBuffer<UInt32, UInt8>
+    public init() { buffer = Buffer() }
+    public var buffer: Buffer
   }
 }
 

  init(_unchecked x: UInt32) { self = unsafeBitCast(x, to: UnicodeScalar.self) }
}
//===----------------------------------------------------------------------===//

public enum Unicode {
  public typealias UTF8 = Swift.UTF8

}


public protocol _UTF8Decoder : UnicodeDecoder {
  func _validateBuffer() -> (valid: Bool, length: UInt8)
  var buffer: Buffer { get set }
}

extension _UTF8Decoder where Buffer == _UIntBuffer<UInt32, UInt8>  {
  var _bufferStorage : UInt32 {
    get { return buffer._storage }
    set { buffer._storage = newValue }
  }
  var _bitsInBuffer : UInt8 {
    get { return buffer._bitCount }
    set { buffer._bitCount = newValue }
  }

  public mutating func parseOne<I : IteratorProtocol>(
    _ input: inout I
  ) -> Unicode.ParseResult<UInt32> where I.Element == Unicode.UTF8.CodeUnit {
