':returns: item_list - list of IAMServiceAccounts.
:returns: exception _map - A dict where the keys are a tuple containing the
location of the exception and the value is the actual exception'

@record_exception()
def slurp(self):

    self.prep_for_slurp()
    project_creds = get_gcp_project_creds(self.accounts)
    @iter_project(projects=project_creds)
    def slurp_items(**kwargs):
        item_list = []
        kwargs['user_agent'] = self.user_agent
        service_accounts = list_serviceaccounts(**kwargs)
        for service_account in service_accounts:
            resource_id = gcp_resource_id_builder(kwargs['project'], 'projects.serviceaccounts.get', service_account['name'])
            sa = get_serviceaccount_complete(service_account=service_account['name'], **kwargs)
            key_count = 0
            if ('Keys' in sa):
                key_count = len(sa['Keys'])
            item_list.append(IAMServiceAccountItem(region='global', account=self.accounts[0], name=sa['Email'], arn=resource_id, config={'policy': sa.get('Policy', None), 'email': sa['Email'], 'keys': key_count}))
        return (item_list, kwargs.get('exception_map', {}))
    return slurp_items()
