<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def ExecuteStoredProcedure(self, sproc_link, params, options=None):
 """Executes a store procedure. :param str sproc_link: The link to the stored procedure. :param dict params: List or None :param dict options: The request options for the request. :return: The Stored Procedure response. :rtype: dict """

        if options is None:
            options = {}

        initial_headers = dict(self.default_headers)
        initial_headers.update({
            http_constants.HttpHeaders.Accept: (
                runtime_constants.MediaTypes.Json)
        })

        if params and not type(params) is list:
            params = [params]

        path = base.GetPathFromLink(sproc_link)
        sproc_id = base.GetResourceIdOrFullNameFromLink(sproc_link)
        headers = base.GetHeaders(self,
                                  initial_headers,
                                  'post',
                                  path,
                                  sproc_id,
                                  'sprocs',
                                  options)

        # ExecuteStoredProcedure will use WriteEndpoint since it uses POST operation
        request = request_object._RequestObject('sprocs', documents._OperationType.ExecuteJavaScript)
        result, self.last_response_headers = self.__Post(path,
                                                         request,
                                                         params,
                                                         headers)
        return result