code: def predict_mappings(self, mappings):
          
          if self.nat_type not in self.predictable_nats:
              msg = "Can't predict mappings for non-predictable NAT type."
              raise Exception(msg)
  
          for mapping in mappings:
              mapping["bound"] = mapping["sock"].getsockname()[1]
  
              if self.nat_type == "preserving":
                  mapping["remote"] = mapping["source"]
  
              if self.nat_type == "delta":
                  max_port = 65535
                  mapping["remote"] = int(mapping["source"]) + self.delta
  
                  # Overflow or underflow = wrap port around.
                  if mapping["remote"] > max_port:
                      mapping["remote"] -= max_port
                  if mapping["remote"] < 0:
                      mapping["remote"] = max_port - -mapping["remote"]
  
                  # Unknown error.
                  if mapping["remote"] < 1 or mapping["remote"] > max_port:
                      mapping["remote"] = 1
                  mapping["remote"] = str(mapping["remote"])
  
          return mappings
docs: This function is used to predict the remote ports that a NAT
          will map a local connection to. It requires the NAT type to
          be determined before use. Current support for preserving and
          delta type mapping behaviour.