<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start_root_token_generation(self, otp=None, pgp_key=None):
 """Initialize a new root generation attempt. Only a single root generation attempt can take place at a time. One (and only one) of otp or pgp_key are required. Supported methods: PUT: /sys/generate-root/attempt. Produces: 200 application/json :param otp: Specifies a base64-encoded 16-byte value. The raw bytes of the token will be XOR'd with this value before being returned to the final unseal key provider. :type otp: str | unicode :param pgp_key: Specifies a base64-encoded PGP public key. The raw bytes of the token will be encrypted with this value before being returned to the final unseal key provider. :type pgp_key: str | unicode :return: The JSON response of the request. :rtype: dict """

        params = {}
        if otp is not None and pgp_key is not None:
            raise ParamValidationError('one (and only one) of otp or pgp_key arguments are required')
        if otp is not None:
            params['otp'] = otp
        if pgp_key is not None:
            params['pgp_key'] = pgp_key

        api_path = '/v1/sys/generate-root/attempt'
        response = self._adapter.put(
            url=api_path,
            json=params
        )
        return response.json()