use num_traits::Inv;
use crate::UUID;
impl Inv for UUID {
type Output = Option<Self>;
fn inv(self) -> Option<Self> {
let x = self.to_u128();
if x & 1 == 0 {
return None;
}
let mut y = x; y = y.wrapping_mul(2u128.wrapping_sub(x.wrapping_mul(y)));
y = y.wrapping_mul(2u128.wrapping_sub(x.wrapping_mul(y)));
y = y.wrapping_mul(2u128.wrapping_sub(x.wrapping_mul(y)));
y = y.wrapping_mul(2u128.wrapping_sub(x.wrapping_mul(y)));
y = y.wrapping_mul(2u128.wrapping_sub(x.wrapping_mul(y)));
y = y.wrapping_mul(2u128.wrapping_sub(x.wrapping_mul(y)));
Some(Self::from_u128(y))
}
}