; Copyright 2022 The Crashpad Authors
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
;     http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
LIBRARY  "crashpad_wer.dll"

EXPORTS
  ; These are required for the WER api.
  OutOfProcessExceptionEventCallback
  OutOfProcessExceptionEventSignatureCallback
  OutOfProcessExceptionEventDebuggerLaunchCallback
