code: def build_request(self, input_data=None, *args, **kwargs):
          
          if input_data is not None:
              self.input_data = input_data
          if self.input_data is None:
              raise ValueError('Input data is None')
          if self.uo is None:
              raise ValueError('UO is None')
  
          self.request = RequestHolder()
          self.request.nonce = get_random_vector(EBConsts.FRESHNESS_NONCE_LEN)
          self.request.api_object = EBUtils.build_api_object(self.uo)
          self.request.endpoint = self.uo.resolve_endpoint()
          self.request.configuration = self.configuration
          self.request.api_method = EBConsts.REQUEST_PROCESS_DATA
  
          # Build plaintext plain_buffer
          plain_buffer = \
              to_bytes(31, 1) + to_bytes(self.uo.uo_id, 4) + \
              to_bytes(self.request.nonce, EBConsts.FRESHNESS_NONCE_LEN) + to_bytes(self.input_data)
  
          plain_buffer = PKCS7.pad(plain_buffer)
  
          # Encrypt-then-mac
          ciphertext = aes_enc(self.uo.enc_key, plain_buffer)
          mac = cbc_mac(self.uo.mac_key, ciphertext)
  
          # Result request body
          self.request.body = {
              "data": "Packet0_%s_0000%s" % (EBUtils.get_request_type(self.uo), to_hex(ciphertext + mac))}
          return self.request
docs: Builds request
  
          :param input_data:
          :param args:
          :param kwargs:
          :return: