 }
 // MARK: - Extend SignedIntegerType for UInt128
 extension SignedIntegerType {
+    // TODO: Need to break this out into each Signed Type to check for overflows.
     public init(_ value: UInt128) {
         self.init(value.toIntMax())
     }

// MARK: IntegerArithmeticType Conformance
extension UInt128: IntegerArithmeticType {
    public func toIntMax() -> IntMax {
        precondition(self.value.lowerBits <= UInt64(IntMax.max),
            "Converting `self` to 'IntMax' causes an integer overflow")
        return IntMax(value.lowerBits)
    }
    public static func addWithOverflow(lhs: UInt128, _ rhs: UInt128) -> (UInt128, overflow: Bool) {

        // Holds overflow status
        var overflow = false
        // Loop through every combination of lhsArray[x] * rhsArray[y]
        for rhsSegment in 0 ..< rhsArray.count {
            for lhsSegment in 0 ..< lhsArray.count {
                let currentValue = lhsArray[lhsSegment] * rhsArray[rhsSegment]
                // Depending upon which segments we're looking at, we'll want to
                // check for overflow conditions and flag them when encountered.
