<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _read_mptcp_join(self, bits, size, kind):
 """Read Join Connection option. Positional arguments: * bits - str, 4-bit data * size - int, length of option * kind - int, 30 (Multipath TCP) Returns: * dict -- extracted Join Connection (MP_JOIN) option Structure of MP_JOIN [RFC 6824]: Octets Bits Name Description 0 0 tcp.mp.kind Kind (30) 1 8 tcp.mp.length Length 2 16 tcp.mp.subtype Subtype (1) 2 20 tcp.mp.data Handshake-specific Data """

        if self._syn and self._ack:     # MP_JOIN-SYN/ACK
            return self._read_join_synack(bits, size, kind)
        elif self._syn:                 # MP_JOIN-SYN
            return self._read_join_syn(bits, size, kind)
        elif self._ack:                 # MP_JOIN-ACK
            return self._read_join_ack(bits, size, kind)
        else:                           # illegal MP_JOIN occurred
            temp = self._read_fileng(size)
            data = dict(
                kind=kind,
                length=size + 1,
                subtype='MP_JOIN-Unknown',
                data=bytes(chr(int(bits[:4], base=2)), encoding='utf-8') + temp,
            )
            return data