/*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/x509.h.in
 *
 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509_H
# define OPENSSL_X509_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509_H
# endif

# include <openssl/e_os2.h>
# include <openssl/types.h>
# include <openssl/symhacks.h>
# include <openssl/buffer.h>
# include <openssl/evp.h>
# include <openssl/bio.h>
# include <openssl/asn1.h>
# include <openssl/safestack.h>
# include <openssl/ec.h>

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  include <openssl/rsa.h>
#  include <openssl/dsa.h>
#  include <openssl/dh.h>
# endif

# include <openssl/sha.h>
# include <openssl/x509err.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* Needed stacks for types defined in other headers */
SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME)
#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx)))
#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp)))
#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n)))
#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n))
#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i)))
#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc))
#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx))
#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum)
#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc)))
#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509)
#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk))
#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx)))
#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp)))
#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null())
#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n)))
#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n))
#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk))
#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk))
#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i)))
#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)))
#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk)))
#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk)))
#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc))
#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx))
#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr)))
#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum)
#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk))
#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk))
#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk)))
#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc)))
#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED)
#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx)))
#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp)))
#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null())
#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n)))
#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n))
#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i)))
#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc))
#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx))
#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum)
#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc)))
#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL)
#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx)))
#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp)))
#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null())
#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n)))
#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n))
#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i)))
#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc))
#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx))
#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum)
#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc)))
#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp)))


/* Flags for X509_get_signature_info() */
/* Signature info is valid */
# define X509_SIG_INFO_VALID     0x1
/* Signature is suitable for TLS use */
# define X509_SIG_INFO_TLS       0x2

# define X509_FILETYPE_PEM       1
# define X509_FILETYPE_ASN1      2
# define X509_FILETYPE_DEFAULT   3

# define X509v3_KU_DIGITAL_SIGNATURE     0x0080
# define X509v3_KU_NON_REPUDIATION       0x0040
# define X509v3_KU_KEY_ENCIPHERMENT      0x0020
# define X509v3_KU_DATA_ENCIPHERMENT     0x0010
# define X509v3_KU_KEY_AGREEMENT         0x0008
# define X509v3_KU_KEY_CERT_SIGN         0x0004
# define X509v3_KU_CRL_SIGN              0x0002
# define X509v3_KU_ENCIPHER_ONLY         0x0001
# define X509v3_KU_DECIPHER_ONLY         0x8000
# define X509v3_KU_UNDEF                 0xffff

struct X509_algor_st {
    ASN1_OBJECT *algorithm;
    ASN1_TYPE *parameter;
} /* X509_ALGOR */ ;

typedef STACK_OF(X509_ALGOR) X509_ALGORS;

typedef struct X509_val_st {
    ASN1_TIME *notBefore;
    ASN1_TIME *notAfter;
} X509_VAL;

typedef struct X509_sig_st X509_SIG;

typedef struct X509_name_entry_st X509_NAME_ENTRY;

SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY)
#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx)))
#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))
#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n)))
#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n))
#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i)))
#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))
#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx))
#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum)
#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)))
#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))


# define X509_EX_V_NETSCAPE_HACK         0x8000
# define X509_EX_V_INIT                  0x0001
typedef struct X509_extension_st X509_EXTENSION;
SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION)
#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx)))
#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp)))
#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null())
#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n)))
#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n))
#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i)))
#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc))
#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx))
#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum)
#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc)))
#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp)))

typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
typedef struct x509_attributes_st X509_ATTRIBUTE;
SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE)
#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx)))
#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))
#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null())
#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n)))
#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n))
#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i)))
#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))
#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx))
#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum)
#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)))
#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))

typedef struct X509_req_info_st X509_REQ_INFO;
typedef struct X509_req_st X509_REQ;
typedef struct x509_cert_aux_st X509_CERT_AUX;
typedef struct x509_cinf_st X509_CINF;

/* Flags for X509_print_ex() */

# define X509_FLAG_COMPAT                0
# define X509_FLAG_NO_HEADER             1L
# define X509_FLAG_NO_VERSION            (1L << 1)
# define X509_FLAG_NO_SERIAL             (1L << 2)
# define X509_FLAG_NO_SIGNAME            (1L << 3)
# define X509_FLAG_NO_ISSUER             (1L << 4)
# define X509_FLAG_NO_VALIDITY           (1L << 5)
# define X509_FLAG_NO_SUBJECT            (1L << 6)
# define X509_FLAG_NO_PUBKEY             (1L << 7)
# define X509_FLAG_NO_EXTENSIONS         (1L << 8)
# define X509_FLAG_NO_SIGDUMP            (1L << 9)
# define X509_FLAG_NO_AUX                (1L << 10)
# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)
# define X509_FLAG_NO_IDS                (1L << 12)
# define X509_FLAG_EXTENSIONS_ONLY_KID   (1L << 13)

/* Flags specific to X509_NAME_print_ex() */

/* The field separator information */

# define XN_FLAG_SEP_MASK        (0xf << 16)

# define XN_FLAG_COMPAT          0/* Traditional; use old X509_NAME_print */
# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */
# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */
# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */
# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */

# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */

/* How the field name is shown */

# define XN_FLAG_FN_MASK         (0x3 << 21)

# define XN_FLAG_FN_SN           0/* Object short name */
# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */
# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */
# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */

# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */

/*
 * This determines if we dump fields we don't recognise: RFC2253 requires
 * this.
 */

# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)

# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20
                                           * characters */

/* Complete set of RFC2253 flags */

# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
                        XN_FLAG_SEP_COMMA_PLUS | \
                        XN_FLAG_DN_REV | \
                        XN_FLAG_FN_SN | \
                        XN_FLAG_DUMP_UNKNOWN_FIELDS)

/* readable oneline form */

# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
                        ASN1_STRFLGS_ESC_QUOTE | \
                        XN_FLAG_SEP_CPLUS_SPC | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_SN)

/* readable multiline form */

# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
                        ASN1_STRFLGS_ESC_MSB | \
                        XN_FLAG_SEP_MULTILINE | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_LN | \
                        XN_FLAG_FN_ALIGN)

typedef struct X509_crl_info_st X509_CRL_INFO;

typedef struct private_key_st {
    int version;
    /* The PKCS#8 data types */
    X509_ALGOR *enc_algor;
    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
    /* When decrypted, the following will not be NULL */
    EVP_PKEY *dec_pkey;
    /* used to encrypt and decrypt */
    int key_length;
    char *key_data;
    int key_free;               /* true if we should auto free key_data */
    /* expanded version of 'enc_algor' */
    EVP_CIPHER_INFO cipher;
} X509_PKEY;

typedef struct X509_info_st {
    X509 *x509;
    X509_CRL *crl;
    X509_PKEY *x_pkey;
    EVP_CIPHER_INFO enc_cipher;
    int enc_len;
    char *enc_data;
} X509_INFO;
SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO)
#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx)))
#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp)))
#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null())
#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n)))
#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n))
#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i)))
#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc))
#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx))
#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum)
#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc)))
#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp)))


/*
 * The next 2 structures and their 8 routines are used to manipulate Netscape's
 * spki structures - useful if you are writing a CA web page
 */
typedef struct Netscape_spkac_st {
    X509_PUBKEY *pubkey;
    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */
} NETSCAPE_SPKAC;

typedef struct Netscape_spki_st {
    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */
    X509_ALGOR sig_algor;
    ASN1_BIT_STRING *signature;
} NETSCAPE_SPKI;

/* Netscape certificate sequence structure */
typedef struct Netscape_certificate_sequence {
    ASN1_OBJECT *type;
    STACK_OF(X509) *certs;
} NETSCAPE_CERT_SEQUENCE;

/*- Unused (and iv length is wrong)
typedef struct CBCParameter_st
        {
        unsigned char iv[8];
        } CBC_PARAM;
*/

/* Password based encryption structure */

typedef struct PBEPARAM_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *iter;
} PBEPARAM;

/* Password based encryption V2 structures */

typedef struct PBE2PARAM_st {
    X509_ALGOR *keyfunc;
    X509_ALGOR *encryption;
} PBE2PARAM;

typedef struct PBKDF2PARAM_st {
/* Usually OCTET STRING but could be anything */
    ASN1_TYPE *salt;
    ASN1_INTEGER *iter;
    ASN1_INTEGER *keylength;
    X509_ALGOR *prf;
} PBKDF2PARAM;

#ifndef OPENSSL_NO_SCRYPT
typedef struct SCRYPT_PARAMS_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *costParameter;
    ASN1_INTEGER *blockSize;
    ASN1_INTEGER *parallelizationParameter;
    ASN1_INTEGER *keyLength;
} SCRYPT_PARAMS;
#endif

#ifdef  __cplusplus
}
#endif

# include <openssl/x509_vfy.h>
# include <openssl/pkcs7.h>

#ifdef  __cplusplus
extern "C" {
#endif

# define X509_EXT_PACK_UNKNOWN   1
# define X509_EXT_PACK_STRING    2

# define         X509_extract_key(x)     X509_get_pubkey(x)/*****/
# define         X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)
# define         X509_name_cmp(a,b)      X509_NAME_cmp((a),(b))

void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
                                     int (*crl_free) (X509_CRL *crl),
                                     int (*crl_lookup) (X509_CRL *crl,
                                                        X509_REVOKED **ret,
                                                        const
                                                        ASN1_INTEGER *serial,
                                                        const
                                                        X509_NAME *issuer),
                                     int (*crl_verify) (X509_CRL *crl,
                                                        EVP_PKEY *pk));
void X509_CRL_METHOD_free(X509_CRL_METHOD *m);

void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
void *X509_CRL_get_meth_data(X509_CRL *crl);

const char *X509_verify_cert_error_string(long n);

int X509_verify(X509 *a, EVP_PKEY *r);
int X509_self_signed(X509 *cert, int verify_signature);

int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx,
                       const char *propq);
int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);

NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);
char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);

int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);

int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);
int X509_signature_print(BIO *bp, const X509_ALGOR *alg,
                         const ASN1_STRING *sig);

int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);

int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
                       unsigned char *md, unsigned int *len);
int X509_digest(const X509 *data, const EVP_MD *type,
                unsigned char *md, unsigned int *len);
ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert,
                                   EVP_MD **md_used, int *md_is_fallback);
int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
                     unsigned char *md, unsigned int *len);

X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  include <openssl/http.h> /* OSSL_HTTP_REQ_CTX_nbio_d2i */
#  define X509_http_nbio(rctx, pcert) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509))
#  define X509_CRL_http_nbio(rctx, pcrl) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL))
# endif

# ifndef OPENSSL_NO_STDIO
X509 *d2i_X509_fp(FILE *fp, X509 **x509);
int i2d_X509_fp(FILE *fp, const X509 *x509);
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);
int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);
int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa);
#   endif
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */
X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);
int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
                                                PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key);
int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                               const char *propq);
EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
# endif

X509 *d2i_X509_bio(BIO *bp, X509 **x509);
int i2d_X509_bio(BIO *bp, const X509 *x509);
X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);
int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);
int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa);
#   endif
#  endif

#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */

X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);
int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
                                                 PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key);
int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                                const char *propq);
EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);

DECLARE_ASN1_DUP_FUNCTION(X509)
DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR)
DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE)
DECLARE_ASN1_DUP_FUNCTION(X509_CRL)
DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION)
DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY)
DECLARE_ASN1_DUP_FUNCTION(X509_REQ)
DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED)
int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
                    void *pval);
void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
                     const void **ppval, const X509_ALGOR *algor);
void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src);

DECLARE_ASN1_DUP_FUNCTION(X509_NAME)
DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY)

int X509_cmp_time(const ASN1_TIME *s, time_t *t);
int X509_cmp_current_time(const ASN1_TIME *s);
int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm,
                       const ASN1_TIME *start, const ASN1_TIME *end);
ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
                            int offset_day, long offset_sec, time_t *t);
ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);

const char *X509_get_default_cert_area(void);
const char *X509_get_default_cert_dir(void);
const char *X509_get_default_cert_file(void);
const char *X509_get_default_cert_dir_env(void);
const char *X509_get_default_cert_file_env(void);
const char *X509_get_default_private_dir(void);

X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);

DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)
DECLARE_ASN1_FUNCTIONS(X509_VAL)

DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)

X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key);
EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key);
int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);
long X509_get_pathlen(X509 *x);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY)
EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length,
                        OSSL_LIB_CTX *libctx, const char *propq);
# ifndef OPENSSL_NO_DEPRECATED_3_0
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY)
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_DSA
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY)
#  endif
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_EC
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY)
#  endif
# endif

DECLARE_ASN1_FUNCTIONS(X509_SIG)
void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg,
                   const ASN1_OCTET_STRING **pdigest);
void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg,
                   ASN1_OCTET_STRING **pdigest);

DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
DECLARE_ASN1_FUNCTIONS(X509_REQ)
X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);

DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)

DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)

DECLARE_ASN1_FUNCTIONS(X509_NAME)

int X509_NAME_set(X509_NAME **xn, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(X509_CINF)
DECLARE_ASN1_FUNCTIONS(X509)
X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)

#define X509_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef)
int X509_set_ex_data(X509 *r, int idx, void *arg);
void *X509_get_ex_data(const X509 *r, int idx);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX)

int i2d_re_X509_tbs(X509 *x, unsigned char **pp);

int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid,
                      int *secbits, uint32_t *flags);
void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid,
                       int secbits, uint32_t flags);

int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
                            uint32_t *flags);

void X509_get0_signature(const ASN1_BIT_STRING **psig,
                         const X509_ALGOR **palg, const X509 *x);
int X509_get_signature_nid(const X509 *x);

void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x);
void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x);

int X509_alias_set1(X509 *x, const unsigned char *name, int len);
int X509_keyid_set1(X509 *x, const unsigned char *id, int len);
unsigned char *X509_alias_get0(X509 *x, int *len);
unsigned char *X509_keyid_get0(X509 *x, int *len);

DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
DECLARE_ASN1_FUNCTIONS(X509_CRL)
X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
int X509_CRL_get0_by_serial(X509_CRL *crl,
                            X509_REVOKED **ret, const ASN1_INTEGER *serial);
int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);

X509_PKEY *X509_PKEY_new(void);
void X509_PKEY_free(X509_PKEY *a);

DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)

X509_INFO *X509_INFO_new(void);
void X509_INFO_free(X509_INFO *a);
char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size);

#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
                ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);
OSSL_DEPRECATEDIN_3_0
int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
                unsigned char *md, unsigned int *len);
OSSL_DEPRECATEDIN_3_0
int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
              ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey,
              const EVP_MD *type);
#endif
int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,
                     unsigned char *md, unsigned int *len);
int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg,
                     const ASN1_BIT_STRING *signature, const void *data,
                     EVP_PKEY *pkey);
int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg,
                         const ASN1_BIT_STRING *signature, const void *data,
                         EVP_MD_CTX *ctx);
int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
                   ASN1_BIT_STRING *signature, const void *data,
                   EVP_PKEY *pkey, const EVP_MD *md);
int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,
                       X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
                       const void *data, EVP_MD_CTX *ctx);

#define X509_VERSION_1 0
#define X509_VERSION_2 1
#define X509_VERSION_3 2

long X509_get_version(const X509 *x);
int X509_set_version(X509 *x, long version);
int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
ASN1_INTEGER *X509_get_serialNumber(X509 *x);
const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x);
int X509_set_issuer_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_issuer_name(const X509 *a);
int X509_set_subject_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_subject_name(const X509 *a);
const ASN1_TIME * X509_get0_notBefore(const X509 *x);
ASN1_TIME *X509_getm_notBefore(const X509 *x);
int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm);
const ASN1_TIME *X509_get0_notAfter(const X509 *x);
ASN1_TIME *X509_getm_notAfter(const X509 *x);
int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm);
int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
int X509_up_ref(X509 *x);
int X509_get_signature_type(const X509 *x);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_get_notBefore X509_getm_notBefore
#  define X509_get_notAfter X509_getm_notAfter
#  define X509_set_notBefore X509_set1_notBefore
#  define X509_set_notAfter X509_set1_notAfter
#endif


/*
 * This one is only used so that a binary form can output, as in
 * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf)
 */
X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x);
const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid,
                    const ASN1_BIT_STRING **psuid);
const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);

EVP_PKEY *X509_get0_pubkey(const X509 *x);
EVP_PKEY *X509_get_pubkey(X509 *x);
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);

#define X509_REQ_VERSION_1 0

long X509_REQ_get_version(const X509_REQ *req);
int X509_REQ_set_version(X509_REQ *x, long version);
X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req);
int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name);
void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig);
int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg);
int X509_REQ_get_signature_nid(const X509_REQ *req);
int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp);
int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req);
X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req);
int X509_REQ_extension_nid(int nid);
int *X509_REQ_get_extension_nids(void);
void X509_REQ_set_extension_nids(int *nids);
STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
int X509_REQ_add_extensions_nid(X509_REQ *req,
                                const STACK_OF(X509_EXTENSION) *exts, int nid);
int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext);
int X509_REQ_get_attr_count(const X509_REQ *req);
int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_NID(X509_REQ *req,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_txt(X509_REQ *req,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

#define X509_CRL_VERSION_1 0
#define X509_CRL_VERSION_2 1

int X509_CRL_set_version(X509_CRL *x, long version);
int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name);
int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_sort(X509_CRL *crl);
int X509_CRL_up_ref(X509_CRL *crl);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate
#  define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate
#endif

long X509_CRL_get_version(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl);
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl);
#endif
X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
int X509_CRL_get_signature_nid(const X509_CRL *crl);
int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp);

const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x);
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x);
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
const STACK_OF(X509_EXTENSION) *
X509_REVOKED_get0_extensions(const X509_REVOKED *r);

X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
                        EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);

int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);

int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey);
int X509_chain_check_suiteb(int *perror_depth,
                            X509 *x, STACK_OF(X509) *chain,
                            unsigned long flags);
int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);
STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);

int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_and_serial_hash(X509 *a);

int X509_issuer_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_name_hash(X509 *a);

int X509_subject_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_subject_name_hash(X509 *x);

# ifndef OPENSSL_NO_MD5
unsigned long X509_issuer_name_hash_old(X509 *a);
unsigned long X509_subject_name_hash_old(X509 *x);
# endif

# define X509_ADD_FLAG_DEFAULT  0
# define X509_ADD_FLAG_UP_REF   0x1
# define X509_ADD_FLAG_PREPEND  0x2
# define X509_ADD_FLAG_NO_DUP   0x4
# define X509_ADD_FLAG_NO_SS    0x8
int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags);
int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags);

int X509_cmp(const X509 *a, const X509 *b);
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
#ifndef OPENSSL_NO_DEPRECATED_3_0
# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL)
OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x,
                                                const EVP_PKEY *pubkey);
#endif
unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx,
                                const char *propq, int *ok);
unsigned long X509_NAME_hash_old(const X509_NAME *x);

int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
int X509_aux_print(BIO *out, X509 *x, int indent);
# ifndef OPENSSL_NO_STDIO
int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,
                     unsigned long cflag);
int X509_print_fp(FILE *bp, X509 *x);
int X509_CRL_print_fp(FILE *bp, X509_CRL *x);
int X509_REQ_print_fp(FILE *bp, X509_REQ *req);
int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent,
                          unsigned long flags);
# endif

int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase);
int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent,
                       unsigned long flags);
int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,
                  unsigned long cflag);
int X509_print(BIO *bp, X509 *x);
int X509_ocspid_print(BIO *bp, X509 *x);
int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag);
int X509_CRL_print(BIO *bp, X509_CRL *x);
int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,
                      unsigned long cflag);
int X509_REQ_print(BIO *bp, X509_REQ *req);

int X509_NAME_entry_count(const X509_NAME *name);
int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid,
                              char *buf, int len);
int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                              char *buf, int len);

/*
 * NOTE: you should be passing -1, not 0 as lastpos. The functions that use
 * lastpos, search after that position on.
 */
int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                               int lastpos);
X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne,
                        int loc, int set);
int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
                                               const char *field, int type,
                                               const unsigned char *bytes,
                                               int len);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
                                               int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
                                               const ASN1_OBJECT *obj, int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj);
int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
                             const unsigned char *bytes, int len);
ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne);
ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne);

int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder,
                       size_t *pderlen);

int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
                          int nid, int lastpos);
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
                          const ASN1_OBJECT *obj, int lastpos);
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
                               int crit, int lastpos);
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
                                         X509_EXTENSION *ex, int loc);

int X509_get_ext_count(const X509 *x);
int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
                      unsigned long flags);

int X509_CRL_get_ext_count(const X509_CRL *x);
int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
                            int lastpos);
int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx);
int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
                          unsigned long flags);

int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
                                int lastpos);
int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit,
                                     int lastpos);
X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit,
                               int *idx);
int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
                              unsigned long flags);

X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
                                             int nid, int crit,
                                             ASN1_OCTET_STRING *data);
X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
                                             const ASN1_OBJECT *obj, int crit,
                                             ASN1_OCTET_STRING *data);
int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj);
int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
int X509_EXTENSION_get_critical(const X509_EXTENSION *ex);

int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
                           int lastpos);
int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
                           const ASN1_OBJECT *obj, int lastpos);
X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
                                           X509_ATTRIBUTE *attr);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const ASN1_OBJECT *obj,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
                                                  **x, int nid, int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const char *attrname,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x,
                              const ASN1_OBJECT *obj, int lastpos, int type);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
                                             const ASN1_OBJECT *obj,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
                                             const char *atrname, int type,
                                             const unsigned char *bytes,
                                             int len);
int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
                             const void *data, int len);
void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
                               void *data);
int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr);
ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);

int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

/* lookup a cert from a X509 STACK */
X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name,
                                     const ASN1_INTEGER *serial);
X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(PBEPARAM)
DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
#ifndef OPENSSL_NO_SCRYPT
DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS)
#endif

int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
                         const unsigned char *salt, int saltlen);
int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter,
                            const unsigned char *salt, int saltlen,
                            OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
                          const unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter,
                             const unsigned char *salt, int saltlen,
                             OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
                           unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
                              unsigned char *salt, int saltlen,
                              unsigned char *aiv, int prf_nid);
X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter,
                                 unsigned char *salt, int saltlen,
                                 unsigned char *aiv, int prf_nid,
                                 OSSL_LIB_CTX *libctx);

#ifndef OPENSSL_NO_SCRYPT
X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher,
                                  const unsigned char *salt, int saltlen,
                                  unsigned char *aiv, uint64_t N, uint64_t r,
                                  uint64_t p);
#endif

X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
                             int prf_nid, int keylen);
X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen,
                                int prf_nid, int keylen,
                                OSSL_LIB_CTX *libctx);

/* PKCS#8 utilities */

DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)

EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8);
EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx,
                            const char *propq);
PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey);

int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
                    int version, int ptype, void *pval,
                    unsigned char *penc, int penclen);
int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg,
                    const unsigned char **pk, int *ppklen,
                    const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8);

const STACK_OF(X509_ATTRIBUTE) *
PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8);
int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr);
int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type,
                                const unsigned char *bytes, int len);
int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj,
                                int type, const unsigned char *bytes, int len);


int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
                           int ptype, void *pval,
                           unsigned char *penc, int penclen);
int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
                           const unsigned char **pk, int *ppklen,
                           X509_ALGOR **pa, const X509_PUBKEY *pub);
int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b);

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        H        H       L    Lǃ       H       H            [H]H    H    H    A\f         UHHoSH    H_@    H    H    H        H    HH[]    ff.             AVAUL   ATUSHL       H    H    LH        LsHǃh     Mt|I$H    tjHCH    @HI$H@0    I$LH               [L]H    A\H    A]H    A^[]A\A]A^    f         AULoPATAUHSHLH    HCXLu    AHH[]A\A]        H       H    H    Lc(H        L    H{`    H}    LH[]A\A]    f        ATL   USH    H    H    LH        uKǃh     HCHH@H            [L]H    H    H    A\`    ǃh     ff.         
    AUATL   USH    LH    Lk(H    H        L    HsHHt
   H<L       LkPL    HkXL               H    H    H    L    H{`    L    cXL            LH    H    H        1[]A\A]        H*H{`       H    AUATLgUHoSHHLo`H    H{Ht	H    1L.=    tAx~Aǅx       LH        Hs     HH    H    H    []A\A]T@     AULoPATAUSHLH    Dh  HEt_AtYD    H   E    H    H    H        LH    H{Hu/H[]A\A]    HkXrH5    HS`        븃1Ҿ 
  H       L   HH    E1A8   111H    HSHH=    D`@   A 
  HP@f   S P<H   RP81E8       DLH    HH    []A\A]        f    e    H    s.e    H    HtH@HHH    e
    t            f         HHH@@xtH        H    H        H        H      t1    
    AVAUATIUHS    H    H    HH        H]@	H[@HtH    tHP  L   HL    H    UHƅ   DuH    AtA$vAD$tGA9tBL            HH    H    H        1[]A\A]A^    IL$ED$1DH    H    E   HH    ff.          H H   eH%(   HD$1HH    HD$    H$HD$D$   `HD$eH+%(   u	H         f    H      t1    US  H_Hot
   HHEPH    1[]        AUATI
  UHHcSIH0      HHx  L`E11H   ǀ   x       I   H    ƀ    H   H0  H   H   L   H   Hǃ           HCHHHH[HP  HCHHCPHC(HC(HC0H   H   H   HChHChHCpH   H   Lc@HCX    Lc HC8    L   Hǃ       Lc`HCx    L   H   Hǃ       C        H  HH  Hǃ      H    Eu9        H    H    HH        H[]A\A]    H0  H@  fD  f    e    H    s.e    H    HtH@HHH    e
    t            f         AUATL   UHSL   L        L    L    Å    H        L-    H    HIL    tImLm HE    H-    LH        []A\A]    ff.         USHH        HH    tHHCHBHHHH     H    HCH"HC    H    H    H[]    f.         H      t1    Hǀ    1            H   USHH        HHH   H        Hh  H    tHh  Hp  HBHH     H    HHh  H"Hp      H`      uLH      u>H    u4Hx  H    H    H    H    []    ff.         SH	H[@HtH    tHP  H   Hx     1[        UHSH_@	H[@HtH    tHP  H   HH߾   H`  H@x    []H    f         UHSH_@	H[@HtH    tHP  H   HH߾   H`  H@x    []H    f         UHSH_@	H[@HtH    tHP  H   HH1H`  H@x    []H    ff.         UHSH_@	H[@HtH    tHP  H   HH߾   H`  H@x    []H    f         UHSH_@	H[@HtH    tHP  H   HH߾   H`  H@x    []H    f         UHSH_@	H[@HtH    tHP  H   HH߾   H`  H@x    []H    f         H`    t1    S1H    H        H    1[        ATLUHSH_@	H[@HtH    tHP  H            HH    H    H        L[]A\    ff.         ATHIHUASDHH@T$(    H   0  HH  	H[@HtH    tHP    HH  AD$,<  AD$(        H    H    H        1H[]A\        UHSH_@	H[@HtH    tHP  H   H    t\H    t6H    tXH    tVH    t?H    tK=     tI1[]    1H`  [   ]H      ̾   ޾   ׾   о   ɾ   H            ff.          UHHSH    u1[]    H[@HtH    tHP  H   HtHx8    uH9[]    ff.         ATUHSH	H[@HtH    tHP  E HULeH   v:  t4}$vsAD$    1HA4$E$       [1]A\    H   H`  Ht)H;ru#v%H`  HH      ƅu빾뎾@     AUATUSHH跺Hu[]A\A]    1Ҿ 
  H       L   IH    E1A8   111H    HSLH=    h@   A 
  HP@m   S P<H   RP81AD$8       [L]H    A\H    A]        AUATUSHH eH%(   HD$1	H[@HtH    tHP  H   1H    H    LP  H}HHE     HHE(    H)0HH    H   HD$    H`  D$    HD$    H   tS     H|$H        E11LH    Ht$    IH=     HH    Le HD$eH+%(   uH 1[]A\A]                 H      t1    UHSH^@	H[@HtH    tHP  H   Ht
H       t	1[]    H  [H9]             H      t1    HF@UHSHX@	H[@HtH    tHP  H   Ht
H      t	1[]    H`  [H9]    @     AVAUATIUSH襷H    I$  	H[@HtH    tHP  1Ҿ  H       M$H  IH    1E1A8   11H    IT$hHPit	j     P<A$<  P8AE8   1L1H=    A         N؃            AAH    LH    H        []A\A]A^    h      P8A$<  P<j    AVAUATUHSH  	H[@HtH    tHP  
    L   L       LH    H]H    H        L    H    HƋ         D   Hǅ      ǅ       L    L        u^H}i               LH    H    H        H    Hǅ       [H]A\A]A^    DH        H    L            [L]H    A\H    A]H    A^D   Hǅ      ǅ       L    D          ATUHH  SH    H    H    HH        H        IHH9t/H    tHHCHBHH     HH"HCH    L    H{        LcH{@    L    LL   ǃ4     H       H    H{`    L    LE1H    H        H    H    H               HH    H    H        H[]A\    H       ,             UHH  SH    HH    H    H        H߾h       H[]    ff.     f    H   AVAUATUSH    HtH0    H蚲H   H=    0  
      HHtsLh  HSH`  Lx  Lh  LH    Lp  Hǀ8      Hǀ(          L    uDH    L    t;L    1[H]A\A]A^    HHJL    HE8    HHEP    HE@    ǅP  0       H`  Hǅ      Hǅ      Hǅ          H  Hǅ       Hǅ      Hǅ          H        L5    H    LIL    tMnL-    Lh  Hǅp      LH        HsH        ff.         AWAVIAAUKI 
  ATI̹U1SDH|$    H    |$11E11IDGH    HxH@    HHH@@    )HH1HnLnktlu
A  F8H~HL    1A 
  LAG8   H=           1҅OH[]A\A]A^A_    ff.         AWI   AVAAxKAUA1ATA̹USDHL$|$    H    |$1E111HDGH    H4$LxHxHDp8Dh<D`@XD@o       HA   1E8   H=    H   []A\A]A^A_    ff.     @     AWAVAAUATI   UyKS1AHL$    H    E1EE111HI    L`@n   h8X@Dp<EtH4$HxHD    LA      1AG8   H=    H[]A\A]A^A_             AVAUATAUHSH  	H[@HtH    tHP  A   D    A1ҾJ   H    D<        H   HG  LH  A  D(  H]H    Hǅ8     H    <  H    L    L    Å    L    L    Å    H        L5    H    HIL    tInLu HE    H-    LH        j   H            H    H    LH        []A\A]A^      1H        Å    (  ƅ,          US    Ht#HH    u
H[]    H    1fD      AVIAUATIHcUIHǐ  S
      Ht}LpHÉH    hLs(A$  Hǀ       LHǀ       I$P  HCh    L    u EtH  HC H[]A\A]A^    L    1ff.          AVI
  AUIATIHcUHHX  S    HttLhHANH    H@x    Lk A$  Hǀ       IF(LHC`    L    utHX  HCH[]A\A]A^    L    1fD      AWDy{AVIAAUATIUSHH蕪H   1Ҿ 
  D    IH   E1EG111H    HxH@    HHH@@    )HH1HH~xIFFe   HFAF F<I   @F8HHFHHCHFPHCHFXHCHF`HC HFhHC(HFpL    1A 
  LAE8   H=           1҅O[]A\A]A^A_      L    I   H    H            AVAUATAUHHc
  SIHp  Lu    H   HEtHp  HCH{(H    H        HLH  H   HC`HChLH[CP    HChHCx    HCpLsDc ǃh         HtI<  L   DH    L    L    L   Hǃ@      H[]A\A]A^    H    1@     AWI
  AVAUIIcATIH   AUS    H     HIP  L  D  Hǀ      Hǀ          A  DHC@tSHH        H    uSH    H    uLEtH   H  H[]A\A]A^A_    HH        H    tH    1H1    @     AUHc
  ATIH   US    H   HH        H    A   H޹       H    Ņ         LkHǃ      LH        L    u0H    L    uPEt
H   HH[]A\A]    H        HcH        H        L    1L1        H        H1    딐    AWAVAUATUSHHG4eH%(   HT$@1H<$H        L$ABp|  L$H<$H   9a  GX  LS   LT$9FD$    LT$)  H{kLT$HI  L`  LT$I<$    LT$`  H$Dx4HCf    f  f  fU
  k  fW  f  LLT$ҤLT$H  s${ LT$DLT$HI  l$LT$  1Ҿ 
  	      HH    E1A	  111H    HxH@    IHPPHH@@    HpH)HH1HHHHIFH)`IECAEC$AE$C IEH    AE 1Iǅ       HLI$       A   HŨ   Aǉ    E} 1ҹ   E8   H=    A 
  H    1l$LT$NA  f&s
  9  f) 
    f*;  f+B  H    LT$D{     L5    LT$HI    F  H    LT$    LT$I<$LT$    LT$ACg   Cg   A
   MD'>  6  -  St!t
*u  1Ҿ 
  H   D{    IH    11E1DHA8       I$H=    LHPHHID$@   HBID$HBID$HBID$ HB ID$(HB(ID$0HB0    ,A<    M6I    E;<  uH    LT$    MLT$H    LT$D{     LT$HH    H=    u'  H H=      H   D;zuH    LT$A    I<$    LT$Jf    f"  f,  ?I$      { LT$    LT$HI    LT$HsHLI$       LA    LT$I<$LT$    ELT$  Ct	!H$t$H    CpHD$@eH+%(   W  HHH    []A\A]A^A_    f#     f$	  I$X     { LT$    LT$HI    D{$Ht$<LT$HP  H    D|$<    LT$HI    HH(    LT$I$X      LA    L    LT$f!   f"   I$0   tT{ LT$    LT$HI    LT$s$LI$0      LA    LT$dD#I<$LT$    LT$A I$    tɋ{ LT$    LT$HI    LT$K,LKHLS(s$DC0I$       LA    LT$I$(   fLLT$DLT$H`  iC$  { LT$D$DpH    LT$HI    AFl$(MI߉D$LT$0Dt$    1Ҿ  D    HH    DD$E1111H    1HxH@    HLHHHH@@    )HH1HLcLAGT$CAG C AG(fC(AG$C$    HS$Aw(LII$(  L    t$ H    D31A  E8   H=       H    1LT$0Lҋl$(LNLT$A    LT$3Lk H    LT$    H    L    LT$H  LhLT$LHD$    H        C.DC(DDK,I`  PHt$ HT$LA    ^LT$I$H   LkH3{ LT$L$    LT$HI    D{$Ht$<LT$HP  H    D|$<    LT$L$HI    H(HD$    1LH    L$(LT$ LD$    LD$LT$ HL$(  LT$ HpLH|$LD$(HD$I$H      H|$A    H|$(    L    LT$ H    LT$D{     L5    LT$HI    uM6I    E;<  uH    LT$    MLT$I       LT$I         D$<    C,LsH9=   S H    LT$T$    L=    LT$HI      T$M?I      A;<  uH    LT$    s${ 裘LT$HMLLT$HD$    S,LT$LD$H9H  s(  Ah  LT$t  ID$XLL    LT$AI$    LsH{ LT$L$    LT$HI    L$I$   LL    LA    LT$I$8   LsH){ LT$L$    LT$HI    L$I$8  I$`   { LT$    LT$HI    D{$Ht$<LT$HP  H    D|$<    LT$H    II(    1H    HLT$HD$    HL$LT$H  HL$ HpLT$HD$I$`  L    H|$A    H|$     L    LT$mI$x   LLT$LT$H  { LT$    LT$HI    l$MH  H    1A  HA  H=       E8           1Ҿ        HH    111E1HA      HxH@    IHPPHH@@    HpH)HH1HMfHHH  CH)  AFC IFH    AF 1Iǆ      HLI$x      I   L|$l$LA    L    I<$    DLT$I$P   LsHd{ LT$L$    LT$HI    L$LT$LLI$P      LT$xHC8L    I<$E1    CLT$rLT$H        I<$    LT$LLT$A    I<$    LT$1Ll$L|$NA    LT$H    LT$    s${ LT$`AnH    LT$    H        LI    LT$tIIFHBHM6LH    MvLT$    H5        I       HT$<H    LLT$    A    LT$D$<LT$A   LLT$    L    I<$    LT$AHLT$    L    I<$    LT$I<$    LT$A@f   I$    LkH C(9=   { LT$    LT$HI    LLT$    S(LT$H9H   LT$s$LLI$       LA    LT$wI$    h{$LT$    LT$HI    LT$S(HKHLs I$       LA    LT$mH    LT$    LT$S$H    LT$H        L    I<$    LT$I<$LT$A    LT$f   L$LT$s${ f  L$LT$IMjMn(M~PL$LLT$    L    IFXLT$L$   LLT$L$    CLT$f  fL$(  f   LLT$    I<$    LT${ s$LT$CLT$HHs0LT$LT$Af    fM  f
j  s${ L$LT$LT$L$IL    L    C8#S H    LT$T$    L=    LT$HI      T$M?I      A;<  uH    LT$    MLT$  LT$K0LLHS(MD$8.    LT$C8  Aǆh     D{8Ez  I$    a  Hs(H    LT$Ht$    Ht$H        LT$H    HpLT$ HHt$HD$    H        HL$H|$L  INH    L    I<$    CLT$ PC(9   S,)9   H|HLT$HsHHI$   L    C8L    zLT$ID$@L    LT$C8AuLT$Aǆh      L    I<$    CLT$H    LT$    LT$LLT$    I<$    LT$fC&I`  D1DK$DC LPLT$_LT$A"H    LT$D{     L5    LT$HI    uM6I    sE;<  uH    LT$    MLT$aH    LT$D{     LT$HH    H=    u  H H=      H   D;zuH    LT$D{     L5    LT$HI    u  M6I      E;<  uH    LT$    MLT$m  s$ID$(LT$L    LT$H    A<  
    L   S8P S<    H    LH    H    LT$    !s${ LT$衋LT$HI*    L       H    LH    H    LT$    I~`        LT$    H    LH    H    LT$    ID$PLT$HxLT$L    fH    LT$    LT$ID$ LLT$    9H    LT$    LT$s H    LT$    I<$    LT$$LT$LLT$        I$    { LT$    LT$HI  LT$S$HsHLI$       LT$H=   Hc  LT$LHC8[f   f;  I$    RLs H    LT$    H    L    LT$HI!LxL    H        Ls(I$       LC8    I$    Ls H    LT$    LH        LT$HILpL    H        I  LT$H   HH(LT$ HHD$HL$    H|$1LRH|$    LT$ LLT$    I$   HLT$1S HsH    LT$H= w1Hc  LT$HC8LT$I$   L    LT$A
f'   I$p   { LT$    LT$HI    S$H    LT$T$    L=    LT$HI    2T$M?I    A;<  uH    LT$    MLT$
LT$LI$p      LA    LT$7I$h   { LT$    LT$HI    D{$Ht$<LT$HP  H    D|$<    LT$H    II(    1H    HLT$HD$    HL$LT$Ht HD$HpI$h  HL$ LT$HLT$    L    I<$    LT$LLT$A    LT$=                                Hs(H            H    H    HH            H    H    HH            H    H    HH            H    H    HH                AUH    L8ATUH   SHOHH    LP    L    HƋCltt
uCl   [L]A\A]    L    =     tH    H    HH        H    H    HH           H    =     tH    H    HH        H    H    HH        HHH   Ht[L]A\A]    []A\A]    H<$H    H    H        H4$    H    H    LH            H    H    LH            H    H    H    H4$    H4$    H    H    LH            [L]H    H    A\    H    H    LH            H    H    LH            H    H    LH            H    H    LH            H    H    H    H4$    H4$    H    H    H    DD$H4$    H4$DD$    HDLH    [H    ]A\A]    H    H    HH            HH    H    H            H    H    HH            H    LH            L    H    LH        L        H3H            H    H    HH            H    H    H    H4$    H4$    [L]H    A\H    A]    H    LH            LH    H           L        LH    H            AAH    LH    H            H    LH            H    H    LH            H    H    LH            H    H    LH            H    HH            H    H    HH            H    H    HH            H    H    HH            H            HH    []A\A]A^A_    Xډ[H    ]A\A]A^A_    H    H    LH            L    H    H    L    L    ,   tB(  H        .H    LH        H    LH        H           S H    LT$H        1    I<$    LT$    K DH    H    LT$    L    I<$    LT$    S H    LT$H        1    I<$    LT$    H    LT$    I   H    H        L    I<$    LT$    S H    LT$H        1    I<$    LT$    LT$0l$(Ll$LH    LT$    H|$    I<$    LT$A    S H    LT$H        I<$    LT$    S H    LT$H        1    I<$    LT$    K DH    H    LT$    L    I<$    LT$    S H    LT$H        I<$    LT$    LT$l$I   H    LT$H        I<$    LT$s H    LT$    I<$    LT$    s H    LT$    I<$    LT$    LT$IH  H    {K DH    H    LT$    L    I<$    LT$    S H    LT$H        1    I<$    LT$    s H    LT$    I<$    LT$    S H    LT$H        I<$    LT$    H    l$L|$    L    I<$    LT$H            s H    LT$    I<$    LT$    H            K DH    H    LT$    L    I<$    LT$    S H    LT$H        I<$    LT$    s H    LT$    I<$    LT$    s$H    LT$    I<$    LT$    H    LH    H    LT$    LT$    S H    LT$H        I<$    LT$    H    LH    H    LT$    LT$    H    LH    H    LT$    LT$    H=        H=        H        H        H        H        H        H        H            S   H    H8eH%(   HD$01H|$$   H    HD$        1H    H            ÅG  H    H        Å  H    H        Å   H        Å   H        Å   H        Å   H        ÅuqHH       H        H    Ht9H    1ҾJ   H        H    HulH=        H        H        H        H        H        H        H        HD$0eH+%(   t    H8[                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
Qj8&gDiM⫋I4QWRI\QĨpܳi
}jGzϥ,DOjngE4Px`hB9j9_mQ
ȿBs)raUte
6zAbqy<tXx+R-kOrGgARA D
>iyaHnAfc=B0#܃yn7yje_֘v	6Gh/*]KިkG^ϭ                            __tracepoint_iscsi_dbg_conn  __traceiter_iscsi_dbg_conn  __SCK__tp_func_iscsi_dbg_conn  __SCT__tp_func_iscsi_dbg_conn  __tracepoint_iscsi_dbg_eh  __traceiter_iscsi_dbg_eh  __SCK__tp_func_iscsi_dbg_eh  __SCT__tp_func_iscsi_dbg_eh  __tracepoint_iscsi_dbg_session  __traceiter_iscsi_dbg_session  __SCK__tp_func_iscsi_dbg_session  __SCT__tp_func_iscsi_dbg_session  __tracepoint_iscsi_dbg_tcp  __traceiter_iscsi_dbg_tcp  __SCK__tp_func_iscsi_dbg_tcp  __SCT__tp_func_iscsi_dbg_tcp  __tracepoint_iscsi_dbg_sw_tcp  __traceiter_iscsi_dbg_sw_tcp  __SCK__tp_func_iscsi_dbg_sw_tcp  __SCT__tp_func_iscsi_dbg_sw_tcp  iscsi_create_endpoint  iscsi_destroy_endpoint  iscsi_put_endpoint  iscsi_lookup_endpoint  iscsi_get_ipaddress_state_name  iscsi_get_router_state_name  iscsi_create_iface  iscsi_destroy_iface  iscsi_flashnode_bus_match  iscsi_create_flashnode_sess  iscsi_create_flashnode_conn  iscsi_find_flashnode_sess  iscsi_find_flashnode_conn  iscsi_destroy_flashnode_sess  iscsi_destroy_all_flashnode  iscsi_session_chkready  iscsi_is_session_online  iscsi_is_session_dev  iscsi_host_for_each_session  iscsi_block_scsi_eh  iscsi_unblock_session  iscsi_block_session  iscsi_alloc_session  iscsi_add_session  iscsi_create_session  iscsi_remove_session  iscsi_force_destroy_session  iscsi_free_session  iscsi_alloc_conn  iscsi_add_conn  iscsi_remove_conn  iscsi_put_conn  iscsi_get_conn  iscsi_recv_pdu  iscsi_offload_mesg  iscsi_conn_error_event  iscsi_conn_login_event  iscsi_post_host_event  iscsi_ping_comp_event  iscsi_session_event  iscsi_get_discovery_parent_name  iscsi_get_port_speed_name  iscsi_get_port_state_name  iscsi_register_transport  iscsi_unregister_transport  iscsi_dbg_trace                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Stale Unknown Advertised Manual isns Sendtarget Unknown! LINK UP LINK DOWN (null) %s: %s
 Invalid iface attr Invalid session attr Invalid conn attr %d
 %s
 FREE LOGGED_IN FAILED unknown 0x%x
 %llu
 %s: Blocking session
 6 %s Blocking session
 %s: Unblocking session
 %s Unblocking session
 %s: Unblocking SCSI target
 %s Unblocking SCSI target
 %s: Releasing conn
 %s Releasing conn
 %s: disconnect ep.
 %s disconnect ep.
 %s: disconnect ep done.
 %s disconnect ep done.
 %s: Stopping conn.
 %s Stopping conn.
 invalid stop flag %d
 3 %s: Stopping conn done.
 %s Stopping conn done.
 %s: iscsi if conn stop.
 %s iscsi if conn stop.
 %s: iscsi if conn stop done.
 %s iscsi if conn stop done.
 %s: cleanup done.
 %s cleanup done.
 detected conn error (%d)
 2.0-870 iscsi_conn_cleanup %s off
 %s: Scanning session
 %s Scanning session
 %s: Completed session scan
 %s Completed session scan
 Invalid host attr detected conn login (%d)
 &ihost->mutex iscsi_host%d Invalid event %u.
 %s: Unbinding session
 %s Unbinding session
 %s: Completed target removal
 %s Completed target removal
 %s: Removing session
 %s Removing session
 %s: Freeing session
 %s Freeing session
 iscsi_ctrl_%d:%d session%u %s: Completed session adding
 %s Completed session adding
 flashnode_sess-%u:%u flashnode_conn-%u:%u:0 &conn->ep_mutex connection%d:%u ipv4-iface-%u-%u ipv6-iface-%u-%u ep-%d %d 3iscsi: invalid session %d.
 %s Destroying transport conn
 can not deliver stats: OOM
 3can not deliver chap: OOM
 10 Mbps 100 Mbps 1 Gbps 10 Gbps 25 Gbps 40 Gbps port_speed port_state initiatorname ipaddress hwaddress netdev recovery_tmo target_id creator state target_state discovery_parent_type discovery_parent_idx def_taskmgmt_tmo tsid isid def_time2retain def_time2wait discovery_auth_optional bidi_chap discovery_logout chap_auth portal_type discovery_session auto_snd_tgt_disable boot_target boot_nic boot_root targetalias ifacename tgt_reset_tmo lu_reset_tmo abort_tmo fast_abort chap_in_idx chap_out_idx password_in password username_in username tpgt erl data_seq_in_order data_pdu_in_order max_burst_len first_burst_len immediate_data max_outstanding_r2t initial_r2t targetname port address up down failed bound local_ipaddr tcp_recv_wsf tcp_xmit_wsf is_fw_assigned_ipv6 ipv6_flow_label ipv6_traffic_class ipv4_tos fragment_disable tcp_timestamp_enable tcp_timer_scale tcp_nagle_disable tcp_wsf_disable tcp_timestamp_stat max_segment_size keepalive_tmo statsn local_port recv_tmo ping_tmo persistent_address exp_statsn persistent_port ofmarker ifmarker data_digest header_digest max_xmit_dlength max_recv_dlength UNBOUND ALLOCATED SCANNED UNBINDING iscsi_connection iscsi_session iscsi_host iscsi_flashnode iscsi_flashnode_conn_dev_type link_local_ipv6 redirect_ipaddr snack_req iscsi_flashnode_sess_dev_type is_boot_target entry_enable Unconfigured Acquiring Tentative Valid Disabling Invalid Deprecated initiator_name strict_login_comp_en redirect_en cache_id tcp_timestamp_en tcp_wsf delayed_ack_en ipaddress_state mtu vlan_enabled vlan_priority vlan_id enabled router_adv_link_mtu dup_addr_detect_cnt nd_stale_tmo nd_rexmit_time nd_reachable_tmo hop_limit traffic_class flow_label mld_en grat_neighbor_adv_en router_state link_local_state link_local_autocfg ipaddr_autocfg router_addr link_local_addr ttl incoming_forwarding_en dhcp_learn_iqn_en dhcp_vendor_id dhcp_use_vendor_id_en dhcp_req_vendor_id_en dhcp_alt_client_id dhcp_alt_client_id_en grat_arp_en tos tos_en dhcp_slp_da_info_en dhcp_dns_address_en bootproto subnet gateway iscsi_iface handle iscsi_endpoint caps iscsi_transport __data_loc char[] dname msg     drivers/scsi/scsi_transport_iscsi.c     Invalid flashnode session attr  Invalid flashnode connection attr       3Could not delete all connections for %s. Error %d.
   %s: Completed SCSI target blocking
     %s Completed SCSI target blocking
      %s: Completed unblocking session
       %s Completed unblocking session
        session recovery timed out after %d secs
       %s: Completed unblocking SCSI target
   %s Completed unblocking SCSI target
    %s: flush kernel conn cleanup.
 %s flush kernel conn cleanup.
  %s: Got conn error in state %d
 %s Got conn error in state %d
  gracefully ignored conn error (%d)
     6Loading iSCSI transport class v%s.
   %s: Completed session allocation
       %s Completed session allocation
        could not register connection's dev
    could not register transport's dev
     include/linux/transport_class.h %s: Completing session release
 %s Completing session release
  %s: Completed creating transport session
       %s Completed creating transport session
        gracefully ignored conn login (%d)
     bsg interface failed to initialize - no request queue
  Cannot notify userspace of session event %u
    Cannot notify userspace of session event %u. Check iscsi daemon
        %s: Completed handling event %d rc %d
  %s Completed handling event %d rc %d
   %s: Skipping target unbinding: Session is unbound/unbinding.
   %s Skipping target unbinding: Session is unbound/unbinding.
    Could not delete all connections for session. Error %d.
        %s: Completing session removal
 %s Completing session removal
  5iscsi: registered transport (%s)
     3can not deliver iscsi offload message:OOM
    3gracefully ignored ping comp: OOM
    3gracefully ignored host event (%d):%d OOM
    Failure in Target ID Allocation
        could not register session's dev
       can not deliver control PDU: OOM
       3Could not allocate endpoint ID. Error %d.
    couldn't create a new connection.       %s: Completed creating transport conn
  %s Completed creating transport conn
   %s: Flushing cleanup during destruction
        %s Flushing cleanup during destruction
 %s: Destroying transport conn
  Could not set ep conn binding
  3ep connect failed. Could not find host no %u
 3target discovery could not find host no %u
   3set_host_param could not find host no %u
     3set path could not find host no %u
   3set_iface_params could not find host no %u
   3iscsi_ping could not find host no %u
 3%s: failed. Could not find host no %u
        3%s could not find host no %u
 3%s could not find flashnode %u for host no %u
        3%s could not find session id %u
      3cannot deliver host stats: OOM
       3Could not allocate skb to send reply.
        4Send reply failed, error %d
                                                        iscsi_get_host_stats    iscsi_set_chap          iscsi_logout_flashnode_sid      iscsi_logout_flashnode          iscsi_login_flashnode           iscsi_del_flashnode             iscsi_new_flashnode             iscsi_set_flashnode_param       iscsi_delete_chap       iscsi_get_chap          iscsi_if_destroy_conn           iscsi_if_create_conn            iscsi_if_create_session         iscsi_session_event             iscsi_conn_error_event          iscsi_cleanup_conn_work_fn      iscsi_free_session              iscsi_stop_conn iscsi_ep_disconnect             iscsi_if_disconnect_bound_ep    iscsi_if_stop_conn              iscsi_conn_release              iscsi_remove_session            iscsi_add_session               session_recovery_timedout       __iscsi_unblock_session         __iscsi_block_session           __iscsi_unbind_session          iscsi_user_scan_session         iscsi_alloc_session             iscsi_session_release                                                                                                      @                                                                                                                                                                                                                                                                                                                                         debug_conn      debug_session iscsi alias=net-pf-16-proto-8 version=2.0-870 license=GPL description=iSCSI Transport Interface author=Mike Christie <michaelc@cs.wisc.edu>, Dmitry Yusupov <dmitry_yus@yahoo.com>, Alex Aizman <itn780@yahoo.com> parm=debug_conn:Turn on debugging for connections in scsi_transport_iscsi module. Set to 1 to turn on, and zero to turn off. Default is off. parmtype=debug_conn:int parm=debug_session:Turn on debugging for sessions in scsi_transport_iscsi module. Set to 1 to turn on, and zero to turn off. Default is off. parmtype=debug_session:int srcversion=50A1E1CA12D17259074C607 depends=scsi_mod retpoline=Y intree=Y name=scsi_transport_iscsi vermagic=6.1.0-37-amd64 SMP preempt mod_unload modversions                                                                               iscsi_dbg_trans_conn            iscsi_dbg_trans_session         iscsi_dbg_sw_tcp        iscsi_dbg_tcp   iscsi_dbg_eh            iscsi_dbg_session       iscsi_dbg_conn                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (  H  (                 H                                           (    (                                                                                                                                                                                                                                                                                                                                                              (  0  (                   0                         (  0  (                   0                                                                                                                                                                                                                                                                                                                                                                  (        (                                                                                                                                                                                                                                                                                                            (          (                                                                                                                                             (  0  (                   0  (                                        (  0  (                 0  (                                                                      (                 (                 (  0  (                                      (  8  (                 8  (                                                  (  0  (                   0            (        (                                   (                 (                                 (                                                                                                                                                                                                                                                                       (               (                                                                                                                       (                 (                                      (  H  (                 H                                                                                 (  0  (                   0                         (  0  (                   0  (                   0                                                                             (  0  (                   0      0                         (    0  8  @  8  0  (                                            (    0  8  H  8  0  (                                            (    0  8  @  8  0  (                                            (  0  (                   0                                               (  0  (                   0                         (  0  (                   0                         (    0  8  0  (                     8                   (  0  (                   0                         (    0  8  0  (                     8                       (                 (                         (    0  8    8  0  (                                                                                                                                     (                 (                       (                    0  0                  (  0  8  (                 0  (         (  (                 H  0       @  H  8  0  (                     @  8  0  (                     0                            H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           m    __fentry__                                              pHe    __x86_indirect_thunk_rax                                9[    __x86_return_thunk                                      f    __x86_indirect_thunk_rcx                                4    _raw_spin_lock_irqsave                                  p\    _raw_spin_unlock_irqrestore                             $3)    __x86_indirect_thunk_rsi                                SMu    strlen                                                  S     vsnprintf                                               V
    __stack_chk_fail                                        VS    this_cpu_off                                             _    perf_trace_buf_alloc                                        strcpy                                                  `"    perf_trace_run_bpf_submit                               X    trace_event_buffer_reserve                              &[	    trace_event_buffer_commit                               D&uN    __trace_trigger_soft_disabled                           |'*    trace_raw_output_prep                                   ̖9    trace_event_printf                                      (s    trace_handle_return                                     GV    __warn_printk                                           ɺ    bpf_trace_run2                                          KM    mutex_lock                                              82    mutex_unlock                                            z    kfree                                                   [ev    idr_remove                                              M    put_device                                              Sx    device_unregister                                       a    sysfs_emit                                              >    sysfs_remove_group                                           idr_find                                                	    get_device                                              Ϲ    device_find_child                                       =    device_for_each_child                                   ~    _printk                                                 V7    system_state                                                msleep                                                  -    cancel_work_sync                                        6    queue_work_on                                           ĕ,/    flush_work                                              J    cancel_delayed_work_sync                                    capable                                                 )      simple_strtoul                                              scsi_target_block                                       m    queue_delayed_work_on                                   Y    _dev_printk                                             F    scsi_target_unblock                                     {'    _raw_spin_lock_irq                                      SuK    _raw_spin_unlock_irq                                    5    __alloc_skb                                             6<    __nlmsg_put                                             P"7    netlink_broadcast                                           destroy_workqueue                                       -
    netlink_kernel_release                                  Fx    bus_unregister                                          Sb    transport_class_unregister                              ZG    class_unregister                                        b
8    __class_register                                        c,    transport_class_register                                Kb\    bus_register                                            9    init_net                                                    __netlink_kernel_create                                 %I    alloc_workqueue                                         *z    cpu_number                                              q"ZZ    __cpu_online_mask                                       L3)F    __preempt_count                                         rh    __SCT__preempt_schedule_notrace                         ߹_    scsi_is_host_device                                         scsi_scan_target                                        E:#    __kmalloc                                               j    delayed_work_timer_fn                                   9c    init_timer_key                                          B,    scsi_host_get                                           /*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/x509v3.h.in
 *
 * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509V3_H
# define OPENSSL_X509V3_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509V3_H
# endif

# include <openssl/bio.h>
# include <openssl/x509.h>
# include <openssl/conf.h>
# include <openssl/x509v3err.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward reference */
struct v3_ext_method;
struct v3_ext_ctx;

/* Useful typedefs */

typedef void *(*X509V3_EXT_NEW)(void);
typedef void (*X509V3_EXT_FREE) (void *);
typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long);
typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **);
typedef STACK_OF(CONF_VALUE) *
    (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext,
                       STACK_OF(CONF_VALUE) *extlist);
typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx,
                                STACK_OF(CONF_VALUE) *values);
typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method,
                                void *ext);
typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx, const char *str);
typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext,
                               BIO *out, int indent);
typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx, const char *str);

/* V3 extension structure */

struct v3_ext_method {
    int ext_nid;
    int ext_flags;
/* If this is set the following four fields are ignored */
    ASN1_ITEM_EXP *it;
/* Old style ASN1 calls */
    X509V3_EXT_NEW ext_new;
    X509V3_EXT_FREE ext_free;
    X509V3_EXT_D2I d2i;
    X509V3_EXT_I2D i2d;
/* The following pair is used for string extensions */
    X509V3_EXT_I2S i2s;
    X509V3_EXT_S2I s2i;
/* The following pair is used for multi-valued extensions */
    X509V3_EXT_I2V i2v;
    X509V3_EXT_V2I v2i;
/* The following are used for raw extensions */
    X509V3_EXT_I2R i2r;
    X509V3_EXT_R2I r2i;
    void *usr_data;             /* Any extension specific data */
};

typedef struct X509V3_CONF_METHOD_st {
    char *(*get_string) (void *db, const char *section, const char *value);
    STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section);
    void (*free_string) (void *db, char *string);
    void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section);
} X509V3_CONF_METHOD;

/* Context specific info for producing X509 v3 extensions*/
struct v3_ext_ctx {
# define X509V3_CTX_TEST 0x1
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define CTX_TEST X509V3_CTX_TEST
# endif
# define X509V3_CTX_REPLACE 0x2
    int flags;
    X509 *issuer_cert;
    X509 *subject_cert;
    X509_REQ *subject_req;
    X509_CRL *crl;
    X509V3_CONF_METHOD *db_meth;
    void *db;
    EVP_PKEY *issuer_pkey;
/* Maybe more here */
};

typedef struct v3_ext_method X509V3_EXT_METHOD;

SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_METHOD)
#define sk_X509V3_EXT_METHOD_num(sk) OPENSSL_sk_num(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_value(sk, idx) ((X509V3_EXT_METHOD *)OPENSSL_sk_value(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), (idx)))
#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp)))
#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_null())
#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n)))
#define sk_X509V3_EXT_METHOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (n))
#define sk_X509V3_EXT_METHOD_free(sk) OPENSSL_sk_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_zero(sk) OPENSSL_sk_zero(ossl_check_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_delete(sk, i) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (i)))
#define sk_X509V3_EXT_METHOD_delete_ptr(sk, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete_ptr(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)))
#define sk_X509V3_EXT_METHOD_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))
#define sk_X509V3_EXT_METHOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))
#define sk_X509V3_EXT_METHOD_pop(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_pop(ossl_check_X509V3_EXT_METHOD_sk_type(sk)))
#define sk_X509V3_EXT_METHOD_shift(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_shift(ossl_check_X509V3_EXT_METHOD_sk_type(sk)))
#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk),ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc))
#define sk_X509V3_EXT_METHOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), (idx))
#define sk_X509V3_EXT_METHOD_set(sk, idx, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_set(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (idx), ossl_check_X509V3_EXT_METHOD_type(ptr)))
#define sk_X509V3_EXT_METHOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))
#define sk_X509V3_EXT_METHOD_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))
#define sk_X509V3_EXT_METHOD_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), pnum)
#define sk_X509V3_EXT_METHOD_sort(sk) OPENSSL_sk_sort(ossl_check_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_dup(sk) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_dup(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)))
#define sk_X509V3_EXT_METHOD_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_deep_copy(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_copyfunc_type(copyfunc), ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)))
#define sk_X509V3_EXT_METHOD_set_cmp_func(sk, cmp) ((sk_X509V3_EXT_METHOD_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp)))


/* ext_flags values */
# define X509V3_EXT_DYNAMIC      0x1
# define X509V3_EXT_CTX_DEP      0x2
# define X509V3_EXT_MULTILINE    0x4

typedef BIT_STRING_BITNAME ENUMERATED_NAMES;

typedef struct BASIC_CONSTRAINTS_st {
    int ca;
    ASN1_INTEGER *pathlen;
} BASIC_CONSTRAINTS;

typedef struct PKEY_USAGE_PERIOD_st {
    ASN1_GENERALIZEDTIME *notBefore;
    ASN1_GENERALIZEDTIME *notAfter;
} PKEY_USAGE_PERIOD;

typedef struct otherName_st {
    ASN1_OBJECT *type_id;
    ASN1_TYPE *value;
} OTHERNAME;

typedef struct EDIPartyName_st {
    ASN1_STRING *nameAssigner;
    ASN1_STRING *partyName;
} EDIPARTYNAME;

typedef struct GENERAL_NAME_st {
# define GEN_OTHERNAME   0
# define GEN_EMAIL       1
# define GEN_DNS         2
# define GEN_X400        3
# define GEN_DIRNAME     4
# define GEN_EDIPARTY    5
# define GEN_URI         6
# define GEN_IPADD       7
# define GEN_RID         8
    int type;
    union {
        char *ptr;
        OTHERNAME *otherName;   /* otherName */
        ASN1_IA5STRING *rfc822Name;
        ASN1_IA5STRING *dNSName;
        ASN1_STRING *x400Address;
        X509_NAME *directoryName;
        EDIPARTYNAME *ediPartyName;
        ASN1_IA5STRING *uniformResourceIdentifier;
        ASN1_OCTET_STRING *iPAddress;
        ASN1_OBJECT *registeredID;
        /* Old names */
        ASN1_OCTET_STRING *ip;  /* iPAddress */
        X509_NAME *dirn;        /* dirn */
        ASN1_IA5STRING *ia5;    /* rfc822Name, dNSName,
                                 * uniformResourceIdentifier */
        ASN1_OBJECT *rid;       /* registeredID */
        ASN1_TYPE *other;       /* x400Address */
    } d;
} GENERAL_NAME;

typedef struct ACCESS_DESCRIPTION_st {
    ASN1_OBJECT *method;
    GENERAL_NAME *location;
} ACCESS_DESCRIPTION;

SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESCRIPTION)
#define sk_ACCESS_DESCRIPTION_num(sk) OPENSSL_sk_num(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_value(sk, idx) ((ACCESS_DESCRIPTION *)OPENSSL_sk_value(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), (idx)))
#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp)))
#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_null())
#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n)))
#define sk_ACCESS_DESCRIPTION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (n))
#define sk_ACCESS_DESCRIPTION_free(sk) OPENSSL_sk_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_zero(sk) OPENSSL_sk_zero(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_delete(sk, i) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (i)))
#define sk_ACCESS_DESCRIPTION_delete_ptr(sk, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete_ptr(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)))
#define sk_ACCESS_DESCRIPTION_push(sk, ptr) OPENSSL_sk_push(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))
#define sk_ACCESS_DESCRIPTION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))
#define sk_ACCESS_DESCRIPTION_pop(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_pop(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)))
#define sk_ACCESS_DESCRIPTION_shift(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_shift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)))
#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk),ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc))
#define sk_ACCESS_DESCRIPTION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), (idx))
#define sk_ACCESS_DESCRIPTION_set(sk, idx, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_set(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (idx), ossl_check_ACCESS_DESCRIPTION_type(ptr)))
#define sk_ACCESS_DESCRIPTION_find(sk, ptr) OPENSSL_sk_find(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))
#define sk_ACCESS_DESCRIPTION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))
#define sk_ACCESS_DESCRIPTION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), pnum)
#define sk_ACCESS_DESCRIPTION_sort(sk) OPENSSL_sk_sort(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_dup(sk) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_dup(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)))
#define sk_ACCESS_DESCRIPTION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_deep_copy(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_copyfunc_type(copyfunc), ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)))
#define sk_ACCESS_DESCRIPTION_set_cmp_func(sk, cmp) ((sk_ACCESS_DESCRIPTION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME)
#define sk_GENERAL_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_value(sk, idx) ((GENERAL_NAME *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAME_sk_type(sk), (idx)))
#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp)))
#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_null())
#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n)))
#define sk_GENERAL_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAME_sk_type(sk), (n))
#define sk_GENERAL_NAME_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_delete(sk, i) ((GENERAL_NAME *)OPENSSL_sk_delete(ossl_check_GENERAL_NAME_sk_type(sk), (i)))
#define sk_GENERAL_NAME_delete_ptr(sk, ptr) ((GENERAL_NAME *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)))
#define sk_GENERAL_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))
#define sk_GENERAL_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))
#define sk_GENERAL_NAME_pop(sk) ((GENERAL_NAME *)OPENSSL_sk_pop(ossl_check_GENERAL_NAME_sk_type(sk)))
#define sk_GENERAL_NAME_shift(sk) ((GENERAL_NAME *)OPENSSL_sk_shift(ossl_check_GENERAL_NAME_sk_type(sk)))
#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk),ossl_check_GENERAL_NAME_freefunc_type(freefunc))
#define sk_GENERAL_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), (idx))
#define sk_GENERAL_NAME_set(sk, idx, ptr) ((GENERAL_NAME *)OPENSSL_sk_set(ossl_check_GENERAL_NAME_sk_type(sk), (idx), ossl_check_GENERAL_NAME_type(ptr)))
#define sk_GENERAL_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))
#define sk_GENERAL_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))
#define sk_GENERAL_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), pnum)
#define sk_GENERAL_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_dup(sk) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAME_sk_type(sk)))
#define sk_GENERAL_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_copyfunc_type(copyfunc), ossl_check_GENERAL_NAME_freefunc_type(freefunc)))
#define sk_GENERAL_NAME_set_cmp_func(sk, cmp) ((sk_GENERAL_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_compfunc_type(cmp)))


typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;
typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE;
typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;

SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES)
#define sk_GENERAL_NAMES_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_value(sk, idx) ((GENERAL_NAMES *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAMES_sk_type(sk), (idx)))
#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp)))
#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_null())
#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n)))
#define sk_GENERAL_NAMES_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAMES_sk_type(sk), (n))
#define sk_GENERAL_NAMES_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_delete(sk, i) ((GENERAL_NAMES *)OPENSSL_sk_delete(ossl_check_GENERAL_NAMES_sk_type(sk), (i)))
#define sk_GENERAL_NAMES_delete_ptr(sk, ptr) ((GENERAL_NAMES *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)))
#define sk_GENERAL_NAMES_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))
#define sk_GENERAL_NAMES_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))
#define sk_GENERAL_NAMES_pop(sk) ((GENERAL_NAMES *)OPENSSL_sk_pop(ossl_check_GENERAL_NAMES_sk_type(sk)))
#define sk_GENERAL_NAMES_shift(sk) ((GENERAL_NAMES *)OPENSSL_sk_shift(ossl_check_GENERAL_NAMES_sk_type(sk)))
#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk),ossl_check_GENERAL_NAMES_freefunc_type(freefunc))
#define sk_GENERAL_NAMES_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), (idx))
#define sk_GENERAL_NAMES_set(sk, idx, ptr) ((GENERAL_NAMES *)OPENSSL_sk_set(ossl_check_GENERAL_NAMES_sk_type(sk), (idx), ossl_check_GENERAL_NAMES_type(ptr)))
#define sk_GENERAL_NAMES_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))
#define sk_GENERAL_NAMES_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))
#define sk_GENERAL_NAMES_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), pnum)
#define sk_GENERAL_NAMES_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_dup(sk) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAMES_sk_type(sk)))
#define sk_GENERAL_NAMES_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_copyfunc_type(copyfunc), ossl_check_GENERAL_NAMES_freefunc_type(freefunc)))
#define sk_GENERAL_NAMES_set_cmp_func(sk, cmp) ((sk_GENERAL_NAMES_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_compfunc_type(cmp)))


typedef struct DIST_POINT_NAME_st {
    int type;
    union {
        GENERAL_NAMES *fullname;
        STACK_OF(X509_NAME_ENTRY) *relativename;
    } name;
/* If relativename then this contains the full distribution point name */
    X509_NAME *dpname;
} DIST_POINT_NAME;
/* All existing reasons */
# define CRLDP_ALL_REASONS       0x807f

# define CRL_REASON_NONE                         -1
# define CRL_REASON_UNSPECIFIED                  0
# define CRL_REASON_KEY_COMPROMISE               1
# define CRL_REASON_CA_COMPROMISE                2
# define CRL_REASON_AFFILIATION_CHANGED          3
# define CRL_REASON_SUPERSEDED                   4
# define CRL_REASON_CESSATION_OF_OPERATION       5
# define CRL_REASON_CERTIFICATE_HOLD             6
# define CRL_REASON_REMOVE_FROM_CRL              8
# define CRL_REASON_PRIVILEGE_WITHDRAWN          9
# define CRL_REASON_AA_COMPROMISE                10

struct DIST_POINT_st {
    DIST_POINT_NAME *distpoint;
    ASN1_BIT_STRING *reasons;
    GENERAL_NAMES *CRLissuer;
    int dp_reasons;
};

SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT)
#define sk_DIST_POINT_num(sk) OPENSSL_sk_num(ossl_check_const_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_value(sk, idx) ((DIST_POINT *)OPENSSL_sk_value(ossl_check_const_DIST_POINT_sk_type(sk), (idx)))
#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp)))
#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_null())
#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n)))
#define sk_DIST_POINT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_DIST_POINT_sk_type(sk), (n))
#define sk_DIST_POINT_free(sk) OPENSSL_sk_free(ossl_check_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_zero(sk) OPENSSL_sk_zero(ossl_check_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_delete(sk, i) ((DIST_POINT *)OPENSSL_sk_delete(ossl_check_DIST_POINT_sk_type(sk), (i)))
#define sk_DIST_POINT_delete_ptr(sk, ptr) ((DIST_POINT *)OPENSSL_sk_delete_ptr(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)))
#define sk_DIST_POINT_push(sk, ptr) OPENSSL_sk_push(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))
#define sk_DIST_POINT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))
#define sk_DIST_POINT_pop(sk) ((DIST_POINT *)OPENSSL_sk_pop(ossl_check_DIST_POINT_sk_type(sk)))
#define sk_DIST_POINT_shift(sk) ((DIST_POINT *)OPENSSL_sk_shift(ossl_check_DIST_POINT_sk_type(sk)))
#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk),ossl_check_DIST_POINT_freefunc_type(freefunc))
#define sk_DIST_POINT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), (idx))
#define sk_DIST_POINT_set(sk, idx, ptr) ((DIST_POINT *)OPENSSL_sk_set(ossl_check_DIST_POINT_sk_type(sk), (idx), ossl_check_DIST_POINT_type(ptr)))
#define sk_DIST_POINT_find(sk, ptr) OPENSSL_sk_find(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))
#define sk_DIST_POINT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))
#define sk_DIST_POINT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), pnum)
#define sk_DIST_POINT_sort(sk) OPENSSL_sk_sort(ossl_check_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_dup(sk) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_dup(ossl_check_const_DIST_POINT_sk_type(sk)))
#define sk_DIST_POINT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_deep_copy(ossl_check_const_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_copyfunc_type(copyfunc), ossl_check_DIST_POINT_freefunc_type(freefunc)))
#define sk_DIST_POINT_set_cmp_func(sk, cmp) ((sk_DIST_POINT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_compfunc_type(cmp)))


typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;

struct AUTHORITY_KEYID_st {
    ASN1_OCTET_STRING *keyid;
    GENERAL_NAMES *issuer;
    ASN1_INTEGER *serial;
};

/* Strong extranet structures */

typedef struct SXNET_ID_st {
    ASN1_INTEGER *zone;
    ASN1_OCTET_STRING *user;
} SXNETID;

SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID)
#define sk_SXNETID_num(sk) OPENSSL_sk_num(ossl_check_const_SXNETID_sk_type(sk))
#define sk_SXNETID_value(sk, idx) ((SXNETID *)OPENSSL_sk_value(ossl_check_const_SXNETID_sk_type(sk), (idx)))
#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp)))
#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_new_null())
#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n)))
#define sk_SXNETID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SXNETID_sk_type(sk), (n))
#define sk_SXNETID_free(sk) OPENSSL_sk_free(ossl_check_SXNETID_sk_type(sk))
#define sk_SXNETID_zero(sk) OPENSSL_sk_zero(ossl_check_SXNETID_sk_type(sk))
#define sk_SXNETID_delete(sk, i) ((SXNETID *)OPENSSL_sk_delete(ossl_check_SXNETID_sk_type(sk), (i)))
#define sk_SXNETID_delete_ptr(sk, ptr) ((SXNETID *)OPENSSL_sk_delete_ptr(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)))
#define sk_SXNETID_push(sk, ptr) OPENSSL_sk_push(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))
#define sk_SXNETID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))
#define sk_SXNETID_pop(sk) ((SXNETID *)OPENSSL_sk_pop(ossl_check_SXNETID_sk_type(sk)))
#define sk_SXNETID_shift(sk) ((SXNETID *)OPENSSL_sk_shift(ossl_check_SXNETID_sk_type(sk)))
#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk),ossl_check_SXNETID_freefunc_type(freefunc))
#define sk_SXNETID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), (idx))
#define sk_SXNETID_set(sk, idx, ptr) ((SXNETID *)OPENSSL_sk_set(ossl_check_SXNETID_sk_type(sk), (idx), ossl_check_SXNETID_type(ptr)))
#define sk_SXNETID_find(sk, ptr) OPENSSL_sk_find(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))
#define sk_SXNETID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))
#define sk_SXNETID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), pnum)
#define sk_SXNETID_sort(sk) OPENSSL_sk_sort(ossl_check_SXNETID_sk_type(sk))
#define sk_SXNETID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SXNETID_sk_type(sk))
#define sk_SXNETID_dup(sk) ((STACK_OF(SXNETID) *)OPENSSL_sk_dup(ossl_check_const_SXNETID_sk_type(sk)))
#define sk_SXNETID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SXNETID) *)OPENSSL_sk_deep_copy(ossl_check_const_SXNETID_sk_type(sk), ossl_check_SXNETID_copyfunc_type(copyfunc), ossl_check_SXNETID_freefunc_type(freefunc)))
#define sk_SXNETID_set_cmp_func(sk, cmp) ((sk_SXNETID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_compfunc_type(cmp)))



typedef struct SXNET_st {
    ASN1_INTEGER *version;
    STACK_OF(SXNETID) *ids;
} SXNET;

typedef struct ISSUER_SIGN_TOOL_st {
    ASN1_UTF8STRING *signTool;
    ASN1_UTF8STRING *cATool;
    ASN1_UTF8STRING *signToolCert;
    ASN1_UTF8STRING *cAToolCert;
} ISSUER_SIGN_TOOL;

typedef struct NOTICEREF_st {
    ASN1_STRING *organization;
    STACK_OF(ASN1_INTEGER) *noticenos;
} NOTICEREF;

typedef struct USERNOTICE_st {
    NOTICEREF *noticeref;
    ASN1_STRING *exptext;
} USERNOTICE;

typedef struct POLICYQUALINFO_st {
    ASN1_OBJECT *pqualid;
    union {
        ASN1_IA5STRING *cpsuri;
        USERNOTICE *usernotice;
        ASN1_TYPE *other;
    } d;
} POLICYQUALINFO;

SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO)
#define sk_POLICYQUALINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_value(sk, idx) ((POLICYQUALINFO *)OPENSSL_sk_value(ossl_check_const_POLICYQUALINFO_sk_type(sk), (idx)))
#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp)))
#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_null())
#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n)))
#define sk_POLICYQUALINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYQUALINFO_sk_type(sk), (n))
#define sk_POLICYQUALINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_delete(sk, i) ((POLICYQUALINFO *)OPENSSL_sk_delete(ossl_check_POLICYQUALINFO_sk_type(sk), (i)))
#define sk_POLICYQUALINFO_delete_ptr(sk, ptr) ((POLICYQUALINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)))
#define sk_POLICYQUALINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))
#define sk_POLICYQUALINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))
#define sk_POLICYQUALINFO_pop(sk) ((POLICYQUALINFO *)OPENSSL_sk_pop(ossl_check_POLICYQUALINFO_sk_type(sk)))
#define sk_POLICYQUALINFO_shift(sk) ((POLICYQUALINFO *)OPENSSL_sk_shift(ossl_check_POLICYQUALINFO_sk_type(sk)))
#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk),ossl_check_POLICYQUALINFO_freefunc_type(freefunc))
#define sk_POLICYQUALINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), (idx))
#define sk_POLICYQUALINFO_set(sk, idx, ptr) ((POLICYQUALINFO *)OPENSSL_sk_set(ossl_check_POLICYQUALINFO_sk_type(sk), (idx), ossl_check_POLICYQUALINFO_type(ptr)))
#define sk_POLICYQUALINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))
#define sk_POLICYQUALINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))
#define sk_POLICYQUALINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), pnum)
#define sk_POLICYQUALINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_dup(sk) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYQUALINFO_sk_type(sk)))
#define sk_POLICYQUALINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_copyfunc_type(copyfunc), ossl_check_POLICYQUALINFO_freefunc_type(freefunc)))
#define sk_POLICYQUALINFO_set_cmp_func(sk, cmp) ((sk_POLICYQUALINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_compfunc_type(cmp)))



typedef struct POLICYINFO_st {
    ASN1_OBJECT *policyid;
    STACK_OF(POLICYQUALINFO) *qualifiers;
} POLICYINFO;

SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO)
#define sk_POLICYINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_value(sk, idx) ((POLICYINFO *)OPENSSL_sk_value(ossl_check_const_POLICYINFO_sk_type(sk), (idx)))
#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp)))
#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_null())
#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n)))
#define sk_POLICYINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYINFO_sk_type(sk), (n))
#define sk_POLICYINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_delete(sk, i) ((POLICYINFO *)OPENSSL_sk_delete(ossl_check_POLICYINFO_sk_type(sk), (i)))
#define sk_POLICYINFO_delete_ptr(sk, ptr) ((POLICYINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)))
#define sk_POLICYINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))
#define sk_POLICYINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))
#define sk_POLICYINFO_pop(sk) ((POLICYINFO *)OPENSSL_sk_pop(ossl_check_POLICYINFO_sk_type(sk)))
#define sk_POLICYINFO_shift(sk) ((POLICYINFO *)OPENSSL_sk_shift(ossl_check_POLICYINFO_sk_type(sk)))
#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk),ossl_check_POLICYINFO_freefunc_type(freefunc))
#define sk_POLICYINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), (idx))
#define sk_POLICYINFO_set(sk, idx, ptr) ((POLICYINFO *)OPENSSL_sk_set(ossl_check_POLICYINFO_sk_type(sk), (idx), ossl_check_POLICYINFO_type(ptr)))
#define sk_POLICYINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))
#define sk_POLICYINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))
#define sk_POLICYINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), pnum)
#define sk_POLICYINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_dup(sk) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYINFO_sk_type(sk)))
#define sk_POLICYINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_copyfunc_type(copyfunc), ossl_check_POLICYINFO_freefunc_type(freefunc)))
#define sk_POLICYINFO_set_cmp_func(sk, cmp) ((sk_POLICYINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_compfunc_type(cmp)))


typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;

typedef struct POLICY_MAPPING_st {
    ASN1_OBJECT *issuerDomainPolicy;
    ASN1_OBJECT *subjectDomainPolicy;
} POLICY_MAPPING;

SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING)
#define sk_POLICY_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_value(sk, idx) ((POLICY_MAPPING *)OPENSSL_sk_value(ossl_check_const_POLICY_MAPPING_sk_type(sk), (idx)))
#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp)))
#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_null())
#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n)))
#define sk_POLICY_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICY_MAPPING_sk_type(sk), (n))
#define sk_POLICY_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_delete(sk, i) ((POLICY_MAPPING *)OPENSSL_sk_delete(ossl_check_POLICY_MAPPING_sk_type(sk), (i)))
#define sk_POLICY_MAPPING_delete_ptr(sk, ptr) ((POLICY_MAPPING *)OPENSSL_sk_delete_ptr(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)))
#define sk_POLICY_MAPPING_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))
#define sk_POLICY_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))
#define sk_POLICY_MAPPING_pop(sk) ((POLICY_MAPPING *)OPENSSL_sk_pop(ossl_check_POLICY_MAPPING_sk_type(sk)))
#define sk_POLICY_MAPPING_shift(sk) ((POLICY_MAPPING *)OPENSSL_sk_shift(ossl_check_POLICY_MAPPING_sk_type(sk)))
#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk),ossl_check_POLICY_MAPPING_freefunc_type(freefunc))
#define sk_POLICY_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), (idx))
#define sk_POLICY_MAPPING_set(sk, idx, ptr) ((POLICY_MAPPING *)OPENSSL_sk_set(ossl_check_POLICY_MAPPING_sk_type(sk), (idx), ossl_check_POLICY_MAPPING_type(ptr)))
#define sk_POLICY_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))
#define sk_POLICY_MAPPING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))
#define sk_POLICY_MAPPING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), pnum)
#define sk_POLICY_MAPPING_sort(sk) OPENSSL_sk_sort(ossl_check_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_dup(sk) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_dup(ossl_check_const_POLICY_MAPPING_sk_type(sk)))
#define sk_POLICY_MAPPING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_copyfunc_type(copyfunc), ossl_check_POLICY_MAPPING_freefunc_type(freefunc)))
#define sk_POLICY_MAPPING_set_cmp_func(sk, cmp) ((sk_POLICY_MAPPING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_compfunc_type(cmp)))


typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;

typedef struct GENERAL_SUBTREE_st {
    GENERAL_NAME *base;
    ASN1_INTEGER *minimum;
    ASN1_INTEGER *maximum;
} GENERAL_SUBTREE;

SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE)
#define sk_GENERAL_SUBTREE_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_value(sk, idx) ((GENERAL_SUBTREE *)OPENSSL_sk_value(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), (idx)))
#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp)))
#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_null())
#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n)))
#define sk_GENERAL_SUBTREE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_SUBTREE_sk_type(sk), (n))
#define sk_GENERAL_SUBTREE_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_delete(sk, i) ((GENERAL_SUBTREE *)OPENSSL_sk_delete(ossl_check_GENERAL_SUBTREE_sk_type(sk), (i)))
#define sk_GENERAL_SUBTREE_delete_ptr(sk, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)))
#define sk_GENERAL_SUBTREE_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))
#define sk_GENERAL_SUBTREE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))
#define sk_GENERAL_SUBTREE_pop(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_pop(ossl_check_GENERAL_SUBTREE_sk_type(sk)))
#define sk_GENERAL_SUBTREE_shift(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_shift(ossl_check_GENERAL_SUBTREE_sk_type(sk)))
#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk),ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc))
#define sk_GENERAL_SUBTREE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), (idx))
#define sk_GENERAL_SUBTREE_set(sk, idx, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_set(ossl_check_GENERAL_SUBTREE_sk_type(sk), (idx), ossl_check_GENERAL_SUBTREE_type(ptr)))
#define sk_GENERAL_SUBTREE_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))
#define sk_GENERAL_SUBTREE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))
#define sk_GENERAL_SUBTREE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), pnum)
#define sk_GENERAL_SUBTREE_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_dup(sk) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)))
#define sk_GENERAL_SUBTREE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_copyfunc_type(copyfunc), ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)))
#define sk_GENERAL_SUBTREE_set_cmp_func(sk, cmp) ((sk_GENERAL_SUBTREE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_compfunc_type(cmp)))


struct NAME_CONSTRAINTS_st {
    STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
    STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
};

typedef struct POLICY_CONSTRAINTS_st {
    ASN1_INTEGER *requireExplicitPolicy;
    ASN1_INTEGER *inhibitPolicyMapping;
} POLICY_CONSTRAINTS;

/* Proxy certificate structures, see RFC 3820 */
typedef struct PROXY_POLICY_st {
    ASN1_OBJECT *policyLanguage;
    ASN1_OCTET_STRING *policy;
} PROXY_POLICY;

typedef struct PROXY_CERT_INFO_EXTENSION_st {
    ASN1_INTEGER *pcPathLengthConstraint;
    PROXY_POLICY *proxyPolicy;
} PROXY_CERT_INFO_EXTENSION;

DECLARE_ASN1_FUNCTIONS(PROXY_POLICY)
DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION)

struct ISSUING_DIST_POINT_st {
    DIST_POINT_NAME *distpoint;
    int onlyuser;
    int onlyCA;
    ASN1_BIT_STRING *onlysomereasons;
    int indirectCRL;
    int onlyattr;
};

/* Values in idp_flags field */
/* IDP present */
# define IDP_PRESENT     0x1
/* IDP values inconsistent */
# define IDP_INVALID     0x2
/* onlyuser true */
# define IDP_ONLYUSER    0x4
/* onlyCA true */
# define IDP_ONLYCA      0x8
/* onlyattr true */
# define IDP_ONLYATTR    0x10
/* indirectCRL true */
# define IDP_INDIRECT    0x20
/* onlysomereasons present */
# define IDP_REASONS     0x40

# define X509V3_conf_err(val) ERR_add_error_data(6, \
                        "section:", (val)->section, \
                        ",name:", (val)->name, ",value:", (val)->value)

# define X509V3_set_ctx_test(ctx) \
    X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST)
# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;

# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \
                        0,0,0,0, \
                        0,0, \
                        (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
                        (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
                        NULL, NULL, \
                        table}

# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
                        0,0,0,0, \
                        (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
                        (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
                        0,0,0,0, \
                        NULL}

#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \
                        0,0,0,0, \
                        (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \
                        (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \
                        0,0,0,0, \
                        NULL}

# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

/* X509_PURPOSE stuff */

# define EXFLAG_BCONS            0x1
# define EXFLAG_KUSAGE           0x2
# define EXFLAG_XKUSAGE          0x4
# define EXFLAG_NSCERT           0x8

# define EXFLAG_CA               0x10
# define EXFLAG_SI               0x20 /* self-issued, maybe not self-signed */
# define EXFLAG_V1               0x40
# define EXFLAG_INVALID          0x80
/* EXFLAG_SET is set to indicate that some values have been precomputed */
# define EXFLAG_SET              0x100
# define EXFLAG_CRITICAL         0x200
# define EXFLAG_PROXY            0x400

# define EXFLAG_INVALID_POLICY   0x800
# define EXFLAG_FRESHEST         0x1000
# define EXFLAG_SS               0x2000 /* cert is apparently self-signed */

# define EXFLAG_BCONS_CRITICAL   0x10000
# define EXFLAG_AKID_CRITICAL    0x20000
# define EXFLAG_SKID_CRITICAL    0x40000
# define EXFLAG_SAN_CRITICAL     0x80000
# define EXFLAG_NO_FINGERPRINT   0x100000

# define KU_DIGITAL_SIGNATURE    0x0080
# define KU_NON_REPUDIATION      0x0040
# define KU_KEY_ENCIPHERMENT     0x0020
# define KU_DATA_ENCIPHERMENT    0x0010
# define KU_KEY_AGREEMENT        0x0008
# define KU_KEY_CERT_SIGN        0x0004
# define KU_CRL_SIGN             0x0002
# define KU_ENCIPHER_ONLY        0x0001
# define KU_DECIPHER_ONLY        0x8000

# define NS_SSL_CLIENT           0x80
# define NS_SSL_SERVER           0x40
# define NS_SMIME                0x20
# define NS_OBJSIGN              0x10
# define NS_SSL_CA               0x04
# define NS_SMIME_CA             0x02
# define NS_OBJSIGN_CA           0x01
# define NS_ANY_CA               (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)

# define XKU_SSL_SERVER          0x1
# define XKU_SSL_CLIENT          0x2
# define XKU_SMIME               0x4
# define XKU_CODE_SIGN           0x8
# define XKU_SGC                 0x10 /* Netscape or MS Server-Gated Crypto */
# define XKU_OCSP_SIGN           0x20
# define XKU_TIMESTAMP           0x40
# define XKU_DVCS                0x80
# define XKU_ANYEKU              0x100

# define X509_PURPOSE_DYNAMIC    0x1
# define X509_PURPOSE_DYNAMIC_NAME       0x2

typedef struct x509_purpose_st {
    int purpose;
    int trust;                  /* Default trust ID */
    int flags;
    int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int);
    char *name;
    char *sname;
    void *usr_data;
} X509_PURPOSE;

SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE)
#define sk_X509_PURPOSE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_value(sk, idx) ((X509_PURPOSE *)OPENSSL_sk_value(ossl_check_const_X509_PURPOSE_sk_type(sk), (idx)))
#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp)))
#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_null())
#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n)))
#define sk_X509_PURPOSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_PURPOSE_sk_type(sk), (n))
#define sk_X509_PURPOSE_free(sk) OPENSSL_sk_free(ossl_check_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_delete(sk, i) ((X509_PURPOSE *)OPENSSL_sk_delete(ossl_check_X509_PURPOSE_sk_type(sk), (i)))
#define sk_X509_PURPOSE_delete_ptr(sk, ptr) ((X509_PURPOSE *)OPENSSL_sk_delete_ptr(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)))
#define sk_X509_PURPOSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))
#define sk_X509_PURPOSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))
#define sk_X509_PURPOSE_pop(sk) ((X509_PURPOSE *)OPENSSL_sk_pop(ossl_check_X509_PURPOSE_sk_type(sk)))
#define sk_X509_PURPOSE_shift(sk) ((X509_PURPOSE *)OPENSSL_sk_shift(ossl_check_X509_PURPOSE_sk_type(sk)))
#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk),ossl_check_X509_PURPOSE_freefunc_type(freefunc))
#define sk_X509_PURPOSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), (idx))
#define sk_X509_PURPOSE_set(sk, idx, ptr) ((X509_PURPOSE *)OPENSSL_sk_set(ossl_check_X509_PURPOSE_sk_type(sk), (idx), ossl_check_X509_PURPOSE_type(ptr)))
#define sk_X509_PURPOSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))
#define sk_X509_PURPOSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))
#define sk_X509_PURPOSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), pnum)
#define sk_X509_PURPOSE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_dup(sk) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_dup(ossl_check_const_X509_PURPOSE_sk_type(sk)))
#define sk_X509_PURPOSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_copyfunc_type(copyfunc), ossl_check_X509_PURPOSE_freefunc_type(freefunc)))
#define sk_X509_PURPOSE_set_cmp_func(sk, cmp) ((sk_X509_PURPOSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_compfunc_type(cmp)))



# define X509_PURPOSE_SSL_CLIENT         1
# define X509_PURPOSE_SSL_SERVER         2
# define X509_PURPOSE_NS_SSL_SERVER      3
# define X509_PURPOSE_SMIME_SIGN         4
# define X509_PURPOSE_SMIME_ENCRYPT      5
# define X509_PURPOSE_CRL_SIGN           6
# define X509_PURPOSE_ANY                7
# define X509_PURPOSE_OCSP_HELPER        8
# define X509_PURPOSE_TIMESTAMP_SIGN     9

# define X509_PURPOSE_MIN                1
# define X509_PURPOSE_MAX                9

/* Flags for X509V3_EXT_print() */

# define X509V3_EXT_UNKNOWN_MASK         (0xfL << 16)
/* Return error for unknown extensions */
# define X509V3_EXT_DEFAULT              0
/* Print error for unknown extensions */
# define X509V3_EXT_ERROR_UNKNOWN        (1L << 16)
/* ASN1 parse unknown extensions */
# define X509V3_EXT_PARSE_UNKNOWN        (2L << 16)
/* BIO_dump unknown extensions */
# define X509V3_EXT_DUMP_UNKNOWN         (3L << 16)

/* Flags for X509V3_add1_i2d */

# define X509V3_ADD_OP_MASK              0xfL
# define X509V3_ADD_DEFAULT              0L
# define X509V3_ADD_APPEND               1L
# define X509V3_ADD_REPLACE              2L
# define X509V3_ADD_REPLACE_EXISTING     3L
# define X509V3_ADD_KEEP_EXISTING        4L
# define X509V3_ADD_DELETE               5L
# define X509V3_ADD_SILENT               0x10

DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)

DECLARE_ASN1_FUNCTIONS(SXNET)
DECLARE_ASN1_FUNCTIONS(SXNETID)

DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL)

int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen);
int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user,
                       int userlen);
int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user,
                         int userlen);

ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone);
ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone);
ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone);

DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)

DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)

DECLARE_ASN1_FUNCTIONS(GENERAL_NAME)
DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME)
int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b);

ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
                                     X509V3_CTX *ctx,
                                     STACK_OF(CONF_VALUE) *nval);
STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
                                          ASN1_BIT_STRING *bits,
                                          STACK_OF(CONF_VALUE) *extlist);
char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5);
ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method,
                                   X509V3_CTX *ctx, const char *str);
char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8);
ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method,
                                   X509V3_CTX *ctx, const char *str);

STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
                                       GENERAL_NAME *gen,
                                       STACK_OF(CONF_VALUE) *ret);
int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);

DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)

STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
                                        GENERAL_NAMES *gen,
                                        STACK_OF(CONF_VALUE) *extlist);
GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
                                 X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);

DECLARE_ASN1_FUNCTIONS(OTHERNAME)
DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)
int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b);
void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value);
void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype);
int GENERAL_NAME_set0_othername(GENERAL_NAME *gen,
                                ASN1_OBJECT *oid, ASN1_TYPE *value);
int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen,
                                ASN1_OBJECT **poid, ASN1_TYPE **pvalue);

char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
                            const ASN1_OCTET_STRING *ia5);
ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
                                         X509V3_CTX *ctx, const char *str);

DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a);

DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE)

DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
DECLARE_ASN1_FUNCTIONS(POLICYINFO)
DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)
DECLARE_ASN1_FUNCTIONS(USERNOTICE)
DECLARE_ASN1_FUNCTIONS(NOTICEREF)

DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)
DECLARE_ASN1_FUNCTIONS(DIST_POINT)
DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)
DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT)

int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname);

int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc);
int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc);

DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)

DECLARE_ASN1_ITEM(POLICY_MAPPING)
DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)
DECLARE_ASN1_ITEM(POLICY_MAPPINGS)

DECLARE_ASN1_ITEM(GENERAL_SUBTREE)
DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)

DECLARE_ASN1_ITEM(NAME_CONSTRAINTS)
DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)

DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)
DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)

GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
                               const X509V3_EXT_METHOD *method,
                               X509V3_CTX *ctx, int gen_type,
                               const char *value, int is_nc);

# ifdef OPENSSL_CONF_H
GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method,
                               X509V3_CTX *ctx, CONF_VALUE *cnf);
GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
                                  const X509V3_EXT_METHOD *method,
                                  X509V3_CTX *ctx, CONF_VALUE *cnf,
                                  int is_nc);

void X509V3_conf_free(CONF_VALUE *val);

X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
                                     const char *value);
X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name,
                                 const char *value);
int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section,
                            STACK_OF(X509_EXTENSION) **sk);
int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
                         X509 *cert);
int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
                             X509_REQ *req);
int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
                             X509_CRL *crl);

X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf,
                                    X509V3_CTX *ctx, int ext_nid,
                                    const char *value);
X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
                                const char *name, const char *value);
int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
                        const char *section, X509 *cert);
int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
                            const char *section, X509_REQ *req);
int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
                            const char *section, X509_CRL *crl);

int X509V3_add_value_bool_nf(const char *name, int asn1_bool,
                             STACK_OF(CONF_VALUE) **extlist);
int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool);
int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint);
void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash);
# endif

char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section);
STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section);
void X509V3_string_free(X509V3_CTX *ctx, char *str);
void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
                    X509_REQ *req, X509_CRL *crl, int flags);
/* For API backward compatibility, this is separate from X509V3_set_ctx(): */
int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey);

int X509V3_add_value(const char *name, const char *value,
                     STACK_OF(CONF_VALUE) **extlist);
int X509V3_add_value_uchar(const char *name, const unsigned char *value,
                           STACK_OF(CONF_VALUE) **extlist);
int X509V3_add_value_bool(const char *name, int asn1_bool,
                          STACK_OF(CONF_VALUE) **extlist);
int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint,
                         STACK_OF(CONF_VALUE) **extlist);
char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint);
ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value);
char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint);
char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth,
                                const ASN1_ENUMERATED *aint);
int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
int X509V3_EXT_add_alias(int nid_to, int nid_from);
void X509V3_EXT_cleanup(void);

const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
int X509V3_add_standard_extensions(void);
STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
void *X509V3_EXT_d2i(X509_EXTENSION *ext);
void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
                     int *idx);

X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
                    int crit, unsigned long flags);

#ifndef OPENSSL_NO_DEPRECATED_1_1_0
/* The new declarations are in crypto.h, but the old ones were here. */
# define hex_to_string OPENSSL_buf2hexstr
# define string_to_hex OPENSSL_hexstr2buf
#endif

void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
                        int ml);
int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag,
                     int indent);
#ifndef OPENSSL_NO_STDIO
int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
#endif
int X509V3_extensions_print(BIO *out, const char *title,
                            const STACK_OF(X509_EXTENSION) *exts,
                            unsigned long flag, int indent);

int X509_check_ca(X509 *x);
int X509_check_purpose(X509 *x, int id, int ca);
int X509_supported_extension(X509_EXTENSION *ex);
int X509_PURPOSE_set(int *p, int purpose);
int X509_check_issued(X509 *issuer, X509 *subject);
int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid);
void X509_set_proxy_flag(X509 *x);
void X509_set_proxy_pathlen(X509 *x, long l);
long X509_get_proxy_pathlen(X509 *x);

uint32_t X509_get_extension_flags(X509 *x);
uint32_t X509_get_key_usage(X509 *x);
uint32_t X509_get_extended_key_usage(X509 *x);
const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);
const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);

int X509_PURPOSE_get_count(void);
X509_PURPOSE *X509_PURPOSE_get0(int idx);
int X509_PURPOSE_get_by_sname(const char *sname);
int X509_PURPOSE_get_by_id(int id);
int X509_PURPOSE_add(int id, int trust, int flags,
                     int (*ck) (const X509_PURPOSE *, const X509 *, int),
                     const char *name, const char *sname, void *arg);
char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp);
char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp);
int X509_PURPOSE_get_trust(const X509_PURPOSE *xp);
void X509_PURPOSE_cleanup(void);
int X509_PURPOSE_get_id(const X509_PURPOSE *);

STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);
STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);
void X509_email_free(STACK_OF(OPENSSL_STRING) *sk);
STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
/* Flags for X509_check_* functions */

/*
 * Always check subject name for host match even if subject alt names present
 */
# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT    0x1
/* Disable wildcard matching for dnsName fields and common name. */
# define X509_CHECK_FLAG_NO_WILDCARDS    0x2
/* Wildcards must not match a partial label. */
# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
/* Allow (non-partial) wildcards to match multiple labels. */
# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
/* Constraint verifier subdomain patterns to match a single labels. */
# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
/* Never check the subject CN */
# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT    0x20
/*
 * Match reference identifiers starting with "." to any sub-domain.
 * This is a non-public flag, turned on implicitly when the subject
 * reference identity is a DNS name.
 */
# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000

int X509_check_host(X509 *x, const char *chk, size_t chklen,
                    unsigned int flags, char **peername);
int X509_check_email(X509 *x, const char *chk, size_t chklen,
                     unsigned int flags);
int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
                  unsigned int flags);
int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);

ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk,
                             unsigned long chtype);

void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);
SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NODE)
#define sk_X509_POLICY_NODE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_value(sk, idx) ((X509_POLICY_NODE *)OPENSSL_sk_value(ossl_check_const_X509_POLICY_NODE_sk_type(sk), (idx)))
#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp)))
#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_null())
#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n)))
#define sk_X509_POLICY_NODE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_POLICY_NODE_sk_type(sk), (n))
#define sk_X509_POLICY_NODE_free(sk) OPENSSL_sk_free(ossl_check_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_delete(sk, i) ((X509_POLICY_NODE *)OPENSSL_sk_delete(ossl_check_X509_POLICY_NODE_sk_type(sk), (i)))
#define sk_X509_POLICY_NODE_delete_ptr(sk, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_delete_ptr(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)))
#define sk_X509_POLICY_NODE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))
#define sk_X509_POLICY_NODE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))
#define sk_X509_POLICY_NODE_pop(sk) ((X509_POLICY_NODE *)OPENSSL_sk_pop(ossl_check_X509_POLICY_NODE_sk_type(sk)))
#define sk_X509_POLICY_NODE_shift(sk) ((X509_POLICY_NODE *)OPENSSL_sk_shift(ossl_check_X509_POLICY_NODE_sk_type(sk)))
#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk),ossl_check_X509_POLICY_NODE_freefunc_type(freefunc))
#define sk_X509_POLICY_NODE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), (idx))
#define sk_X509_POLICY_NODE_set(sk, idx, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_set(ossl_check_X509_POLICY_NODE_sk_type(sk), (idx), ossl_check_X509_POLICY_NODE_type(ptr)))
#define sk_X509_POLICY_NODE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))
#define sk_X509_POLICY_NODE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))
#define sk_X509_POLICY_NODE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), pnum)
#define sk_X509_POLICY_NODE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_dup(sk) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_dup(ossl_check_const_X509_POLICY_NODE_sk_type(sk)))
#define sk_X509_POLICY_NODE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_copyfunc_type(copyfunc), ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)))
#define sk_X509_POLICY_NODE_set_cmp_func(sk, cmp) ((sk_X509_POLICY_NODE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_compfunc_type(cmp)))



#ifndef OPENSSL_NO_RFC3779
typedef struct ASRange_st {
    ASN1_INTEGER *min, *max;
} ASRange;

# define ASIdOrRange_id          0
# define ASIdOrRange_range       1

typedef struct ASIdOrRange_st {
    int type;
    union {
        ASN1_INTEGER *id;
        ASRange *range;
    } u;
} ASIdOrRange;

SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange)
#define sk_ASIdOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_value(sk, idx) ((ASIdOrRange *)OPENSSL_sk_value(ossl_check_const_ASIdOrRange_sk_type(sk), (idx)))
#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp)))
#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_null())
#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n)))
#define sk_ASIdOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASIdOrRange_sk_type(sk), (n))
#define sk_ASIdOrRange_free(sk) OPENSSL_sk_free(ossl_check_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_delete(sk, i) ((ASIdOrRange *)OPENSSL_sk_delete(ossl_check_ASIdOrRange_sk_type(sk), (i)))
#define sk_ASIdOrRange_delete_ptr(sk, ptr) ((ASIdOrRange *)OPENSSL_sk_delete_ptr(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)))
#define sk_ASIdOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))
#define sk_ASIdOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))
#define sk_ASIdOrRange_pop(sk) ((ASIdOrRange *)OPENSSL_sk_pop(ossl_check_ASIdOrRange_sk_type(sk)))
#define sk_ASIdOrRange_shift(sk) ((ASIdOrRange *)OPENSSL_sk_shift(ossl_check_ASIdOrRange_sk_type(sk)))
#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk),ossl_check_ASIdOrRange_freefunc_type(freefunc))
#define sk_ASIdOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), (idx))
#define sk_ASIdOrRange_set(sk, idx, ptr) ((ASIdOrRange *)OPENSSL_sk_set(ossl_check_ASIdOrRange_sk_type(sk), (idx), ossl_check_ASIdOrRange_type(ptr)))
#define sk_ASIdOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))
#define sk_ASIdOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))
#define sk_ASIdOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), pnum)
#define sk_ASIdOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_dup(sk) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_dup(ossl_check_const_ASIdOrRange_sk_type(sk)))
#define sk_ASIdOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_copyfunc_type(copyfunc), ossl_check_ASIdOrRange_freefunc_type(freefunc)))
#define sk_ASIdOrRange_set_cmp_func(sk, cmp) ((sk_ASIdOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_compfunc_type(cmp)))


typedef STACK_OF(ASIdOrRange) ASIdOrRanges;

# define ASIdentifierChoice_inherit              0
# define ASIdentifierChoice_asIdsOrRanges        1

typedef struct ASIdentifierChoice_st {
    int type;
    union {
        ASN1_NULL *inherit;
        ASIdOrRanges *asIdsOrRanges;
    } u;
} ASIdentifierChoice;

typedef struct ASIdentifiers_st {
    ASIdentifierChoice *asnum, *rdi;
} ASIdentifiers;

DECLARE_ASN1_FUNCTIONS(ASRange)
DECLARE_ASN1_FUNCTIONS(ASIdOrRange)
DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)
DECLARE_ASN1_FUNCTIONS(ASIdentifiers)

typedef struct IPAddressRange_st {
    ASN1_BIT_STRING *min, *max;
} IPAddressRange;

# define IPAddressOrRange_addressPrefix  0
# define IPAddressOrRange_addressRange   1

typedef struct IPAddressOrRange_st {
    int type;
    union {
        ASN1_BIT_STRING *addressPrefix;
        IPAddressRange *addressRange;
    } u;
} IPAddressOrRange;

SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRange)
#define sk_IPAddressOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_value(sk, idx) ((IPAddressOrRange *)OPENSSL_sk_value(ossl_check_const_IPAddressOrRange_sk_type(sk), (idx)))
#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp)))
#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_null())
#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n)))
#define sk_IPAddressOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressOrRange_sk_type(sk), (n))
#define sk_IPAddressOrRange_free(sk) OPENSSL_sk_free(ossl_check_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_delete(sk, i) ((IPAddressOrRange *)OPENSSL_sk_delete(ossl_check_IPAddressOrRange_sk_type(sk), (i)))
#define sk_IPAddressOrRange_delete_ptr(sk, ptr) ((IPAddressOrRange *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)))
#define sk_IPAddressOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))
#define sk_IPAddressOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))
#define sk_IPAddressOrRange_pop(sk) ((IPAddressOrRange *)OPENSSL_sk_pop(ossl_check_IPAddressOrRange_sk_type(sk)))
#define sk_IPAddressOrRange_shift(sk) ((IPAddressOrRange *)OPENSSL_sk_shift(ossl_check_IPAddressOrRange_sk_type(sk)))
#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk),ossl_check_IPAddressOrRange_freefunc_type(freefunc))
#define sk_IPAddressOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), (idx))
#define sk_IPAddressOrRange_set(sk, idx, ptr) ((IPAddressOrRange *)OPENSSL_sk_set(ossl_check_IPAddressOrRange_sk_type(sk), (idx), ossl_check_IPAddressOrRange_type(ptr)))
#define sk_IPAddressOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))
#define sk_IPAddressOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))
#define sk_IPAddressOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), pnum)
#define sk_IPAddressOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_dup(sk) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_dup(ossl_check_const_IPAddressOrRange_sk_type(sk)))
#define sk_IPAddressOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_copyfunc_type(copyfunc), ossl_check_IPAddressOrRange_freefunc_type(freefunc)))
#define sk_IPAddressOrRange_set_cmp_func(sk, cmp) ((sk_IPAddressOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_compfunc_type(cmp)))


typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;

# define IPAddressChoice_inherit                 0
# define IPAddressChoice_addressesOrRanges       1

typedef struct IPAddressChoice_st {
    int type;
    union {
        ASN1_NULL *inherit;
        IPAddressOrRanges *addressesOrRanges;
    } u;
} IPAddressChoice;

typedef struct IPAddressFamily_st {
    ASN1_OCTET_STRING *addressFamily;
    IPAddressChoice *ipAddressChoice;
} IPAddressFamily;

SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily)
#define sk_IPAddressFamily_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_value(sk, idx) ((IPAddressFamily *)OPENSSL_sk_value(ossl_check_const_IPAddressFamily_sk_type(sk), (idx)))
#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp)))
#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_null())
#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n)))
#define sk_IPAddressFamily_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressFamily_sk_type(sk), (n))
#define sk_IPAddressFamily_free(sk) OPENSSL_sk_free(ossl_check_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_delete(sk, i) ((IPAddressFamily *)OPENSSL_sk_delete(ossl_check_IPAddressFamily_sk_type(sk), (i)))
#define sk_IPAddressFamily_delete_ptr(sk, ptr) ((IPAddressFamily *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)))
#define sk_IPAddressFamily_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))
#define sk_IPAddressFamily_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))
#define sk_IPAddressFamily_pop(sk) ((IPAddressFamily *)OPENSSL_sk_pop(ossl_check_IPAddressFamily_sk_type(sk)))
#define sk_IPAddressFamily_shift(sk) ((IPAddressFamily *)OPENSSL_sk_shift(ossl_check_IPAddressFamily_sk_type(sk)))
#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk),ossl_check_IPAddressFamily_freefunc_type(freefunc))
#define sk_IPAddressFamily_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), (idx))
#define sk_IPAddressFamily_set(sk, idx, ptr) ((IPAddressFamily *)OPENSSL_sk_set(ossl_check_IPAddressFamily_sk_type(sk), (idx), ossl_check_IPAddressFamily_type(ptr)))
#define sk_IPAddressFamily_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))
#define sk_IPAddressFamily_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))
#define sk_IPAddressFamily_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), pnum)
#define sk_IPAddressFamily_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_dup(sk) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_dup(ossl_check_const_IPAddressFamily_sk_type(sk)))
#define sk_IPAddressFamily_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_copyfunc_type(copyfunc), ossl_check_IPAddressFamily_freefunc_type(freefunc)))
#define sk_IPAddressFamily_set_cmp_func(sk, cmp) ((sk_IPAddressFamily_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_compfunc_type(cmp)))



typedef STACK_OF(IPAddressFamily) IPAddrBlocks;

DECLARE_ASN1_FUNCTIONS(IPAddressRange)
DECLARE_ASN1_FUNCTIONS(IPAddressOrRange)
DECLARE_ASN1_FUNCTIONS(IPAddressChoice)
DECLARE_ASN1_FUNCTIONS(IPAddressFamily)

/*
 * API tag for elements of the ASIdentifer SEQUENCE.
 */
# define V3_ASID_ASNUM   0
# define V3_ASID_RDI     1

/*
 * AFI values, assigned by IANA.  It'd be nice to make the AFI
 * handling code totally generic, but there are too many little things
 * that would need to be defined for other address families for it to
 * be worth the trouble.
 */
# define IANA_AFI_IPV4   1
# define IANA_AFI_IPV6   2

/*
 * Utilities to construct and extract values from RFC3779 extensions,
 * since some of the encodings (particularly for IP address prefixes
 * and ranges) are a bit tedious to work with directly.
 */
int X509v3_asid_add_inherit(ASIdentifiers *asid, int which);
int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
                                ASN1_INTEGER *min, ASN1_INTEGER *max);
int X509v3_addr_add_inherit(IPAddrBlocks *addr,
                            const unsigned afi, const unsigned *safi);
int X509v3_addr_add_prefix(IPAddrBlocks *addr,
                           const unsigned afi, const unsigned *safi,
                           unsigned char *a, const int prefixlen);
int X509v3_addr_add_range(IPAddrBlocks *addr,
                          const unsigned afi, const unsigned *safi,
                          unsigned char *min, unsigned char *max);
unsigned X509v3_addr_get_afi(const IPAddressFamily *f);
int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
                          unsigned char *min, unsigned char *max,
                          const int length);

/*
 * Canonical forms.
 */
int X509v3_asid_is_canonical(ASIdentifiers *asid);
int X509v3_addr_is_canonical(IPAddrBlocks *addr);
int X509v3_asid_canonize(ASIdentifiers *asid);
int X509v3_addr_canonize(IPAddrBlocks *addr);

/*
 * Tests for inheritance and containment.
 */
int X509v3_asid_inherits(ASIdentifiers *asid);
int X509v3_addr_inherits(IPAddrBlocks *addr);
int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);

/*
 * Check whether RFC 3779 extensions nest properly in chains.
 */
int X509v3_asid_validate_path(X509_STORE_CTX *);
int X509v3_addr_validate_path(X509_STORE_CTX *);
int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain,
                                      ASIdentifiers *ext,
                                      int allow_inheritance);
int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain,
                                      IPAddrBlocks *ext, int allow_inheritance);

#endif                         /* OPENSSL_NO_RFC3779 */

SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING)
#define sk_ASN1_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_value(sk, idx) ((ASN1_STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_sk_type(sk), (idx)))
#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp)))
#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_null())
#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n)))
#define sk_ASN1_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_sk_type(sk), (n))
#define sk_ASN1_STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_delete(sk, i) ((ASN1_STRING *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_sk_type(sk), (i)))
#define sk_ASN1_STRING_delete_ptr(sk, ptr) ((ASN1_STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)))
#define sk_ASN1_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))
#define sk_ASN1_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))
#define sk_ASN1_STRING_pop(sk) ((ASN1_STRING *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_sk_type(sk)))
#define sk_ASN1_STRING_shift(sk) ((ASN1_STRING *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_sk_type(sk)))
#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk),ossl_check_ASN1_STRING_freefunc_type(freefunc))
#define sk_ASN1_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), (idx))
#define sk_ASN1_STRING_set(sk, idx, ptr) ((ASN1_STRING *)OPENSSL_sk_set(ossl_check_ASN1_STRING_sk_type(sk), (idx), ossl_check_ASN1_STRING_type(ptr)))
#define sk_ASN1_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))
#define sk_ASN1_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))
#define sk_ASN1_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), pnum)
#define sk_ASN1_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_dup(sk) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_sk_type(sk)))
#define sk_ASN1_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_freefunc_type(freefunc)))
#define sk_ASN1_STRING_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_compfunc_type(cmp)))


/*
 * Admission Syntax
 */
typedef struct NamingAuthority_st NAMING_AUTHORITY;
typedef struct ProfessionInfo_st PROFESSION_INFO;
typedef struct Admissions_st ADMISSIONS;
typedef struct AdmissionSyntax_st ADMISSION_SYNTAX;
DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY)
DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO)
DECLARE_ASN1_FUNCTIONS(ADMISSIONS)
DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX)
SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO)
#define sk_PROFESSION_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_value(sk, idx) ((PROFESSION_INFO *)OPENSSL_sk_value(ossl_check_const_PROFESSION_INFO_sk_type(sk), (idx)))
#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp)))
#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_null())
#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n)))
#define sk_PROFESSION_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PROFESSION_INFO_sk_type(sk), (n))
#define sk_PROFESSION_INFO_free(sk) OPENSSL_sk_free(ossl_check_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_delete(sk, i) ((PROFESSION_INFO *)OPENSSL_sk_delete(ossl_check_PROFESSION_INFO_sk_type(sk), (i)))
#define sk_PROFESSION_INFO_delete_ptr(sk, ptr) ((PROFESSION_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)))
#define sk_PROFESSION_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))
#define sk_PROFESSION_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))
#define sk_PROFESSION_INFO_pop(sk) ((PROFESSION_INFO *)OPENSSL_sk_pop(ossl_check_PROFESSION_INFO_sk_type(sk)))
#define sk_PROFESSION_INFO_shift(sk) ((PROFESSION_INFO *)OPENSSL_sk_shift(ossl_check_PROFESSION_INFO_sk_type(sk)))
#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk),ossl_check_PROFESSION_INFO_freefunc_type(freefunc))
#define sk_PROFESSION_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), (idx))
#define sk_PROFESSION_INFO_set(sk, idx, ptr) ((PROFESSION_INFO *)OPENSSL_sk_set(ossl_check_PROFESSION_INFO_sk_type(sk), (idx), ossl_check_PROFESSION_INFO_type(ptr)))
#define sk_PROFESSION_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))
#define sk_PROFESSION_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))
#define sk_PROFESSION_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), pnum)
#define sk_PROFESSION_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_dup(sk) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_dup(ossl_check_const_PROFESSION_INFO_sk_type(sk)))
#define sk_PROFESSION_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_copyfunc_type(copyfunc), ossl_check_PROFESSION_INFO_freefunc_type(freefunc)))
#define sk_PROFESSION_INFO_set_cmp_func(sk, cmp) ((sk_PROFESSION_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS)
#define sk_ADMISSIONS_num(sk) OPENSSL_sk_num(ossl_check_const_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_value(sk, idx) ((ADMISSIONS *)OPENSSL_sk_value(ossl_check_const_ADMISSIONS_sk_type(sk), (idx)))
#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp)))
#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_null())
#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n)))
#define sk_ADMISSIONS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ADMISSIONS_sk_type(sk), (n))
#define sk_ADMISSIONS_free(sk) OPENSSL_sk_free(ossl_check_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_zero(sk) OPENSSL_sk_zero(ossl_check_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_delete(sk, i) ((ADMISSIONS *)OPENSSL_sk_delete(ossl_check_ADMISSIONS_sk_type(sk), (i)))
#define sk_ADMISSIONS_delete_ptr(sk, ptr) ((ADMISSIONS *)OPENSSL_sk_delete_ptr(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)))
#define sk_ADMISSIONS_push(sk, ptr) OPENSSL_sk_push(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))
#define sk_ADMISSIONS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))
#define sk_ADMISSIONS_pop(sk) ((ADMISSIONS *)OPENSSL_sk_pop(ossl_check_ADMISSIONS_sk_type(sk)))
#define sk_ADMISSIONS_shift(sk) ((ADMISSIONS *)OPENSSL_sk_shift(ossl_check_ADMISSIONS_sk_type(sk)))
#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk),ossl_check_ADMISSIONS_freefunc_type(freefunc))
#define sk_ADMISSIONS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), (idx))
#define sk_ADMISSIONS_set(sk, idx, ptr) ((ADMISSIONS *)OPENSSL_sk_set(ossl_check_ADMISSIONS_sk_type(sk), (idx), ossl_check_ADMISSIONS_type(ptr)))
#define sk_ADMISSIONS_find(sk, ptr) OPENSSL_sk_find(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))
#define sk_ADMISSIONS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))
#define sk_ADMISSIONS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), pnum)
#define sk_ADMISSIONS_sort(sk) OPENSSL_sk_sort(ossl_check_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_dup(sk) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_dup(ossl_check_const_ADMISSIONS_sk_type(sk)))
#define sk_ADMISSIONS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_deep_copy(ossl_check_const_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_copyfunc_type(copyfunc), ossl_check_ADMISSIONS_freefunc_type(freefunc)))
#define sk_ADMISSIONS_set_cmp_func(sk, cmp) ((sk_ADMISSIONS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_compfunc_type(cmp)))

typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS;

const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId(
    const NAMING_AUTHORITY *n);
const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL(
    const NAMING_AUTHORITY *n);
const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText(
    const NAMING_AUTHORITY *n);
void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n,
    ASN1_OBJECT* namingAuthorityId);
void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n,
    ASN1_IA5STRING* namingAuthorityUrl);
void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n,
    ASN1_STRING* namingAuthorityText);

const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority(
    const ADMISSION_SYNTAX *as);
void ADMISSION_SYNTAX_set0_admissionAuthority(
    ADMISSION_SYNTAX *as, GENERAL_NAME *aa);
const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions(
    const ADMISSION_SYNTAX *as);
void ADMISSION_SYNTAX_set0_contentsOfAdmissions(
    ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a);
const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a);
void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa);
const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a);
void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na);
const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a);
void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi);
const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_addProfessionInfo(
    PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos);
const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_namingAuthority(
    PROFESSION_INFO *pi, NAMING_AUTHORITY *na);
const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_professionItems(
    PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as);
const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_professionOIDs(
    PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po);
const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_registrationNumber(
    PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn);

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                si_destroy_all_flashnode __crc_iscsi_session_chkready __crc_iscsi_is_session_online __crc_iscsi_is_session_dev __crc_iscsi_host_for_each_session __crc_iscsi_block_scsi_eh __crc_iscsi_unblock_session __crc_iscsi_block_session __crc_iscsi_alloc_session __crc_iscsi_add_session __crc_iscsi_create_session __crc_iscsi_remove_session __crc_iscsi_force_destroy_session __crc_iscsi_free_session __crc_iscsi_alloc_conn __crc_iscsi_add_conn __crc_iscsi_remove_conn __crc_iscsi_put_conn __crc_iscsi_get_conn __crc_iscsi_recv_pdu __crc_iscsi_offload_mesg __crc_iscsi_conn_error_event __crc_iscsi_conn_login_event __crc_iscsi_post_host_event __crc_iscsi_ping_comp_event __crc_iscsi_session_event __crc_iscsi_get_discovery_parent_name __crc_iscsi_get_port_speed_name __crc_iscsi_get_port_state_name __crc_iscsi_register_transport __crc_iscsi_unregister_transport __crc_iscsi_dbg_trace __UNIQUE_ID_srcversion194 __UNIQUE_ID_depends193 ____versions __UNIQUE_ID_retpoline192 __UNIQUE_ID_intree191 __UNIQUE_ID_name190 __UNIQUE_ID_vermagic189 _note_10 _note_9 __kstrtab___tracepoint_iscsi_dbg_conn __kstrtabns___tracepoint_iscsi_dbg_conn __ksymtab___tracepoint_iscsi_dbg_conn __kstrtab___traceiter_iscsi_dbg_conn __kstrtabns___traceiter_iscsi_dbg_conn __ksymtab___traceiter_iscsi_dbg_conn __kstrtab___SCK__tp_func_iscsi_dbg_conn __kstrtabns___SCK__tp_func_iscsi_dbg_conn __ksymtab___SCK__tp_func_iscsi_dbg_conn __kstrtab___SCT__tp_func_iscsi_dbg_conn __kstrtabns___SCT__tp_func_iscsi_dbg_conn __ksymtab___SCT__tp_func_iscsi_dbg_conn __kstrtab___tracepoint_iscsi_dbg_eh __kstrtabns___tracepoint_iscsi_dbg_eh __ksymtab___tracepoint_iscsi_dbg_eh __kstrtab___traceiter_iscsi_dbg_eh __kstrtabns___traceiter_iscsi_dbg_eh __ksymtab___traceiter_iscsi_dbg_eh __kstrtab___SCK__tp_func_iscsi_dbg_eh __kstrtabns___SCK__tp_func_iscsi_dbg_eh __ksymtab___SCK__tp_func_iscsi_dbg_eh __kstrtab___SCT__tp_func_iscsi_dbg_eh __kstrtabns___SCT__tp_func_iscsi_dbg_eh __ksymtab___SCT__tp_func_iscsi_dbg_eh __kstrtab___tracepoint_iscsi_dbg_session __kstrtabns___tracepoint_iscsi_dbg_session __ksymtab___tracepoint_iscsi_dbg_session __kstrtab___traceiter_iscsi_dbg_session __kstrtabns___traceiter_iscsi_dbg_session __ksymtab___traceiter_iscsi_dbg_session __kstrtab___SCK__tp_func_iscsi_dbg_session __kstrtabns___SCK__tp_func_iscsi_dbg_session __ksymtab___SCK__tp_func_iscsi_dbg_session __kstrtab___SCT__tp_func_iscsi_dbg_session __kstrtabns___SCT__tp_func_iscsi_dbg_session __ksymtab___SCT__tp_func_iscsi_dbg_session __kstrtab___tracepoint_iscsi_dbg_tcp __kstrtabns___tracepoint_iscsi_dbg_tcp __ksymtab___tracepoint_iscsi_dbg_tcp __kstrtab___traceiter_iscsi_dbg_tcp __kstrtabns___traceiter_iscsi_dbg_tcp __ksymtab___traceiter_iscsi_dbg_tcp __kstrtab___SCK__tp_func_iscsi_dbg_tcp __kstrtabns___SCK__tp_func_iscsi_dbg_tcp __ksymtab___SCK__tp_func_iscsi_dbg_tcp __kstrtab___SCT__tp_func_iscsi_dbg_tcp __kstrtabns___SCT__tp_func_iscsi_dbg_tcp __ksymtab___SCT__tp_func_iscsi_dbg_tcp __kstrtab___tracepoint_iscsi_dbg_sw_tcp __kstrtabns___tracepoint_iscsi_dbg_sw_tcp __ksymtab___tracepoint_iscsi_dbg_sw_tcp __kstrtab___traceiter_iscsi_dbg_sw_tcp __kstrtabns___traceiter_iscsi_dbg_sw_tcp __ksymtab___traceiter_iscsi_dbg_sw_tcp __kstrtab___SCK__tp_func_iscsi_dbg_sw_tcp __kstrtabns___SCK__tp_func_iscsi_dbg_sw_tcp __ksymtab___SCK__tp_func_iscsi_dbg_sw_tcp __kstrtab___SCT__tp_func_iscsi_dbg_sw_tcp __kstrtabns___SCT__tp_func_iscsi_dbg_sw_tcp __ksymtab___SCT__tp_func_iscsi_dbg_sw_tcp __kstrtab_iscsi_create_endpoint __kstrtabns_iscsi_create_endpoint __ksymtab_iscsi_create_endpoint __kstrtab_iscsi_destroy_endpoint __kstrtabns_iscsi_destroy_endpoint __ksymtab_iscsi_destroy_endpoint __kstrtab_iscsi_put_endpoint __kstrtabns_iscsi_put_endpoint __ksymtab_iscsi_put_endpoint __kstrtab_iscsi_lookup_endpoint __kstrtabns_iscsi_lookup_endpoint __ksymtab_iscsi_lookup_endpoint __kstrtab_iscsi_get_ipaddress_state_name __kstrtabns_iscsi_get_ipaddress_state_name __ksymtab_iscsi_get_ipaddress_state_name __kstrtab_iscsi_get_router_state_name __kstrtabns_iscsi_get_router_state_name __ksymtab_iscsi_get_router_state_name __kstrtab_iscsi_create_iface __kstrtabns_iscsi_create_iface __ksymtab_iscsi_create_iface __kstrtab_iscsi_destroy_iface __kstrtabns_iscsi_destroy_iface __ksymtab_iscsi_destroy_iface __kstrtab_iscsi_flashnode_bus_match __kstrtabns_iscsi_flashnode_bus_match __ksymtab_iscsi_flashnode_bus_match __kstrtab_iscsi_create_flashnode_sess __kstrtabns_iscsi_create_flashnode_sess __ksymtab_iscsi_create_flashnode_sess __kstrtab_iscsi_create_flashnode_conn __kstrtabns_iscsi_create_flashnode_conn __ksymtab_iscsi_create_flashnode_conn __kstrtab_iscsi_find_flashnode_sess __kstrtabns_iscsi_find_flashnode_sess __ksymtab_iscsi_find_flashnode_sess __kstrtab_iscsi_find_flashnode_conn __kstrtabns_iscsi_find_flashnode_conn __ksymtab_iscsi_find_flashnode_conn __kstrtab_iscsi_destroy_flashnode_sess __kstrtabns_iscsi_destroy_flashnode_sess __ksymtab_iscsi_destroy_flashnode_sess __kstrtab_iscsi_destroy_all_flashnode __kstrtabns_iscsi_destroy_all_flashnode __ksymtab_iscsi_destroy_all_flashnode __kstrtab_iscsi_session_chkready __kstrtabns_iscsi_session_chkready __ksymtab_iscsi_session_chkready __kstrtab_iscsi_is_session_online __kstrtabns_iscsi_is_session_online __ksymtab_iscsi_is_session_online __kstrtab_iscsi_is_session_dev __kstrtabns_iscsi_is_session_dev __ksymtab_iscsi_is_session_dev __kstrtab_iscsi_host_for_each_session __kstrtabns_iscsi_host_for_each_session __ksymtab_iscsi_host_for_each_session __kstrtab_iscsi_block_scsi_eh __kstrtabns_iscsi_block_scsi_eh __ksymtab_iscsi_block_scsi_eh __kstrtab_iscsi_unblock_session __kstrtabns_iscsi_unblock_session __ksymtab_iscsi_unblock_session __kstrtab_iscsi_block_session __kstrtabns_iscsi_block_session __ksymtab_iscsi_block_session __kstrtab_iscsi_alloc_session __kstrtabns_iscsi_alloc_session __ksymtab_iscsi_alloc_session __kstrtab_iscsi_add_session __kstrtabns_iscsi_add_session __ksymtab_iscsi_add_session __kstrtab_iscsi_create_session __kstrtabns_iscsi_create_session __ksymtab_iscsi_create_session __kstrtab_iscsi_remove_session __kstrtabns_iscsi_remove_session __ksymtab_iscsi_remove_session __kstrtab_iscsi_force_destroy_session __kstrtabns_iscsi_force_destroy_session __ksymtab_iscsi_force_destroy_session __kstrtab_iscsi_free_session __kstrtabns_iscsi_free_session __ksymtab_iscsi_free_session __kstrtab_iscsi_alloc_conn __kstrtabns_iscsi_alloc_conn __ksymtab_iscsi_alloc_conn __kstrtab_iscsi_add_conn __kstrtabns_iscsi_add_conn __ksymtab_iscsi_add_conn __kstrtab_iscsi_remove_conn __kstrtabns_iscsi_remove_conn __ksymtab_iscsi_remove_conn __kstrtab_iscsi_put_conn __kstrtabns_iscsi_put_conn __ksymtab_iscsi_put_conn __kstrtab_iscsi_get_conn __kstrtabns_iscsi_get_conn __ksymtab_iscsi_get_conn __kstrtab_iscsi_recv_pdu __kstrtabns_iscsi_recv_pdu __ksymtab_iscsi_recv_pdu __kstrtab_iscsi_offload_mesg __kstrtabns_iscsi_offload_mesg __ksymtab_iscsi_offload_mesg __kstrtab_iscsi_conn_error_event __kstrtabns_iscsi_conn_error_event __ksymtab_iscsi_conn_error_event __kstrtab_iscsi_conn_login_event __kstrtabns_iscsi_conn_login_event __ksymtab_iscsi_conn_login_event __kstrtab_iscsi_post_host_event __kstrtabns_iscsi_post_host_event __ksymtab_iscsi_post_host_event __kstrtab_iscsi_ping_comp_event __kstrtabns_iscsi_ping_comp_event __ksymtab_iscsi_ping_comp_event __kstrtab_iscsi_session_event __kstrtabns_iscsi_session_event __ksymtab_iscsi_session_event __kstrtab_iscsi_get_discovery_parent_name __kstrtabns_iscsi_get_discovery_parent_name __ksymtab_iscsi_get_discovery_parent_name __kstrtab_iscsi_get_port_speed_name __kstrtabns_iscsi_get_port_speed_name __ksymtab_iscsi_get_port_speed_name __kstrtab_iscsi_get_port_state_name __kstrtabns_iscsi_get_port_state_name __ksymtab_iscsi_get_port_state_name __kstrtab_iscsi_register_transport __kstrtabns_iscsi_register_transport __ksymtab_iscsi_register_transport __kstrtab_iscsi_unregister_transport __kstrtabns_iscsi_unregister_transport __ksymtab_iscsi_unregister_transport __kstrtab_iscsi_dbg_trace __kstrtabns_iscsi_dbg_trace __ksymtab_iscsi_dbg_trace show_ipv4_iface_ipaddress show_ipv4_iface_gateway show_ipv4_iface_subnet show_ipv4_iface_bootproto show_ipv4_iface_dhcp_dns_address_en show_ipv4_iface_dhcp_slp_da_info_en show_ipv4_iface_tos_en show_ipv4_iface_tos show_ipv4_iface_grat_arp_en show_ipv4_iface_dhcp_alt_client_id_en show_ipv4_iface_dhcp_alt_client_id show_ipv4_iface_dhcp_req_vendor_id_en show_ipv4_iface_dhcp_use_vendor_id_en show_ipv4_iface_dhcp_vendor_id show_ipv4_iface_dhcp_learn_iqn_en show_ipv4_iface_fragment_disable show_ipv4_iface_incoming_forwarding_en show_ipv4_iface_ttl show_ipv6_iface_ipaddress show_ipv6_iface_link_local_addr show_ipv6_iface_router_addr show_ipv6_iface_ipaddr_autocfg show_ipv6_iface_link_local_autocfg show_ipv6_iface_link_local_state show_ipv6_iface_router_state show_ipv6_iface_grat_neighbor_adv_en show_ipv6_iface_mld_en show_ipv6_iface_flow_label show_ipv6_iface_traffic_class show_ipv6_iface_hop_limit show_ipv6_iface_nd_reachable_tmo show_ipv6_iface_nd_rexmit_time show_ipv6_iface_nd_stale_tmo show_ipv6_iface_dup_addr_detect_cnt show_ipv6_iface_router_adv_link_mtu show_iface_enabled show_iface_vlan_id show_iface_vlan_priority show_iface_vlan_enabled show_iface_mtu show_iface_port show_iface_ipaddress_state show_iface_delayed_ack_en show_iface_tcp_nagle_disable show_iface_tcp_wsf_disable show_iface_tcp_wsf show_iface_tcp_timer_scale show_iface_tcp_timestamp_en show_iface_cache_id show_iface_redirect_en show_iface_def_taskmgmt_tmo show_iface_header_digest show_iface_data_digest show_iface_immediate_data show_iface_initial_r2t show_iface_data_seq_in_order show_iface_data_pdu_in_order show_iface_erl show_iface_max_recv_dlength show_iface_first_burst_len show_iface_max_outstanding_r2t show_iface_max_burst_len show_iface_chap_auth show_iface_bidi_chap show_iface_discovery_auth_optional show_iface_discovery_logout show_iface_strict_login_comp_en show_iface_initiator_name iscsi_ipaddress_state_names show_fnode_auto_snd_tgt_disable show_fnode_discovery_session show_fnode_portal_type show_fnode_entry_enable show_fnode_immediate_data show_fnode_initial_r2t show_fnode_data_seq_in_order show_fnode_data_pdu_in_order show_fnode_chap_auth show_fnode_discovery_logout show_fnode_bidi_chap show_fnode_discovery_auth_optional show_fnode_erl show_fnode_first_burst_len show_fnode_def_time2wait show_fnode_def_time2retain show_fnode_max_outstanding_r2t show_fnode_isid show_fnode_tsid show_fnode_max_burst_len show_fnode_def_taskmgmt_tmo show_fnode_targetalias show_fnode_targetname show_fnode_tpgt show_fnode_discovery_parent_idx show_fnode_discovery_parent_type show_fnode_chap_in_idx show_fnode_chap_out_idx show_fnode_username show_fnode_username_in show_fnode_password show_fnode_password_in show_fnode_is_boot_target show_fnode_is_fw_assigned_ipv6 show_fnode_header_digest show_fnode_data_digest show_fnode_snack_req show_fnode_tcp_timestamp_stat show_fnode_tcp_nagle_disable show_fnode_tcp_wsf_disable show_fnode_tcp_timer_scale show_fnode_tcp_timestamp_enable show_fnode_fragment_disable show_fnode_keepalive_tmo show_fnode_port show_fnode_ipaddress show_fnode_max_recv_dlength show_fnode_max_xmit_dlength show_fnode_local_port show_fnode_ipv4_tos show_fnode_ipv6_traffic_class show_fnode_ipv6_flow_label show_fnode_redirect_ipaddr show_fnode_max_segment_size show_fnode_link_local_ipv6 show_fnode_tcp_xmit_wsf show_fnode_tcp_recv_wsf show_fnode_statsn show_fnode_exp_statsn iscsi_flashnode_bus iscsi_is_flashnode_conn_dev flashnode_match_index iscsi_conn_lookup connlock connlist CSWTCH.347 iscsi_session_release iscsi_iter_session_fn __iscsi_destroy_session iscsi_if_transport_lookup iscsi_transport_lock iscsi_transports show_conn_param_ISCSI_PARAM_MAX_RECV_DLENGTH show_conn_param_ISCSI_PARAM_MAX_XMIT_DLENGTH show_conn_param_ISCSI_PARAM_HDRDGST_EN show_conn_param_ISCSI_PARAM_DATADGST_EN show_conn_param_ISCSI_PARAM_IFMARKER_EN show_conn_param_ISCSI_PARAM_OFMARKER_EN show_conn_param_ISCSI_PARAM_PERSISTENT_PORT show_conn_param_ISCSI_PARAM_EXP_STATSN show_conn_param_ISCSI_PARAM_PERSISTENT_ADDRESS show_conn_param_ISCSI_PARAM_PING_TMO show_conn_param_ISCSI_PARAM_RECV_TMO show_conn_param_ISCSI_PARAM_LOCAL_PORT show_conn_param_ISCSI_PARAM_STATSN show_conn_param_ISCSI_PARAM_KEEPALIVE_TMO show_conn_param_ISCSI_PARAM_MAX_SEGMENT_SIZE show_conn_param_ISCSI_PARAM_TCP_TIMESTAMP_STAT show_conn_param_ISCSI_PARAM_TCP_WSF_DISABLE show_conn_param_ISCSI_PARAM_TCP_NAGLE_DISABLE show_conn_param_ISCSI_PARAM_TCP_TIMER_SCALE show_conn_param_ISCSI_PARAM_TCP_TIMESTAMP_EN show_conn_param_ISCSI_PARAM_IP_FRAGMENT_DISABLE show_conn_param_ISCSI_PARAM_IPV4_TOS show_conn_param_ISCSI_PARAM_IPV6_TC show_conn_param_ISCSI_PARAM_IPV6_FLOW_LABEL show_conn_param_ISCSI_PARAM_IS_FW_ASSIGNED_IPV6 show_conn_param_ISCSI_PARAM_TCP_XMIT_WSF show_conn_param_ISCSI_PARAM_TCP_RECV_WSF show_conn_param_ISCSI_PARAM_LOCAL_IPADDR show_session_param_ISCSI_PARAM_TARGET_NAME show_session_param_ISCSI_PARAM_INITIAL_R2T_EN show_session_param_ISCSI_PARAM_MAX_R2T show_session_param_ISCSI_PARAM_IMM_DATA_EN show_session_param_ISCSI_PARAM_FIRST_BURST show_session_param_ISCSI_PARAM_MAX_BURST show_session_param_ISCSI_PARAM_PDU_INORDER_EN show_session_param_ISCSI_PARAM_DATASEQ_INORDER_EN show_session_param_ISCSI_PARAM_ERL show_session_param_ISCSI_PARAM_TPGT show_session_param_ISCSI_PARAM_FAST_ABORT show_session_param_ISCSI_PARAM_ABORT_TMO show_session_param_ISCSI_PARAM_LU_RESET_TMO show_session_param_ISCSI_PARAM_TGT_RESET_TMO show_session_param_ISCSI_PARAM_IFACE_NAME show_session_param_ISCSI_PARAM_INITIATOR_NAME show_session_param_ISCSI_PARAM_TARGET_ALIAS show_session_param_ISCSI_PARAM_BOOT_ROOT show_session_param_ISCSI_PARAM_BOOT_NIC show_session_param_ISCSI_PARAM_BOOT_TARGET show_session_param_ISCSI_PARAM_AUTO_SND_TGT_DISABLE show_session_param_ISCSI_PARAM_DISCOVERY_SESS show_session_param_ISCSI_PARAM_PORTAL_TYPE show_session_param_ISCSI_PARAM_CHAP_AUTH_EN show_session_param_ISCSI_PARAM_DISCOVERY_LOGOUT_EN show_session_param_ISCSI_PARAM_BIDI_CHAP_EN show_session_param_ISCSI_PARAM_DISCOVERY_AUTH_OPTIONAL show_session_param_ISCSI_PARAM_DEF_TIME2WAIT show_session_param_ISCSI_PARAM_DEF_TIME2RETAIN show_session_param_ISCSI_PARAM_ISID show_session_param_ISCSI_PARAM_TSID show_session_param_ISCSI_PARAM_DEF_TASKMGMT_TMO show_session_param_ISCSI_PARAM_DISCOVERY_PARENT_IDX show_session_param_ISCSI_PARAM_DISCOVERY_PARENT_TYPE iscsi_port_speed_names trace_event_get_offsets_iscsi_log_msg perf_trace_iscsi_log_msg do_trace_event_raw_event_iscsi_log_msg trace_raw_output_iscsi_log_msg iscsi_iface_attr_is_visible dev_attr_iface_def_taskmgmt_tmo dev_attr_iface_header_digest dev_attr_iface_data_digest dev_attr_iface_immediate_data dev_attr_iface_initial_r2t dev_attr_iface_data_seq_in_order dev_attr_iface_data_pdu_in_order dev_attr_iface_erl dev_attr_iface_max_recv_dlength dev_attr_iface_first_burst_len dev_attr_iface_max_outstanding_r2t dev_attr_iface_max_burst_len dev_attr_iface_chap_auth dev_attr_iface_bidi_chap dev_attr_iface_discovery_auth_optional dev_attr_iface_discovery_logout dev_attr_iface_strict_login_comp_en dev_attr_iface_initiator_name dev_attr_iface_enabled dev_attr_iface_vlan_id dev_attr_iface_vlan_priority dev_attr_iface_vlan_enabled dev_attr_iface_mtu dev_attr_iface_port dev_attr_iface_ipaddress_state dev_attr_iface_delayed_ack_en dev_attr_iface_tcp_nagle_disable dev_attr_iface_tcp_wsf_disable dev_attr_iface_tcp_wsf dev_attr_iface_tcp_timer_scale dev_attr_iface_tcp_timestamp_en dev_attr_iface_cache_id dev_attr_iface_redirect_en dev_attr_ipv6_iface_ipaddress dev_attr_ipv6_iface_link_local_addr dev_attr_ipv6_iface_router_addr dev_attr_ipv6_iface_ipaddr_autocfg dev_attr_ipv6_iface_link_local_autocfg dev_attr_ipv6_iface_link_local_state dev_attr_ipv6_iface_router_state dev_attr_ipv6_iface_grat_neighbor_adv_en dev_attr_ipv6_iface_mld_en dev_attr_ipv6_iface_flow_label dev_attr_ipv6_iface_traffic_class dev_attr_ipv6_iface_hop_limit dev_attr_ipv6_iface_nd_reachable_tmo dev_attr_ipv6_iface_nd_rexmit_time dev_attr_ipv6_iface_nd_stale_tmo dev_attr_ipv6_iface_dup_addr_detect_cnt dev_attr_ipv6_iface_router_adv_link_mtu dev_attr_ipv4_iface_ipaddress dev_attr_ipv4_iface_gateway dev_attr_ipv4_iface_subnet dev_attr_ipv4_iface_bootproto dev_attr_ipv4_iface_dhcp_dns_address_en dev_attr_ipv4_iface_dhcp_slp_da_info_en dev_attr_ipv4_iface_tos_en dev_attr_ipv4_iface_tos dev_attr_ipv4_iface_grat_arp_en dev_attr_ipv4_iface_dhcp_alt_client_id_en dev_attr_ipv4_iface_dhcp_alt_client_id dev_attr_ipv4_iface_dhcp_req_vendor_id_en dev_attr_ipv4_iface_dhcp_use_vendor_id_en dev_attr_ipv4_iface_dhcp_vendor_id dev_attr_ipv4_iface_dhcp_learn_iqn_en dev_attr_ipv4_iface_fragment_disable dev_attr_ipv4_iface_incoming_forwarding_en dev_attr_ipv4_iface_ttl __already_done.11 iscsi_flashnode_sess_attr_is_visible dev_attr_fnode_auto_snd_tgt_disable dev_attr_fnode_discovery_session dev_attr_fnode_portal_type dev_attr_fnode_entry_enable dev_attr_fnode_immediate_data dev_attr_fnode_initial_r2t dev_attr_fnode_data_seq_in_order dev_attr_fnode_data_pdu_in_order dev_attr_fnode_chap_auth dev_attr_fnode_discovery_logout dev_attr_fnode_bidi_chap dev_attr_fnode_discovery_auth_optional dev_attr_fnode_erl dev_attr_fnode_first_burst_len dev_attr_fnode_def_time2wait dev_attr_fnode_def_time2retain dev_attr_fnode_max_outstanding_r2t dev_attr_fnode_isid dev_attr_fnode_tsid dev_attr_fnode_max_burst_len dev_attr_fnode_def_taskmgmt_tmo dev_attr_fnode_targetalias dev_attr_fnode_targetname dev_attr_fnode_tpgt dev_attr_fnode_discovery_parent_idx dev_attr_fnode_discovery_parent_type dev_attr_fnode_chap_in_idx dev_attr_fnode_chap_out_idx dev_attr_fnode_username dev_attr_fnode_username_in dev_attr_fnode_password dev_attr_fnode_password_in dev_attr_fnode_is_boot_target __already_done.10 iscsi_flashnode_conn_attr_is_visible dev_attr_fnode_is_fw_assigned_ipv6 dev_attr_fnode_header_digest dev_attr_fnode_data_digest dev_attr_fnode_snack_req dev_attr_fnode_tcp_timestamp_stat dev_attr_fnode_tcp_nagle_disable dev_attr_fnode_tcp_wsf_disable dev_attr_fnode_tcp_timer_scale dev_attr_fnode_tcp_timestamp_enable dev_attr_fnode_fragment_disable dev_attr_fnode_max_recv_dlength dev_attr_fnode_max_xmit_dlength dev_attr_fnode_keepalive_tmo dev_attr_fnode_port dev_attr_fnode_ipaddress dev_attr_fnode_redirect_ipaddr dev_attr_fnode_max_segment_size dev_attr_fnode_local_port dev_attr_fnode_ipv4_tos dev_attr_fnode_ipv6_traffic_class dev_attr_fnode_ipv6_flow_label dev_attr_fnode_link_local_ipv6 dev_attr_fnode_tcp_xmit_wsf dev_attr_fnode_tcp_recv_wsf dev_attr_fnode_statsn dev_attr_fnode_exp_statsn __already_done.9 iscsi_session_attr_is_visible dev_attr_sess_initial_r2t dev_attr_sess_max_outstanding_r2t dev_attr_sess_immediate_data dev_attr_sess_first_burst_len dev_attr_sess_max_burst_len dev_attr_sess_data_pdu_in_order dev_attr_sess_data_seq_in_order dev_attr_sess_erl dev_attr_sess_targetname dev_attr_sess_tpgt dev_attr_sess_chap_in_idx dev_attr_sess_chap_out_idx dev_attr_sess_password dev_attr_sess_password_in dev_attr_sess_username dev_attr_sess_username_in dev_attr_sess_fast_abort dev_attr_sess_abort_tmo dev_attr_sess_lu_reset_tmo dev_attr_sess_tgt_reset_tmo dev_attr_sess_ifacename dev_attr_sess_initiatorname dev_attr_sess_targetalias dev_attr_sess_boot_root dev_attr_sess_boot_nic dev_attr_sess_boot_target dev_attr_sess_auto_snd_tgt_disable dev_attr_sess_discovery_session dev_attr_sess_portal_type dev_attr_sess_chap_auth dev_attr_sess_discovery_logout dev_attr_sess_bidi_chap dev_attr_sess_discovery_auth_optional dev_attr_sess_def_time2wait dev_attr_sess_def_time2retain dev_attr_sess_isid dev_attr_sess_tsid dev_attr_sess_def_taskmgmt_tmo dev_attr_sess_discovery_parent_idx dev_attr_sess_discovery_parent_type dev_attr_priv_sess_recovery_tmo dev_attr_priv_sess_state dev_attr_priv_sess_target_state dev_attr_priv_sess_creator dev_attr_priv_sess_target_id __already_done.1 iscsi_conn_attr_is_visible dev_attr_conn_max_recv_dlength dev_attr_conn_max_xmit_dlength dev_attr_conn_header_digest dev_attr_conn_data_digest dev_attr_conn_ifmarker dev_attr_conn_ofmarker dev_attr_conn_address dev_attr_conn_port dev_attr_conn_exp_statsn dev_attr_conn_persistent_address dev_attr_conn_persistent_port dev_attr_conn_ping_tmo dev_attr_conn_recv_tmo dev_attr_conn_local_port dev_attr_conn_statsn dev_attr_conn_keepalive_tmo dev_attr_conn_max_segment_size dev_attr_conn_tcp_timestamp_stat dev_attr_conn_tcp_wsf_disable dev_attr_conn_tcp_nagle_disable dev_attr_conn_tcp_timer_scale dev_attr_conn_tcp_timestamp_enable dev_attr_conn_fragment_disable dev_attr_conn_ipv4_tos dev_attr_conn_ipv6_traffic_class dev_attr_conn_ipv6_flow_label dev_attr_conn_is_fw_assigned_ipv6 dev_attr_conn_tcp_xmit_wsf dev_attr_conn_tcp_recv_wsf dev_attr_conn_local_ipaddr dev_attr_conn_state __already_done.2 __bpf_trace_iscsi_log_msg show_conn_ep_param_ISCSI_PARAM_CONN_PORT show_conn_ep_param_ISCSI_PARAM_CONN_ADDRESS iscsi_flashnode_sess_release iscsi_flashnode_conn_release iscsi_transport_release iscsi_endpoint_release iscsi_ep_idr_mutex iscsi_ep_idr iscsi_iface_release iscsi_iter_destroy_flashnode_conn_fn show_ep_handle show_priv_session_target_id show_priv_session_creator show_priv_session_target_state iscsi_session_target_state_name show_priv_session_state show_conn_state connection_state_names show_transport_caps iscsi_endpoint_group iscsi_iface_group iscsi_destroy_flashnode_sess.cold iscsi_iter_destroy_flashnode_fn sesslock iscsi_iter_force_destroy_conn_fn iscsi_user_scan iscsi_user_scan_session show_session_param_ISCSI_PARAM_CHAP_IN_IDX show_session_param_ISCSI_PARAM_CHAP_OUT_IDX show_session_param_ISCSI_PARAM_USERNAME_IN show_session_param_ISCSI_PARAM_USERNAME show_session_param_ISCSI_PARAM_PASSWORD_IN show_session_param_ISCSI_PARAM_PASSWORD show_transport_handle store_priv_session_recovery_tmo __iscsi_block_session __func__.106 trace_iscsi_dbg_trans_session __iscsi_block_session.cold __iscsi_unblock_session __func__.107 __iscsi_unblock_session.cold session_recovery_timedout __func__.108 iscsi_conn_release __func__.111 trace_iscsi_dbg_trans_conn iscsi_conn_release.cold iscsi_ep_disconnect __func__.114 iscsi_ep_disconnect.cold iscsi_if_disconnect_bound_ep __func__.113 iscsi_if_disconnect_bound_ep.cold iscsi_stop_conn __func__.115 iscsi_stop_conn.cold iscsi_if_stop_conn __func__.112 iscsi_if_stop_conn.cold iscsi_cleanup_conn_work_fn __func__.119 iscsi_cleanup_conn_work_fn.cold __func__.120 iscsi_conn_cleanup_workq nls iscsi_conn_error_event.cold iscsi_transport_exit iscsi_connection_class iscsi_session_class iscsi_host_class iscsi_endpoint_class iscsi_iface_class iscsi_transport_class iscsi_transport_init iscsi_if_rx __key.123 iscsi_session_nr __key.124 __key.125 show_priv_session_recovery_tmo __func__.104 iscsi_user_scan_session.cold iscsi_scan_session __iscsi_unbind_session __func__.97 iscsi_alloc_session.cold iscsi_add_conn.cold iscsi_iter_destroy_conn_fn rx_queue_mutex iscsi_transport_group iscsi_remove_host show_host_param_ISCSI_HOST_PARAM_IPADDRESS show_host_param_ISCSI_HOST_PARAM_NETDEV_NAME show_host_param_ISCSI_HOST_PARAM_HWADDRESS show_host_param_ISCSI_HOST_PARAM_PORT_STATE show_host_param_ISCSI_HOST_PARAM_PORT_SPEED show_host_param_ISCSI_HOST_PARAM_INITIATOR_NAME iscsi_iter_destroy_flashnode_fn.cold __func__.96 iscsi_session_release.cold iscsi_if_create_session.isra.0 __func__.126 iscsi_if_create_session.isra.0.cold iscsi_host_attr_is_visible dev_attr_host_netdev dev_attr_host_hwaddress dev_attr_host_ipaddress dev_attr_host_initiatorname dev_attr_host_port_state dev_attr_host_port_speed __already_done.0 iscsi_host_match iscsi_bsg_host_dispatch iscsi_conn_login_event.cold iscsi_setup_host __key.122 iscsi_setup_host.cold iscsi_session_match iscsi_conn_match __func__.121 iscsi_session_event.cold __func__.105 iscsi_sess_ida __iscsi_unbind_session.cold __func__.110 iscsi_remove_session.cold __func__.116 iscsi_free_session.cold iscsi_host_group iscsi_conn_group iscsi_session_group iscsi_offload_mesg.cold iscsi_ping_comp_event.cold iscsi_post_host_event.cold sesslist __func__.109 iscsi_add_session.cold iscsi_flashnode_sess_dev_type iscsi_flashnode_conn_dev_type __key.117 __func__.136 __func__.127 __func__.128 iscsi_if_rx.cold __func__.135 __func__.134 __func__.130 __func__.133 __func__.129 __func__.132 __func__.138 __func__.131 __func__.137 __UNIQUE_ID_alias874 __UNIQUE_ID_version873 __UNIQUE_ID_license872 __UNIQUE_ID_description871 __UNIQUE_ID_author870 __UNIQUE_ID___addressable_cleanup_module869 __UNIQUE_ID___addressable_init_module868 iscsi_host_attrs iscsi_session_attrs iscsi_conn_attrs iscsi_flashnode_conn_attr_groups iscsi_flashnode_conn_attr_group iscsi_flashnode_conn_attrs iscsi_flashnode_sess_attr_groups iscsi_flashnode_sess_attr_group iscsi_flashnode_sess_attrs iscsi_iface_attrs iscsi_endpoint_attrs dev_attr_ep_handle iscsi_transport_attrs dev_attr_handle dev_attr_caps __UNIQUE_ID_debug_conn811 __UNIQUE_ID_debug_conntype810 __param_debug_conn __param_str_debug_conn __UNIQUE_ID_debug_session809 __UNIQUE_ID_debug_sessiontype808 __param_debug_session __param_str_debug_session __bpf_trace_tp_map_iscsi_dbg_trans_conn __bpf_trace_tp_map_iscsi_dbg_trans_session __bpf_trace_tp_map_iscsi_dbg_sw_tcp __bpf_trace_tp_map_iscsi_dbg_tcp __bpf_trace_tp_map_iscsi_dbg_eh __bpf_trace_tp_map_iscsi_dbg_session __bpf_trace_tp_map_iscsi_dbg_conn __event_iscsi_dbg_trans_conn __event_iscsi_dbg_trans_session __event_iscsi_dbg_sw_tcp __event_iscsi_dbg_tcp __event_iscsi_dbg_eh __event_iscsi_dbg_session __event_iscsi_dbg_conn print_fmt_iscsi_log_msg trace_event_fields_iscsi_log_msg trace_event_type_funcs_iscsi_log_msg event_class_iscsi_log_msg str__iscsi__trace_system_name __tpstrtab_iscsi_dbg_trans_conn __tpstrtab_iscsi_dbg_trans_session __tpstrtab_iscsi_dbg_sw_tcp __tpstrtab_iscsi_dbg_tcp __tpstrtab_iscsi_dbg_eh __tpstrtab_iscsi_dbg_session __tpstrtab_iscsi_dbg_conn .LC12 .LC90 strcpy ida_alloc_range try_module_get alloc_workqueue __nlmsg_put idr_find bsg_setup_queue bsg_remove_queue dev_set_name bsg_job_done __this_module scsi_target_block queue_work_on trace_raw_output_prep transport_remove_device device_unregister __trace_trigger_soft_disabled trace_event_printf this_cpu_off system_state device_initialize cleanup_module trace_event_raw_init memcpy kfree __netlink_kernel_create device_for_each_child bpf_trace_run2 __scsi_init_queue vsnprintf get_device _raw_spin_lock_irqsave __SCT__tp_func_iscsi_dbg_trans_session __fentry__ sysfs_emit init_module trace_event_buffer_commit transport_setup_device __x86_indirect_thunk_rax _raw_spin_lock_irq __stack_chk_fail queue_delayed_work_on put_device netlink_broadcast scsi_host_get __alloc_skb scsi_target_unblock netlink_capable module_put idr_remove __list_add_valid perf_trace_buf_alloc perf_trace_run_bpf_submit bus_unregister __class_register init_net scsi_host_put transport_class_unregister skb_pull device_add idr_alloc netlink_unicast kfree_skb_reason destroy_workqueue mutex_lock attribute_container_register _raw_spin_unlock_irq __traceiter_iscsi_dbg_trans_conn __tracepoint_iscsi_dbg_trans_conn trace_event_reg ida_free netlink_kernel_release __tracepoint_iscsi_dbg_trans_session __cpu_online_mask sysfs_create_group __list_del_entry_valid sscanf device_find_child __mutex_init transport_add_device _raw_spin_unlock_irqrestore device_register device_del memset scsi_is_host_device __x86_return_thunk skb_trim __SCT__tp_func_iscsi_dbg_trans_conn sysfs_remove_group scsi_scan_target cpu_number __preempt_count trace_event_buffer_reserve __SCK__tp_func_iscsi_dbg_trans_session mutex_unlock attribute_container_unregister cancel_delayed_work_sync __SCK__tp_func_iscsi_dbg_trans_conn init_timer_key __traceiter_iscsi_dbg_trans_session __x86_indirect_thunk_rcx transport_destroy_device cancel_work_sync __warn_printk __x86_indirect_thunk_rsi delayed_work_timer_fn simple_strtoul system_unbound_wq kmalloc_trace strlen param_ops_int _dev_printk __SCT__preempt_schedule_notrace trace_handle_return __x86_indirect_thunk_r8 scsi_host_lookup msleep scsi_remove_target __kmalloc kmalloc_caches bus_register transport_class_register flush_work                             <       -            >          "  Q            \            <       }                      "                        V  <                             "                          <                  .         "  A           L           <       m           ~         "                        <                           "                      
  <       
                    "  1           Q           X         "  a                               "                                 "                                 "                                 "  !           A           H         "  Q           q           x         "                                 "                                 "                                 "             1           8         "  A           a           h         "  q                               "                                 "                                 "             !           (         "  1           Q           X         "  a                               "                                 "                                 "                                 "  !           A           H         "  Q           q           x         "                                 "                                 "                                 "             1           8         "  A           a           h         "  q                               "                                 "                                 "             !           (         "  1           Q           X         "  a                               "                                 "                                 "             	           	         "  !	           A	           H	         "  Q	           q	           x	         "  	           	           	         "  	           	           	         "  	           
           
         "  
           1
           8
         "  A
           a
           h
         "  q
           
           
         "  
           
           
         "  
           
           
         "             !           (         "  1           Q           X         "  a                               "                                 "                                 "                                 "  !           A           H         "  Q           q           x         "                                 "                                 "             
           
         "  
           1
           8
         "  A
           a
           h
         "  q
           
           
         "  
           
           
         "  
           
           
         "             !           (         "  1           Q           X         "  a                               "                                 "                                 "                                          "                     %         "  1           N                    W         "  ^                   c         "  j                   o         "  v                   {         "                                 "                                 "                                 "             -           4         "  A           ]           d         "  q                               "                                 "                                 "                        $         "  1           M           T         "  a           }                    "                                 "                                 "             
                    "  !           =           D         "  Q           m           t         "                                 "                                 "                                 "             -           4         "  A           ]           d         "  q                               "                                 "                                 "                        $         "  1           M           T         "  a           }                    "                                 "                                 "             
                    "  !           =           D         "  Q           m           t         "                                 "                      ?           "                      ?           "             1         ?  8         "  A           a         ?  h         "  q                    ?           "                      ?           "                      ?           "             !         ?  (         "  1           Q         ?  /*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/ssl.h.in
 *
 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
 * Copyright 2005 Nokia. All rights reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_SSL_H
# define OPENSSL_SSL_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_SSL_H
# endif

# include <openssl/e_os2.h>
# include <openssl/opensslconf.h>
# include <openssl/comp.h>
# include <openssl/bio.h>
# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  include <openssl/x509.h>
#  include <openssl/crypto.h>
#  include <openssl/buffer.h>
# endif
# include <openssl/lhash.h>
# include <openssl/pem.h>
# include <openssl/hmac.h>
# include <openssl/async.h>

# include <openssl/safestack.h>
# include <openssl/symhacks.h>
# include <openssl/ct.h>
# include <openssl/sslerr.h>
# include <openssl/prov_ssl.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* OpenSSL version number for ASN.1 encoding of the session information */
/*-
 * Version 0 - initial version
 * Version 1 - added the optional peer certificate
 */
# define SSL_SESSION_ASN1_VERSION 0x0001

# define SSL_MAX_SSL_SESSION_ID_LENGTH           32
# define SSL_MAX_SID_CTX_LENGTH                  32

# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES     (512/8)
# define SSL_MAX_KEY_ARG_LENGTH                  8
/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */

/* The maximum number of encrypt/decrypt pipelines we can support */
# define SSL_MAX_PIPELINES  32

/* text strings for the ciphers */

/* These are used to specify which ciphers to use and not to use */

# define SSL_TXT_LOW             "LOW"
# define SSL_TXT_MEDIUM          "MEDIUM"
# define SSL_TXT_HIGH            "HIGH"
# define SSL_TXT_FIPS            "FIPS"

# define SSL_TXT_aNULL           "aNULL"
# define SSL_TXT_eNULL           "eNULL"
# define SSL_TXT_NULL            "NULL"

# define SSL_TXT_kRSA            "kRSA"
# define SSL_TXT_kDHr            "kDHr"/* this cipher class has been removed */
# define SSL_TXT_kDHd            "kDHd"/* this cipher class has been removed */
# define SSL_TXT_kDH             "kDH"/* this cipher class has been removed */
# define SSL_TXT_kEDH            "kEDH"/* alias for kDHE */
# define SSL_TXT_kDHE            "kDHE"
# define SSL_TXT_kECDHr          "kECDHr"/* this cipher class has been removed */
# define SSL_TXT_kECDHe          "kECDHe"/* this cipher class has been removed */
# define SSL_TXT_kECDH           "kECDH"/* this cipher class has been removed */
# define SSL_TXT_kEECDH          "kEECDH"/* alias for kECDHE */
# define SSL_TXT_kECDHE          "kECDHE"
# define SSL_TXT_kPSK            "kPSK"
# define SSL_TXT_kRSAPSK         "kRSAPSK"
# define SSL_TXT_kECDHEPSK       "kECDHEPSK"
# define SSL_TXT_kDHEPSK         "kDHEPSK"
# define SSL_TXT_kGOST           "kGOST"
# define SSL_TXT_kGOST18         "kGOST18"
# define SSL_TXT_kSRP            "kSRP"

# define SSL_TXT_aRSA            "aRSA"
# define SSL_TXT_aDSS            "aDSS"
# define SSL_TXT_aDH             "aDH"/* this cipher class has been removed */
# define SSL_TXT_aECDH           "aECDH"/* this cipher class has been removed */
# define SSL_TXT_aECDSA          "aECDSA"
# define SSL_TXT_aPSK            "aPSK"
# define SSL_TXT_aGOST94         "aGOST94"
# define SSL_TXT_aGOST01         "aGOST01"
# define SSL_TXT_aGOST12         "aGOST12"
# define SSL_TXT_aGOST           "aGOST"
# define SSL_TXT_aSRP            "aSRP"

# define SSL_TXT_DSS             "DSS"
# define SSL_TXT_DH              "DH"
# define SSL_TXT_DHE             "DHE"/* same as "kDHE:-ADH" */
# define SSL_TXT_EDH             "EDH"/* alias for DHE */
# define SSL_TXT_ADH             "ADH"
# define SSL_TXT_RSA             "RSA"
# define SSL_TXT_ECDH            "ECDH"
# define SSL_TXT_EECDH           "EECDH"/* alias for ECDHE" */
# define SSL_TXT_ECDHE           "ECDHE"/* same as "kECDHE:-AECDH" */
# define SSL_TXT_AECDH           "AECDH"
# define SSL_TXT_ECDSA           "ECDSA"
# define SSL_TXT_PSK             "PSK"
# define SSL_TXT_SRP             "SRP"

# define SSL_TXT_DES             "DES"
# define SSL_TXT_3DES            "3DES"
# define SSL_TXT_RC4             "RC4"
# define SSL_TXT_RC2             "RC2"
# define SSL_TXT_IDEA            "IDEA"
# define SSL_TXT_SEED            "SEED"
# define SSL_TXT_AES128          "AES128"
# define SSL_TXT_AES256          "AES256"
# define SSL_TXT_AES             "AES"
# define SSL_TXT_AES_GCM         "AESGCM"
# define SSL_TXT_AES_CCM         "AESCCM"
# define SSL_TXT_AES_CCM_8       "AESCCM8"
# define SSL_TXT_CAMELLIA128     "CAMELLIA128"
# define SSL_TXT_CAMELLIA256     "CAMELLIA256"
# define SSL_TXT_CAMELLIA        "CAMELLIA"
# define SSL_TXT_CHACHA20        "CHACHA20"
# define SSL_TXT_GOST            "GOST89"
# define SSL_TXT_ARIA            "ARIA"
# define SSL_TXT_ARIA_GCM        "ARIAGCM"
# define SSL_TXT_ARIA128         "ARIA128"
# define SSL_TXT_ARIA256         "ARIA256"
# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912"
# define SSL_TXT_CBC             "CBC"

# define SSL_TXT_MD5             "MD5"
# define SSL_TXT_SHA1            "SHA1"
# define SSL_TXT_SHA             "SHA"/* same as "SHA1" */
# define SSL_TXT_GOST94          "GOST94"
# define SSL_TXT_GOST89MAC       "GOST89MAC"
# define SSL_TXT_GOST12          "GOST12"
# define SSL_TXT_GOST89MAC12     "GOST89MAC12"
# define SSL_TXT_SHA256          "SHA256"
# define SSL_TXT_SHA384          "SHA384"

# define SSL_TXT_SSLV3           "SSLv3"
# define SSL_TXT_TLSV1           "TLSv1"
# define SSL_TXT_TLSV1_1         "TLSv1.1"
# define SSL_TXT_TLSV1_2         "TLSv1.2"

# define SSL_TXT_ALL             "ALL"

/*-
 * COMPLEMENTOF* definitions. These identifiers are used to (de-select)
 * ciphers normally not being used.
 * Example: "RC4" will activate all ciphers using RC4 including ciphers
 * without authentication, which would normally disabled by DEFAULT (due
 * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT"
 * will make sure that it is also disabled in the specific selection.
 * COMPLEMENTOF* identifiers are portable between version, as adjustments
 * to the default cipher setup will also be included here.
 *
 * COMPLEMENTOFDEFAULT does not experience the same special treatment that
 * DEFAULT gets, as only selection is being done and no sorting as needed
 * for DEFAULT.
 */
# define SSL_TXT_CMPALL          "COMPLEMENTOFALL"
# define SSL_TXT_CMPDEF          "COMPLEMENTOFDEFAULT"

/*
 * The following cipher list is used by default. It also is substituted when
 * an application-defined cipher list string starts with 'DEFAULT'.
 * This applies to ciphersuites for TLSv1.2 and below.
 * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list()
 * Update both macro and function simultaneously
 */
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL"
/*
 * This is the default set of TLSv1.3 ciphersuites
 * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites()
 * Update both macro and function simultaneously
 */
#  define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \
                                   "TLS_CHACHA20_POLY1305_SHA256:" \
                                   "TLS_AES_128_GCM_SHA256"
# endif
/*
 * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always
 * starts with a reasonable order, and all we have to do for DEFAULT is
 * throwing out anonymous and unencrypted ciphersuites! (The latter are not
 * actually enabled by ALL, but "ALL:RSA" would enable some of them.)
 */

/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
# define SSL_SENT_SHUTDOWN       1
# define SSL_RECEIVED_SHUTDOWN   2

#ifdef __cplusplus
}
#endif

#ifdef  __cplusplus
extern "C" {
#endif

# define SSL_FILETYPE_ASN1       X509_FILETYPE_ASN1
# define SSL_FILETYPE_PEM        X509_FILETYPE_PEM

/*
 * This is needed to stop compilers complaining about the 'struct ssl_st *'
 * function parameters used to prototype callbacks in SSL_CTX.
 */
typedef struct ssl_st *ssl_crock_st;
typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT;
typedef struct ssl_method_st SSL_METHOD;
typedef struct ssl_cipher_st SSL_CIPHER;
typedef struct ssl_session_st SSL_SESSION;
typedef struct tls_sigalgs_st TLS_SIGALGS;
typedef struct ssl_conf_ctx_st SSL_CONF_CTX;
typedef struct ssl_comp_st SSL_COMP;

STACK_OF(SSL_CIPHER);
STACK_OF(SSL_COMP);

/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/
typedef struct srtp_protection_profile_st {
    const char *name;
    unsigned long id;
} SRTP_PROTECTION_PROFILE;
SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE)
#define sk_SRTP_PROTECTION_PROFILE_num(sk) OPENSSL_sk_num(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))
#define sk_SRTP_PROTECTION_PROFILE_value(sk, idx) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_value(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx)))
#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp)))
#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_null())
#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n)))
#define sk_SRTP_PROTECTION_PROFILE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (n))
#define sk_SRTP_PROTECTION_PROFILE_free(sk) OPENSSL_sk_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))
#define sk_SRTP_PROTECTION_PROFILE_zero(sk) OPENSSL_sk_zero(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))
#define sk_SRTP_PROTECTION_PROFILE_delete(sk, i) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (i)))
#define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete_ptr(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)))
#define sk_SRTP_PROTECTION_PROFILE_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))
#define sk_SRTP_PROTECTION_PROFILE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))
#define sk_SRTP_PROTECTION_PROFILE_pop(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_pop(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)))
#define sk_SRTP_PROTECTION_PROFILE_shift(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_shift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)))
#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk),ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc))
#define sk_SRTP_PROTECTION_PROFILE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), (idx))
#define sk_SRTP_PROTECTION_PROFILE_set(sk, idx, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_set(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)))
#define sk_SRTP_PROTECTION_PROFILE_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))
#define sk_SRTP_PROTECTION_PROFILE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))
#define sk_SRTP_PROTECTION_PROFILE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), pnum)
#define sk_SRTP_PROTECTION_PROFILE_sort(sk) OPENSSL_sk_sort(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))
#define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))
#define sk_SRTP_PROTECTION_PROFILE_dup(sk) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_dup(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)))
#define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_deep_copy(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_copyfunc_type(copyfunc), ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)))
#define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, cmp) ((sk_SRTP_PROTECTION_PROFILE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp)))



typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data,
                                            int len, void *arg);
typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len,
                                        STACK_OF(SSL_CIPHER) *peer_ciphers,
                                        const SSL_CIPHER **cipher, void *arg);

/* Extension context codes */
/* This extension is only allowed in TLS */
#define SSL_EXT_TLS_ONLY                        0x0001
/* This extension is only allowed in DTLS */
#define SSL_EXT_DTLS_ONLY                       0x0002
/* Some extensions may be allowed in DTLS but we don't implement them for it */
#define SSL_EXT_TLS_IMPLEMENTATION_ONLY         0x0004
/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */
#define SSL_EXT_SSL3_ALLOWED                    0x0008
/* Extension is only defined for TLS1.2 and below */
#define SSL_EXT_TLS1_2_AND_BELOW_ONLY           0x0010
/* Extension is only defined for TLS1.3 and above */
#define SSL_EXT_TLS1_3_ONLY                     0x0020
/* Ignore this extension during parsing if we are resuming */
#define SSL_EXT_IGNORE_ON_RESUMPTION            0x0040
#define SSL_EXT_CLIENT_HELLO                    0x0080
/* Really means TLS1.2 or below */
#define SSL_EXT_TLS1_2_SERVER_HELLO             0x0100
#define SSL_EXT_TLS1_3_SERVER_HELLO             0x0200
#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS     0x0400
#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST      0x0800
#define SSL_EXT_TLS1_3_CERTIFICATE              0x1000
#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET       0x2000
#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST      0x4000

/* Typedefs for handling custom extensions */

typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type,
                                 const unsigned char **out, size_t *outlen,
                                 int *al, void *add_arg);

typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type,
                                   const unsigned char *out, void *add_arg);

typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type,
                                   const unsigned char *in, size_t inlen,
                                   int *al, void *parse_arg);


typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type,
                                        unsigned int context,
                                        const unsigned char **out,
                                        size_t *outlen, X509 *x,
                                        size_t chainidx,
                                        int *al, void *add_arg);

typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type,
                                          unsigned int context,
                                          const unsigned char *out,
                                          void *add_arg);

typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type,
                                          unsigned int context,
                                          const unsigned char *in,
                                          size_t inlen, X509 *x,
                                          size_t chainidx,
                                          int *al, void *parse_arg);

/* Typedef for verification callback */
typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx);

/* Typedef for SSL async callback */
typedef int (*SSL_async_callback_fn)(SSL *s, void *arg);

#define SSL_OP_BIT(n)  ((uint64_t)1 << (uint64_t)n)

/*
 * SSL/TLS connection options.
 */
    /* Disable Extended master secret */
# define SSL_OP_NO_EXTENDED_MASTER_SECRET                SSL_OP_BIT(0)
    /* Cleanse plaintext copies of data delivered to the application */
# define SSL_OP_CLEANSE_PLAINTEXT                        SSL_OP_BIT(1)
    /* Allow initial connection to servers that don't support RI */
# define SSL_OP_LEGACY_SERVER_CONNECT                    SSL_OP_BIT(2)
    /* Enable support for Kernel TLS */
# define SSL_OP_ENABLE_KTLS                              SSL_OP_BIT(3)
# define SSL_OP_TLSEXT_PADDING                           SSL_OP_BIT(4)
# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG                   SSL_OP_BIT(6)
# define SSL_OP_IGNORE_UNEXPECTED_EOF                    SSL_OP_BIT(7)
# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION               SSL_OP_BIT(8)
# define SSL_OP_DISABLE_TLSEXT_CA_NAMES                  SSL_OP_BIT(9)
    /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */
# define SSL_OP_ALLOW_NO_DHE_KEX                         SSL_OP_BIT(10)
    /*
     * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added
     * in OpenSSL 0.9.6d.  Usually (depending on the application protocol)
     * the workaround is not needed.  Unfortunately some broken SSL/TLS
     * implementations cannot handle it at all, which is why we include it
     * in SSL_OP_ALL. Added in 0.9.6e
     */
# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS              SSL_OP_BIT(11)
    /* DTLS options */
# define SSL_OP_NO_QUERY_MTU                             SSL_OP_BIT(12)
    /* Turn on Cookie Exchange (on relevant for servers) */
# define SSL_OP_COOKIE_EXCHANGE                          SSL_OP_BIT(13)
    /* Don't use RFC4507 ticket extension */
# define SSL_OP_NO_TICKET                                SSL_OP_BIT(14)
# ifndef OPENSSL_NO_DTLS1_METHOD
    /*
     * Use Cisco's version identifier of DTLS_BAD_VER
     * (only with deprecated DTLSv1_client_method())
     */
#  define SSL_OP_CISCO_ANYCONNECT                        SSL_OP_BIT(15)
# endif
    /* As server, disallow session resumption on renegotiation */
# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION   SSL_OP_BIT(16)
    /* Don't use compression even if supported */
# define SSL_OP_NO_COMPRESSION                           SSL_OP_BIT(17)
    /* Permit unsafe legacy renegotiation */
# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION        SSL_OP_BIT(18)
    /* Disable encrypt-then-mac */
# define SSL_OP_NO_ENCRYPT_THEN_MAC                      SSL_OP_BIT(19)
    /*
     * Enable TLSv1.3 Compatibility mode. This is on by default. A future
     * version of OpenSSL may have this disabled by default.
     */
# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT                  SSL_OP_BIT(20)
    /*
     * Prioritize Chacha20Poly1305 when client does.
     * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE
     */
# define SSL_OP_PRIORITIZE_CHACHA                        SSL_OP_BIT(21)
    /*
     * Set on servers to choose the cipher according to server's preferences.
     */
# define SSL_OP_CIPHER_SERVER_PREFERENCE                 SSL_OP_BIT(22)
    /*
     * If set, a server will allow a client to issue a SSLv3.0 version
     * number as latest version supported in the premaster secret, even when
     * TLSv1.0 (version 3.1) was announced in the client hello. Normally
     * this is forbidden to prevent version rollback attacks.
     */
# define SSL_OP_TLS_ROLLBACK_BUG                         SSL_OP_BIT(23)
    /*
     * Switches off automatic TLSv1.3 anti-replay protection for early data.
     * This is a server-side option only (no effect on the client).
     */
# define SSL_OP_NO_ANTI_REPLAY                           SSL_OP_BIT(24)
# define SSL_OP_NO_SSLv3                                 SSL_OP_BIT(25)
# define SSL_OP_NO_TLSv1                                 SSL_OP_BIT(26)
# define SSL_OP_NO_TLSv1_2                               SSL_OP_BIT(27)
# define SSL_OP_NO_TLSv1_1                               SSL_OP_BIT(28)
# define SSL_OP_NO_TLSv1_3                               SSL_OP_BIT(29)
# define SSL_OP_NO_DTLSv1                                SSL_OP_BIT(26)
# define SSL_OP_NO_DTLSv1_2                              SSL_OP_BIT(27)
    /* Disallow all renegotiation */
# define SSL_OP_NO_RENEGOTIATION                         SSL_OP_BIT(30)
    /*
     * Make server add server-hello extension from early version of
     * cryptopro draft, when GOST ciphersuite is negotiated. Required for
     * interoperability with CryptoPro CSP 3.x
     */
# define SSL_OP_CRYPTOPRO_TLSEXT_BUG                     SSL_OP_BIT(31)

/*
 * Option "collections."
 */
# define SSL_OP_NO_SSL_MASK \
        ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \
          | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 )
# define SSL_OP_NO_DTLS_MASK \
        ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 )

/* Various bug workarounds that should be rather harmless. */
# define SSL_OP_ALL \
        ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \
          | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG )

/*
 * OBSOLETE OPTIONS retained for compatibility
 */

# define SSL_OP_MICROSOFT_SESS_ID_BUG                    0x0
# define SSL_OP_NETSCAPE_CHALLENGE_BUG                   0x0
# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG         0x0
# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG              0x0
# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER               0x0
# define SSL_OP_MSIE_SSLV2_RSA_PADDING                   0x0
# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG                 0x0
# define SSL_OP_TLS_D5_BUG                               0x0
# define SSL_OP_TLS_BLOCK_PADDING_BUG                    0x0
# define SSL_OP_SINGLE_ECDH_USE                          0x0
# define SSL_OP_SINGLE_DH_USE                            0x0
# define SSL_OP_EPHEMERAL_RSA                            0x0
# define SSL_OP_NO_SSLv2                                 0x0
# define SSL_OP_PKCS1_CHECK_1                            0x0
# define SSL_OP_PKCS1_CHECK_2                            0x0
# define SSL_OP_NETSCAPE_CA_DN_BUG                       0x0
# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG          0x0

/*
 * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success
 * when just a single record has been written):
 */
# define SSL_MODE_ENABLE_PARTIAL_WRITE       0x00000001U
/*
 * Make it possible to retry SSL_write() with changed buffer location (buffer
 * contents must stay the same!); this is not the default to avoid the
 * misconception that non-blocking SSL_write() behaves like non-blocking
 * write():
 */
# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U
/*
 * Never bother the application with retries if the transport is blocking:
 */
# define SSL_MODE_AUTO_RETRY 0x00000004U
/* Don't attempt to automatically build certificate chain */
# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U
/*
 * Save RAM by releasing read and write buffers when they're empty. (SSL3 and
 * TLS only.) Released buffers are freed.
 */
# define SSL_MODE_RELEASE_BUFFERS 0x00000010U
/*
 * Send the current time in the Random fields of the ClientHello and
 * ServerHello records for compatibility with hypothetical implementations
 * that require it.
 */
# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U
# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U
/*
 * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications
 * that reconnect with a downgraded protocol version; see
 * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your
 * application attempts a normal handshake. Only use this in explicit
 * fallback retries, following the guidance in
 * draft-ietf-tls-downgrade-scsv-00.
 */
# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U
/*
 * Support Asynchronous operation
 */
# define SSL_MODE_ASYNC 0x00000100U

/*
 * When using DTLS/SCTP, include the terminating zero in the label
 * used for computing the endpoint-pair shared secret. Required for
 * interoperability with implementations having this bug like these
 * older version of OpenSSL:
 * - OpenSSL 1.0.0 series
 * - OpenSSL 1.0.1 series
 * - OpenSSL 1.0.2 series
 * - OpenSSL 1.1.0 series
 * - OpenSSL 1.1.1 and 1.1.1a
 */
# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U

/* Cert related flags */
/*
 * Many implementations ignore some aspects of the TLS standards such as
 * enforcing certificate chain algorithms. When this is set we enforce them.
 */
# define SSL_CERT_FLAG_TLS_STRICT                0x00000001U

/* Suite B modes, takes same values as certificate verify flags */
# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY       0x10000
/* Suite B 192 bit only mode */
# define SSL_CERT_FLAG_SUITEB_192_LOS            0x20000
/* Suite B 128 bit mode allowing 192 bit algorithms */
# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000

/* Perform all sorts of protocol violations for testing purposes */
# define SSL_CERT_FLAG_BROKEN_PROTOCOL           0x10000000

/* Flags for building certificate chains */
/* Treat any existing certificates as untrusted CAs */
# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED          0x1
/* Don't include root CA in chain */
# define SSL_BUILD_CHAIN_FLAG_NO_ROOT            0x2
/* Just check certificates already there */
# define SSL_BUILD_CHAIN_FLAG_CHECK              0x4
/* Ignore verification errors */
# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR       0x8
/* Clear verification errors from queue */
# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR        0x10

/* Flags returned by SSL_check_chain */
/* Certificate can be used with this session */
# define CERT_PKEY_VALID         0x1
/* Certificate can also be used for signing */
# define CERT_PKEY_SIGN          0x2
/* EE certificate signing algorithm OK */
# define CERT_PKEY_EE_SIGNATURE  0x10
/* CA signature algorithms OK */
# define CERT_PKEY_CA_SIGNATURE  0x20
/* EE certificate parameters OK */
# define CERT_PKEY_EE_PARAM      0x40
/* CA certificate parameters OK */
# define CERT_PKEY_CA_PARAM      0x80
/* Signing explicitly allowed as opposed to SHA1 fallback */
# define CERT_PKEY_EXPLICIT_SIGN 0x100
/* Client CA issuer names match (always set for server cert) */
# define CERT_PKEY_ISSUER_NAME   0x200
/* Cert type matches client types (always set for server cert) */
# define CERT_PKEY_CERT_TYPE     0x400
/* Cert chain suitable to Suite B */
# define CERT_PKEY_SUITEB        0x800

# define SSL_CONF_FLAG_CMDLINE           0x1
# define SSL_CONF_FLAG_FILE              0x2
# define SSL_CONF_FLAG_CLIENT            0x4
# define SSL_CONF_FLAG_SERVER            0x8
# define SSL_CONF_FLAG_SHOW_ERRORS       0x10
# define SSL_CONF_FLAG_CERTIFICATE       0x20
# define SSL_CONF_FLAG_REQUIRE_PRIVATE   0x40
/* Configuration value types */
# define SSL_CONF_TYPE_UNKNOWN           0x0
# define SSL_CONF_TYPE_STRING            0x1
# define SSL_CONF_TYPE_FILE              0x2
# define SSL_CONF_TYPE_DIR               0x3
# define SSL_CONF_TYPE_NONE              0x4
# define SSL_CONF_TYPE_STORE             0x5

/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */
# define SSL_COOKIE_LENGTH                       4096

/*
 * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they
 * cannot be used to clear bits.
 */

uint64_t SSL_CTX_get_options(const SSL_CTX *ctx);
uint64_t SSL_get_options(const SSL *s);
uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op);
uint64_t SSL_clear_options(SSL *s, uint64_t op);
uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op);
uint64_t SSL_set_options(SSL *s, uint64_t op);

# define SSL_CTX_set_mode(ctx,op) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
# define SSL_CTX_clear_mode(ctx,op) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL)
# define SSL_CTX_get_mode(ctx) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)
# define SSL_clear_mode(ssl,op) \
        SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL)
# define SSL_set_mode(ssl,op) \
        SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)
# define SSL_get_mode(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)
# define SSL_set_mtu(ssl, mtu) \
        SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)
# define DTLS_set_link_mtu(ssl, mtu) \
        SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL)
# define DTLS_get_link_min_mtu(ssl) \
        SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL)

# define SSL_get_secure_renegotiation_support(ssl) \
        SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL)

# define SSL_CTX_set_cert_flags(ctx,op) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL)
# define SSL_set_cert_flags(s,op) \
        SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL)
# define SSL_CTX_clear_cert_flags(ctx,op) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
# define SSL_clear_cert_flags(s,op) \
        SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)

void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
                              void (*cb) (int write_p, int version,
                                          int content_type, const void *buf,
                                          size_t len, SSL *ssl, void *arg));
void SSL_set_msg_callback(SSL *ssl,
                          void (*cb) (int write_p, int version,
                                      int content_type, const void *buf,
                                      size_t len, SSL *ssl, void *arg));
# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))

# define SSL_get_extms_support(s) \
        SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL)

# ifndef OPENSSL_NO_SRP
/* see tls_srp.c */
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s);
OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx);
OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx);
OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx);
OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s,
                                                                    int *ad);
OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s);
#  endif
# endif

/* 100k max cert list */
# define SSL_MAX_CERT_LIST_DEFAULT (1024*100)

# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT      (1024*20)

/*
 * This callback type is used inside SSL_CTX, SSL, and in the functions that
 * set them. It is used to override the generation of SSL/TLS session IDs in
 * a server. Return value should be zero on an error, non-zero to proceed.
 * Also, callbacks should themselves check if the id they generate is unique
 * otherwise the SSL handshake will fail with an error - callbacks can do
 * this using the 'ssl' value they're passed by;
 * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in
 * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32
 * bytes. The callback can alter this length to be less if desired. It is
 * also an error for the callback to set the size to zero.
 */
typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id,
                               unsigned int *id_len);

# define SSL_SESS_CACHE_OFF                      0x0000
# define SSL_SESS_CACHE_CLIENT                   0x0001
# define SSL_SESS_CACHE_SERVER                   0x0002
# define SSL_SESS_CACHE_BOTH     (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)
# define SSL_SESS_CACHE_NO_AUTO_CLEAR            0x0080
/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */
# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP       0x0100
# define SSL_SESS_CACHE_NO_INTERNAL_STORE        0x0200
# define SSL_SESS_CACHE_NO_INTERNAL \
        (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)
# define SSL_SESS_CACHE_UPDATE_TIME              0x0400

LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx);
# define SSL_CTX_sess_number(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)
# define SSL_CTX_sess_connect(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)
# define SSL_CTX_sess_connect_good(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)
# define SSL_CTX_sess_connect_renegotiate(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)
# define SSL_CTX_sess_accept(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)
# define SSL_CTX_sess_accept_renegotiate(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)
# define SSL_CTX_sess_accept_good(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)
# define SSL_CTX_sess_hits(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)
# define SSL_CTX_sess_cb_hits(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)
# define SSL_CTX_sess_misses(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)
# define SSL_CTX_sess_timeouts(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)
# define SSL_CTX_sess_cache_full(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)

void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,
                             int (*new_session_cb) (struct ssl_st *ssl,
                                                    SSL_SESSION *sess));
int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,
                                              SSL_SESSION *sess);
void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
                                void (*remove_session_cb) (struct ssl_ctx_st
                                                           *ctx,
                                                           SSL_SESSION *sess));
void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx,
                                                  SSL_SESSION *sess);
void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
                             SSL_SESSION *(*get_session_cb) (struct ssl_st
                                                             *ssl,
                                                             const unsigned char
                                                             *data, int len,
                                                             int *copy));
SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,
                                                       const unsigned char *data,
                                                       int len, int *copy);
void SSL_CTX_set_info_callback(SSL_CTX *ctx,
                               void (*cb) (const SSL *ssl, int type, int val));
void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type,
                                                 int val);
void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,
                                int (*client_cert_cb) (SSL *ssl, X509 **x509,
                                                       EVP_PKEY **pkey));
int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509,
                                                 EVP_PKEY **pkey);
# ifndef OPENSSL_NO_ENGINE
__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e);
# endif
void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,
                                    int (*app_gen_cookie_cb) (SSL *ssl,
                                                              unsigned char
                                                              *cookie,
                                                              unsigned int
                                                              *cookie_len));
void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,
                                  int (*app_verify_cookie_cb) (SSL *ssl,
                                                               const unsigned
                                                               char *cookie,
                                                               unsigned int
                                                               cookie_len));

void SSL_CTX_set_stateless_cookie_generate_cb(
    SSL_CTX *ctx,
    int (*gen_stateless_cookie_cb) (SSL *ssl,
                                    unsigned char *cookie,
                                    size_t *cookie_len));
void SSL_CTX_set_stateless_cookie_verify_cb(
    SSL_CTX *ctx,
    int (*verify_stateless_cookie_cb) (SSL *ssl,
                                       const unsigned char *cookie,
                                       size_t cookie_len));
# ifndef OPENSSL_NO_NEXTPROTONEG

typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl,
                                              const unsigned char **out,
                                              unsigned int *outlen,
                                              void *arg);
void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s,
                                           SSL_CTX_npn_advertised_cb_func cb,
                                           void *arg);
#  define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb

typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s,
                                          unsigned char **out,
                                          unsigned char *outlen,
                                          const unsigned char *in,
                                          unsigned int inlen,
                                          void *arg);
void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s,
                                      SSL_CTX_npn_select_cb_func cb,
                                      void *arg);
#  define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb

void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
                                    unsigned *len);
#  define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated
# endif

__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
                                 const unsigned char *in, unsigned int inlen,
                                 const unsigned char *client,
                                 unsigned int client_len);

# define OPENSSL_NPN_UNSUPPORTED 0
# define OPENSSL_NPN_NEGOTIATED  1
# define OPENSSL_NPN_NO_OVERLAP  2

__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
                                   unsigned int protos_len);
__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
                               unsigned int protos_len);
typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl,
                                           const unsigned char **out,
                                           unsigned char *outlen,
                                           const unsigned char *in,
                                           unsigned int inlen,
                                           void *arg);
void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
                                SSL_CTX_alpn_select_cb_func cb,
                                void *arg);
void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
                            unsigned int *len);

# ifndef OPENSSL_NO_PSK
/*
 * the maximum length of the buffer given to callbacks containing the
 * resulting identity/psk
 */
#  define PSK_MAX_IDENTITY_LEN 256
#  define PSK_MAX_PSK_LEN 512
typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl,
                                               const char *hint,
                                               char *identity,
                                               unsigned int max_identity_len,
                                               unsigned char *psk,
                                               unsigned int max_psk_len);
void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb);
void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb);

typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl,
                                               const char *identity,
                                               unsigned char *psk,
                                               unsigned int max_psk_len);
void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb);
void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb);

__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint);
__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint);
const char *SSL_get_psk_identity_hint(const SSL *s);
const char *SSL_get_psk_identity(const SSL *s);
# endif

typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl,
                                            const unsigned char *identity,
                                            size_t identity_len,
                                            SSL_SESSION **sess);
typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md,
                                           const unsigned char **id,
                                           size_t *idlen,
                                           SSL_SESSION **sess);

void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb);
void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
                                           SSL_psk_find_session_cb_func cb);
void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb);
void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
                                          SSL_psk_use_session_cb_func cb);

/* Register callbacks to handle custom TLS Extensions for client or server. */

__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx,
                                         unsigned int ext_type);

__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx,
                                         unsigned int ext_type,
                                         custom_ext_add_cb add_cb,
                                         custom_ext_free_cb free_cb,
                                         void *add_arg,
                                         custom_ext_parse_cb parse_cb,
                                         void *parse_arg);

__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx,
                                         unsigned int ext_type,
                                         custom_ext_add_cb add_cb,
                                         custom_ext_free_cb free_cb,
                                         void *add_arg,
                                         custom_ext_parse_cb parse_cb,
                                         void *parse_arg);

__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
                                  unsigned int context,
                                  SSL_custom_ext_add_cb_ex add_cb,
                                  SSL_custom_ext_free_cb_ex free_cb,
                                  void *add_arg,
                                  SSL_custom_ext_parse_cb_ex parse_cb,
                                  void *parse_arg);

__owur int SSL_extension_supported(unsigned int ext_type);

# define SSL_NOTHING            1
# define SSL_WRITING            2
# define SSL_READING            3
# define SSL_X509_LOOKUP        4
# define SSL_ASYNC_PAUSED       5
# define SSL_ASYNC_NO_JOBS      6
# define SSL_CLIENT_HELLO_CB    7
# define SSL_RETRY_VERIFY       8

/* These will only be used when doing non-blocking IO */
# define SSL_want_nothing(s)         (SSL_want(s) == SSL_NOTHING)
# define SSL_want_read(s)            (SSL_want(s) == SSL_READING)
# define SSL_want_write(s)           (SSL_want(s) == SSL_WRITING)
# define SSL_want_x509_lookup(s)     (SSL_want(s) == SSL_X509_LOOKUP)
# define SSL_want_retry_verify(s)    (SSL_want(s) == SSL_RETRY_VERIFY)
# define SSL_want_async(s)           (SSL_want(s) == SSL_ASYNC_PAUSED)
# define SSL_want_async_job(s)       (SSL_want(s) == SSL_ASYNC_NO_JOBS)
# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB)

# define SSL_MAC_FLAG_READ_MAC_STREAM 1
# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2
# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4
# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8

/*
 * A callback for logging out TLS key material. This callback should log out
 * |line| followed by a newline.
 */
typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line);

/*
 * SSL_CTX_set_keylog_callback configures a callback to log key material. This
 * is intended for debugging use with tools like Wireshark. The cb function
 * should log line followed by a newline.
 */
void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb);

/*
 * SSL_CTX_get_keylog_callback returns the callback configured by
 * SSL_CTX_set_keylog_callback.
 */
SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx);

int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data);
uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx);
int SSL_set_max_early_data(SSL *s, uint32_t max_early_data);
uint32_t SSL_get_max_early_data(const SSL *s);
int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data);
uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx);
int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data);
uint32_t SSL_get_recv_max_early_data(const SSL *s);

#ifdef __cplusplus
}
#endif

# include <openssl/ssl2.h>
# include <openssl/ssl3.h>
# include <openssl/tls1.h>      /* This is mostly sslv3 with a few tweaks */
# include <openssl/dtls1.h>     /* Datagram TLS */
# include <openssl/srtp.h>      /* Support for the use_srtp extension */

#ifdef  __cplusplus
extern "C" {
#endif

/*
 * These need to be after the above set of includes due to a compiler bug
 * in VisualStudio 2015
 */
SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER)
#define sk_SSL_CIPHER_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_CIPHER_sk_type(sk))
#define sk_SSL_CIPHER_value(sk, idx) ((const SSL_CIPHER *)OPENSSL_sk_value(ossl_check_const_SSL_CIPHER_sk_type(sk), (idx)))
#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp)))
#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_null())
#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n)))
#define sk_SSL_CIPHER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_CIPHER_sk_type(sk), (n))
#define sk_SSL_CIPHER_free(sk) OPENSSL_sk_free(ossl_check_SSL_CIPHER_sk_type(sk))
#define sk_SSL_CIPHER_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_CIPHER_sk_type(sk))
#define sk_SSL_CIPHER_delete(sk, i) ((const SSL_CIPHER *)OPENSSL_sk_delete(ossl_check_SSL_CIPHER_sk_type(sk), (i)))
#define sk_SSL_CIPHER_delete_ptr(sk, ptr) ((const SSL_CIPHER *)OPENSSL_sk_delete_ptr(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)))
#define sk_SSL_CIPHER_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))
#define sk_SSL_CIPHER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))
#define sk_SSL_CIPHER_pop(sk) ((const SSL_CIPHER *)OPENSSL_sk_pop(ossl_check_SSL_CIPHER_sk_type(sk)))
#define sk_SSL_CIPHER_shift(sk) ((const SSL_CIPHER *)OPENSSL_sk_shift(ossl_check_SSL_CIPHER_sk_type(sk)))
#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk),ossl_check_SSL_CIPHER_freefunc_type(freefunc))
#define sk_SSL_CIPHER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), (idx))
#define sk_SSL_CIPHER_set(sk, idx, ptr) ((const SSL_CIPHER *)OPENSSL_sk_set(ossl_check_SSL_CIPHER_sk_type(sk), (idx), ossl_check_SSL_CIPHER_type(ptr)))
#define sk_SSL_CIPHER_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))
#define sk_SSL_CIPHER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))
#define sk_SSL_CIPHER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), pnum)
#define sk_SSL_CIPHER_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_CIPHER_sk_type(sk))
#define sk_SSL_CIPHER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_CIPHER_sk_type(sk))
#define sk_SSL_CIPHER_dup(sk) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_dup(ossl_check_const_SSL_CIPHER_sk_type(sk)))
#define sk_SSL_CIPHER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_copyfunc_type(copyfunc), ossl_check_SSL_CIPHER_freefunc_type(freefunc)))
#define sk_SSL_CIPHER_set_cmp_func(sk, cmp) ((sk_SSL_CIPHER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP)
#define sk_SSL_COMP_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_COMP_sk_type(sk))
#define sk_SSL_COMP_value(sk, idx) ((SSL_COMP *)OPENSSL_sk_value(ossl_check_const_SSL_COMP_sk_type(sk), (idx)))
#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp)))
#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_null())
#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n)))
#define sk_SSL_COMP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_COMP_sk_type(sk), (n))
#define sk_SSL_COMP_free(sk) OPENSSL_sk_free(ossl_check_SSL_COMP_sk_type(sk))
#define sk_SSL_COMP_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_COMP_sk_type(sk))
#define sk_SSL_COMP_delete(sk, i) ((SSL_COMP *)OPENSSL_sk_delete(ossl_check_SSL_COMP_sk_type(sk), (i)))
#define sk_SSL_COMP_delete_ptr(sk, ptr) ((SSL_COMP *)OPENSSL_sk_delete_ptr(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)))
#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
#define sk_SSL_COMP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
#define sk_SSL_COMP_pop(sk) ((SSL_COMP *)OPENSSL_sk_pop(ossl_check_SSL_COMP_sk_type(sk)))
#define sk_SSL_COMP_shift(sk) ((SSL_COMP *)OPENSSL_sk_shift(ossl_check_SSL_COMP_sk_type(sk)))
#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk),ossl_check_SSL_COMP_freefunc_type(freefunc))
#define sk_SSL_COMP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), (idx))
#define sk_SSL_COMP_set(sk, idx, ptr) ((SSL_COMP *)OPENSSL_sk_set(ossl_check_SSL_COMP_sk_type(sk), (idx), ossl_check_SSL_COMP_type(ptr)))
#define sk_SSL_COMP_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
#define sk_SSL_COMP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
#define sk_SSL_COMP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), pnum)
#define sk_SSL_COMP_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_COMP_sk_type(sk))
#define sk_SSL_COMP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_COMP_sk_type(sk))
#define sk_SSL_COMP_dup(sk) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_dup(ossl_check_const_SSL_COMP_sk_type(sk)))
#define sk_SSL_COMP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_copyfunc_type(copyfunc), ossl_check_SSL_COMP_freefunc_type(freefunc)))
#define sk_SSL_COMP_set_cmp_func(sk, cmp) ((sk_SSL_COMP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_compfunc_type(cmp)))


/* compatibility */
# define SSL_set_app_data(s,arg)         (SSL_set_ex_data(s,0,(char *)(arg)))
# define SSL_get_app_data(s)             (SSL_get_ex_data(s,0))
# define SSL_SESSION_set_app_data(s,a)   (SSL_SESSION_set_ex_data(s,0, \
                                                                  (char *)(a)))
# define SSL_SESSION_get_app_data(s)     (SSL_SESSION_get_ex_data(s,0))
# define SSL_CTX_get_app_data(ctx)       (SSL_CTX_get_ex_data(ctx,0))
# define SSL_CTX_set_app_data(ctx,arg)   (SSL_CTX_set_ex_data(ctx,0, \
                                                              (char *)(arg)))
# ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug);
# endif

/* TLSv1.3 KeyUpdate message types */
/* -1 used so that this is an invalid value for the on-the-wire protocol */
#define SSL_KEY_UPDATE_NONE             -1
/* Values as defined for the on-the-wire protocol */
#define SSL_KEY_UPDATE_NOT_REQUESTED     0
#define SSL_KEY_UPDATE_REQUESTED         1

/*
 * The valid handshake states (one for each type message sent and one for each
 * type of message received). There are also two "special" states:
 * TLS = TLS or DTLS state
 * DTLS = DTLS specific state
 * CR/SR = Client Read/Server Read
 * CW/SW = Client Write/Server Write
 *
 * The "special" states are:
 * TLS_ST_BEFORE = No handshake has been initiated yet
 * TLS_ST_OK = A handshake has been successfully completed
 */
typedef enum {
    TLS_ST_BEFORE,
    TLS_ST_OK,
    DTLS_ST_CR_HELLO_VERIFY_REQUEST,
    TLS_ST_CR_SRVR_HELLO,
    TLS_ST_CR_CERT,
    TLS_ST_CR_CERT_STATUS,
    TLS_ST_CR_KEY_EXCH,
    TLS_ST_CR_CERT_REQ,
    TLS_ST_CR_SRVR_DONE,
    TLS_ST_CR_SESSION_TICKET,
    TLS_ST_CR_CHANGE,
    TLS_ST_CR_FINISHED,
    TLS_ST_CW_CLNT_HELLO,
    TLS_ST_CW_CERT,
    TLS_ST_CW_KEY_EXCH,
    TLS_ST_CW_CERT_VRFY,
    TLS_ST_CW_CHANGE,
    TLS_ST_CW_NEXT_PROTO,
    TLS_ST_CW_FINISHED,
    TLS_ST_SW_HELLO_REQ,
    TLS_ST_SR_CLNT_HELLO,
    DTLS_ST_SW_HELLO_VERIFY_REQUEST,
    TLS_ST_SW_SRVR_HELLO,
    TLS_ST_SW_CERT,
    TLS_ST_SW_KEY_EXCH,
    TLS_ST_SW_CERT_REQ,
    TLS_ST_SW_SRVR_DONE,
    TLS_ST_SR_CERT,
    TLS_ST_SR_KEY_EXCH,
    TLS_ST_SR_CERT_VRFY,
    TLS_ST_SR_NEXT_PROTO,
    TLS_ST_SR_CHANGE,
    TLS_ST_SR_FINISHED,
    TLS_ST_SW_SESSION_TICKET,
    TLS_ST_SW_CERT_STATUS,
    TLS_ST_SW_CHANGE,
    TLS_ST_SW_FINISHED,
    TLS_ST_SW_ENCRYPTED_EXTENSIONS,
    TLS_ST_CR_ENCRYPTED_EXTENSIONS,
    TLS_ST_CR_CERT_VRFY,
    TLS_ST_SW_CERT_VRFY,
    TLS_ST_CR_HELLO_REQ,
    TLS_ST_SW_KEY_UPDATE,
    TLS_ST_CW_KEY_UPDATE,
    TLS_ST_SR_KEY_UPDATE,
    TLS_ST_CR_KEY_UPDATE,
    TLS_ST_EARLY_DATA,
    TLS_ST_PENDING_EARLY_DATA_END,
    TLS_ST_CW_END_OF_EARLY_DATA,
    TLS_ST_SR_END_OF_EARLY_DATA
} OSSL_HANDSHAKE_STATE;

/*
 * Most of the following state values are no longer used and are defined to be
 * the closest equivalent value in the current state machine code. Not all
 * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT
 * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP,
 * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT.
 */

# define SSL_ST_CONNECT                  0x1000
# define SSL_ST_ACCEPT                   0x2000

# define SSL_ST_MASK                     0x0FFF

# define SSL_CB_LOOP                     0x01
# define SSL_CB_EXIT                     0x02
# define SSL_CB_READ                     0x04
# define SSL_CB_WRITE                    0x08
# define SSL_CB_ALERT                    0x4000/* used in callback */
# define SSL_CB_READ_ALERT               (SSL_CB_ALERT|SSL_CB_READ)
# define SSL_CB_WRITE_ALERT              (SSL_CB_ALERT|SSL_CB_WRITE)
# define SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)
# define SSL_CB_ACCEPT_EXIT              (SSL_ST_ACCEPT|SSL_CB_EXIT)
# define SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)
# define SSL_CB_CONNECT_EXIT             (SSL_ST_CONNECT|SSL_CB_EXIT)
# define SSL_CB_HANDSHAKE_START          0x10
# define SSL_CB_HANDSHAKE_DONE           0x20

/* Is the SSL_connection established? */
# define SSL_in_connect_init(a)          (SSL_in_init(a) && !SSL_is_server(a))
# define SSL_in_accept_init(a)           (SSL_in_init(a) && SSL_is_server(a))
int SSL_in_init(const SSL *s);
int SSL_in_before(const SSL *s);
int SSL_is_init_finished(const SSL *s);

/*
 * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you
 * should not need these
 */
# define SSL_ST_READ_HEADER                      0xF0
# define SSL_ST_READ_BODY                        0xF1
# define SSL_ST_READ_DONE                        0xF2

/*-
 * Obtain latest Finished message
 *   -- that we sent (SSL_get_finished)
 *   -- that we expected from peer (SSL_get_peer_finished).
 * Returns length (0 == no Finished so far), copies up to 'count' bytes.
 */
size_t SSL_get_finished(const SSL *s, void *buf, size_t count);
size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);

/*
 * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are
 * 'ored' with SSL_VERIFY_PEER if they are desired
 */
# define SSL_VERIFY_NONE                 0x00
# define SSL_VERIFY_PEER                 0x01
# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02
# define SSL_VERIFY_CLIENT_ONCE          0x04
# define SSL_VERIFY_POST_HANDSHAKE       0x08

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define OpenSSL_add_ssl_algorithms()   SSL_library_init()
#  define SSLeay_add_ssl_algorithms()    SSL_library_init()
# endif

/* More backward compatibility */
# define SSL_get_cipher(s) \
                SSL_CIPHER_get_name(SSL_get_current_cipher(s))
# define SSL_get_cipher_bits(s,np) \
                SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
# define SSL_get_cipher_version(s) \
                SSL_CIPHER_get_version(SSL_get_current_cipher(s))
# define SSL_get_cipher_name(s) \
                SSL_CIPHER_get_name(SSL_get_current_cipher(s))
# define SSL_get_time(a)         SSL_SESSION_get_time(a)
# define SSL_set_time(a,b)       SSL_SESSION_set_time((a),(b))
# define SSL_get_timeout(a)      SSL_SESSION_get_timeout(a)
# define SSL_set_timeout(a,b)    SSL_SESSION_set_timeout((a),(b))

# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)

DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
# define SSL_AD_REASON_OFFSET            1000/* offset to get SSL_R_... value
                                              * from SSL_AD_... */
/* These alert types are for SSLv3 and TLSv1 */
# define SSL_AD_CLOSE_NOTIFY             SSL3_AD_CLOSE_NOTIFY
/* fatal */
# define SSL_AD_UNEXPECTED_MESSAGE       SSL3_AD_UNEXPECTED_MESSAGE
/* fatal */
# define SSL_AD_BAD_RECORD_MAC           SSL3_AD_BAD_RECORD_MAC
# define SSL_AD_DECRYPTION_FAILED        TLS1_AD_DECRYPTION_FAILED
# define SSL_AD_RECORD_OVERFLOW          TLS1_AD_RECORD_OVERFLOW
/* fatal */
# define SSL_AD_DECOMPRESSION_FAILURE    SSL3_AD_DECOMPRESSION_FAILURE
/* fatal */
# define SSL_AD_HANDSHAKE_FAILURE        SSL3_AD_HANDSHAKE_FAILURE
/* Not for TLS */
# define SSL_AD_NO_CERTIFICATE           SSL3_AD_NO_CERTIFICATE
# define SSL_AD_BAD_CERTIFICATE          SSL3_AD_BAD_CERTIFICATE
# define SSL_AD_UNSUPPORTED_CERTIFICATE  SSL3_AD_UNSUPPORTED_CERTIFICATE
# define SSL_AD_CERTIFICATE_REVOKED      SSL3_AD_CERTIFICATE_REVOKED
# define SSL_AD_CERTIFICATE_EXPIRED      SSL3_AD_CERTIFICATE_EXPIRED
# define SSL_AD_CERTIFICATE_UNKNOWN      SSL3_AD_CERTIFICATE_UNKNOWN
/* fatal */
# define SSL_AD_ILLEGAL_PARAMETER        SSL3_AD_ILLEGAL_PARAMETER
/* fatal */
# define SSL_AD_UNKNOWN_CA               TLS1_AD_UNKNOWN_CA
/* fatal */
# define SSL_AD_ACCESS_DENIED            TLS1_AD_ACCESS_DENIED
/* fatal */
# define SSL_AD_DECODE_ERROR             TLS1_AD_DECODE_ERROR
# define SSL_AD_DECRYPT_ERROR            TLS1_AD_DECRYPT_ERROR
/* fatal */
# define SSL_AD_EXPORT_RESTRICTION       TLS1_AD_EXPORT_RESTRICTION
/* fatal */
# define SSL_AD_PROTOCOL_VERSION         TLS1_AD_PROTOCOL_VERSION
/* fatal */
# define SSL_AD_INSUFFICIENT_SECURITY    TLS1_AD_INSUFFICIENT_SECURITY
/* fatal */
# define SSL_AD_INTERNAL_ERROR           TLS1_AD_INTERNAL_ERROR
# define SSL_AD_USER_CANCELLED           TLS1_AD_USER_CANCELLED
# define SSL_AD_NO_RENEGOTIATION         TLS1_AD_NO_RENEGOTIATION
# define SSL_AD_MISSING_EXTENSION        TLS13_AD_MISSING_EXTENSION
# define SSL_AD_CERTIFICATE_REQUIRED     TLS13_AD_CERTIFICATE_REQUIRED
# define SSL_AD_UNSUPPORTED_EXTENSION    TLS1_AD_UNSUPPORTED_EXTENSION
# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE
# define SSL_AD_UNRECOGNIZED_NAME        TLS1_AD_UNRECOGNIZED_NAME
# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE
# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE
/* fatal */
# define SSL_AD_UNKNOWN_PSK_IDENTITY     TLS1_AD_UNKNOWN_PSK_IDENTITY
/* fatal */
# define SSL_AD_INAPPROPRIATE_FALLBACK   TLS1_AD_INAPPROPRIATE_FALLBACK
# define SSL_AD_NO_APPLICATION_PROTOCOL  TLS1_AD_NO_APPLICATION_PROTOCOL
# define SSL_ERROR_NONE                  0
# define SSL_ERROR_SSL                   1
# define SSL_ERROR_WANT_READ             2
# define SSL_ERROR_WANT_WRITE            3
# define SSL_ERROR_WANT_X509_LOOKUP      4
# define SSL_ERROR_SYSCALL               5/* look at error stack/return
                                           * value/errno */
# define SSL_ERROR_ZERO_RETURN           6
# define SSL_ERROR_WANT_CONNECT          7
# define SSL_ERROR_WANT_ACCEPT           8
# define SSL_ERROR_WANT_ASYNC            9
# define SSL_ERROR_WANT_ASYNC_JOB       10
# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11
# define SSL_ERROR_WANT_RETRY_VERIFY    12

# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define SSL_CTRL_SET_TMP_DH                    3
#  define SSL_CTRL_SET_TMP_ECDH                  4
#  define SSL_CTRL_SET_TMP_DH_CB                 6
# endif

# define SSL_CTRL_GET_CLIENT_CERT_REQUEST        9
# define SSL_CTRL_GET_NUM_RENEGOTIATIONS         10
# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS       11
# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS       12
# define SSL_CTRL_GET_FLAGS                      13
# define SSL_CTRL_EXTRA_CHAIN_CERT               14
# define SSL_CTRL_SET_MSG_CALLBACK               15
# define SSL_CTRL_SET_MSG_CALLBACK_ARG           16
/* only applies to datagram connections */
# define SSL_CTRL_SET_MTU                17
/* Stats */
# define SSL_CTRL_SESS_NUMBER                    20
# define SSL_CTRL_SESS_CONNECT                   21
# define SSL_CTRL_SESS_CONNECT_GOOD              22
# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE       23
# define SSL_CTRL_SESS_ACCEPT                    24
# define SSL_CTRL_SESS_ACCEPT_GOOD               25
# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE        26
# define SSL_CTRL_SESS_HIT                       27
# define SSL_CTRL_SESS_CB_HIT                    28
# define SSL_CTRL_SESS_MISSES                    29
# define SSL_CTRL_SESS_TIMEOUTS                  30
# define SSL_CTRL_SESS_CACHE_FULL                31
# define SSL_CTRL_MODE                           33
# define SSL_CTRL_GET_READ_AHEAD                 40
# define SSL_CTRL_SET_READ_AHEAD                 41
# define SSL_CTRL_SET_SESS_CACHE_SIZE            42
# define SSL_CTRL_GET_SESS_CACHE_SIZE            43
# define SSL_CTRL_SET_SESS_CACHE_MODE            44
# define SSL_CTRL_GET_SESS_CACHE_MODE            45
# define SSL_CTRL_GET_MAX_CERT_LIST              50
# define SSL_CTRL_SET_MAX_CERT_LIST              51
# define SSL_CTRL_SET_MAX_SEND_FRAGMENT          52
/* see tls1.h for macros based on these */
# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB       53
# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG      54
# define SSL_CTRL_SET_TLSEXT_HOSTNAME            55
# define SSL_CTRL_SET_TLSEXT_DEBUG_CB            56
# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG           57
# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS         58
# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS         59
/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT    60 */
/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */
/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB       63
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG   64
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE     65
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS     66
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS     67
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS      68
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS      69
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP        70
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP        71
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB      72
# endif
# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB    75
# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB                76
# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB             77
# define SSL_CTRL_SET_SRP_ARG            78
# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME               79
# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH               80
# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD               81
# define DTLS_CTRL_GET_TIMEOUT           73
# define DTLS_CTRL_HANDLE_TIMEOUT        74
# define SSL_CTRL_GET_RI_SUPPORT                 76
# define SSL_CTRL_CLEAR_MODE                     78
# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB      79
# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS          82
# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS        83
# define SSL_CTRL_CHAIN                          88
# define SSL_CTRL_CHAIN_CERT                     89
# define SSL_CTRL_GET_GROUPS                     90
# define SSL_CTRL_SET_GROUPS                     91
# define SSL_CTRL_SET_GROUPS_LIST                92
# define SSL_CTRL_GET_SHARED_GROUP               93
# define SSL_CTRL_SET_SIGALGS                    97
# define SSL_CTRL_SET_SIGALGS_LIST               98
# define SSL_CTRL_CERT_FLAGS                     99
# define SSL_CTRL_CLEAR_CERT_FLAGS               100
# define SSL_CTRL_SET_CLIENT_SIGALGS             101
# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST        102
# define SSL_CTRL_GET_CLIENT_CERT_TYPES          103
# define SSL_CTRL_SET_CLIENT_CERT_TYPES          104
# define SSL_CTRL_BUILD_CERT_CHAIN               105
# define SSL_CTRL_SET_VERIFY_CERT_STORE          106
# define SSL_CTRL_SET_CHAIN_CERT_STORE           107
# define SSL_CTRL_GET_PEER_SIGNATURE_NID         108
# define SSL_CTRL_GET_PEER_TMP_KEY               109
# define SSL_CTRL_GET_RAW_CIPHERLIST             110
# define SSL_CTRL_GET_EC_POINT_FORMATS           111
# define SSL_CTRL_GET_CHAIN_CERTS                115
# define SSL_CTRL_SELECT_CURRENT_CERT            116
# define SSL_CTRL_SET_CURRENT_CERT               117
# define SSL_CTRL_SET_DH_AUTO                    118
# define DTLS_CTRL_SET_LINK_MTU                  120
# define DTLS_CTRL_GET_LINK_MIN_MTU              121
# define SSL_CTRL_GET_EXTMS_SUPPORT              122
# define SSL_CTRL_SET_MIN_PROTO_VERSION          123
# define SSL_CTRL_SET_MAX_PROTO_VERSION          124
# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT        125
# define SSL_CTRL_SET_MAX_PIPELINES              126
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE     127
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB       128
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG   129
# define SSL_CTRL_GET_MIN_PROTO_VERSION          130
# define SSL_CTRL_GET_MAX_PROTO_VERSION          131
# define SSL_CTRL_GET_SIGNATURE_NID              132
# define SSL_CTRL_GET_TMP_KEY                    133
# define SSL_CTRL_GET_NEGOTIATED_GROUP           134
# define SSL_CTRL_SET_RETRY_VERIFY               136
# define SSL_CTRL_GET_VERIFY_CERT_STORE          137
# define SSL_CTRL_GET_CHAIN_CERT_STORE           138
# define SSL_CERT_SET_FIRST                      1
# define SSL_CERT_SET_NEXT                       2
# define SSL_CERT_SET_SERVER                     3
# define DTLSv1_get_timeout(ssl, arg) \
        SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg))
# define DTLSv1_handle_timeout(ssl) \
        SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL)
# define SSL_num_renegotiations(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)
# define SSL_clear_num_renegotiations(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)
# define SSL_total_renegotiations(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define SSL_CTX_set_tmp_dh(ctx,dh) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh))
# endif
# define SSL_CTX_set_dh_auto(ctx, onoff) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL)
# define SSL_set_dh_auto(s, onoff) \
        SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL)
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define SSL_set_tmp_dh(ssl,dh) \
        SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh))
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh))
#  define SSL_set_tmp_ecdh(ssl,ecdh) \
        SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh))
# endif
# define SSL_CTX_add_extra_chain_cert(ctx,x509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509))
# define SSL_CTX_get_extra_chain_certs(ctx,px509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509)
# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509)
# define SSL_CTX_clear_extra_chain_certs(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL)
# define SSL_CTX_set0_chain(ctx,sk) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk))
# define SSL_CTX_set1_chain(ctx,sk) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk))
# define SSL_CTX_add0_chain_cert(ctx,x509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509))
# define SSL_CTX_add1_chain_cert(ctx,x509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509))
# define SSL_CTX_get0_chain_certs(ctx,px509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
# define SSL_CTX_clear_chain_certs(ctx) \
        SSL_CTX_set0_chain(ctx,NULL)
# define SSL_CTX_build_cert_chain(ctx, flags) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
# define SSL_CTX_select_current_cert(ctx,x509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509))
# define SSL_CTX_set_current_cert(ctx, op) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
# define SSL_CTX_set0_verify_cert_store(ctx,st) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st))
# define SSL_CTX_set1_verify_cert_store(ctx,st) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st))
# define SSL_CTX_get0_verify_cert_store(ctx,st) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st))
# define SSL_CTX_set0_chain_cert_store(ctx,st) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st))
# define SSL_CTX_set1_chain_cert_store(ctx,st) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st))
# define SSL_CTX_get0_chain_cert_store(ctx,st) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st))
# define SSL_set0_chain(s,sk) \
        SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk))
# define SSL_set1_chain(s,sk) \
        SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk))
# define SSL_add0_chain_cert(s,x509) \
        SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509))
# define SSL_add1_chain_cert(s,x509) \
        SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509))
# define SSL_get0_chain_certs(s,px509) \
        SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
# define SSL_clear_chain_certs(s) \
        SSL_set0_chain(s,NULL)
# define SSL_build_cert_chain(s, flags) \
        SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
# define SSL_select_current_cert(s,x509) \
        SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509))
# define SSL_set_current_cert(s,op) \
        SSL_ctrl(s,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
# define SSL_set0_verify_cert_store(s,st) \
        SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st))
# define SSL_set1_verify_cert_store(s,st) \
        SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st))
#define SSL_get0_verify_cert_store(s,st) \
        SSL_ctrl(s,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st))
# define SSL_set0_chain_cert_store(s,st) \
        SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st))
# define SSL_set1_chain_cert_store(s,st) \
        SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st))
#define SSL_get0_chain_cert_store(s,st) \
        SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st))

# define SSL_get1_groups(s, glist) \
        SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist))
# define SSL_CTX_set1_groups(ctx, glist, glistlen) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(int *)(glist))
# define SSL_CTX_set1_groups_list(ctx, s) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s))
# define SSL_set1_groups(s, glist, glistlen) \
        SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist))
# define SSL_set1_groups_list(s, str) \
        SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str))
# define SSL_get_shared_group(s, n) \
        SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL)
# define SSL_get_negotiated_group(s) \
        SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL)
# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist))
# define SSL_CTX_set1_sigalgs_list(ctx, s) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s))
# define SSL_set1_sigalgs(s, slist, slistlen) \
        SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist))
# define SSL_set1_sigalgs_list(s, str) \
        SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str))
# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist))
# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s))
# define SSL_set1_client_sigalgs(s, slist, slistlen) \
        SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist))
# define SSL_set1_client_sigalgs_list(s, str) \
        SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str))
# define SSL_get0_certificate_types(s, clist) \
        SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist))
# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \
                     (char *)(clist))
# define SSL_set1_client_certificate_types(s, clist, clistlen) \
        SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist))
# define SSL_get_signature_nid(s, pn) \
        SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn)
# define SSL_get_peer_signature_nid(s, pn) \
        SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn)
# define SSL_get_peer_tmp_key(s, pk) \
        SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk)
# define SSL_get_tmp_key(s, pk) \
        SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk)
# define SSL_get0_raw_cipherlist(s, plst) \
        SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst)
# define SSL_get0_ec_point_formats(s, plst) \
        SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst)
# define SSL_CTX_set_min_proto_version(ctx, version) \
        SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL)
# define SSL_CTX_set_max_proto_version(ctx, version) \
        SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL)
# define SSL_CTX_get_min_proto_version(ctx) \
        SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL)
# define SSL_CTX_get_max_proto_version(ctx) \
        SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL)
# define SSL_set_min_proto_version(s, version) \
        SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL)
# define SSL_set_max_proto_version(s, version) \
        SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL)
# define SSL_get_min_proto_version(s) \
        SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL)
# define SSL_get_max_proto_version(s) \
        SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL)

const char *SSL_group_to_name(SSL *s, int id);

/* Backwards compatibility, original 1.1.0 names */
# define SSL_CTRL_GET_SERVER_TMP_KEY \
         SSL_CTRL_GET_PEER_TMP_KEY
# define SSL_get_server_tmp_key(s, pk) \
         SSL_get_peer_tmp_key(s, pk)

int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey);
int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey);

/*
 * The following symbol names are old and obsolete. They are kept
 * for compatibility reasons only and should not be used anymore.
 */
# define SSL_CTRL_GET_CURVES           SSL_CTRL_GET_GROUPS
# define SSL_CTRL_SET_CURVES           SSL_CTRL_SET_GROUPS
# define SSL_CTRL_SET_CURVES_LIST      SSL_CTRL_SET_GROUPS_LIST
# define SSL_CTRL_GET_SHARED_CURVE     SSL_CTRL_GET_SHARED_GROUP

# define SSL_get1_curves               SSL_get1_groups
# define SSL_CTX_set1_curves           SSL_CTX_set1_groups
# define SSL_CTX_set1_curves_list      SSL_CTX_set1_groups_list
# define SSL_set1_curves               SSL_set1_groups
# define SSL_set1_curves_list          SSL_set1_groups_list
# define SSL_get_shared_curve          SSL_get_shared_group


# ifndef OPENSSL_NO_DEPRECATED_1_1_0
/* Provide some compatibility macros for removed functionality. */
#  define SSL_CTX_need_tmp_RSA(ctx)                0
#  define SSL_CTX_set_tmp_rsa(ctx,rsa)             1
#  define SSL_need_tmp_RSA(ssl)                    0
#  define SSL_set_tmp_rsa(ssl,rsa)                 1
#  define SSL_CTX_set_ecdh_auto(dummy, onoff)      ((onoff) != 0)
#  define SSL_set_ecdh_auto(dummy, onoff)          ((onoff) != 0)
/*
 * We "pretend" to call the callback to avoid warnings about unused static
 * functions.
 */
#  define SSL_CTX_set_tmp_rsa_callback(ctx, cb)    while(0) (cb)(NULL, 0, 0)
#  define SSL_set_tmp_rsa_callback(ssl, cb)        while(0) (cb)(NULL, 0, 0)
# endif
__owur const BIO_METHOD *BIO_f_ssl(void);
__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client);
__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from);
void BIO_ssl_shutdown(BIO *ssl_bio);

__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str);
__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq,
                               const SSL_METHOD *meth);
int SSL_CTX_up_ref(SSL_CTX *ctx);
void SSL_CTX_free(SSL_CTX *);
__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t);
__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx);
__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *);
void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *);
void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *);
__owur int SSL_want(const SSL *s);
__owur int SSL_clear(SSL *s);

void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm);

__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s);
__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s);
__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits);
__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c);
__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c);
__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c);
__owur const char *OPENSSL_cipher_name(const char *rfc_name);
__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c);
__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c);
__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c);
__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c);
__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c);
__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c);

__owur int SSL_get_fd(const SSL *s);
__owur int SSL_get_rfd(const SSL *s);
__owur int SSL_get_wfd(const SSL *s);
__owur const char *SSL_get_cipher_list(const SSL *s, int n);
__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size);
__owur int SSL_get_read_ahead(const SSL *s);
__owur int SSL_pending(const SSL *s);
__owur int SSL_has_pending(const SSL *s);
# ifndef OPENSSL_NO_SOCK
__owur int SSL_set_fd(SSL *s, int fd);
__owur int SSL_set_rfd(SSL *s, int fd);
__owur int SSL_set_wfd(SSL *s, int fd);
# endif
void SSL_set0_rbio(SSL *s, BIO *rbio);
void SSL_set0_wbio(SSL *s, BIO *wbio);
void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio);
__owur BIO *SSL_get_rbio(const SSL *s);
__owur BIO *SSL_get_wbio(const SSL *s);
__owur int SSL_set_cipher_list(SSL *s, const char *str);
__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str);
__owur int SSL_set_ciphersuites(SSL *s, const char *str);
void SSL_set_read_ahead(SSL *s, int yes);
__owur int SSL_get_verify_mode(const SSL *s);
__owur int SSL_get_verify_depth(const SSL *s);
__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s);
void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback);
void SSL_set_verify_depth(SSL *s, int depth);
void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg);
# ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
OSSL_DEPRECATEDIN_3_0
__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl,
                                      const unsigned char *d, long len);
# endif
__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d,
                                   long len);
__owur int SSL_use_certificate(SSL *ssl, X509 *x);
__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);
__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey,
                                STACK_OF(X509) *chain, int override);


/* serverinfo file format versions */
# define SSL_SERVERINFOV1   1
# define SSL_SERVERINFOV2   2

/* Set serverinfo data for the current active cert. */
__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,
                                  size_t serverinfo_length);
__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version,
                                     const unsigned char *serverinfo,
                                     size_t serverinfo_length);
__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);

#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
#endif

__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type);

#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file,
                                          int type);
#endif
__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file,
                                       int type);
__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file,
                                        int type);
/* PEM type */
__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file);
__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file);
__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);
__owur STACK_OF(X509_NAME)
*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx,
                            const char *propq);
__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
                                               const char *file);
int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
                                       const char *dir);
int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
                                       const char *uri);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define SSL_load_error_strings() \
    OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \
                     | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
# endif

__owur const char *SSL_state_string(const SSL *s);
__owur const char *SSL_rstate_string(const SSL *s);
__owur const char *SSL_state_string_long(const SSL *s);
__owur const char *SSL_rstate_string_long(const SSL *s);
__owur long SSL_SESSION_get_time(const SSL_SESSION *s);
__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t);
__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s);
__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s);
__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version);

__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s);
__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname);
void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s,
                                    const unsigned char **alpn,
                                    size_t *len);
__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s,
                                          const unsigned char *alpn,
                                          size_t len);
__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s);
__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher);
__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s);
__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s);
void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick,
                             size_t *len);
__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s);
__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s,
                                          uint32_t max_early_data);
__owur int SSL_copy_session_id(SSL *to, const SSL *from);
__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s);
__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s,
                                       const unsigned char *sid_ctx,
                                       unsigned int sid_ctx_len);
__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid,
                               unsigned int sid_len);
__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s);

__owur SSL_SESSION *SSL_SESSION_new(void);
__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src);
const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s,
                                        unsigned int *len);
const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s,
                                                 unsigned int *len);
__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s);
# ifndef OPENSSL_NO_STDIO
int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses);
# endif
int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses);
int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x);
int SSL_SESSION_up_ref(SSL_SESSION *ses);
void SSL_SESSION_free(SSL_SESSION *ses);
__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp);
__owur int SSL_set_session(SSL *to, SSL_SESSION *session);
int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session);
int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session);
__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb);
__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb);
__owur int SSL_has_matching_session_id(const SSL *s,
                                       const unsigned char *id,
                                       unsigned int id_len);
SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp,
                             long length);

# ifdef OPENSSL_X509_H
__owur X509 *SSL_get0_peer_certificate(const SSL *s);
__owur X509 *SSL_get1_peer_certificate(const SSL *s);
/* Deprecated in 3.0.0 */
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   define SSL_get_peer_certificate SSL_get1_peer_certificate
#  endif
# endif

__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s);

__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx);
__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx);
__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx);
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback);
void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth);
void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
                                      int (*cb) (X509_STORE_CTX *, void *),
                                      void *arg);
void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg),
                         void *arg);
# ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
OSSL_DEPRECATEDIN_3_0
__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d,
                                          long len);
# endif
__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx,
                                       const unsigned char *d, long len);
__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len,
                                        const unsigned char *d);
__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey,
                                    STACK_OF(X509) *chain, int override);

void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);
void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);
pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx);
void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx);
void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb);
void SSL_set_default_passwd_cb_userdata(SSL *s, void *u);
pem_password_cb *SSL_get_default_passwd_cb(SSL *s);
void *SSL_get_default_passwd_cb_userdata(SSL *s);

__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx);
__owur int SSL_check_private_key(const SSL *ctx);

__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx,
                                          const unsigned char *sid_ctx,
                                          unsigned int sid_ctx_len);

SSL *SSL_new(SSL_CTX *ctx);
int SSL_up_ref(SSL *s);
int SSL_is_dtls(const SSL *s);
__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
                                      unsigned int sid_ctx_len);

__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose);
__owur int SSL_set_purpose(SSL *ssl, int purpose);
__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust);
__owur int SSL_set_trust(SSL *ssl, int trust);

__owur int SSL_set1_host(SSL *s, const char *hostname);
__owur int SSL_add1_host(SSL *s, const char *hostname);
__owur const char *SSL_get0_peername(SSL *s);
void SSL_set_hostflags(SSL *s, unsigned int flags);

__owur int SSL_CTX_dane_enable(SSL_CTX *ctx);
__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md,
                                  uint8_t mtype, uint8_t ord);
__owur int SSL_dane_enable(SSL *s, const char *basedomain);
__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
                             uint8_t mtype, const unsigned char *data, size_t dlen);
__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki);
__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
                              uint8_t *mtype, const unsigned char **data,
                              size_t *dlen);
/*
 * Bridge opacity barrier between libcrypt and libssl, also needed to support
 * offline testing in test/danetest.c
 */
SSL_DANE *SSL_get0_dane(SSL *ssl);
/*
 * DANE flags
 */
unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags);
unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags);
unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags);
unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags);

__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm);
__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm);

__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx);
__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl);

# ifndef OPENSSL_NO_SRP
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name);
OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password);
OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength);
OSSL_DEPRECATEDIN_3_0
int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx,
                                        char *(*cb) (SSL *, void *));
OSSL_DEPRECATEDIN_3_0
int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx,
                                          int (*cb) (SSL *, void *));
OSSL_DEPRECATEDIN_3_0
int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx,
                                      int (*cb) (SSL *, int *, void *));
OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg);

OSSL_DEPRECATEDIN_3_0
int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g,
                             BIGNUM *sa, BIGNUM *v, char *info);
OSSL_DEPRECATEDIN_3_0
int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass,
                                const char *grp);

OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s);
OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s);

OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s);
OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s);
#  endif
# endif

/*
 * ClientHello callback and helpers.
 */

# define SSL_CLIENT_HELLO_SUCCESS 1
# define SSL_CLIENT_HELLO_ERROR   0
# define SSL_CLIENT_HELLO_RETRY   (-1)

typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg);
void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
                                 void *arg);
int SSL_client_hello_isv2(SSL *s);
unsigned int SSL_client_hello_get0_legacy_version(SSL *s);
size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out);
size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out);
size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out);
size_t SSL_client_hello_get0_compression_methods(SSL *s,
                                                 const unsigned char **out);
int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen);
int SSL_client_hello_get0_ext(SSL *s, unsigned int type,
                              const unsigned char **out, size_t *outlen);

void SSL_certs_clear(SSL *s);
void SSL_free(SSL *ssl);
# ifdef OSSL_ASYNC_FD
/*
 * Windows application developer has to include windows.h to use these.
 */
__owur int SSL_waiting_for_async(SSL *s);
__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds);
__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd,
                                     size_t *numaddfds, OSSL_ASYNC_FD *delfd,
                                     size_t *numdelfds);
__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback);
__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg);
__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback);
__owur int SSL_set_async_callback_arg(SSL *s, void *arg);
__owur int SSL_get_async_status(SSL *s, int *status);

# endif
__owur int SSL_accept(SSL *ssl);
__owur int SSL_stateless(SSL *s);
__owur int SSL_connect(SSL *ssl);
__owur int SSL_read(SSL *ssl, void *buf, int num);
__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);

# define SSL_READ_EARLY_DATA_ERROR   0
# define SSL_READ_EARLY_DATA_SUCCESS 1
# define SSL_READ_EARLY_DATA_FINISH  2

__owur int SSL_read_early_data(SSL *s, void *buf, size_t num,
                               size_t *readbytes);
__owur int SSL_peek(SSL *ssl, void *buf, int num);
__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size,
                                 int flags);
__owur int SSL_write(SSL *ssl, const void *buf, int num);
__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written);
__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num,
                                size_t *written);
long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg);
long SSL_callback_ctrl(SSL *, int, void (*)(void));
long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg);
long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));

# define SSL_EARLY_DATA_NOT_SENT    0
# define SSL_EARLY_DATA_REJECTED    1
# define SSL_EARLY_DATA_ACCEPTED    2

__owur int SSL_get_early_data_status(const SSL *s);

__owur int SSL_get_error(const SSL *s, int ret_code);
__owur const char *SSL_get_version(const SSL *s);

/* This sets the 'default' SSL version that SSL_new() will create */
# ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);
# endif

# ifndef OPENSSL_NO_SSL3_METHOD
#  ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void);
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void);
#  endif
# endif

#define SSLv23_method           TLS_method
#define SSLv23_server_method    TLS_server_method
#define SSLv23_client_method    TLS_client_method

/* Negotiate highest available SSL/TLS version */
__owur const SSL_METHOD *TLS_method(void);
__owur const SSL_METHOD *TLS_server_method(void);
__owur const SSL_METHOD *TLS_client_method(void);

# ifndef OPENSSL_NO_TLS1_METHOD
#  ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void);
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void);
#  endif
# endif

# ifndef OPENSSL_NO_TLS1_1_METHOD
#  ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void);
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void);
#  endif
# endif

# ifndef OPENSSL_NO_TLS1_2_METHOD
#  ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void);
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void);
#  endif
# endif

# ifndef OPENSSL_NO_DTLS1_METHOD
#  ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void);
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void);
#  endif
# endif

# ifndef OPENSSL_NO_DTLS1_2_METHOD
/* DTLSv1.2 */
#  ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void);
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void);
OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void);
#  endif
# endif

__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */
__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */
__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */

__owur size_t DTLS_get_data_mtu(const SSL *s);

__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);
__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx);
__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s);
__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s);

__owur int SSL_do_handshake(SSL *s);
int SSL_key_update(SSL *s, int updatetype);
int SSL_get_key_update_type(const SSL *s);
int SSL_renegotiate(SSL *s);
int SSL_renegotiate_abbreviated(SSL *s);
__owur int SSL_renegotiate_pending(const SSL *s);
int SSL_new_session_ticket(SSL *s);
int SSL_shutdown(SSL *s);
__owur int SSL_verify_client_post_handshake(SSL *s);
void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val);
void SSL_set_post_handshake_auth(SSL *s, int val);

__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx);
__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s);
__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method);
__owur const char *SSL_alert_type_string_long(int value);
__owur const char *SSL_alert_type_string(int value);
__owur const char *SSL_alert_desc_string_long(int value);
__owur const char *SSL_alert_desc_string(int value);

void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s);
__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx);
__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x);
__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x);
__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s);

void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);
__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s);
__owur int SSL_add_client_CA(SSL *ssl, X509 *x);
__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x);

void SSL_set_connect_state(SSL *s);
void SSL_set_accept_state(SSL *s);

__owur long SSL_get_default_timeout(const SSL *s);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define SSL_library_init() OPENSSL_init_ssl(0, NULL)
# endif

__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size);
__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk);

__owur SSL *SSL_dup(SSL *ssl);

__owur X509 *SSL_get_certificate(const SSL *ssl);
/*
 * EVP_PKEY
 */
struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl);

__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);
__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);

void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
void SSL_set_quiet_shutdown(SSL *ssl, int mode);
__owur int SSL_get_quiet_shutdown(const SSL *ssl);
void SSL_set_shutdown(SSL *ssl, int mode);
__owur int SSL_get_shutdown(const SSL *ssl);
__owur int SSL_version(const SSL *ssl);
__owur int SSL_client_version(const SSL *s);
__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx);
__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx);
__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx);
__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile);
__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath);
__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore);
__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx,
                                                        const char *CAfile,
                                                        const char *CApath);
# define SSL_get0_session SSL_get_session/* just peek at pointer */
__owur SSL_SESSION *SSL_get_session(const SSL *ssl);
__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */
__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx);
void SSL_set_info_callback(SSL *ssl,
                           void (*cb) (const SSL *ssl, int type, int val));
void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type,
                                               int val);
__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl);

void SSL_set_verify_result(SSL *ssl, long v);
__owur long SSL_get_verify_result(const SSL *ssl);
__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s);

__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out,
                                    size_t outlen);
__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out,
                                    size_t outlen);
__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess,
                                         unsigned char *out, size_t outlen);
__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess,
                                       const unsigned char *in, size_t len);
uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess);

#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef)
__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data);
void *SSL_get_ex_data(const SSL *ssl, int idx);
#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef)
__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data);
void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx);
#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef)
__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data);
void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx);

__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void);

# define SSL_CTX_sess_set_cache_size(ctx,t) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL)
# define SSL_CTX_sess_get_cache_size(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL)
# define SSL_CTX_set_session_cache_mode(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)
# define SSL_CTX_get_session_cache_mode(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL)

# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx)
# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m)
# define SSL_CTX_get_read_ahead(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)
# define SSL_CTX_set_read_ahead(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)
# define SSL_CTX_get_max_cert_list(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
# define SSL_CTX_set_max_cert_list(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
# define SSL_get_max_cert_list(ssl) \
        SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
# define SSL_set_max_cert_list(ssl,m) \
        SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)

# define SSL_CTX_set_max_send_fragment(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)
# define SSL_set_max_send_fragment(ssl,m) \
        SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)
# define SSL_CTX_set_split_send_fragment(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL)
# define SSL_set_split_send_fragment(ssl,m) \
        SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL)
# define SSL_CTX_set_max_pipelines(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL)
# define SSL_set_max_pipelines(ssl,m) \
        SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL)
# define SSL_set_retry_verify(ssl) \
        (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0)

void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len);
void SSL_set_default_read_buffer_len(SSL *s, size_t len);

# ifndef OPENSSL_NO_DH
#  ifndef OPENSSL_NO_DEPRECATED_3_0
/* NB: the |keylength| is only applicable when is_export is true */
OSSL_DEPRECATEDIN_3_0
void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
                                 DH *(*dh) (SSL *ssl, int is_export,
                                            int keylength));
OSSL_DEPRECATEDIN_3_0
void SSL_set_tmp_dh_callback(SSL *ssl,
                             DH *(*dh) (SSL *ssl, int is_export,
                                        int keylength));
#  endif
# endif

__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s);
__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s);
__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp);
__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp);
__owur int SSL_COMP_get_id(const SSL_COMP *comp);
STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP)
                                                             *meths);
# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define SSL_COMP_free_compression_methods() while(0) continue
# endif
__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);

const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c);
int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c);
int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
                             int isv2format, STACK_OF(SSL_CIPHER) **sk,
                             STACK_OF(SSL_CIPHER) **scsvs);

/* TLS extensions functions */
__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len);

__owur int SSL_set_session_ticket_ext_cb(SSL *s,
                                         tls_session_ticket_ext_cb_fn cb,
                                         void *arg);

/* Pre-shared secret session resumption functions */
__owur int SSL_set_session_secret_cb(SSL *s,
                                     tls_session_secret_cb_fn session_secret_cb,
                                     void *arg);

void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
                                                int (*cb) (SSL *ssl,
                                                           int
                                                           is_forward_secure));

void SSL_set_not_resumable_session_callback(SSL *ssl,
                                            int (*cb) (SSL *ssl,
                                                       int is_forward_secure));

void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
                                         size_t (*cb) (SSL *ssl, int type,
                                                       size_t len, void *arg));
void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg);
void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx);
int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size);

int SSL_set_record_padding_callback(SSL *ssl,
                                    size_t (*cb) (SSL *ssl, int type,
                                                  size_t len, void *arg));
void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg);
void *SSL_get_record_padding_callback_arg(const SSL *ssl);
int SSL_set_block_padding(SSL *ssl, size_t block_size);

int SSL_set_num_tickets(SSL *s, size_t num_tickets);
size_t SSL_get_num_tickets(const SSL *s);
int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets);
size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define SSL_cache_hit(s) SSL_session_reused(s)
# endif

__owur int SSL_session_reused(const SSL *s);
__owur int SSL_is_server(const SSL *s);

__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void);
int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx);
void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx,
                                             unsigned int flags);
__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre);

void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);

__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);

void SSL_add_ssl_module(void);
int SSL_config(SSL *s, const char *name);
int SSL_CTX_config(SSL_CTX *ctx, const char *name);

# ifndef OPENSSL_NO_SSL_TRACE
void SSL_trace(int write_p, int version, int content_type,
               const void *buf, size_t len, SSL *ssl, void *arg);
# endif

# ifndef OPENSSL_NO_SOCK
int DTLSv1_listen(SSL *s, BIO_ADDR *client);
# endif

# ifndef OPENSSL_NO_CT

/*
 * A callback for verifying that the received SCTs are sufficient.
 * Expected to return 1 if they are sufficient, otherwise 0.
 * May return a negative integer if an error occurs.
 * A connection should be aborted if the SCTs are deemed insufficient.
 */
typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx,
                                    const STACK_OF(SCT) *scts, void *arg);

/*
 * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate
 * the received SCTs.
 * If the callback returns a non-positive result, the connection is terminated.
 * Call this function before beginning a handshake.
 * If a NULL |callback| is provided, SCT validation is disabled.
 * |arg| is arbitrary userdata that will be passed to the callback whenever it
 * is invoked. Ownership of |arg| remains with the caller.
 *
 * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response
 *       will be requested.
 */
int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
                                   void *arg);
int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
                                       ssl_ct_validation_cb callback,
                                       void *arg);
#define SSL_disable_ct(s) \
        ((void) SSL_set_validation_callback((s), NULL, NULL))
#define SSL_CTX_disable_ct(ctx) \
        ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL))

/*
 * The validation type enumerates the available behaviours of the built-in SSL
 * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct().
 * The underlying callback is a static function in libssl.
 */
enum {
    SSL_CT_VALIDATION_PERMISSIVE = 0,
    SSL_CT_VALIDATION_STRICT
};

/*
 * Enable CT by setting up a callback that implements one of the built-in
 * validation variants.  The SSL_CT_VALIDATION_PERMISSIVE variant always
 * continues the handshake, the application can make appropriate decisions at
 * handshake completion.  The SSL_CT_VALIDATION_STRICT variant requires at
 * least one valid SCT, or else handshake termination will be requested.  The
 * handshake may continue anyway if SSL_VERIFY_NONE is in effect.
 */
int SSL_enable_ct(SSL *s, int validation_mode);
int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode);

/*
 * Report whether a non-NULL callback is enabled.
 */
int SSL_ct_is_enabled(const SSL *s);
int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx);

/* Gets the SCTs received from a connection */
const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s);

/*
 * Loads the CT log list from the default location.
 * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store,
 * the log information loaded from this file will be appended to the
 * CTLOG_STORE.
 * Returns 1 on success, 0 otherwise.
 */
int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx);

/*
 * Loads the CT log list from the specified file path.
 * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store,
 * the log information loaded from this file will be appended to the
 * CTLOG_STORE.
 * Returns 1 on success, 0 otherwise.
 */
int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path);

/*
 * Sets the CT log list used by all SSL connections created from this SSL_CTX.
 * Ownership of the CTLOG_STORE is transferred to the SSL_CTX.
 */
void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs);

/*
 * Gets the CT log list used by all SSL connections created from this SSL_CTX.
 * This will be NULL unless one of the following functions has been called:
 * - SSL_CTX_set_default_ctlog_list_file
 * - SSL_CTX_set_ctlog_list_file
 * - SSL_CTX_set_ctlog_store
 */
const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx);

# endif /* OPENSSL_NO_CT */

/* What the "other" parameter contains in security callback */
/* Mask for type */
# define SSL_SECOP_OTHER_TYPE    0xffff0000
# define SSL_SECOP_OTHER_NONE    0
# define SSL_SECOP_OTHER_CIPHER  (1 << 16)
# define SSL_SECOP_OTHER_CURVE   (2 << 16)
# define SSL_SECOP_OTHER_DH      (3 << 16)
# define SSL_SECOP_OTHER_PKEY    (4 << 16)
# define SSL_SECOP_OTHER_SIGALG  (5 << 16)
# define SSL_SECOP_OTHER_CERT    (6 << 16)

/* Indicated operation refers to peer key or certificate */
# define SSL_SECOP_PEER          0x1000

/* Values for "op" parameter in security callback */

/* Called to filter ciphers */
/* Ciphers client supports */
# define SSL_SECOP_CIPHER_SUPPORTED      (1 | SSL_SECOP_OTHER_CIPHER)
/* Cipher shared by client/server */
# define SSL_SECOP_CIPHER_SHARED         (2 | SSL_SECOP_OTHER_CIPHER)
/* Sanity check of cipher server selects */
# define SSL_SECOP_CIPHER_CHECK          (3 | SSL_SECOP_OTHER_CIPHER)
/* Curves supported by client */
# define SSL_SECOP_CURVE_SUPPORTED       (4 | SSL_SECOP_OTHER_CURVE)
/* Curves shared by client/server */
# define SSL_SECOP_CURVE_SHARED          (5 | SSL_SECOP_OTHER_CURVE)
/* Sanity check of curve server selects */
# define SSL_SECOP_CURVE_CHECK           (6 | SSL_SECOP_OTHER_CURVE)
/* Temporary DH key */
# define SSL_SECOP_TMP_DH                (7 | SSL_SECOP_OTHER_PKEY)
/* SSL/TLS version */
# define SSL_SECOP_VERSION               (9 | SSL_SECOP_OTHER_NONE)
/* Session tickets */
# define SSL_SECOP_TICKET                (10 | SSL_SECOP_OTHER_NONE)
/* Supported signature algorithms sent to peer */
# define SSL_SECOP_SIGALG_SUPPORTED      (11 | SSL_SECOP_OTHER_SIGALG)
/* Shared signature algorithm */
# define SSL_SECOP_SIGALG_SHARED         (12 | SSL_SECOP_OTHER_SIGALG)
/* Sanity check signature algorithm allowed */
# define SSL_SECOP_SIGALG_CHECK          (13 | SSL_SECOP_OTHER_SIGALG)
/* Used to get mask of supported public key signature algorithms */
# define SSL_SECOP_SIGALG_MASK           (14 | SSL_SECOP_OTHER_SIGALG)
/* Use to see if compression is allowed */
# define SSL_SECOP_COMPRESSION           (15 | SSL_SECOP_OTHER_NONE)
/* EE key in certificate */
# define SSL_SECOP_EE_KEY                (16 | SSL_SECOP_OTHER_CERT)
/* CA key in certificate */
# define SSL_SECOP_CA_KEY                (17 | SSL_SECOP_OTHER_CERT)
/* CA digest algorithm in certificate */
# define SSL_SECOP_CA_MD                 (18 | SSL_SECOP_OTHER_CERT)
/* Peer EE key in certificate */
# define SSL_SECOP_PEER_EE_KEY           (SSL_SECOP_EE_KEY | SSL_SECOP_PEER)
/* Peer CA key in certificate */
# define SSL_SECOP_PEER_CA_KEY           (SSL_SECOP_CA_KEY | SSL_SECOP_PEER)
/* Peer CA digest algorithm in certificate */
# define SSL_SECOP_PEER_CA_MD            (SSL_SECOP_CA_MD | SSL_SECOP_PEER)

void SSL_set_security_level(SSL *s, int level);
__owur int SSL_get_security_level(const SSL *s);
void SSL_set_security_callback(SSL *s,
                               int (*cb) (const SSL *s, const SSL_CTX *ctx,
                                          int op, int bits, int nid,
                                          void *other, void *ex));
int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
                                                const SSL_CTX *ctx, int op,
                                                int bits, int nid, void *other,
                                                void *ex);
void SSL_set0_security_ex_data(SSL *s, void *ex);
__owur void *SSL_get0_security_ex_data(const SSL *s);

void SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx);
void SSL_CTX_set_security_callback(SSL_CTX *ctx,
                                   int (*cb) (const SSL *s, const SSL_CTX *ctx,
                                              int op, int bits, int nid,
                                              void *other, void *ex));
int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
                                                          const SSL_CTX *ctx,
                                                          int op, int bits,
                                                          int nid,
                                                          void *other,
                                                          void *ex);
void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex);
__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx);

/* OPENSSL_INIT flag 0x010000 reserved for internal use */
# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS    0x00100000L
# define OPENSSL_INIT_LOAD_SSL_STRINGS       0x00200000L

# define OPENSSL_INIT_SSL_DEFAULT \
        (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS)

int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);

# ifndef OPENSSL_NO_UNIT_TEST
__owur const struct openssl_ssl_test_functions *SSL_test_functions(void);
# endif

__owur int SSL_free_buffers(SSL *ssl);
__owur int SSL_alloc_buffers(SSL *ssl);

/* Status codes passed to the decrypt session ticket callback. Some of these
 * are for internal use only and are never passed to the callback. */
typedef int SSL_TICKET_STATUS;

/* Support for ticket appdata */
/* fatal error, malloc failure */
# define SSL_TICKET_FATAL_ERR_MALLOC 0
/* fatal error, either from parsing or decrypting the ticket */
# define SSL_TICKET_FATAL_ERR_OTHER  1
/* No ticket present */
# define SSL_TICKET_NONE             2
/* Empty ticket present */
# define SSL_TICKET_EMPTY            3
/* the ticket couldn't be decrypted */
# define SSL_TICKET_NO_DECRYPT       4
/* a ticket was successfully decrypted */
# define SSL_TICKET_SUCCESS          5
/* same as above but the ticket needs to be renewed */
# define SSL_TICKET_SUCCESS_RENEW    6

/* Return codes for the decrypt session ticket callback */
typedef int SSL_TICKET_RETURN;

/* An error occurred */
#define SSL_TICKET_RETURN_ABORT             0
/* Do not use the ticket, do not send a renewed ticket to the client */
#define SSL_TICKET_RETURN_IGNORE            1
/* Do not use the ticket, send a renewed ticket to the client */
#define SSL_TICKET_RETURN_IGNORE_RENEW      2
/* Use the ticket, do not send a renewed ticket to the client */
#define SSL_TICKET_RETURN_USE               3
/* Use the ticket, send a renewed ticket to the client */
#define SSL_TICKET_RETURN_USE_RENEW         4

typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg);
typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss,
                                                               const unsigned char *keyname,
                                                               size_t keyname_length,
                                                               SSL_TICKET_STATUS status,
                                                               void *arg);
int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
                                  SSL_CTX_generate_session_ticket_fn gen_cb,
                                  SSL_CTX_decrypt_session_ticket_fn dec_cb,
                                  void *arg);
int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len);
int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len);

typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us);

void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb);


typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg);
void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
                                     SSL_allow_early_data_cb_fn cb,
                                     void *arg);
void SSL_set_allow_early_data_cb(SSL *s,
                                 SSL_allow_early_data_cb_fn cb,
                                 void *arg);

/* store the default cipher strings inside the library */
const char *OSSL_default_cipher_list(void);
const char *OSSL_default_ciphersuites(void);

#  ifndef OPENSSL_NO_QUIC
/*
 * QUIC integration - The QUIC interface matches BoringSSL
 *
 * ssl_encryption_level_t represents a specific QUIC encryption level used to
 * transmit handshake messages. BoringSSL has this as an 'enum'.
 */
#include <openssl/quic.h>

/* Used by Chromium/QUIC - moved from evp.h to avoid breaking FIPS checksums */
# define X25519_PRIVATE_KEY_LEN          32
# define X25519_PUBLIC_VALUE_LEN         32

/* moved from types.h to avoid breaking FIPS checksums */
typedef struct ssl_quic_method_st SSL_QUIC_METHOD;

typedef enum ssl_encryption_level_t {
    ssl_encryption_initial = 0,
    ssl_encryption_early_data,
    ssl_encryption_handshake,
    ssl_encryption_application
} OSSL_ENCRYPTION_LEVEL;

struct ssl_quic_method_st {
    int (*set_encryption_secrets)(SSL *ssl, OSSL_ENCRYPTION_LEVEL level,
                                  const uint8_t *read_secret,
                                  const uint8_t *write_secret, size_t secret_len);
    int (*add_handshake_data)(SSL *ssl, OSSL_ENCRYPTION_LEVEL level,
                              const uint8_t *data, size_t len);
    int (*flush_flight)(SSL *ssl);
    int (*send_alert)(SSL *ssl, enum ssl_encryption_level_t level, uint8_t alert);
};

__owur int SSL_CTX_set_quic_method(SSL_CTX *ctx, const SSL_QUIC_METHOD *quic_method);
__owur int SSL_set_quic_method(SSL *ssl, const SSL_QUIC_METHOD *quic_method);
__owur int SSL_set_quic_transport_params(SSL *ssl,
                                         const uint8_t *params,
                                         size_t params_len);
void SSL_get_peer_quic_transport_params(const SSL *ssl,
                                        const uint8_t **out_params,
                                        size_t *out_params_len);
__owur size_t SSL_quic_max_handshake_flight_len(const SSL *ssl, OSSL_ENCRYPTION_LEVEL level);
__owur OSSL_ENCRYPTION_LEVEL SSL_quic_read_level(const SSL *ssl);
__owur OSSL_ENCRYPTION_LEVEL SSL_quic_write_level(const SSL *ssl);
__owur int SSL_provide_quic_data(SSL *ssl, OSSL_ENCRYPTION_LEVEL level,
                                 const uint8_t *data, size_t len);
__owur int SSL_process_quic_post_handshake(SSL *ssl);

__owur int SSL_is_quic(SSL *ssl);

/* BoringSSL API */
void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy);

/*
 * Set an explicit value that you want to use
 * If 0 (default) the server will use the highest extenstion the client sent
 * If 0 (default) the client will send both extensions
 */
void SSL_set_quic_transport_version(SSL *ssl, int version);
__owur int SSL_get_quic_transport_version(const SSL *ssl);
/* Returns the negotiated version, or -1 on error */
__owur int SSL_get_peer_quic_transport_version(const SSL *ssl);

int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c);

void SSL_set_quic_early_data_enabled(SSL *ssl, int enabled);

#  endif

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     /*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/x509.h.in
 *
 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509_H
# define OPENSSL_X509_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509_H
# endif

# include <openssl/e_os2.h>
# include <openssl/types.h>
# include <openssl/symhacks.h>
# include <openssl/buffer.h>
# include <openssl/evp.h>
# include <openssl/bio.h>
# include <openssl/asn1.h>
# include <openssl/safestack.h>
# include <openssl/ec.h>

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  include <openssl/rsa.h>
#  include <openssl/dsa.h>
#  include <openssl/dh.h>
# endif

# include <openssl/sha.h>
# include <openssl/x509err.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* Needed stacks for types defined in other headers */
SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME)
#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx)))
#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp)))
#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n)))
#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n))
#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i)))
#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc))
#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx))
#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr)))
#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))
#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum)
#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk))
#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk))
#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk)))
#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc)))
#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509)
#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk))
#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx)))
#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp)))
#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null())
#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n)))
#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n))
#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk))
#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk))
#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i)))
#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)))
#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk)))
#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk)))
#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc))
#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx))
#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr)))
#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))
#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum)
#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk))
#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk))
#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk)))
#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc)))
#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED)
#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx)))
#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp)))
#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null())
#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n)))
#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n))
#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i)))
#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc))
#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx))
#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr)))
#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))
#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum)
#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk))
#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk)))
#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc)))
#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL)
#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx)))
#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp)))
#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null())
#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n)))
#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n))
#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i)))
#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc))
#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx))
#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr)))
#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))
#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum)
#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk))
#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk))
#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk)))
#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc)))
#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp)))


/* Flags for X509_get_signature_info() */
/* Signature info is valid */
# define X509_SIG_INFO_VALID     0x1
/* Signature is suitable for TLS use */
# define X509_SIG_INFO_TLS       0x2

# define X509_FILETYPE_PEM       1
# define X509_FILETYPE_ASN1      2
# define X509_FILETYPE_DEFAULT   3

# define X509v3_KU_DIGITAL_SIGNATURE     0x0080
# define X509v3_KU_NON_REPUDIATION       0x0040
# define X509v3_KU_KEY_ENCIPHERMENT      0x0020
# define X509v3_KU_DATA_ENCIPHERMENT     0x0010
# define X509v3_KU_KEY_AGREEMENT         0x0008
# define X509v3_KU_KEY_CERT_SIGN         0x0004
# define X509v3_KU_CRL_SIGN              0x0002
# define X509v3_KU_ENCIPHER_ONLY         0x0001
# define X509v3_KU_DECIPHER_ONLY         0x8000
# define X509v3_KU_UNDEF                 0xffff

struct X509_algor_st {
    ASN1_OBJECT *algorithm;
    ASN1_TYPE *parameter;
} /* X509_ALGOR */ ;

typedef STACK_OF(X509_ALGOR) X509_ALGORS;

typedef struct X509_val_st {
    ASN1_TIME *notBefore;
    ASN1_TIME *notAfter;
} X509_VAL;

typedef struct X509_sig_st X509_SIG;

typedef struct X509_name_entry_st X509_NAME_ENTRY;

SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY)
#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx)))
#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))
#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null())
#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n)))
#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n))
#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i)))
#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))
#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx))
#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr)))
#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))
#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum)
#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))
#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)))
#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)))
#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)))


# define X509_EX_V_NETSCAPE_HACK         0x8000
# define X509_EX_V_INIT                  0x0001
typedef struct X509_extension_st X509_EXTENSION;
SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION)
#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx)))
#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp)))
#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null())
#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n)))
#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n))
#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i)))
#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc))
#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx))
#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr)))
#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))
#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum)
#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk))
#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk)))
#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc)))
#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp)))

typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
typedef struct x509_attributes_st X509_ATTRIBUTE;
SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE)
#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx)))
#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))
#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null())
#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n)))
#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n))
#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i)))
#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))
#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx))
#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr)))
#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))
#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum)
#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))
#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)))
#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)))
#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)))

typedef struct X509_req_info_st X509_REQ_INFO;
typedef struct X509_req_st X509_REQ;
typedef struct x509_cert_aux_st X509_CERT_AUX;
typedef struct x509_cinf_st X509_CINF;

/* Flags for X509_print_ex() */

# define X509_FLAG_COMPAT                0
# define X509_FLAG_NO_HEADER             1L
# define X509_FLAG_NO_VERSION            (1L << 1)
# define X509_FLAG_NO_SERIAL             (1L << 2)
# define X509_FLAG_NO_SIGNAME            (1L << 3)
# define X509_FLAG_NO_ISSUER             (1L << 4)
# define X509_FLAG_NO_VALIDITY           (1L << 5)
# define X509_FLAG_NO_SUBJECT            (1L << 6)
# define X509_FLAG_NO_PUBKEY             (1L << 7)
# define X509_FLAG_NO_EXTENSIONS         (1L << 8)
# define X509_FLAG_NO_SIGDUMP            (1L << 9)
# define X509_FLAG_NO_AUX                (1L << 10)
# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)
# define X509_FLAG_NO_IDS                (1L << 12)
# define X509_FLAG_EXTENSIONS_ONLY_KID   (1L << 13)

/* Flags specific to X509_NAME_print_ex() */

/* The field separator information */

# define XN_FLAG_SEP_MASK        (0xf << 16)

# define XN_FLAG_COMPAT          0/* Traditional; use old X509_NAME_print */
# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */
# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */
# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */
# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */

# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */

/* How the field name is shown */

# define XN_FLAG_FN_MASK         (0x3 << 21)

# define XN_FLAG_FN_SN           0/* Object short name */
# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */
# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */
# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */

# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */

/*
 * This determines if we dump fields we don't recognise: RFC2253 requires
 * this.
 */

# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)

# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20
                                           * characters */

/* Complete set of RFC2253 flags */

# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
                        XN_FLAG_SEP_COMMA_PLUS | \
                        XN_FLAG_DN_REV | \
                        XN_FLAG_FN_SN | \
                        XN_FLAG_DUMP_UNKNOWN_FIELDS)

/* readable oneline form */

# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
                        ASN1_STRFLGS_ESC_QUOTE | \
                        XN_FLAG_SEP_CPLUS_SPC | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_SN)

/* readable multiline form */

# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
                        ASN1_STRFLGS_ESC_MSB | \
                        XN_FLAG_SEP_MULTILINE | \
                        XN_FLAG_SPC_EQ | \
                        XN_FLAG_FN_LN | \
                        XN_FLAG_FN_ALIGN)

typedef struct X509_crl_info_st X509_CRL_INFO;

typedef struct private_key_st {
    int version;
    /* The PKCS#8 data types */
    X509_ALGOR *enc_algor;
    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
    /* When decrypted, the following will not be NULL */
    EVP_PKEY *dec_pkey;
    /* used to encrypt and decrypt */
    int key_length;
    char *key_data;
    int key_free;               /* true if we should auto free key_data */
    /* expanded version of 'enc_algor' */
    EVP_CIPHER_INFO cipher;
} X509_PKEY;

typedef struct X509_info_st {
    X509 *x509;
    X509_CRL *crl;
    X509_PKEY *x_pkey;
    EVP_CIPHER_INFO enc_cipher;
    int enc_len;
    char *enc_data;
} X509_INFO;
SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO)
#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx)))
#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp)))
#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null())
#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n)))
#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n))
#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i)))
#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc))
#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx))
#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr)))
#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))
#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum)
#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk))
#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk))
#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk)))
#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc)))
#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp)))


/*
 * The next 2 structures and their 8 routines are used to manipulate Netscape's
 * spki structures - useful if you are writing a CA web page
 */
typedef struct Netscape_spkac_st {
    X509_PUBKEY *pubkey;
    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */
} NETSCAPE_SPKAC;

typedef struct Netscape_spki_st {
    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */
    X509_ALGOR sig_algor;
    ASN1_BIT_STRING *signature;
} NETSCAPE_SPKI;

/* Netscape certificate sequence structure */
typedef struct Netscape_certificate_sequence {
    ASN1_OBJECT *type;
    STACK_OF(X509) *certs;
} NETSCAPE_CERT_SEQUENCE;

/*- Unused (and iv length is wrong)
typedef struct CBCParameter_st
        {
        unsigned char iv[8];
        } CBC_PARAM;
*/

/* Password based encryption structure */

typedef struct PBEPARAM_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *iter;
} PBEPARAM;

/* Password based encryption V2 structures */

typedef struct PBE2PARAM_st {
    X509_ALGOR *keyfunc;
    X509_ALGOR *encryption;
} PBE2PARAM;

typedef struct PBKDF2PARAM_st {
/* Usually OCTET STRING but could be anything */
    ASN1_TYPE *salt;
    ASN1_INTEGER *iter;
    ASN1_INTEGER *keylength;
    X509_ALGOR *prf;
} PBKDF2PARAM;

#ifndef OPENSSL_NO_SCRYPT
typedef struct SCRYPT_PARAMS_st {
    ASN1_OCTET_STRING *salt;
    ASN1_INTEGER *costParameter;
    ASN1_INTEGER *blockSize;
    ASN1_INTEGER *parallelizationParameter;
    ASN1_INTEGER *keyLength;
} SCRYPT_PARAMS;
#endif

#ifdef  __cplusplus
}
#endif

# include <openssl/x509_vfy.h>
# include <openssl/pkcs7.h>

#ifdef  __cplusplus
extern "C" {
#endif

# define X509_EXT_PACK_UNKNOWN   1
# define X509_EXT_PACK_STRING    2

# define         X509_extract_key(x)     X509_get_pubkey(x)/*****/
# define         X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)
# define         X509_name_cmp(a,b)      X509_NAME_cmp((a),(b))

void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
                                     int (*crl_free) (X509_CRL *crl),
                                     int (*crl_lookup) (X509_CRL *crl,
                                                        X509_REVOKED **ret,
                                                        const
                                                        ASN1_INTEGER *serial,
                                                        const
                                                        X509_NAME *issuer),
                                     int (*crl_verify) (X509_CRL *crl,
                                                        EVP_PKEY *pk));
void X509_CRL_METHOD_free(X509_CRL_METHOD *m);

void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
void *X509_CRL_get_meth_data(X509_CRL *crl);

const char *X509_verify_cert_error_string(long n);

int X509_verify(X509 *a, EVP_PKEY *r);
int X509_self_signed(X509 *cert, int verify_signature);

int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx,
                       const char *propq);
int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);

NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);
char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);

int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);

int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);
int X509_signature_print(BIO *bp, const X509_ALGOR *alg,
                         const ASN1_STRING *sig);

int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);

int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
                       unsigned char *md, unsigned int *len);
int X509_digest(const X509 *data, const EVP_MD *type,
                unsigned char *md, unsigned int *len);
ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert,
                                   EVP_MD **md_used, int *md_is_fallback);
int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
                    unsigned char *md, unsigned int *len);
int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
                     unsigned char *md, unsigned int *len);

X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout);
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  include <openssl/http.h> /* OSSL_HTTP_REQ_CTX_nbio_d2i */
#  define X509_http_nbio(rctx, pcert) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509))
#  define X509_CRL_http_nbio(rctx, pcrl) \
      OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL))
# endif

# ifndef OPENSSL_NO_STDIO
X509 *d2i_X509_fp(FILE *fp, X509 **x509);
int i2d_X509_fp(FILE *fp, const X509 *x509);
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);
int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);
int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa);
#   endif
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */
X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);
int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
                                                PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key);
int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                               const char *propq);
EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
# endif

X509 *d2i_X509_bio(BIO *bp, X509 **x509);
int i2d_X509_bio(BIO *bp, const X509 *x509);
X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);
int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl);
X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);
int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req);
#  ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa);
OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);
OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa);
#  endif
#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_DSA
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa);
OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa);
#   endif
#  endif

#  ifndef OPENSSL_NO_DEPRECATED_3_0
#   ifndef OPENSSL_NO_EC
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey);
OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey);
#   endif /* OPENSSL_NO_EC */
#  endif /* OPENSSL_NO_DEPRECATED_3_0 */

X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);
int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8);
X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk);
int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk);
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
                                                 PKCS8_PRIV_KEY_INFO **p8inf);
int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf);
int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key);
int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx,
                                const char *propq);
EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey);
EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);

DECLARE_ASN1_DUP_FUNCTION(X509)
DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR)
DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE)
DECLARE_ASN1_DUP_FUNCTION(X509_CRL)
DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION)
DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY)
DECLARE_ASN1_DUP_FUNCTION(X509_REQ)
DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED)
int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
                    void *pval);
void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
                     const void **ppval, const X509_ALGOR *algor);
void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src);

DECLARE_ASN1_DUP_FUNCTION(X509_NAME)
DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY)

int X509_cmp_time(const ASN1_TIME *s, time_t *t);
int X509_cmp_current_time(const ASN1_TIME *s);
int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm,
                       const ASN1_TIME *start, const ASN1_TIME *end);
ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
                            int offset_day, long offset_sec, time_t *t);
ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);

const char *X509_get_default_cert_area(void);
const char *X509_get_default_cert_dir(void);
const char *X509_get_default_cert_file(void);
const char *X509_get_default_cert_dir_env(void);
const char *X509_get_default_cert_file_env(void);
const char *X509_get_default_private_dir(void);

X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);

DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)
DECLARE_ASN1_FUNCTIONS(X509_VAL)

DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)

X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key);
EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key);
int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);
long X509_get_pathlen(X509 *x);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY)
EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length,
                        OSSL_LIB_CTX *libctx, const char *propq);
# ifndef OPENSSL_NO_DEPRECATED_3_0
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY)
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_DSA
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY)
#  endif
# endif
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  ifndef OPENSSL_NO_EC
DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY)
#  endif
# endif

DECLARE_ASN1_FUNCTIONS(X509_SIG)
void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg,
                   const ASN1_OCTET_STRING **pdigest);
void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg,
                   ASN1_OCTET_STRING **pdigest);

DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
DECLARE_ASN1_FUNCTIONS(X509_REQ)
X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);

DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)

DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)

DECLARE_ASN1_FUNCTIONS(X509_NAME)

int X509_NAME_set(X509_NAME **xn, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(X509_CINF)
DECLARE_ASN1_FUNCTIONS(X509)
X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)

#define X509_get_ex_new_index(l, p, newf, dupf, freef) \
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef)
int X509_set_ex_data(X509 *r, int idx, void *arg);
void *X509_get_ex_data(const X509 *r, int idx);
DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX)

int i2d_re_X509_tbs(X509 *x, unsigned char **pp);

int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid,
                      int *secbits, uint32_t *flags);
void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid,
                       int secbits, uint32_t flags);

int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
                            uint32_t *flags);

void X509_get0_signature(const ASN1_BIT_STRING **psig,
                         const X509_ALGOR **palg, const X509 *x);
int X509_get_signature_nid(const X509 *x);

void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x);
void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id);
ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x);

int X509_alias_set1(X509 *x, const unsigned char *name, int len);
int X509_keyid_set1(X509 *x, const unsigned char *id, int len);
unsigned char *X509_alias_get0(X509 *x, int *len);
unsigned char *X509_keyid_get0(X509 *x, int *len);

DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
DECLARE_ASN1_FUNCTIONS(X509_CRL)
X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq);

int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
int X509_CRL_get0_by_serial(X509_CRL *crl,
                            X509_REVOKED **ret, const ASN1_INTEGER *serial);
int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);

X509_PKEY *X509_PKEY_new(void);
void X509_PKEY_free(X509_PKEY *a);

DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)

X509_INFO *X509_INFO_new(void);
void X509_INFO_free(X509_INFO *a);
char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size);

#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
                ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);
OSSL_DEPRECATEDIN_3_0
int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
                unsigned char *md, unsigned int *len);
OSSL_DEPRECATEDIN_3_0
int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
              ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey,
              const EVP_MD *type);
#endif
int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,
                     unsigned char *md, unsigned int *len);
int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg,
                     const ASN1_BIT_STRING *signature, const void *data,
                     EVP_PKEY *pkey);
int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg,
                         const ASN1_BIT_STRING *signature, const void *data,
                         EVP_MD_CTX *ctx);
int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
                   ASN1_BIT_STRING *signature, const void *data,
                   EVP_PKEY *pkey, const EVP_MD *md);
int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,
                       X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
                       const void *data, EVP_MD_CTX *ctx);

#define X509_VERSION_1 0
#define X509_VERSION_2 1
#define X509_VERSION_3 2

long X509_get_version(const X509 *x);
int X509_set_version(X509 *x, long version);
int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
ASN1_INTEGER *X509_get_serialNumber(X509 *x);
const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x);
int X509_set_issuer_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_issuer_name(const X509 *a);
int X509_set_subject_name(X509 *x, const X509_NAME *name);
X509_NAME *X509_get_subject_name(const X509 *a);
const ASN1_TIME * X509_get0_notBefore(const X509 *x);
ASN1_TIME *X509_getm_notBefore(const X509 *x);
int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm);
const ASN1_TIME *X509_get0_notAfter(const X509 *x);
ASN1_TIME *X509_getm_notAfter(const X509 *x);
int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm);
int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
int X509_up_ref(X509 *x);
int X509_get_signature_type(const X509 *x);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_get_notBefore X509_getm_notBefore
#  define X509_get_notAfter X509_getm_notAfter
#  define X509_set_notBefore X509_set1_notBefore
#  define X509_set_notAfter X509_set1_notAfter
#endif


/*
 * This one is only used so that a binary form can output, as in
 * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf)
 */
X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x);
const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid,
                    const ASN1_BIT_STRING **psuid);
const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);

EVP_PKEY *X509_get0_pubkey(const X509 *x);
EVP_PKEY *X509_get_pubkey(X509 *x);
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);

#define X509_REQ_VERSION_1 0

long X509_REQ_get_version(const X509_REQ *req);
int X509_REQ_set_version(X509_REQ *x, long version);
X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req);
int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name);
void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig);
int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg);
int X509_REQ_get_signature_nid(const X509_REQ *req);
int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp);
int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req);
X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req);
int X509_REQ_extension_nid(int nid);
int *X509_REQ_get_extension_nids(void);
void X509_REQ_set_extension_nids(int *nids);
STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
int X509_REQ_add_extensions_nid(X509_REQ *req,
                                const STACK_OF(X509_EXTENSION) *exts, int nid);
int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext);
int X509_REQ_get_attr_count(const X509_REQ *req);
int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_NID(X509_REQ *req,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int X509_REQ_add1_attr_by_txt(X509_REQ *req,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

#define X509_CRL_VERSION_1 0
#define X509_CRL_VERSION_2 1

int X509_CRL_set_version(X509_CRL *x, long version);
int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name);
int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_sort(X509_CRL *crl);
int X509_CRL_up_ref(X509_CRL *crl);

# ifndef OPENSSL_NO_DEPRECATED_1_1_0
#  define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate
#  define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate
#endif

long X509_CRL_get_version(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl);
OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl);
#endif
X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
                             const X509_ALGOR **palg);
int X509_CRL_get_signature_nid(const X509_CRL *crl);
int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp);

const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x);
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x);
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
const STACK_OF(X509_EXTENSION) *
X509_REVOKED_get0_extensions(const X509_REVOKED *r);

X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
                        EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);

int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);

int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey);
int X509_chain_check_suiteb(int *perror_depth,
                            X509 *x, STACK_OF(X509) *chain,
                            unsigned long flags);
int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);
STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);

int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_and_serial_hash(X509 *a);

int X509_issuer_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_name_hash(X509 *a);

int X509_subject_name_cmp(const X509 *a, const X509 *b);
unsigned long X509_subject_name_hash(X509 *x);

# ifndef OPENSSL_NO_MD5
unsigned long X509_issuer_name_hash_old(X509 *a);
unsigned long X509_subject_name_hash_old(X509 *x);
# endif

# define X509_ADD_FLAG_DEFAULT  0
# define X509_ADD_FLAG_UP_REF   0x1
# define X509_ADD_FLAG_PREPEND  0x2
# define X509_ADD_FLAG_NO_DUP   0x4
# define X509_ADD_FLAG_NO_SS    0x8
int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags);
int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags);

int X509_cmp(const X509 *a, const X509 *b);
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
#ifndef OPENSSL_NO_DEPRECATED_3_0
# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL)
OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x,
                                                const EVP_PKEY *pubkey);
#endif
unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx,
                                const char *propq, int *ok);
unsigned long X509_NAME_hash_old(const X509_NAME *x);

int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
int X509_aux_print(BIO *out, X509 *x, int indent);
# ifndef OPENSSL_NO_STDIO
int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,
                     unsigned long cflag);
int X509_print_fp(FILE *bp, X509 *x);
int X509_CRL_print_fp(FILE *bp, X509_CRL *x);
int X509_REQ_print_fp(FILE *bp, X509_REQ *req);
int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent,
                          unsigned long flags);
# endif

int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase);
int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent,
                       unsigned long flags);
int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,
                  unsigned long cflag);
int X509_print(BIO *bp, X509 *x);
int X509_ocspid_print(BIO *bp, X509 *x);
int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag);
int X509_CRL_print(BIO *bp, X509_CRL *x);
int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,
                      unsigned long cflag);
int X509_REQ_print(BIO *bp, X509_REQ *req);

int X509_NAME_entry_count(const X509_NAME *name);
int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid,
                              char *buf, int len);
int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                              char *buf, int len);

/*
 * NOTE: you should be passing -1, not 0 as lastpos. The functions that use
 * lastpos, search after that position on.
 */
int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                               int lastpos);
X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne,
                        int loc, int set);
int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
                                               const char *field, int type,
                                               const unsigned char *bytes,
                                               int len);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
                                               int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
                               const unsigned char *bytes, int len, int loc,
                               int set);
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
                                               const ASN1_OBJECT *obj, int type,
                                               const unsigned char *bytes,
                                               int len);
int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj);
int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
                             const unsigned char *bytes, int len);
ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne);
ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne);

int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder,
                       size_t *pderlen);

int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
                          int nid, int lastpos);
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
                          const ASN1_OBJECT *obj, int lastpos);
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
                               int crit, int lastpos);
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
                                         X509_EXTENSION *ex, int loc);

int X509_get_ext_count(const X509 *x);
int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
                      unsigned long flags);

int X509_CRL_get_ext_count(const X509_CRL *x);
int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
                            int lastpos);
int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx);
int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
                          unsigned long flags);

int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
                                int lastpos);
int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit,
                                     int lastpos);
X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit,
                               int *idx);
int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
                              unsigned long flags);

X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
                                             int nid, int crit,
                                             ASN1_OCTET_STRING *data);
X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
                                             const ASN1_OBJECT *obj, int crit,
                                             ASN1_OCTET_STRING *data);
int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj);
int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
int X509_EXTENSION_get_critical(const X509_EXTENSION *ex);

int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
                           int lastpos);
int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
                           const ASN1_OBJECT *obj, int lastpos);
X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
                                           X509_ATTRIBUTE *attr);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const ASN1_OBJECT *obj,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
                                                  **x, int nid, int type,
                                                  const unsigned char *bytes,
                                                  int len);
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
                                                  **x, const char *attrname,
                                                  int type,
                                                  const unsigned char *bytes,
                                                  int len);
void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x,
                              const ASN1_OBJECT *obj, int lastpos, int type);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
                                             const ASN1_OBJECT *obj,
                                             int atrtype, const void *data,
                                             int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
                                             const char *atrname, int type,
                                             const unsigned char *bytes,
                                             int len);
int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
                             const void *data, int len);
void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
                               void *data);
int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr);
ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);

int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,
                             int lastpos);
X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
                              const ASN1_OBJECT *obj, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
                              int nid, int type,
                              const unsigned char *bytes, int len);
int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
                              const char *attrname, int type,
                              const unsigned char *bytes, int len);

/* lookup a cert from a X509 STACK */
X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name,
                                     const ASN1_INTEGER *serial);
X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name);

DECLARE_ASN1_FUNCTIONS(PBEPARAM)
DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
#ifndef OPENSSL_NO_SCRYPT
DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS)
#endif

int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
                         const unsigned char *salt, int saltlen);
int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter,
                            const unsigned char *salt, int saltlen,
                            OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
                          const unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter,
                             const unsigned char *salt, int saltlen,
                             OSSL_LIB_CTX *libctx);

X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
                           unsigned char *salt, int saltlen);
X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
                              unsigned char *salt, int saltlen,
                              unsigned char *aiv, int prf_nid);
X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter,
                                 unsigned char *salt, int saltlen,
                                 unsigned char *aiv, int prf_nid,
                                 OSSL_LIB_CTX *libctx);

#ifndef OPENSSL_NO_SCRYPT
X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher,
                                  const unsigned char *salt, int saltlen,
                                  unsigned char *aiv, uint64_t N, uint64_t r,
                                  uint64_t p);
#endif

X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
                             int prf_nid, int keylen);
X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen,
                                int prf_nid, int keylen,
                                OSSL_LIB_CTX *libctx);

/* PKCS#8 utilities */

DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)

EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8);
EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx,
                            const char *propq);
PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey);

int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
                    int version, int ptype, void *pval,
                    unsigned char *penc, int penclen);
int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg,
                    const unsigned char **pk, int *ppklen,
                    const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8);

const STACK_OF(X509_ATTRIBUTE) *
PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8);
int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr);
int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type,
                                const unsigned char *bytes, int len);
int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj,
                                int type, const unsigned char *bytes, int len);


int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
                           int ptype, void *pval,
                           unsigned char *penc, int penclen);
int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
                           const unsigned char **pk, int *ppklen,
                           X509_ALGOR **pa, const X509_PUBKEY *pub);
int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b);

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    register transport_destroy_device kmalloc_trace strlen _dev_printk scsi_remove_target kmalloc_caches transport_class_register                 1               !                U  !          1  .                   6          U  A          1  U          U  a          1  o                   y                             U            1               '                -               '                -            1            U            1           U  !         1  G         U  Q         1  Z                    C           U           1           9           +           1           9           +           1           9           +           1           A           U  $         L  4         I  B         U  G         P  U         U  a         1  ~         A           U           L           I           U           1           _           9           1           %           P           _           9           1  )         E  R         /  Z         \  f         U  q         1           =                       U           U           1           E  ;         \  L         U  _         Y  q         1                                 )                          U                     -         "  @            )      J           i         8  q         1              )                "           U           1              -                "           U           1              -                "           U           1              1                 "  '         U  1         1  C            1       P         "  W         U  a         1  s            1                "           U           1              1                "           U           1              )                "           U           1              )       (         "  2         U  A         1  S            )       c         "  j         U  q         1              )                "           U           1              )                "           U           1              )                "  	         U           1  #            )       3         "  :         U  A         1  S            5       c         "  m         U           1              )                "           U           1              )                "           U           1              )       	         "  
	         U  	         1  #	            5       3	         "  =	         U  Q	         1  l	            @       	         U  	            P       	            p       	         X  	         U  	            W       	            b       	         1  	            s       	                  	                  "
         U  2
            w       7
         X  >
            t       Q
         1  d
                   
         U  
            p       
                  
         X  
         U  
         1  
         1           1  !         1  A         1  a         1                             g                             H           U                              U           1  0         U  A         1  X         l  \       ^         e  r                                                 *               F                                p2               F                     
            1      
         F  
                    0
            @+      5
         F  G
            @      `
            +      e
         F  w
                   
            P,      
         F  
            \      
            d      
            l      
            t      
            <                  D                  L                  T      ;                  I                  W                  e                                                $                  ,                  4                                                                              
                                    )                  7                  S                  a                  o                  }                                                                                                      \                  |      
            d                        )            l      7                  E            t      S                              <                  D                  L                  T                                    $                  ,                  4                                          *                  8                  T                  b                  p                                                                                                                        |                                          $                  C                  ]                  k                  y                                                                                                      <                  D                  L      #            T      ?                  M            $      [            ,      i            4                                                                                                                                                                                          -                  ;                  W                  e                  s                                                |                  \                                                                         d      +            l      6            t      Y                  s                                                                  |                                                                        \                  d      
            l                  t      7            <      E            D      S            L      l            T                                    $                  ,                  4                                                                                                  "                   0                   >                   Z                   h                   v                                                                                                                              |                                                                ,            \       :            d       H            l       V            t       }            <                   D                   L                   T                U              |                  \                                    d                        !            l      /                              |                                                                     1           E           B  !            |       &         B  .         J  j         \  q         1           E           =              N                   |                =              N                ?  .         \  n            -                1           _           9           1           l  $                e           &           +  :         U  Q         1  Z         m           U           1           l  ,                e  $                    +           U           8           1            U           1  @         U  Q         1           U           1           U           1            U           1           ]  *         ]  :         ]  J         ]  Z         ]  j         ]  w         +           1              '               -              '               -           $           1              '               -              '      
          -  %            -          %  6          P  ;          k  Q          1  h          S                        U            1            S            5            U            1  !         S  ;!         5  W!         U  b!         U  q!         1  !         S  !         5  !         U  !         U  !         1  
"         S  7"         5  @"         9  J"         +  Q"         1  x"         S  "         5  "            )       "         X  "         U  "         1  "         S  #         5  0#            -       =#         "  H#         U  Q#         1  t#         S  #         5  #            -       #         "  #         U  #         1  $         S  <$         5  K$                   S$         X  r$         U  w$         8  $         1  $         S  $         5  $            -       $         "  $         U  %         1  $%         S  M%         5  `%            -       m%         "  x%         U  %         1  %         S  %         E  %         J  &         \  &         _  &         9  !&         1  *&           A&         1  b&           j&         ^  &         E  &         B  &            |       &         B  &         J  &'         \  E'         B  U'         %  ]'         P  e'         _  w'         9  '         1  '                  '         U  '            !      '         %  '         P  '         _  '         9  '         V  (         1  =(         S  (         5  (         U  (         8  (         1  
)         S  a)         5  )         U  )         8  )         1  )         S  )         S  )            m       *         5  *         U  *         1  0*         S  P*                   W*         	           h*         K  *                   *         <  *         U  *         1  *         S  *         U  *         S  +                   0+         U  A+         1  S+                  [+                  f+         U  +         S  +                   +         U  +         1  +                  +                  +         U  ,         S  ',                   Q,         1  h,                  p,                  },         U  ,         S  ,                   ,         1  -         S  .-         l  L       =-         e  U-         '  a-         /  o-                  x-         E  -         \  -                   -           -         4  -         U  -         1  .         S  %.         l  L       4.         e  U.         '  ].         /  h.            !      .                  .                  .                   .           .         4  .         U  .                   .           /         1   /         S  2/         l  L       A/         e  X/         '  `/         /  p/                  /                  /                  /                   /           /         4  /         U   0                   0           !0         1  C0         S  U0         l  L       d0         e  0         '  0         /  0                  0         	           0                   0         K  0                  0                  0            $      0            1         4  1         U  61                  B1           Q1         1  p1         S  1         E  1                  1                  1         \  1         1  1                  2         U  !2         S  @2                   K2         U  a2         U  q2         1  |2            !      2         U  2         S  2                   2         U  2         U  2         1  3         S  K3         A  d3         U  l3         L  t3         I  3                   3         E  3         ?  3         \  
4         Y  4         U  a4         1  4         S  4         5  4         U  4         U  
5         S  15         5  O5         U                                    (                 7                       (          7  -                   =             X       G                    L          h  W                     ^                    c          7  h                   x                    }          Q                            *                                                        h               *                   /                7               3                1  	                              n                     $          n  1                   6          n  C                     H          n  U             @      Z          n  g                    l          n  y             @      ~          @                                 @                               @                               @                                @            U                                @                               @                                @  '                     ,          @  3             @      8          @  ?                    D          @             T                                                              M                    |                     }                     O                                                     $          >          (          :           ,          ;           0          b          4          O           8          P           <          3          @          L           D          M           H          :          L          U           P          V           T          ;          X          R           \          S           `          D          d          a           h          b           l          `          p          p           t          q           x          )          |          [                     \                     *                    ^                     _                     V                    g                     h                     [                    s                     t                     d                    d                     e                     ,                    m                     n                     G                    v                     w                     N                    y                     z                     i                                                              j                    4                     5                     .                    7                     8                     Z                                                            R                                                           ^                                                                      $                    (                    ,         #          0                    4                    8         f          <         X           @         Y           D         6          H         j           L         k           P         0          T                    X                               W                    I                     J                     a                    @                     A                                         C                      D           $          c          (          F           ,          G           0          m          4          =           8          >                                                                   @                    `                            (                    0                    8                    @             P      H                   P                   X                   `                    h             `      p                   x                                                   p                                      p                   p                                                                             0                   `                                                                             @                   p                                                                          @                                           (                  0            	      8            P	      @            	      H            P
      P            
      X            
      `                   h                   p            @      x            `                                                         @                                    p                                                      P                                                                        P                                                                                                             P                                                          p!      (            !      0            P"      8            "      @            P#      H            #      P            $      X             %      `            %      h             &      p            @&      x            '                   (                  (                  )                  *                  *                  @+                  +                  P,                  ,                  -                   /                   0                  P1                  1                  p2                  2                   `4      @             S      P             p      `             Y      p                                o                                      |                                                          0                                      `                                                              0                  @                  P                   `                  p            @                                    p                  
                                    +                                    :                                     I                  @                   U      0                  @            k      P                  `                  p            P"                                    #                                    P                                                                        "                                      %                         0            $      @                  P            P#      `            1      p            
      x            (                  B                  
                  V                                      (                  g                                     {                  @                   :                                     I      0            	      @            U      P                   `            k      p                                                p!                                                                                           `4                                                                              (                  8                  H                  X                  h                  x                              
                                                                         $                                        :!                   !                   6"                   "                   #                   #                   ;$                    $      $             L%      (             (      ,             `)      0             *      4             4      8             05                                        5                    T                                                                               F                                             $             A      (             T      ,                   0                   4             e      8                   <                   @             K      D                   H                   L                   P                   T             &      X             V      \                   `                   d                   h             1      l             i      p                   t                   x                   |             9                   l                                                         		                   <	                   	                   	                   !
                   
                   
                                                         /                                      9                   ~                                                         ?                                                                                                                    V!                   a!                   !                   !                   "                   G#                   #                   q$                   $                  w%                  '                  (                  )                  
*                  *                  *                   /+      $            e+      (            +      ,            +      0            |,      4            -      8            .      <            /      @            
1      D            2      H            J2      L            `2      P            2      T            2      X            2      \            c3      `            4      d            4      h            4      l            N5      p                                                                                               :                    @                    Y                    `                                                $                    (                    ,                    0                    4                    8                    <                   @                    D             M      H             P      L             V      P                   T                   X                   \                   `                   d                   h                   l                   p                   t                   x                   |                                                                       
                                                                             @                   A                   F                   S                   T                   Y                   `                   y                   z                                                                                                                                                                                                                                                                                                                                                      "                  b                  c                  e                  j                  p                                                             $                  (                  ,                  0                  4                  8            B      <            C      @            E      D            G      H            I      L            K      P            P      T            e      X            p      \            v      `            z      d            ~      h                  l                  p                  t                  x            m      |            p                                                                                                                               +                  0                  [                  `                                                                                                                               6                  @                  n                  p                                                                                          
                                    >                  @                  q                                                                                                             	                  	                  A	                  P	                  V	                  	                   	      $            	      (            	      ,            	      0            	      4            	      8            	      <            	      @            	      D            	      H            
      L            
      P            
      T            
      X            !
      \            &
      `            I
      d            P
      h            V
      l            
      p            
      t            
      x            
      |            
                  
                  
                  
                                                                          7                  @                  W                  `                  g                  l                  n                  r                  u                                                                                                                                                                                                                                                             4                  @                  G                  R                   ]                                                                                                                                                       $                  (                  ,            d      0            e      4            g      8            i      <            n      @            p      D            w      H            y      L                  P                  T                  X                  \            !      `            %      d            '      h            )      l            +      p            -      t            2      x            t      |                                                                                                                                                                              4                  5                  7                  9                  >                  G                  P                  V                  ~                                                                                                                                                                  !                  #                  .                                                                                                                                                                                     D                  P                                           $                  (                  ,                  0                  4                  8            v      <            {      @                  D                  H                  L                  P                  T                  X                  \            5       `            :       d            A       h            P       l            V       p                   t                   x                   |                                                                                                                                                                                       S!                  T!                  V!                  [!                  \!                  _!                  a!                  f!                  p!                  w!                  x!                  |!                  !                  !                  !                  !                  !                  !                  !                  !                  !                  !                  !                  H"                   I"                  N"                  P"                  W"                  X"                  \"                  "                  "                   "      $            "      (            "      ,            "      0            "      4            "      8            B#      <            E#      @            G#      D            L#      H            P#      L            W#      P            X#      T            \#      X            #      \            #      `            #      d            #      h            #      l            #      p            #      t            #      x            #      |            m$                  n$                  o$                  q$                  v$                  {$                  $                  $                  $                  $                  $                  $                  $                  $                   %                  %                  %                  %                  r%                  u%                  w%                  |%                  %                  %                  %                  &                  &                  &                   &                  &&                  2&                  7&                  @&                   G&                  I&                  K&                  P&                  Q&                  R&                  m'                  n'                   p'      $            r'      (            t'      ,            v'      0            {'      4            '      8            '      <            '      @            '      D            '      H             (      L            (      P            (      T            
(      X            (      \            (      `            (      d            (      h            (      l            (      p            (      t            (      x            (      |            (                  (                  (                  (                  (                  (                  )                  )                  )                  )                  )                  )                  )                  )                  )                  )                  	*                  
*                  *                  *                  *                  *                  *                  *                  *                  *                  *                  *                  *                  *                  *                  *                  *                   *                  *                  (+                  )+                  4+                  @+                  M+                  Q+                   d+      $            e+      (            j+      ,            +      0            +      4            +      8            +      <            +      @            +      D            +      H            +      L            +      P            +      T            +      X            F,      \            P,      `            ^,      d            b,      h            f,      l            y,      p            z,      t            |,      x            ,      |            ,                  ,                  ,                  ,                  ,                  ,                  ,                  ,                  -                  -                  -                  -                  -                  -                  -                  -                  -                  -                  -                   .                  .                  .                  .                  .                  .                  .                  .                   /                  /                  	/                  
/                  /                  /                   /                  /                  /                  /                  0                   0                  '0                  ,0                   00      $            10      (            1      ,            	1      0            1      4            
1      8            1      <            H1      @            P1      D            W1      H            Y1      L            Z1      P            ^1      T            1      X            1      \            1      `            1      d            1      h            1      l            1      p            
2      t            2      x            I2      |            J2                  O2                  V2                  Z2                  e2                  p2                  2                  2                  2                  2                  2                  2                  2                  2                  2                  2                  2                  2                  2                  2                  3                  W3                  [3                  ]3                  _3                  a3                  c3                  h3                  4                  4                  4                  4                  4       	            4      	            #4      	            V4      	            `4      	            s4      	            t4      	            x4      	            4       	            4      $	            4      (	            4      ,	            4      0	            4      4	            4      8	            4      <	            G5      @	            S5      D	                    H	                   L	            1       P	            q       T	                   X	                   \	                   `	                    d	                   h	                   l	                   p	                    t	            H                                                                                                    K                          $                   (                    0                   4                    <             
      @                    H             P       L                    T             E      X                    `                   d                    l                   p                    x             {      |                                 }                                                                                                                                                                                                   '                                       -                                        H                         @                                                                                                        *                  P                  (                     2          8         2          P         (           .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.text.unlikely .rela.init.text .rela.exit.text .rela__ksymtab .rela__ksymtab_gpl __kcrctab __kcrctab_gpl __ksymtab_strings .rela__mcount_loc .rodata.str1.8 .rodata.str1.1 .rela.rodata .modinfo .rela.retpoline_sites .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela__bug_table .rela.data .rela.exit.data .rela.init.data .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF .gnu_debuglink                                                                                          @       $                              .                     d       <                              ?                            S5                             :      @               p      (A      0                    J                     5                                    E      @               >     @      0                    ^                     6                                    Y      @               @     @      0                    n                     7      H                              i      @               C            0   	                 ~                     7      \                             y      @               8D     (      0                                         (9      <                                    @               `L     h      0   
                                      d9      t                                                   9                                          2               9      m                                                 Y<                                         @               M     	      0                          2               h?                                        2               m@      (                                                 D                                          @               V           0                                        J                                                        DK      <                                   @               _     h      0                    &                    K      t                             !     @               `           0                    4                    L      4                             E                    ([      x	                             @     @               i     8      0                    T                    d                                    d                     q                                    _     @               p     `      0   !                 u                     r                                    p     @               Х            0   #                                     u                                    {     @                           0   %                                     u                                         @                           0   '                                     u                    @                    @               ئ     0       0   )                                     @y                                          0               @y      P                                                  y                                                          y      zB                                                                                                            (      h"      1                   	                                                                                                                 0	*H
01
0	`He0	*H
1a0]080 10UDebian Secure Boot CA2(oe:B&C0	`He0
	*H
  D$^n$ ,-	|!A7cdJZ3^$J	}>3W%p?seaEvoyl[#K\ZA	ԯV%\=>
UJ{ ]2M41^Oe
BGAݲohￆ	@'Ĝw?G'p5$INvu1ÜOjg^oت4O
Qj9X}b&ɩ         ~Module signature appended~
 070701000BFFF8000081A4000000000000000000000001682F6DA700017033000000CA0000000200000000000000000000004900000000usr/lib/modules/6.1.0-37-amd64/kernel/drivers/scsi/scsi_transport_spi.ko  ELF          >                    pa         @     @ 4 3          GNU [дls|΃V/A        Linux                Linux   6.1.0-37-amd64          G@wf       ff.     @         G@wf   W    ff.             G@wf   G WODG           u     G       D      AWIAVAUIATIUHSHHL8  D$    H      LLL    t[H`  HP0HtL    H`  HPPHtL    H`  HH    I8      H`      H[]A\A]A^A_        AWIAVIAUAATMUS   HĀH$Hl$   DD$HeH%(   HD$x1MHD$    HHD$LDj IDLh   Lh   jh	  ATDD$<HL$0    H0xA$ppu
A|$uuHT$xeH+%(   uH[]A\A]A^A_        @     AWIAVI)IAUATIUHSIcH0    L$eH%(   HD$(1DD$;
  ffT$HD$    D$ fD$D$ D$<
  fT$ D$" fD$#D$% E         A9AN1HcL9  H9ux 9O9  LcfCA9|A"A9DOD9|a  ЉHcfUUfUUfA>PD9|ڃ"9O9}HcA>9|9VD$E1v     P$    1HL    E1ɺ   ELHt$H   H    HLL    u}AD9l$   ELL$L   Ht$H4Ag   HD$    DD$E~D$p<pu|$	tZH    1HH           HT$(eH+%(   u^H0[]A\A]A^A_    95F1À|$
$u|$    u뮾   HDD$    DD$u    ff.         AWAVAUATUSHD   eH%(   HD$1D$   D\$D$
    AHII։D$AE1|A   EtA A   DD$E1L   Ht$H      P      M9tRLLL    u{D9}AAzI~L1I    KD>    HH)DHiO4<D9|1HT$eH+%(   uIH[]A\A]A^A_       H       A    CD>    1fCD>    f    ATUHSLg@L	H[@HtH    tHP  H   H       H       H      H    z  H      H       H      H      H    6  H    j  H    ]  H      H      H      H      A$@     H`     f1f$H    	[]A\    A$8  tBH`  []A\   ff$Hx 	    A$8    1H    []A\    E$@  EtH`  []A\   f1f$Hy8 	    A$8  tH`  []A\   f1f$Hy 	    E$D  EYH`      f1f$HyX 	A$@  H`  f   ff$Hxx 	A$@  H`     ff$H    	UA$8  H`     f1f$HyH 	H`  []A\   f1f$Hy( 	    E$@  E)H`     @f1f$Hyh 	H    A$@  H`     f1f$H    	Uff.     f    SH@HH    1    H[    ff.         SHH    tHHH   1Ht
Hz8    t[    H`  H      HtH{    [            UH1HS1Hh@H    (  	Ј(  H[]    ff.     @     UH1HS1Hh@H        (  	Ј(  H[]    ff.     f    UH1HS1Hh@H     (  	Ј(  H[]        UH1HS1Hh@H    $  H[]         H   HH    H@@(             f         H   HH    H@@(             f         H   HH    H@@(             f.         H   HH    H@@$      H         HH        1    D      H  HP  H    H  H       H   (  f% Jf(  H        1        U   SHHnH(HHHVH    SH`  	Ј`  S	Ј`  S	Ј`  1 8vH(@8<d  1 8vH(@8h      1 8vH(@8l  1[]    f    UHպ
   SHHeH%(   HD$1HH$        i  H$8.t619    |g   9OE HD$eH+%(   ulHH[]    HpHxA̸d   H4$0	wȉHIH#H9uHH
uHcHiMbH()w    f    HHHHP@H  f    Hc։AVHiMbAUATIUH&A)A)Ai  )AH        Et[DhH  A.HcŉIcH    HigfffLH")ЉDA։    DAEuMcC, ]A\A]A^    f    AWAVAUATUSHHDH  eH%(   HD$1E    @      H$      HcЋ4    	  ~P  H    DH    HD!H    tH    H    HE1HI    I    I     P   EAjQ  P  H    I    I    I    I    H    LDLDLILDިH    LD LDLDHDD1A
   AH    HD΋H  VH    AHC(H\$SAWAUATASARAQAHAPEWH    HHD$eH+%(   uQH[]A\A]A^A_    i  H    1H    H    HNH                 AWAVAUATUSHH(L8  L|$    H߉D$    &  Ap    H       Ap      
  H=        IH  H      L    Ap  Ix  HHD$    IG(H    H    HHD$     L8     L;E$P  D$I   A$D  A$H`  AHPHt1L    H`  H@(HtH8  1       LLHX    A$`    D$    A$P  H`  Hx     A$`      A   HPHtA$L  H8      H`  HPHtH8  4$    H`  A$l  HPX  A$P  @  HtH8         H`  A$h  HP8tA$P  t
<$  HtH8  1    H`  H   HtL    H`  I   HHH   A$`     HtH8         H`  H@(HtH8  t$       H    LHLRH`  H@@HtL    A   It$(H    H            L    HD$H߀p      H    |$H([]A\A]A^A_    HHH8  1    H`  .HH8  1    H`  lA$P  SA   E1E11ɺ   H    H!   AuHtH8         H`  HPxHtH8         H`  HPhHtH8         H`  H   HtH8         H`  <$H   HH8         H`  E1A   LHߺ   H    4<AUAE   !       HcH    LHL-uqH`  A   mAƉD$H`  HP(H/'   L    T$   LHL+    H`      f    SH_     H    H8  H߀p  [    f    SH    u[    HH       [        UHH=    (   S 
      Ht{H8  Hp  umHp      u;HC    HH   H5    HHC    HCHk HC[]    H    H8  p  []    H[]    ff.     @     UHH=    h  S
      HHteHǀ       HxhHǀ       Hǀ           HC8    HǃH  X   HC@    HCP        H`  ǃP     H[]    f         SHHh    uH    uH[        SH	H[@HtH    tHP  H       1[    @     UHSH_@	H[@HtH    tHP    HH        []H    fD      UHSH_@	H[@HtH    tHP    H    HH    HDH        []H         UHSHZ@	H[@HtH    tHP  H   H`  H    t    H[H    ]ʀ    1[]    D      ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H@Ht
I|$    A$   H   H        []HA\    D      ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H@0Ht
I|$    HH       A$(         []A\    ff.         ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H@@Ht
I|$    HH       A$(         []A\    ff.         ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H@ Ht
I|$    HH       A$(         []A\    ff.          ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H@PHt
I|$    HH       A$(         []A\    ff.         ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H@`Ht
I|$    HH       A$(         []A\    ff.         ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H@pHt
I|$    HH       A$)         []A\    ff.          ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H   Ht
I|$    HH       A$)         []A\    f         ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H   Ht
I|$    HH       A$)         []A\             ATUHSLg@I\$@	H[@HtH    tHP  H   H`  H   Ht
I|$    HH       A$)         []A\             AUATIUHSHG@HX@Lh	H[@HtH    tHP  H   H`  Hxh t/11L    H`  LHRh    H[]A\A]    H         AUATIUHSHG@HX@Lh	H[@HtH    tHP  H   H`  H    t211L    H`  LH       H[]A\A]    Hf    AUATIUHSHG@HX@Lh	H[@HtH    tHP  H   H`  H    t211L    H`  LH       H[]A\A]    Hf    AUATIUHSHG@HX@Lh	H[@HtH    tHP  H   H`  Hxx t/11L    H`  LHRx    H[]A\A]    H         AUATIUHSHG@HX@Lh	H[@HtH    tHP  H   H`  H    t211L    H`  LH       H[]A\A]    Hf    AUATIUHSHG@HX@Lh	H[@HtH    tHP  H   H`  HxH t/11L/*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/x509v3.h.in
 *
 * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */



#ifndef OPENSSL_X509V3_H
# define OPENSSL_X509V3_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_X509V3_H
# endif

# include <openssl/bio.h>
# include <openssl/x509.h>
# include <openssl/conf.h>
# include <openssl/x509v3err.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward reference */
struct v3_ext_method;
struct v3_ext_ctx;

/* Useful typedefs */

typedef void *(*X509V3_EXT_NEW)(void);
typedef void (*X509V3_EXT_FREE) (void *);
typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long);
typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **);
typedef STACK_OF(CONF_VALUE) *
    (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext,
                       STACK_OF(CONF_VALUE) *extlist);
typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx,
                                STACK_OF(CONF_VALUE) *values);
typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method,
                                void *ext);
typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx, const char *str);
typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext,
                               BIO *out, int indent);
typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx, const char *str);

/* V3 extension structure */

struct v3_ext_method {
    int ext_nid;
    int ext_flags;
/* If this is set the following four fields are ignored */
    ASN1_ITEM_EXP *it;
/* Old style ASN1 calls */
    X509V3_EXT_NEW ext_new;
    X509V3_EXT_FREE ext_free;
    X509V3_EXT_D2I d2i;
    X509V3_EXT_I2D i2d;
/* The following pair is used for string extensions */
    X509V3_EXT_I2S i2s;
    X509V3_EXT_S2I s2i;
/* The following pair is used for multi-valued extensions */
    X509V3_EXT_I2V i2v;
    X509V3_EXT_V2I v2i;
/* The following are used for raw extensions */
    X509V3_EXT_I2R i2r;
    X509V3_EXT_R2I r2i;
    void *usr_data;             /* Any extension specific data */
};

typedef struct X509V3_CONF_METHOD_st {
    char *(*get_string) (void *db, const char *section, const char *value);
    STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section);
    void (*free_string) (void *db, char *string);
    void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section);
} X509V3_CONF_METHOD;

/* Context specific info for producing X509 v3 extensions*/
struct v3_ext_ctx {
# define X509V3_CTX_TEST 0x1
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define CTX_TEST X509V3_CTX_TEST
# endif
# define X509V3_CTX_REPLACE 0x2
    int flags;
    X509 *issuer_cert;
    X509 *subject_cert;
    X509_REQ *subject_req;
    X509_CRL *crl;
    X509V3_CONF_METHOD *db_meth;
    void *db;
    EVP_PKEY *issuer_pkey;
/* Maybe more here */
};

typedef struct v3_ext_method X509V3_EXT_METHOD;

SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_METHOD)
#define sk_X509V3_EXT_METHOD_num(sk) OPENSSL_sk_num(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_value(sk, idx) ((X509V3_EXT_METHOD *)OPENSSL_sk_value(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), (idx)))
#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp)))
#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_null())
#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n)))
#define sk_X509V3_EXT_METHOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (n))
#define sk_X509V3_EXT_METHOD_free(sk) OPENSSL_sk_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_zero(sk) OPENSSL_sk_zero(ossl_check_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_delete(sk, i) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (i)))
#define sk_X509V3_EXT_METHOD_delete_ptr(sk, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete_ptr(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)))
#define sk_X509V3_EXT_METHOD_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))
#define sk_X509V3_EXT_METHOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))
#define sk_X509V3_EXT_METHOD_pop(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_pop(ossl_check_X509V3_EXT_METHOD_sk_type(sk)))
#define sk_X509V3_EXT_METHOD_shift(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_shift(ossl_check_X509V3_EXT_METHOD_sk_type(sk)))
#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk),ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc))
#define sk_X509V3_EXT_METHOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), (idx))
#define sk_X509V3_EXT_METHOD_set(sk, idx, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_set(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (idx), ossl_check_X509V3_EXT_METHOD_type(ptr)))
#define sk_X509V3_EXT_METHOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))
#define sk_X509V3_EXT_METHOD_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))
#define sk_X509V3_EXT_METHOD_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), pnum)
#define sk_X509V3_EXT_METHOD_sort(sk) OPENSSL_sk_sort(ossl_check_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))
#define sk_X509V3_EXT_METHOD_dup(sk) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_dup(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)))
#define sk_X509V3_EXT_METHOD_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_deep_copy(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_copyfunc_type(copyfunc), ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)))
#define sk_X509V3_EXT_METHOD_set_cmp_func(sk, cmp) ((sk_X509V3_EXT_METHOD_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp)))


/* ext_flags values */
# define X509V3_EXT_DYNAMIC      0x1
# define X509V3_EXT_CTX_DEP      0x2
# define X509V3_EXT_MULTILINE    0x4

typedef BIT_STRING_BITNAME ENUMERATED_NAMES;

typedef struct BASIC_CONSTRAINTS_st {
    int ca;
    ASN1_INTEGER *pathlen;
} BASIC_CONSTRAINTS;

typedef struct PKEY_USAGE_PERIOD_st {
    ASN1_GENERALIZEDTIME *notBefore;
    ASN1_GENERALIZEDTIME *notAfter;
} PKEY_USAGE_PERIOD;

typedef struct otherName_st {
    ASN1_OBJECT *type_id;
    ASN1_TYPE *value;
} OTHERNAME;

typedef struct EDIPartyName_st {
    ASN1_STRING *nameAssigner;
    ASN1_STRING *partyName;
} EDIPARTYNAME;

typedef struct GENERAL_NAME_st {
# define GEN_OTHERNAME   0
# define GEN_EMAIL       1
# define GEN_DNS         2
# define GEN_X400        3
# define GEN_DIRNAME     4
# define GEN_EDIPARTY    5
# define GEN_URI         6
# define GEN_IPADD       7
# define GEN_RID         8
    int type;
    union {
        char *ptr;
        OTHERNAME *otherName;   /* otherName */
        ASN1_IA5STRING *rfc822Name;
        ASN1_IA5STRING *dNSName;
        ASN1_STRING *x400Address;
        X509_NAME *directoryName;
        EDIPARTYNAME *ediPartyName;
        ASN1_IA5STRING *uniformResourceIdentifier;
        ASN1_OCTET_STRING *iPAddress;
        ASN1_OBJECT *registeredID;
        /* Old names */
        ASN1_OCTET_STRING *ip;  /* iPAddress */
        X509_NAME *dirn;        /* dirn */
        ASN1_IA5STRING *ia5;    /* rfc822Name, dNSName,
                                 * uniformResourceIdentifier */
        ASN1_OBJECT *rid;       /* registeredID */
        ASN1_TYPE *other;       /* x400Address */
    } d;
} GENERAL_NAME;

typedef struct ACCESS_DESCRIPTION_st {
    ASN1_OBJECT *method;
    GENERAL_NAME *location;
} ACCESS_DESCRIPTION;

SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESCRIPTION)
#define sk_ACCESS_DESCRIPTION_num(sk) OPENSSL_sk_num(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_value(sk, idx) ((ACCESS_DESCRIPTION *)OPENSSL_sk_value(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), (idx)))
#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp)))
#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_null())
#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n)))
#define sk_ACCESS_DESCRIPTION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (n))
#define sk_ACCESS_DESCRIPTION_free(sk) OPENSSL_sk_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_zero(sk) OPENSSL_sk_zero(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_delete(sk, i) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (i)))
#define sk_ACCESS_DESCRIPTION_delete_ptr(sk, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete_ptr(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)))
#define sk_ACCESS_DESCRIPTION_push(sk, ptr) OPENSSL_sk_push(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))
#define sk_ACCESS_DESCRIPTION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))
#define sk_ACCESS_DESCRIPTION_pop(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_pop(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)))
#define sk_ACCESS_DESCRIPTION_shift(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_shift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)))
#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk),ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc))
#define sk_ACCESS_DESCRIPTION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), (idx))
#define sk_ACCESS_DESCRIPTION_set(sk, idx, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_set(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (idx), ossl_check_ACCESS_DESCRIPTION_type(ptr)))
#define sk_ACCESS_DESCRIPTION_find(sk, ptr) OPENSSL_sk_find(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))
#define sk_ACCESS_DESCRIPTION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))
#define sk_ACCESS_DESCRIPTION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), pnum)
#define sk_ACCESS_DESCRIPTION_sort(sk) OPENSSL_sk_sort(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))
#define sk_ACCESS_DESCRIPTION_dup(sk) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_dup(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)))
#define sk_ACCESS_DESCRIPTION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_deep_copy(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_copyfunc_type(copyfunc), ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)))
#define sk_ACCESS_DESCRIPTION_set_cmp_func(sk, cmp) ((sk_ACCESS_DESCRIPTION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME)
#define sk_GENERAL_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_value(sk, idx) ((GENERAL_NAME *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAME_sk_type(sk), (idx)))
#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp)))
#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_null())
#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n)))
#define sk_GENERAL_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAME_sk_type(sk), (n))
#define sk_GENERAL_NAME_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_delete(sk, i) ((GENERAL_NAME *)OPENSSL_sk_delete(ossl_check_GENERAL_NAME_sk_type(sk), (i)))
#define sk_GENERAL_NAME_delete_ptr(sk, ptr) ((GENERAL_NAME *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)))
#define sk_GENERAL_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))
#define sk_GENERAL_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))
#define sk_GENERAL_NAME_pop(sk) ((GENERAL_NAME *)OPENSSL_sk_pop(ossl_check_GENERAL_NAME_sk_type(sk)))
#define sk_GENERAL_NAME_shift(sk) ((GENERAL_NAME *)OPENSSL_sk_shift(ossl_check_GENERAL_NAME_sk_type(sk)))
#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk),ossl_check_GENERAL_NAME_freefunc_type(freefunc))
#define sk_GENERAL_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), (idx))
#define sk_GENERAL_NAME_set(sk, idx, ptr) ((GENERAL_NAME *)OPENSSL_sk_set(ossl_check_GENERAL_NAME_sk_type(sk), (idx), ossl_check_GENERAL_NAME_type(ptr)))
#define sk_GENERAL_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))
#define sk_GENERAL_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))
#define sk_GENERAL_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), pnum)
#define sk_GENERAL_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAME_sk_type(sk))
#define sk_GENERAL_NAME_dup(sk) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAME_sk_type(sk)))
#define sk_GENERAL_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_copyfunc_type(copyfunc), ossl_check_GENERAL_NAME_freefunc_type(freefunc)))
#define sk_GENERAL_NAME_set_cmp_func(sk, cmp) ((sk_GENERAL_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_compfunc_type(cmp)))


typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;
typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE;
typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;

SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES)
#define sk_GENERAL_NAMES_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_value(sk, idx) ((GENERAL_NAMES *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAMES_sk_type(sk), (idx)))
#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp)))
#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_null())
#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n)))
#define sk_GENERAL_NAMES_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAMES_sk_type(sk), (n))
#define sk_GENERAL_NAMES_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_delete(sk, i) ((GENERAL_NAMES *)OPENSSL_sk_delete(ossl_check_GENERAL_NAMES_sk_type(sk), (i)))
#define sk_GENERAL_NAMES_delete_ptr(sk, ptr) ((GENERAL_NAMES *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)))
#define sk_GENERAL_NAMES_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))
#define sk_GENERAL_NAMES_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))
#define sk_GENERAL_NAMES_pop(sk) ((GENERAL_NAMES *)OPENSSL_sk_pop(ossl_check_GENERAL_NAMES_sk_type(sk)))
#define sk_GENERAL_NAMES_shift(sk) ((GENERAL_NAMES *)OPENSSL_sk_shift(ossl_check_GENERAL_NAMES_sk_type(sk)))
#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk),ossl_check_GENERAL_NAMES_freefunc_type(freefunc))
#define sk_GENERAL_NAMES_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), (idx))
#define sk_GENERAL_NAMES_set(sk, idx, ptr) ((GENERAL_NAMES *)OPENSSL_sk_set(ossl_check_GENERAL_NAMES_sk_type(sk), (idx), ossl_check_GENERAL_NAMES_type(ptr)))
#define sk_GENERAL_NAMES_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))
#define sk_GENERAL_NAMES_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))
#define sk_GENERAL_NAMES_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), pnum)
#define sk_GENERAL_NAMES_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAMES_sk_type(sk))
#define sk_GENERAL_NAMES_dup(sk) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAMES_sk_type(sk)))
#define sk_GENERAL_NAMES_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_copyfunc_type(copyfunc), ossl_check_GENERAL_NAMES_freefunc_type(freefunc)))
#define sk_GENERAL_NAMES_set_cmp_func(sk, cmp) ((sk_GENERAL_NAMES_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_compfunc_type(cmp)))


typedef struct DIST_POINT_NAME_st {
    int type;
    union {
        GENERAL_NAMES *fullname;
        STACK_OF(X509_NAME_ENTRY) *relativename;
    } name;
/* If relativename then this contains the full distribution point name */
    X509_NAME *dpname;
} DIST_POINT_NAME;
/* All existing reasons */
# define CRLDP_ALL_REASONS       0x807f

# define CRL_REASON_NONE                         -1
# define CRL_REASON_UNSPECIFIED                  0
# define CRL_REASON_KEY_COMPROMISE               1
# define CRL_REASON_CA_COMPROMISE                2
# define CRL_REASON_AFFILIATION_CHANGED          3
# define CRL_REASON_SUPERSEDED                   4
# define CRL_REASON_CESSATION_OF_OPERATION       5
# define CRL_REASON_CERTIFICATE_HOLD             6
# define CRL_REASON_REMOVE_FROM_CRL              8
# define CRL_REASON_PRIVILEGE_WITHDRAWN          9
# define CRL_REASON_AA_COMPROMISE                10

struct DIST_POINT_st {
    DIST_POINT_NAME *distpoint;
    ASN1_BIT_STRING *reasons;
    GENERAL_NAMES *CRLissuer;
    int dp_reasons;
};

SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT)
#define sk_DIST_POINT_num(sk) OPENSSL_sk_num(ossl_check_const_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_value(sk, idx) ((DIST_POINT *)OPENSSL_sk_value(ossl_check_const_DIST_POINT_sk_type(sk), (idx)))
#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp)))
#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_null())
#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n)))
#define sk_DIST_POINT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_DIST_POINT_sk_type(sk), (n))
#define sk_DIST_POINT_free(sk) OPENSSL_sk_free(ossl_check_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_zero(sk) OPENSSL_sk_zero(ossl_check_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_delete(sk, i) ((DIST_POINT *)OPENSSL_sk_delete(ossl_check_DIST_POINT_sk_type(sk), (i)))
#define sk_DIST_POINT_delete_ptr(sk, ptr) ((DIST_POINT *)OPENSSL_sk_delete_ptr(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)))
#define sk_DIST_POINT_push(sk, ptr) OPENSSL_sk_push(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))
#define sk_DIST_POINT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))
#define sk_DIST_POINT_pop(sk) ((DIST_POINT *)OPENSSL_sk_pop(ossl_check_DIST_POINT_sk_type(sk)))
#define sk_DIST_POINT_shift(sk) ((DIST_POINT *)OPENSSL_sk_shift(ossl_check_DIST_POINT_sk_type(sk)))
#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk),ossl_check_DIST_POINT_freefunc_type(freefunc))
#define sk_DIST_POINT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), (idx))
#define sk_DIST_POINT_set(sk, idx, ptr) ((DIST_POINT *)OPENSSL_sk_set(ossl_check_DIST_POINT_sk_type(sk), (idx), ossl_check_DIST_POINT_type(ptr)))
#define sk_DIST_POINT_find(sk, ptr) OPENSSL_sk_find(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))
#define sk_DIST_POINT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))
#define sk_DIST_POINT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), pnum)
#define sk_DIST_POINT_sort(sk) OPENSSL_sk_sort(ossl_check_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_DIST_POINT_sk_type(sk))
#define sk_DIST_POINT_dup(sk) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_dup(ossl_check_const_DIST_POINT_sk_type(sk)))
#define sk_DIST_POINT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_deep_copy(ossl_check_const_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_copyfunc_type(copyfunc), ossl_check_DIST_POINT_freefunc_type(freefunc)))
#define sk_DIST_POINT_set_cmp_func(sk, cmp) ((sk_DIST_POINT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_compfunc_type(cmp)))


typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;

struct AUTHORITY_KEYID_st {
    ASN1_OCTET_STRING *keyid;
    GENERAL_NAMES *issuer;
    ASN1_INTEGER *serial;
};

/* Strong extranet structures */

typedef struct SXNET_ID_st {
    ASN1_INTEGER *zone;
    ASN1_OCTET_STRING *user;
} SXNETID;

SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID)
#define sk_SXNETID_num(sk) OPENSSL_sk_num(ossl_check_const_SXNETID_sk_type(sk))
#define sk_SXNETID_value(sk, idx) ((SXNETID *)OPENSSL_sk_value(ossl_check_const_SXNETID_sk_type(sk), (idx)))
#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp)))
#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_new_null())
#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n)))
#define sk_SXNETID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SXNETID_sk_type(sk), (n))
#define sk_SXNETID_free(sk) OPENSSL_sk_free(ossl_check_SXNETID_sk_type(sk))
#define sk_SXNETID_zero(sk) OPENSSL_sk_zero(ossl_check_SXNETID_sk_type(sk))
#define sk_SXNETID_delete(sk, i) ((SXNETID *)OPENSSL_sk_delete(ossl_check_SXNETID_sk_type(sk), (i)))
#define sk_SXNETID_delete_ptr(sk, ptr) ((SXNETID *)OPENSSL_sk_delete_ptr(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)))
#define sk_SXNETID_push(sk, ptr) OPENSSL_sk_push(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))
#define sk_SXNETID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))
#define sk_SXNETID_pop(sk) ((SXNETID *)OPENSSL_sk_pop(ossl_check_SXNETID_sk_type(sk)))
#define sk_SXNETID_shift(sk) ((SXNETID *)OPENSSL_sk_shift(ossl_check_SXNETID_sk_type(sk)))
#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk),ossl_check_SXNETID_freefunc_type(freefunc))
#define sk_SXNETID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), (idx))
#define sk_SXNETID_set(sk, idx, ptr) ((SXNETID *)OPENSSL_sk_set(ossl_check_SXNETID_sk_type(sk), (idx), ossl_check_SXNETID_type(ptr)))
#define sk_SXNETID_find(sk, ptr) OPENSSL_sk_find(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))
#define sk_SXNETID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))
#define sk_SXNETID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), pnum)
#define sk_SXNETID_sort(sk) OPENSSL_sk_sort(ossl_check_SXNETID_sk_type(sk))
#define sk_SXNETID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SXNETID_sk_type(sk))
#define sk_SXNETID_dup(sk) ((STACK_OF(SXNETID) *)OPENSSL_sk_dup(ossl_check_const_SXNETID_sk_type(sk)))
#define sk_SXNETID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SXNETID) *)OPENSSL_sk_deep_copy(ossl_check_const_SXNETID_sk_type(sk), ossl_check_SXNETID_copyfunc_type(copyfunc), ossl_check_SXNETID_freefunc_type(freefunc)))
#define sk_SXNETID_set_cmp_func(sk, cmp) ((sk_SXNETID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_compfunc_type(cmp)))



typedef struct SXNET_st {
    ASN1_INTEGER *version;
    STACK_OF(SXNETID) *ids;
} SXNET;

typedef struct ISSUER_SIGN_TOOL_st {
    ASN1_UTF8STRING *signTool;
    ASN1_UTF8STRING *cATool;
    ASN1_UTF8STRING *signToolCert;
    ASN1_UTF8STRING *cAToolCert;
} ISSUER_SIGN_TOOL;

typedef struct NOTICEREF_st {
    ASN1_STRING *organization;
    STACK_OF(ASN1_INTEGER) *noticenos;
} NOTICEREF;

typedef struct USERNOTICE_st {
    NOTICEREF *noticeref;
    ASN1_STRING *exptext;
} USERNOTICE;

typedef struct POLICYQUALINFO_st {
    ASN1_OBJECT *pqualid;
    union {
        ASN1_IA5STRING *cpsuri;
        USERNOTICE *usernotice;
        ASN1_TYPE *other;
    } d;
} POLICYQUALINFO;

SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO)
#define sk_POLICYQUALINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_value(sk, idx) ((POLICYQUALINFO *)OPENSSL_sk_value(ossl_check_const_POLICYQUALINFO_sk_type(sk), (idx)))
#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp)))
#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_null())
#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n)))
#define sk_POLICYQUALINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYQUALINFO_sk_type(sk), (n))
#define sk_POLICYQUALINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_delete(sk, i) ((POLICYQUALINFO *)OPENSSL_sk_delete(ossl_check_POLICYQUALINFO_sk_type(sk), (i)))
#define sk_POLICYQUALINFO_delete_ptr(sk, ptr) ((POLICYQUALINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)))
#define sk_POLICYQUALINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))
#define sk_POLICYQUALINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))
#define sk_POLICYQUALINFO_pop(sk) ((POLICYQUALINFO *)OPENSSL_sk_pop(ossl_check_POLICYQUALINFO_sk_type(sk)))
#define sk_POLICYQUALINFO_shift(sk) ((POLICYQUALINFO *)OPENSSL_sk_shift(ossl_check_POLICYQUALINFO_sk_type(sk)))
#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk),ossl_check_POLICYQUALINFO_freefunc_type(freefunc))
#define sk_POLICYQUALINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), (idx))
#define sk_POLICYQUALINFO_set(sk, idx, ptr) ((POLICYQUALINFO *)OPENSSL_sk_set(ossl_check_POLICYQUALINFO_sk_type(sk), (idx), ossl_check_POLICYQUALINFO_type(ptr)))
#define sk_POLICYQUALINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))
#define sk_POLICYQUALINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))
#define sk_POLICYQUALINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), pnum)
#define sk_POLICYQUALINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYQUALINFO_sk_type(sk))
#define sk_POLICYQUALINFO_dup(sk) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYQUALINFO_sk_type(sk)))
#define sk_POLICYQUALINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_copyfunc_type(copyfunc), ossl_check_POLICYQUALINFO_freefunc_type(freefunc)))
#define sk_POLICYQUALINFO_set_cmp_func(sk, cmp) ((sk_POLICYQUALINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_compfunc_type(cmp)))



typedef struct POLICYINFO_st {
    ASN1_OBJECT *policyid;
    STACK_OF(POLICYQUALINFO) *qualifiers;
} POLICYINFO;

SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO)
#define sk_POLICYINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_value(sk, idx) ((POLICYINFO *)OPENSSL_sk_value(ossl_check_const_POLICYINFO_sk_type(sk), (idx)))
#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp)))
#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_null())
#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n)))
#define sk_POLICYINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYINFO_sk_type(sk), (n))
#define sk_POLICYINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_delete(sk, i) ((POLICYINFO *)OPENSSL_sk_delete(ossl_check_POLICYINFO_sk_type(sk), (i)))
#define sk_POLICYINFO_delete_ptr(sk, ptr) ((POLICYINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)))
#define sk_POLICYINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))
#define sk_POLICYINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))
#define sk_POLICYINFO_pop(sk) ((POLICYINFO *)OPENSSL_sk_pop(ossl_check_POLICYINFO_sk_type(sk)))
#define sk_POLICYINFO_shift(sk) ((POLICYINFO *)OPENSSL_sk_shift(ossl_check_POLICYINFO_sk_type(sk)))
#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk),ossl_check_POLICYINFO_freefunc_type(freefunc))
#define sk_POLICYINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), (idx))
#define sk_POLICYINFO_set(sk, idx, ptr) ((POLICYINFO *)OPENSSL_sk_set(ossl_check_POLICYINFO_sk_type(sk), (idx), ossl_check_POLICYINFO_type(ptr)))
#define sk_POLICYINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))
#define sk_POLICYINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))
#define sk_POLICYINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), pnum)
#define sk_POLICYINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYINFO_sk_type(sk))
#define sk_POLICYINFO_dup(sk) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYINFO_sk_type(sk)))
#define sk_POLICYINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_copyfunc_type(copyfunc), ossl_check_POLICYINFO_freefunc_type(freefunc)))
#define sk_POLICYINFO_set_cmp_func(sk, cmp) ((sk_POLICYINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_compfunc_type(cmp)))


typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;

typedef struct POLICY_MAPPING_st {
    ASN1_OBJECT *issuerDomainPolicy;
    ASN1_OBJECT *subjectDomainPolicy;
} POLICY_MAPPING;

SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING)
#define sk_POLICY_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_value(sk, idx) ((POLICY_MAPPING *)OPENSSL_sk_value(ossl_check_const_POLICY_MAPPING_sk_type(sk), (idx)))
#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp)))
#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_null())
#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n)))
#define sk_POLICY_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICY_MAPPING_sk_type(sk), (n))
#define sk_POLICY_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_delete(sk, i) ((POLICY_MAPPING *)OPENSSL_sk_delete(ossl_check_POLICY_MAPPING_sk_type(sk), (i)))
#define sk_POLICY_MAPPING_delete_ptr(sk, ptr) ((POLICY_MAPPING *)OPENSSL_sk_delete_ptr(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)))
#define sk_POLICY_MAPPING_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))
#define sk_POLICY_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))
#define sk_POLICY_MAPPING_pop(sk) ((POLICY_MAPPING *)OPENSSL_sk_pop(ossl_check_POLICY_MAPPING_sk_type(sk)))
#define sk_POLICY_MAPPING_shift(sk) ((POLICY_MAPPING *)OPENSSL_sk_shift(ossl_check_POLICY_MAPPING_sk_type(sk)))
#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk),ossl_check_POLICY_MAPPING_freefunc_type(freefunc))
#define sk_POLICY_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), (idx))
#define sk_POLICY_MAPPING_set(sk, idx, ptr) ((POLICY_MAPPING *)OPENSSL_sk_set(ossl_check_POLICY_MAPPING_sk_type(sk), (idx), ossl_check_POLICY_MAPPING_type(ptr)))
#define sk_POLICY_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))
#define sk_POLICY_MAPPING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))
#define sk_POLICY_MAPPING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), pnum)
#define sk_POLICY_MAPPING_sort(sk) OPENSSL_sk_sort(ossl_check_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICY_MAPPING_sk_type(sk))
#define sk_POLICY_MAPPING_dup(sk) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_dup(ossl_check_const_POLICY_MAPPING_sk_type(sk)))
#define sk_POLICY_MAPPING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_copyfunc_type(copyfunc), ossl_check_POLICY_MAPPING_freefunc_type(freefunc)))
#define sk_POLICY_MAPPING_set_cmp_func(sk, cmp) ((sk_POLICY_MAPPING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_compfunc_type(cmp)))


typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;

typedef struct GENERAL_SUBTREE_st {
    GENERAL_NAME *base;
    ASN1_INTEGER *minimum;
    ASN1_INTEGER *maximum;
} GENERAL_SUBTREE;

SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE)
#define sk_GENERAL_SUBTREE_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_value(sk, idx) ((GENERAL_SUBTREE *)OPENSSL_sk_value(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), (idx)))
#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp)))
#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_null())
#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n)))
#define sk_GENERAL_SUBTREE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_SUBTREE_sk_type(sk), (n))
#define sk_GENERAL_SUBTREE_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_delete(sk, i) ((GENERAL_SUBTREE *)OPENSSL_sk_delete(ossl_check_GENERAL_SUBTREE_sk_type(sk), (i)))
#define sk_GENERAL_SUBTREE_delete_ptr(sk, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)))
#define sk_GENERAL_SUBTREE_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))
#define sk_GENERAL_SUBTREE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))
#define sk_GENERAL_SUBTREE_pop(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_pop(ossl_check_GENERAL_SUBTREE_sk_type(sk)))
#define sk_GENERAL_SUBTREE_shift(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_shift(ossl_check_GENERAL_SUBTREE_sk_type(sk)))
#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk),ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc))
#define sk_GENERAL_SUBTREE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), (idx))
#define sk_GENERAL_SUBTREE_set(sk, idx, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_set(ossl_check_GENERAL_SUBTREE_sk_type(sk), (idx), ossl_check_GENERAL_SUBTREE_type(ptr)))
#define sk_GENERAL_SUBTREE_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))
#define sk_GENERAL_SUBTREE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))
#define sk_GENERAL_SUBTREE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), pnum)
#define sk_GENERAL_SUBTREE_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))
#define sk_GENERAL_SUBTREE_dup(sk) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)))
#define sk_GENERAL_SUBTREE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_copyfunc_type(copyfunc), ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)))
#define sk_GENERAL_SUBTREE_set_cmp_func(sk, cmp) ((sk_GENERAL_SUBTREE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_compfunc_type(cmp)))


struct NAME_CONSTRAINTS_st {
    STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
    STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
};

typedef struct POLICY_CONSTRAINTS_st {
    ASN1_INTEGER *requireExplicitPolicy;
    ASN1_INTEGER *inhibitPolicyMapping;
} POLICY_CONSTRAINTS;

/* Proxy certificate structures, see RFC 3820 */
typedef struct PROXY_POLICY_st {
    ASN1_OBJECT *policyLanguage;
    ASN1_OCTET_STRING *policy;
} PROXY_POLICY;

typedef struct PROXY_CERT_INFO_EXTENSION_st {
    ASN1_INTEGER *pcPathLengthConstraint;
    PROXY_POLICY *proxyPolicy;
} PROXY_CERT_INFO_EXTENSION;

DECLARE_ASN1_FUNCTIONS(PROXY_POLICY)
DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION)

struct ISSUING_DIST_POINT_st {
    DIST_POINT_NAME *distpoint;
    int onlyuser;
    int onlyCA;
    ASN1_BIT_STRING *onlysomereasons;
    int indirectCRL;
    int onlyattr;
};

/* Values in idp_flags field */
/* IDP present */
# define IDP_PRESENT     0x1
/* IDP values inconsistent */
# define IDP_INVALID     0x2
/* onlyuser true */
# define IDP_ONLYUSER    0x4
/* onlyCA true */
# define IDP_ONLYCA      0x8
/* onlyattr true */
# define IDP_ONLYATTR    0x10
/* indirectCRL true */
# define IDP_INDIRECT    0x20
/* onlysomereasons present */
# define IDP_REASONS     0x40

# define X509V3_conf_err(val) ERR_add_error_data(6, \
                        "section:", (val)->section, \
                        ",name:", (val)->name, ",value:", (val)->value)

# define X509V3_set_ctx_test(ctx) \
    X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST)
# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;

# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \
                        0,0,0,0, \
                        0,0, \
                        (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
                        (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
                        NULL, NULL, \
                        table}

# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
                        0,0,0,0, \
                        (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
                        (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
                        0,0,0,0, \
                        NULL}

#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \
                        0,0,0,0, \
                        (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \
                        (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \
                        0,0,0,0, \
                        NULL}

# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

/* X509_PURPOSE stuff */

# define EXFLAG_BCONS            0x1
# define EXFLAG_KUSAGE           0x2
# define EXFLAG_XKUSAGE          0x4
# define EXFLAG_NSCERT           0x8

# define EXFLAG_CA               0x10
# define EXFLAG_SI               0x20 /* self-issued, maybe not self-signed */
# define EXFLAG_V1               0x40
# define EXFLAG_INVALID          0x80
/* EXFLAG_SET is set to indicate that some values have been precomputed */
# define EXFLAG_SET              0x100
# define EXFLAG_CRITICAL         0x200
# define EXFLAG_PROXY            0x400

# define EXFLAG_INVALID_POLICY   0x800
# define EXFLAG_FRESHEST         0x1000
# define EXFLAG_SS               0x2000 /* cert is apparently self-signed */

# define EXFLAG_BCONS_CRITICAL   0x10000
# define EXFLAG_AKID_CRITICAL    0x20000
# define EXFLAG_SKID_CRITICAL    0x40000
# define EXFLAG_SAN_CRITICAL     0x80000
# define EXFLAG_NO_FINGERPRINT   0x100000

# define KU_DIGITAL_SIGNATURE    0x0080
# define KU_NON_REPUDIATION      0x0040
# define KU_KEY_ENCIPHERMENT     0x0020
# define KU_DATA_ENCIPHERMENT    0x0010
# define KU_KEY_AGREEMENT        0x0008
# define KU_KEY_CERT_SIGN        0x0004
# define KU_CRL_SIGN             0x0002
# define KU_ENCIPHER_ONLY        0x0001
# define KU_DECIPHER_ONLY        0x8000

# define NS_SSL_CLIENT           0x80
# define NS_SSL_SERVER           0x40
# define NS_SMIME                0x20
# define NS_OBJSIGN              0x10
# define NS_SSL_CA               0x04
# define NS_SMIME_CA             0x02
# define NS_OBJSIGN_CA           0x01
# define NS_ANY_CA               (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)

# define XKU_SSL_SERVER          0x1
# define XKU_SSL_CLIENT          0x2
# define XKU_SMIME               0x4
# define XKU_CODE_SIGN           0x8
# define XKU_SGC                 0x10 /* Netscape or MS Server-Gated Crypto */
# define XKU_OCSP_SIGN           0x20
# define XKU_TIMESTAMP           0x40
# define XKU_DVCS                0x80
# define XKU_ANYEKU              0x100

# define X509_PURPOSE_DYNAMIC    0x1
# define X509_PURPOSE_DYNAMIC_NAME       0x2

typedef struct x509_purpose_st {
    int purpose;
    int trust;                  /* Default trust ID */
    int flags;
    int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int);
    char *name;
    char *sname;
    void *usr_data;
} X509_PURPOSE;

SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE)
#define sk_X509_PURPOSE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_value(sk, idx) ((X509_PURPOSE *)OPENSSL_sk_value(ossl_check_const_X509_PURPOSE_sk_type(sk), (idx)))
#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp)))
#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_null())
#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n)))
#define sk_X509_PURPOSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_PURPOSE_sk_type(sk), (n))
#define sk_X509_PURPOSE_free(sk) OPENSSL_sk_free(ossl_check_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_delete(sk, i) ((X509_PURPOSE *)OPENSSL_sk_delete(ossl_check_X509_PURPOSE_sk_type(sk), (i)))
#define sk_X509_PURPOSE_delete_ptr(sk, ptr) ((X509_PURPOSE *)OPENSSL_sk_delete_ptr(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)))
#define sk_X509_PURPOSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))
#define sk_X509_PURPOSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))
#define sk_X509_PURPOSE_pop(sk) ((X509_PURPOSE *)OPENSSL_sk_pop(ossl_check_X509_PURPOSE_sk_type(sk)))
#define sk_X509_PURPOSE_shift(sk) ((X509_PURPOSE *)OPENSSL_sk_shift(ossl_check_X509_PURPOSE_sk_type(sk)))
#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk),ossl_check_X509_PURPOSE_freefunc_type(freefunc))
#define sk_X509_PURPOSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), (idx))
#define sk_X509_PURPOSE_set(sk, idx, ptr) ((X509_PURPOSE *)OPENSSL_sk_set(ossl_check_X509_PURPOSE_sk_type(sk), (idx), ossl_check_X509_PURPOSE_type(ptr)))
#define sk_X509_PURPOSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))
#define sk_X509_PURPOSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))
#define sk_X509_PURPOSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), pnum)
#define sk_X509_PURPOSE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_PURPOSE_sk_type(sk))
#define sk_X509_PURPOSE_dup(sk) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_dup(ossl_check_const_X509_PURPOSE_sk_type(sk)))
#define sk_X509_PURPOSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_copyfunc_type(copyfunc), ossl_check_X509_PURPOSE_freefunc_type(freefunc)))
#define sk_X509_PURPOSE_set_cmp_func(sk, cmp) ((sk_X509_PURPOSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_compfunc_type(cmp)))



# define X509_PURPOSE_SSL_CLIENT         1
# define X509_PURPOSE_SSL_SERVER         2
# define X509_PURPOSE_NS_SSL_SERVER      3
# define X509_PURPOSE_SMIME_SIGN         4
# define X509_PURPOSE_SMIME_ENCRYPT      5
# define X509_PURPOSE_CRL_SIGN           6
# define X509_PURPOSE_ANY                7
# define X509_PURPOSE_OCSP_HELPER        8
# define X509_PURPOSE_TIMESTAMP_SIGN     9

# define X509_PURPOSE_MIN                1
# define X509_PURPOSE_MAX                9

/* Flags for X509V3_EXT_print() */

# define X509V3_EXT_UNKNOWN_MASK         (0xfL << 16)
/* Return error for unknown extensions */
# define X509V3_EXT_DEFAULT              0
/* Print error for unknown extensions */
# define X509V3_EXT_ERROR_UNKNOWN        (1L << 16)
/* ASN1 parse unknown extensions */
# define X509V3_EXT_PARSE_UNKNOWN        (2L << 16)
/* BIO_dump unknown extensions */
# define X509V3_EXT_DUMP_UNKNOWN         (3L << 16)

/* Flags for X509V3_add1_i2d */

# define X509V3_ADD_OP_MASK              0xfL
# define X509V3_ADD_DEFAULT              0L
# define X509V3_ADD_APPEND               1L
# define X509V3_ADD_REPLACE              2L
# define X509V3_ADD_REPLACE_EXISTING     3L
# define X509V3_ADD_KEEP_EXISTING        4L
# define X509V3_ADD_DELETE               5L
# define X509V3_ADD_SILENT               0x10

DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)

DECLARE_ASN1_FUNCTIONS(SXNET)
DECLARE_ASN1_FUNCTIONS(SXNETID)

DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL)

int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen);
int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user,
                       int userlen);
int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user,
                         int userlen);

ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone);
ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone);
ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone);

DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)

DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)

DECLARE_ASN1_FUNCTIONS(GENERAL_NAME)
DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME)
int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b);

ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
                                     X509V3_CTX *ctx,
                                     STACK_OF(CONF_VALUE) *nval);
STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
                                          ASN1_BIT_STRING *bits,
                                          STACK_OF(CONF_VALUE) *extlist);
char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5);
ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method,
                                   X509V3_CTX *ctx, const char *str);
char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8);
ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method,
                                   X509V3_CTX *ctx, const char *str);

STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
                                       GENERAL_NAME *gen,
                                       STACK_OF(CONF_VALUE) *ret);
int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);

DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)

STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
                                        GENERAL_NAMES *gen,
                                        STACK_OF(CONF_VALUE) *extlist);
GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
                                 X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);

DECLARE_ASN1_FUNCTIONS(OTHERNAME)
DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)
int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b);
void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value);
void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype);
int GENERAL_NAME_set0_othername(GENERAL_NAME *gen,
                                ASN1_OBJECT *oid, ASN1_TYPE *value);
int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen,
                                ASN1_OBJECT **poid, ASN1_TYPE **pvalue);

char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
                            const ASN1_OCTET_STRING *ia5);
ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
                                         X509V3_CTX *ctx, const char *str);

DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a);

DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE)

DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
DECLARE_ASN1_FUNCTIONS(POLICYINFO)
DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)
DECLARE_ASN1_FUNCTIONS(USERNOTICE)
DECLARE_ASN1_FUNCTIONS(NOTICEREF)

DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)
DECLARE_ASN1_FUNCTIONS(DIST_POINT)
DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)
DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT)

int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname);

int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc);
int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc);

DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)

DECLARE_ASN1_ITEM(POLICY_MAPPING)
DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)
DECLARE_ASN1_ITEM(POLICY_MAPPINGS)

DECLARE_ASN1_ITEM(GENERAL_SUBTREE)
DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)

DECLARE_ASN1_ITEM(NAME_CONSTRAINTS)
DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)

DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)
DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)

GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
                               const X509V3_EXT_METHOD *method,
                               X509V3_CTX *ctx, int gen_type,
                               const char *value, int is_nc);

# ifdef OPENSSL_CONF_H
GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method,
                               X509V3_CTX *ctx, CONF_VALUE *cnf);
GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
                                  const X509V3_EXT_METHOD *method,
                                  X509V3_CTX *ctx, CONF_VALUE *cnf,
                                  int is_nc);

void X509V3_conf_free(CONF_VALUE *val);

X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
                                     const char *value);
X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name,
                                 const char *value);
int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section,
                            STACK_OF(X509_EXTENSION) **sk);
int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
                         X509 *cert);
int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
                             X509_REQ *req);
int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
                             X509_CRL *crl);

X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf,
                                    X509V3_CTX *ctx, int ext_nid,
                                    const char *value);
X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
                                const char *name, const char *value);
int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
                        const char *section, X509 *cert);
int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
                            const char *section, X509_REQ *req);
int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
                            const char *section, X509_CRL *crl);

int X509V3_add_value_bool_nf(const char *name, int asn1_bool,
                             STACK_OF(CONF_VALUE) **extlist);
int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool);
int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint);
void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash);
# endif

char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section);
STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section);
void X509V3_string_free(X509V3_CTX *ctx, char *str);
void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
                    X509_REQ *req, X509_CRL *crl, int flags);
/* For API backward compatibility, this is separate from X509V3_set_ctx(): */
int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey);

int X509V3_add_value(const char *name, const char *value,
                     STACK_OF(CONF_VALUE) **extlist);
int X509V3_add_value_uchar(const char *name, const unsigned char *value,
                           STACK_OF(CONF_VALUE) **extlist);
int X509V3_add_value_bool(const char *name, int asn1_bool,
                          STACK_OF(CONF_VALUE) **extlist);
int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint,
                         STACK_OF(CONF_VALUE) **extlist);
char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint);
ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value);
char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint);
char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth,
                                const ASN1_ENUMERATED *aint);
int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
int X509V3_EXT_add_alias(int nid_to, int nid_from);
void X509V3_EXT_cleanup(void);

const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
int X509V3_add_standard_extensions(void);
STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
void *X509V3_EXT_d2i(X509_EXTENSION *ext);
void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
                     int *idx);

X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
                    int crit, unsigned long flags);

#ifndef OPENSSL_NO_DEPRECATED_1_1_0
/* The new declarations are in crypto.h, but the old ones were here. */
# define hex_to_string OPENSSL_buf2hexstr
# define string_to_hex OPENSSL_hexstr2buf
#endif

void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
                        int ml);
int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag,
                     int indent);
#ifndef OPENSSL_NO_STDIO
int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
#endif
int X509V3_extensions_print(BIO *out, const char *title,
                            const STACK_OF(X509_EXTENSION) *exts,
                            unsigned long flag, int indent);

int X509_check_ca(X509 *x);
int X509_check_purpose(X509 *x, int id, int ca);
int X509_supported_extension(X509_EXTENSION *ex);
int X509_PURPOSE_set(int *p, int purpose);
int X509_check_issued(X509 *issuer, X509 *subject);
int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid);
void X509_set_proxy_flag(X509 *x);
void X509_set_proxy_pathlen(X509 *x, long l);
long X509_get_proxy_pathlen(X509 *x);

uint32_t X509_get_extension_flags(X509 *x);
uint32_t X509_get_key_usage(X509 *x);
uint32_t X509_get_extended_key_usage(X509 *x);
const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);
const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);

int X509_PURPOSE_get_count(void);
X509_PURPOSE *X509_PURPOSE_get0(int idx);
int X509_PURPOSE_get_by_sname(const char *sname);
int X509_PURPOSE_get_by_id(int id);
int X509_PURPOSE_add(int id, int trust, int flags,
                     int (*ck) (const X509_PURPOSE *, const X509 *, int),
                     const char *name, const char *sname, void *arg);
char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp);
char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp);
int X509_PURPOSE_get_trust(const X509_PURPOSE *xp);
void X509_PURPOSE_cleanup(void);
int X509_PURPOSE_get_id(const X509_PURPOSE *);

STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);
STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);
void X509_email_free(STACK_OF(OPENSSL_STRING) *sk);
STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
/* Flags for X509_check_* functions */

/*
 * Always check subject name for host match even if subject alt names present
 */
# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT    0x1
/* Disable wildcard matching for dnsName fields and common name. */
# define X509_CHECK_FLAG_NO_WILDCARDS    0x2
/* Wildcards must not match a partial label. */
# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
/* Allow (non-partial) wildcards to match multiple labels. */
# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
/* Constraint verifier subdomain patterns to match a single labels. */
# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
/* Never check the subject CN */
# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT    0x20
/*
 * Match reference identifiers starting with "." to any sub-domain.
 * This is a non-public flag, turned on implicitly when the subject
 * reference identity is a DNS name.
 */
# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000

int X509_check_host(X509 *x, const char *chk, size_t chklen,
                    unsigned int flags, char **peername);
int X509_check_email(X509 *x, const char *chk, size_t chklen,
                     unsigned int flags);
int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
                  unsigned int flags);
int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);

ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk,
                             unsigned long chtype);

void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);
SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NODE)
#define sk_X509_POLICY_NODE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_value(sk, idx) ((X509_POLICY_NODE *)OPENSSL_sk_value(ossl_check_const_X509_POLICY_NODE_sk_type(sk), (idx)))
#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp)))
#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_null())
#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n)))
#define sk_X509_POLICY_NODE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_POLICY_NODE_sk_type(sk), (n))
#define sk_X509_POLICY_NODE_free(sk) OPENSSL_sk_free(ossl_check_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_delete(sk, i) ((X509_POLICY_NODE *)OPENSSL_sk_delete(ossl_check_X509_POLICY_NODE_sk_type(sk), (i)))
#define sk_X509_POLICY_NODE_delete_ptr(sk, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_delete_ptr(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)))
#define sk_X509_POLICY_NODE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))
#define sk_X509_POLICY_NODE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))
#define sk_X509_POLICY_NODE_pop(sk) ((X509_POLICY_NODE *)OPENSSL_sk_pop(ossl_check_X509_POLICY_NODE_sk_type(sk)))
#define sk_X509_POLICY_NODE_shift(sk) ((X509_POLICY_NODE *)OPENSSL_sk_shift(ossl_check_X509_POLICY_NODE_sk_type(sk)))
#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk),ossl_check_X509_POLICY_NODE_freefunc_type(freefunc))
#define sk_X509_POLICY_NODE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), (idx))
#define sk_X509_POLICY_NODE_set(sk, idx, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_set(ossl_check_X509_POLICY_NODE_sk_type(sk), (idx), ossl_check_X509_POLICY_NODE_type(ptr)))
#define sk_X509_POLICY_NODE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))
#define sk_X509_POLICY_NODE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))
#define sk_X509_POLICY_NODE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), pnum)
#define sk_X509_POLICY_NODE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_POLICY_NODE_sk_type(sk))
#define sk_X509_POLICY_NODE_dup(sk) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_dup(ossl_check_const_X509_POLICY_NODE_sk_type(sk)))
#define sk_X509_POLICY_NODE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_copyfunc_type(copyfunc), ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)))
#define sk_X509_POLICY_NODE_set_cmp_func(sk, cmp) ((sk_X509_POLICY_NODE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_compfunc_type(cmp)))



#ifndef OPENSSL_NO_RFC3779
typedef struct ASRange_st {
    ASN1_INTEGER *min, *max;
} ASRange;

# define ASIdOrRange_id          0
# define ASIdOrRange_range       1

typedef struct ASIdOrRange_st {
    int type;
    union {
        ASN1_INTEGER *id;
        ASRange *range;
    } u;
} ASIdOrRange;

SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange)
#define sk_ASIdOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_value(sk, idx) ((ASIdOrRange *)OPENSSL_sk_value(ossl_check_const_ASIdOrRange_sk_type(sk), (idx)))
#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp)))
#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_null())
#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n)))
#define sk_ASIdOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASIdOrRange_sk_type(sk), (n))
#define sk_ASIdOrRange_free(sk) OPENSSL_sk_free(ossl_check_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_delete(sk, i) ((ASIdOrRange *)OPENSSL_sk_delete(ossl_check_ASIdOrRange_sk_type(sk), (i)))
#define sk_ASIdOrRange_delete_ptr(sk, ptr) ((ASIdOrRange *)OPENSSL_sk_delete_ptr(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)))
#define sk_ASIdOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))
#define sk_ASIdOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))
#define sk_ASIdOrRange_pop(sk) ((ASIdOrRange *)OPENSSL_sk_pop(ossl_check_ASIdOrRange_sk_type(sk)))
#define sk_ASIdOrRange_shift(sk) ((ASIdOrRange *)OPENSSL_sk_shift(ossl_check_ASIdOrRange_sk_type(sk)))
#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk),ossl_check_ASIdOrRange_freefunc_type(freefunc))
#define sk_ASIdOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), (idx))
#define sk_ASIdOrRange_set(sk, idx, ptr) ((ASIdOrRange *)OPENSSL_sk_set(ossl_check_ASIdOrRange_sk_type(sk), (idx), ossl_check_ASIdOrRange_type(ptr)))
#define sk_ASIdOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))
#define sk_ASIdOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))
#define sk_ASIdOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), pnum)
#define sk_ASIdOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASIdOrRange_sk_type(sk))
#define sk_ASIdOrRange_dup(sk) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_dup(ossl_check_const_ASIdOrRange_sk_type(sk)))
#define sk_ASIdOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_copyfunc_type(copyfunc), ossl_check_ASIdOrRange_freefunc_type(freefunc)))
#define sk_ASIdOrRange_set_cmp_func(sk, cmp) ((sk_ASIdOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_compfunc_type(cmp)))


typedef STACK_OF(ASIdOrRange) ASIdOrRanges;

# define ASIdentifierChoice_inherit              0
# define ASIdentifierChoice_asIdsOrRanges        1

typedef struct ASIdentifierChoice_st {
    int type;
    union {
        ASN1_NULL *inherit;
        ASIdOrRanges *asIdsOrRanges;
    } u;
} ASIdentifierChoice;

typedef struct ASIdentifiers_st {
    ASIdentifierChoice *asnum, *rdi;
} ASIdentifiers;

DECLARE_ASN1_FUNCTIONS(ASRange)
DECLARE_ASN1_FUNCTIONS(ASIdOrRange)
DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)
DECLARE_ASN1_FUNCTIONS(ASIdentifiers)

typedef struct IPAddressRange_st {
    ASN1_BIT_STRING *min, *max;
} IPAddressRange;

# define IPAddressOrRange_addressPrefix  0
# define IPAddressOrRange_addressRange   1

typedef struct IPAddressOrRange_st {
    int type;
    union {
        ASN1_BIT_STRING *addressPrefix;
        IPAddressRange *addressRange;
    } u;
} IPAddressOrRange;

SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRange)
#define sk_IPAddressOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_value(sk, idx) ((IPAddressOrRange *)OPENSSL_sk_value(ossl_check_const_IPAddressOrRange_sk_type(sk), (idx)))
#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp)))
#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_null())
#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n)))
#define sk_IPAddressOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressOrRange_sk_type(sk), (n))
#define sk_IPAddressOrRange_free(sk) OPENSSL_sk_free(ossl_check_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_delete(sk, i) ((IPAddressOrRange *)OPENSSL_sk_delete(ossl_check_IPAddressOrRange_sk_type(sk), (i)))
#define sk_IPAddressOrRange_delete_ptr(sk, ptr) ((IPAddressOrRange *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)))
#define sk_IPAddressOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))
#define sk_IPAddressOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))
#define sk_IPAddressOrRange_pop(sk) ((IPAddressOrRange *)OPENSSL_sk_pop(ossl_check_IPAddressOrRange_sk_type(sk)))
#define sk_IPAddressOrRange_shift(sk) ((IPAddressOrRange *)OPENSSL_sk_shift(ossl_check_IPAddressOrRange_sk_type(sk)))
#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk),ossl_check_IPAddressOrRange_freefunc_type(freefunc))
#define sk_IPAddressOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), (idx))
#define sk_IPAddressOrRange_set(sk, idx, ptr) ((IPAddressOrRange *)OPENSSL_sk_set(ossl_check_IPAddressOrRange_sk_type(sk), (idx), ossl_check_IPAddressOrRange_type(ptr)))
#define sk_IPAddressOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))
#define sk_IPAddressOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))
#define sk_IPAddressOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), pnum)
#define sk_IPAddressOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressOrRange_sk_type(sk))
#define sk_IPAddressOrRange_dup(sk) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_dup(ossl_check_const_IPAddressOrRange_sk_type(sk)))
#define sk_IPAddressOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_copyfunc_type(copyfunc), ossl_check_IPAddressOrRange_freefunc_type(freefunc)))
#define sk_IPAddressOrRange_set_cmp_func(sk, cmp) ((sk_IPAddressOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_compfunc_type(cmp)))


typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;

# define IPAddressChoice_inherit                 0
# define IPAddressChoice_addressesOrRanges       1

typedef struct IPAddressChoice_st {
    int type;
    union {
        ASN1_NULL *inherit;
        IPAddressOrRanges *addressesOrRanges;
    } u;
} IPAddressChoice;

typedef struct IPAddressFamily_st {
    ASN1_OCTET_STRING *addressFamily;
    IPAddressChoice *ipAddressChoice;
} IPAddressFamily;

SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily)
#define sk_IPAddressFamily_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_value(sk, idx) ((IPAddressFamily *)OPENSSL_sk_value(ossl_check_const_IPAddressFamily_sk_type(sk), (idx)))
#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp)))
#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_null())
#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n)))
#define sk_IPAddressFamily_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressFamily_sk_type(sk), (n))
#define sk_IPAddressFamily_free(sk) OPENSSL_sk_free(ossl_check_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_delete(sk, i) ((IPAddressFamily *)OPENSSL_sk_delete(ossl_check_IPAddressFamily_sk_type(sk), (i)))
#define sk_IPAddressFamily_delete_ptr(sk, ptr) ((IPAddressFamily *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)))
#define sk_IPAddressFamily_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))
#define sk_IPAddressFamily_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))
#define sk_IPAddressFamily_pop(sk) ((IPAddressFamily *)OPENSSL_sk_pop(ossl_check_IPAddressFamily_sk_type(sk)))
#define sk_IPAddressFamily_shift(sk) ((IPAddressFamily *)OPENSSL_sk_shift(ossl_check_IPAddressFamily_sk_type(sk)))
#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk),ossl_check_IPAddressFamily_freefunc_type(freefunc))
#define sk_IPAddressFamily_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), (idx))
#define sk_IPAddressFamily_set(sk, idx, ptr) ((IPAddressFamily *)OPENSSL_sk_set(ossl_check_IPAddressFamily_sk_type(sk), (idx), ossl_check_IPAddressFamily_type(ptr)))
#define sk_IPAddressFamily_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))
#define sk_IPAddressFamily_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))
#define sk_IPAddressFamily_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), pnum)
#define sk_IPAddressFamily_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressFamily_sk_type(sk))
#define sk_IPAddressFamily_dup(sk) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_dup(ossl_check_const_IPAddressFamily_sk_type(sk)))
#define sk_IPAddressFamily_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_copyfunc_type(copyfunc), ossl_check_IPAddressFamily_freefunc_type(freefunc)))
#define sk_IPAddressFamily_set_cmp_func(sk, cmp) ((sk_IPAddressFamily_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_compfunc_type(cmp)))



typedef STACK_OF(IPAddressFamily) IPAddrBlocks;

DECLARE_ASN1_FUNCTIONS(IPAddressRange)
DECLARE_ASN1_FUNCTIONS(IPAddressOrRange)
DECLARE_ASN1_FUNCTIONS(IPAddressChoice)
DECLARE_ASN1_FUNCTIONS(IPAddressFamily)

/*
 * API tag for elements of the ASIdentifer SEQUENCE.
 */
# define V3_ASID_ASNUM   0
# define V3_ASID_RDI     1

/*
 * AFI values, assigned by IANA.  It'd be nice to make the AFI
 * handling code totally generic, but there are too many little things
 * that would need to be defined for other address families for it to
 * be worth the trouble.
 */
# define IANA_AFI_IPV4   1
# define IANA_AFI_IPV6   2

/*
 * Utilities to construct and extract values from RFC3779 extensions,
 * since some of the encodings (particularly for IP address prefixes
 * and ranges) are a bit tedious to work with directly.
 */
int X509v3_asid_add_inherit(ASIdentifiers *asid, int which);
int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
                                ASN1_INTEGER *min, ASN1_INTEGER *max);
int X509v3_addr_add_inherit(IPAddrBlocks *addr,
                            const unsigned afi, const unsigned *safi);
int X509v3_addr_add_prefix(IPAddrBlocks *addr,
                           const unsigned afi, const unsigned *safi,
                           unsigned char *a, const int prefixlen);
int X509v3_addr_add_range(IPAddrBlocks *addr,
                          const unsigned afi, const unsigned *safi,
                          unsigned char *min, unsigned char *max);
unsigned X509v3_addr_get_afi(const IPAddressFamily *f);
int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
                          unsigned char *min, unsigned char *max,
                          const int length);

/*
 * Canonical forms.
 */
int X509v3_asid_is_canonical(ASIdentifiers *asid);
int X509v3_addr_is_canonical(IPAddrBlocks *addr);
int X509v3_asid_canonize(ASIdentifiers *asid);
int X509v3_addr_canonize(IPAddrBlocks *addr);

/*
 * Tests for inheritance and containment.
 */
int X509v3_asid_inherits(ASIdentifiers *asid);
int X509v3_addr_inherits(IPAddrBlocks *addr);
int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);

/*
 * Check whether RFC 3779 extensions nest properly in chains.
 */
int X509v3_asid_validate_path(X509_STORE_CTX *);
int X509v3_addr_validate_path(X509_STORE_CTX *);
int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain,
                                      ASIdentifiers *ext,
                                      int allow_inheritance);
int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain,
                                      IPAddrBlocks *ext, int allow_inheritance);

#endif                         /* OPENSSL_NO_RFC3779 */

SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING)
#define sk_ASN1_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_value(sk, idx) ((ASN1_STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_sk_type(sk), (idx)))
#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp)))
#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_null())
#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n)))
#define sk_ASN1_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_sk_type(sk), (n))
#define sk_ASN1_STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_delete(sk, i) ((ASN1_STRING *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_sk_type(sk), (i)))
#define sk_ASN1_STRING_delete_ptr(sk, ptr) ((ASN1_STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)))
#define sk_ASN1_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))
#define sk_ASN1_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))
#define sk_ASN1_STRING_pop(sk) ((ASN1_STRING *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_sk_type(sk)))
#define sk_ASN1_STRING_shift(sk) ((ASN1_STRING *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_sk_type(sk)))
#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk),ossl_check_ASN1_STRING_freefunc_type(freefunc))
#define sk_ASN1_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), (idx))
#define sk_ASN1_STRING_set(sk, idx, ptr) ((ASN1_STRING *)OPENSSL_sk_set(ossl_check_ASN1_STRING_sk_type(sk), (idx), ossl_check_ASN1_STRING_type(ptr)))
#define sk_ASN1_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))
#define sk_ASN1_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))
#define sk_ASN1_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), pnum)
#define sk_ASN1_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_sk_type(sk))
#define sk_ASN1_STRING_dup(sk) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_sk_type(sk)))
#define sk_ASN1_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_freefunc_type(freefunc)))
#define sk_ASN1_STRING_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_compfunc_type(cmp)))


/*
 * Admission Syntax
 */
typedef struct NamingAuthority_st NAMING_AUTHORITY;
typedef struct ProfessionInfo_st PROFESSION_INFO;
typedef struct Admissions_st ADMISSIONS;
typedef struct AdmissionSyntax_st ADMISSION_SYNTAX;
DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY)
DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO)
DECLARE_ASN1_FUNCTIONS(ADMISSIONS)
DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX)
SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO)
#define sk_PROFESSION_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_value(sk, idx) ((PROFESSION_INFO *)OPENSSL_sk_value(ossl_check_const_PROFESSION_INFO_sk_type(sk), (idx)))
#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp)))
#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_null())
#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n)))
#define sk_PROFESSION_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PROFESSION_INFO_sk_type(sk), (n))
#define sk_PROFESSION_INFO_free(sk) OPENSSL_sk_free(ossl_check_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_delete(sk, i) ((PROFESSION_INFO *)OPENSSL_sk_delete(ossl_check_PROFESSION_INFO_sk_type(sk), (i)))
#define sk_PROFESSION_INFO_delete_ptr(sk, ptr) ((PROFESSION_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)))
#define sk_PROFESSION_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))
#define sk_PROFESSION_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))
#define sk_PROFESSION_INFO_pop(sk) ((PROFESSION_INFO *)OPENSSL_sk_pop(ossl_check_PROFESSION_INFO_sk_type(sk)))
#define sk_PROFESSION_INFO_shift(sk) ((PROFESSION_INFO *)OPENSSL_sk_shift(ossl_check_PROFESSION_INFO_sk_type(sk)))
#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk),ossl_check_PROFESSION_INFO_freefunc_type(freefunc))
#define sk_PROFESSION_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), (idx))
#define sk_PROFESSION_INFO_set(sk, idx, ptr) ((PROFESSION_INFO *)OPENSSL_sk_set(ossl_check_PROFESSION_INFO_sk_type(sk), (idx), ossl_check_PROFESSION_INFO_type(ptr)))
#define sk_PROFESSION_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))
#define sk_PROFESSION_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))
#define sk_PROFESSION_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), pnum)
#define sk_PROFESSION_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PROFESSION_INFO_sk_type(sk))
#define sk_PROFESSION_INFO_dup(sk) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_dup(ossl_check_const_PROFESSION_INFO_sk_type(sk)))
#define sk_PROFESSION_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_copyfunc_type(copyfunc), ossl_check_PROFESSION_INFO_freefunc_type(freefunc)))
#define sk_PROFESSION_INFO_set_cmp_func(sk, cmp) ((sk_PROFESSION_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_compfunc_type(cmp)))
SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS)
#define sk_ADMISSIONS_num(sk) OPENSSL_sk_num(ossl_check_const_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_value(sk, idx) ((ADMISSIONS *)OPENSSL_sk_value(ossl_check_const_ADMISSIONS_sk_type(sk), (idx)))
#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp)))
#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_null())
#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n)))
#define sk_ADMISSIONS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ADMISSIONS_sk_type(sk), (n))
#define sk_ADMISSIONS_free(sk) OPENSSL_sk_free(ossl_check_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_zero(sk) OPENSSL_sk_zero(ossl_check_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_delete(sk, i) ((ADMISSIONS *)OPENSSL_sk_delete(ossl_check_ADMISSIONS_sk_type(sk), (i)))
#define sk_ADMISSIONS_delete_ptr(sk, ptr) ((ADMISSIONS *)OPENSSL_sk_delete_ptr(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)))
#define sk_ADMISSIONS_push(sk, ptr) OPENSSL_sk_push(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))
#define sk_ADMISSIONS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))
#define sk_ADMISSIONS_pop(sk) ((ADMISSIONS *)OPENSSL_sk_pop(ossl_check_ADMISSIONS_sk_type(sk)))
#define sk_ADMISSIONS_shift(sk) ((ADMISSIONS *)OPENSSL_sk_shift(ossl_check_ADMISSIONS_sk_type(sk)))
#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk),ossl_check_ADMISSIONS_freefunc_type(freefunc))
#define sk_ADMISSIONS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), (idx))
#define sk_ADMISSIONS_set(sk, idx, ptr) ((ADMISSIONS *)OPENSSL_sk_set(ossl_check_ADMISSIONS_sk_type(sk), (idx), ossl_check_ADMISSIONS_type(ptr)))
#define sk_ADMISSIONS_find(sk, ptr) OPENSSL_sk_find(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))
#define sk_ADMISSIONS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))
#define sk_ADMISSIONS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), pnum)
#define sk_ADMISSIONS_sort(sk) OPENSSL_sk_sort(ossl_check_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ADMISSIONS_sk_type(sk))
#define sk_ADMISSIONS_dup(sk) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_dup(ossl_check_const_ADMISSIONS_sk_type(sk)))
#define sk_ADMISSIONS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_deep_copy(ossl_check_const_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_copyfunc_type(copyfunc), ossl_check_ADMISSIONS_freefunc_type(freefunc)))
#define sk_ADMISSIONS_set_cmp_func(sk, cmp) ((sk_ADMISSIONS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_compfunc_type(cmp)))

typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS;

const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId(
    const NAMING_AUTHORITY *n);
const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL(
    const NAMING_AUTHORITY *n);
const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText(
    const NAMING_AUTHORITY *n);
void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n,
    ASN1_OBJECT* namingAuthorityId);
void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n,
    ASN1_IA5STRING* namingAuthorityUrl);
void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n,
    ASN1_STRING* namingAuthorityText);

const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority(
    const ADMISSION_SYNTAX *as);
void ADMISSION_SYNTAX_set0_admissionAuthority(
    ADMISSION_SYNTAX *as, GENERAL_NAME *aa);
const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions(
    const ADMISSION_SYNTAX *as);
void ADMISSION_SYNTAX_set0_contentsOfAdmissions(
    ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a);
const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a);
void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa);
const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a);
void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na);
const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a);
void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi);
const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_addProfessionInfo(
    PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos);
const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_namingAuthority(
    PROFESSION_INFO *pi, NAMING_AUTHORITY *na);
const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_professionItems(
    PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as);
const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_professionOIDs(
    PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po);
const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber(
    const PROFESSION_INFO *pi);
void PROFESSION_INFO_set0_registrationNumber(
    PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn);

# ifdef  __cplusplus
}
# endif
#endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    m    __fentry__                                              9[    __x86_return_thunk                                      =    device_for_each_child                                   eb,    __dynamic_pr_debug                                      V
    __stack_chk_fail                                        M    put_device                                              z    kfree                                                   	    get_device                                              e(w    transport_remove_device                                 8G    device_del                                              !E8    transport_destroy_device                                ?<    sprintf                                                 c,    transport_class_register                                Sb    transport_class_unregister                              i    kstrtoint                                               -    kmalloc_caches                                          wX    kmalloc_trace                                               __mutex_init                                            )    device_initialize                                       j    delayed_work_timer_fn                                   9c    init_timer_key                                          C    dev_set_name                                            L    transport_setup_device                                  .Դ    device_add                                              o+{    transport_add_device                                    @*    transport_configure_device                              +L    attribute_container_register                            1(    attribute_container_unregister                          ߹_    scsi_is_host_device                                     pHe    __x86_indirect_thunk_rax                                F    scsi_target_unblock                                     KM    mutex_lock                                              82    mutex_unlock                                            J    cancel_delayed_work_sync                                ~    _printk                                                     scsi_target_block                                       J    system_long_wq                                          m    queue_delayed_work_on                                   u    mutex_lock_interruptible                                x=    cancel_delayed_work                                         __scsi_iterate_devices                                  Y    _dev_printk                                             zR    module_layout                                                   B 	        8 	        b           b                                                                                                                                                       $                                                            $                                                             $                              $                                                                                                                                                                                                                                                                                                                                                                                      b                                                     )                                                                                                                                                                                                                                                    scsi_transport_srp                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       GCC: (Debian 12.2.0-14+deb12u1) 12.2.0  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0         \  \    A=    !   O= 	     a=    n=    {=    =    =    =    =    =    = 	   =      &  g       4&               = |  0  ,  ]     U    @    `      = `      	> E    > ]     #> ]     b  *    ,> `      V       :>      J>      `>      v>      >       >    @  x        $      _ -            I       p
 k   @  c       > 
     > 
     > G    >      > c     b    @  x      Z       > ^    > ^ @  ? ^   
? ^   ? ^  	  ? ^ @	  %? ^ 	  .? ` 	  :? X  
  F?    @
  Q?    `
 j?    a
 ?    b
 ?    c
      d
 *     e
     f
 ?    g
 m     h
 ?    i
 -     j
     k
 ?    l
 ?    m
     n
 ?    o
 ?    p
 ?    q
 ?    r
 	@    s
 @    t
 %@    u
 4@    v
 C@    w
 U@    x
 c@    y
 q@    z
 @    {
 @    |
 @    }
 @    ~
 @    
 @    
 @    
 @    
 A    
 A    
 #A    
 0A    
 ?A    
 MA    
 ]A    
 oA    
 A    
 A    
      
 A    
 A    
 A    
 A    
 A    
 A    
 A    
 	B    
 B    
 %B    
  3B K   
  CB ]   
  ]B      T   @  i3  `     
 Q     nB     
  B ]    
  B ]   @
  B ]   `
  B ]   
  B   
  B    %  i X @<  nW  Q  @=  F b @>   k   >  B Q   >  B k    ?  B    @?  B    `?  B 9 ?  C    ?  C G   @  C Y  A  'C    @A  3C   A  =C B  0  GC `       QC `      [C `      hC *    uC -    C G     C `      C `     C       C   @  C D    C  @  C    C 0    C F     W  E     C ]   @  C    `  D      D      D      )D     
  4D    @
  @D    `
  GD -   
  Š    
  OD    
         [D       eD    @  %    P  qD    `  LE      D             D       E    @  +V       	      D     D     D     D     D     D     U@     D     D     E      E     ,E S    3E S    >E       OE       aE    @  D             qE       {E      i        E  @  E     E   )  E k    A     @A  p
   A         \        Z E   @  E d      `   @    `      :"    @  E 0    $      x        o      E     E     E     F     F ]      )F ]      [D    @  8F    `  > 
       c   p
 k     KF             _ XF               a lF      ~F    F    F    F    F           [ F              ơ        F      F     G    .G    LG   (    d     VG `   @   _G R     &  g     jG       tG       G    @  ]            G      G      G      G f   G      G D     G      G e @  G h    G    @  G    `  G      H      H c    ]             @  H      'H c    6     	         e 5H 9  p  '	        HH l @   / n            V        P  p @  M  r   	  r   UH l    cH l @  qH t   H t   H t    H t @  H t   H v   H v    H x @  I z   I |   #I ~      @  1I        DI     LI  @  [I    C x   fI     H}   @  pI    }I    I     I    @  X X    [D            %     	  qD    	  LE     	       @	  D    	  E    	  eD     
  V    
  I     
  I    @
 I    A
 I    C
 I    D
 U@    E
 D    F
 >E    `
  I %  
   J %  
  q3 -      J    @        
       ]     k        g        j       
        ]     &          m       
       ]        o       
       d            k          q       
       k        s       
       d        u       
        d        w       
       `        y       
        `        {       
       ]               }       
        ]               
       d                      
       ]                      
K                       
       d           U                        
             ]               
       ]     ?                        
E      k               
K       k               
       ]                "J      2J    @J    NJ    [J    eJ    tJ    J           i J   `  J ]      J ]  @  J ]    J  	  J     
  J     
  n    @
  K    `
  K    
  &K    
 8K  
                
       ]     N      N      -           LK      `        G $      bK      rK     K    K    K    K 
  H  :"        `    @  G $     K k      %  G  @     @  K    `  K      K R    K      L      L R    -L R    ;L   8   QL K       aL K      K    @   K       L            xL  @  L          
                              
                 L      L ]       L      ]      F      J  @  L    L ]  
                                             	            ^  *       V  ?   @          
                          
                         L       L    p         
    ]  M           
 k   M           
    .M  4M           
    JM ] PM     `M    +]  qM           
 JM ] |  M     M     M           
    ]  :"    M     M     M    ,G        
E  M k M           
   .M  M    Ĉ N     N     5N      MN      iN     ~N      N      N      N      N      O            
R   :"        [         "O    ш 8O            
   MO    [     QO    Ԉ _O      tO      O      O      O    ]        
   K    K    L 2   O    ۈ O    +]         
9             ވ    +          
߈ blist_flags_t scsi_device_state SDEV_CREATED SDEV_RUNNING SDEV_CANCEL SDEV_DEL SDEV_QUIESCE SDEV_OFFLINE SDEV_TRANSPORT_OFFLINE SDEV_BLOCK SDEV_CREATED_BLOCK scsi_vpd scsi_device same_target_siblings budget_map device_blocked restarts starved_entry max_queue_depth last_queue_full_depth last_queue_full_count last_queue_full_time queue_ramp_up_period last_queue_ramp_up scsi_level inq_periph_qual inquiry_mutex inquiry_len inquiry vpd_pg0 vpd_pg83 vpd_pg80 vpd_pg89 vpd_pgb0 vpd_pgb1 vpd_pgb2 sdev_target sdev_bflags eh_timeout manage_system_start_stop manage_runtime_start_stop manage_shutdown force_runtime_start_on_system_start lockable borken sdtr wdtr tagged_supported simple_tags was_reset expecting_cc_ua use_10_for_rw use_10_for_ms set_dbd_for_ms read_before_ms no_report_opcodes no_write_same use_16_for_rw skip_ms_page_8 skip_ms_page_3f skip_vpd_pages try_vpd_pages use_192_bytes_for_3f no_start_on_add allow_restart no_start_on_resume start_stop_pwr_cond no_uld_attach select_no_atn fix_capacity guess_capacity retry_hwerror last_sector_bug no_read_disc_info no_read_capacity_16 try_rc_10_first security_supported wce_default_on no_dif broken_fua lun_in_cdb unmap_limit_for_ws rpm_autosuspend ignore_media_change silence_suspend no_vpd_size queue_stopped offline_already disk_events_disable_depth supported_events max_device_blocked iorequest_cnt iodone_cnt ioerr_cnt iotmo_cnt sdev_gendev sdev_dev dma_drain_len dma_drain_buf sg_timeout sg_reserved_size bsg_dev access_state state_mutex sdev_state quiesced_by sdev_data Scsi_Host __devices __targets starved_list default_lock host_lock scan_mutex eh_abort_list eh_cmd_q ehandler eh_action host_wait hostt transportt tagset_refcnt tagset_freed host_blocked host_failed host_eh_scheduled host_no eh_deadline last_reset max_channel max_id max_lun max_cmd_len can_queue cmd_per_lun sg_prot_tablesize opt_sectors dma_boundary active_mode host_self_blocked reverse_ordering tmf_in_progress async_scan eh_noresume host_tagset short_inquiry no_scsi2_lun_in_cdb work_q_name work_q tmf_work_q max_host_blocked prot_capabilities prot_guard_type n_io_port dma_channel shost_state shost_gendev shost_dev shost_data scsi_target starget_sdev_user reap_ref single_lun pdt_1f_for_no_lun no_report_luns expecting_lun_change target_busy target_blocked max_target_blocked starget_data scsi_device_handler scsi_target_state STARGET_CREATED STARGET_RUNNING STARGET_REMOVE STARGET_CREATED_REMOVE STARGET_DEL scsi_data_buffer scsi_cmnd_submitter SUBMITTED_BY_BLOCK_LAYER SUBMITTED_BY_SCSI_ERROR_HANDLER SUBMITTED_BY_SCSI_RESET_IOCTL scsi_cmnd eh_entry abort_work eh_eflags budget_token jiffies_at_alloc prot_op prot_type prot_flags submitter cmd_len sc_data_direction cmnd sdb prot_sdb underflow transfersize resid_len sense_len sense_buffer extra_len host_scribble scsi_host_template queuecommand init_cmd_priv exit_cmd_priv eh_abort_handler eh_device_reset_handler eh_target_reset_handler eh_bus_reset_handler eh_host_reset_handler slave_alloc slave_configure slave_destroy target_alloc target_destroy scan_finished change_queue_depth mq_poll dma_need_drain bios_param show_info eh_timed_out eh_should_retry_cmd host_reset proc_name tag_alloc_policy track_queue_depth supported_mode emulated skip_settle_delay shost_groups sdev_groups rpm_autosuspend_delay scsi_host_state SHOST_CREATED SHOST_RUNNING SHOST_CANCEL SHOST_DEL SHOST_RECOVERY SHOST_CANCEL_RECOVERY SHOST_DEL_RECOVERY scsi_transport_template host_attrs target_attrs device_attrs user_scan device_size device_private_offset target_private_offset host_size create_work_queue eh_strategy_handler srp_rport_identifiers srp_rport_state SRP_RPORT_RUNNING SRP_RPORT_BLOCKED SRP_RPORT_FAIL_FAST SRP_RPORT_LOST srp_rport lld_data reconnect_delay failed_reconnects reconnect_work fast_io_fail_tmo dev_loss_tmo fast_io_fail_work dev_loss_work srp_function_template has_rport_state reset_timer_if_blocked terminate_rport_io rport_delete srp_host_attrs next_port_id srp_internal rport_attrs rport_attr_cont srp_transport_exit srp_transport_init srp_release_transport srp_attach_transport rport srp_stop_rport_timers shost srp_remove_host do_srp_rport_del srp_rport_del srp_rport_add srp_rport_put srp_rport_get srp_host_match srp_rport_match srp_rport_release scmd srp_timed_out srp_reconnect_rport srp_start_tl_fail_timers __srp_start_tl_fail_timers rport_dev_loss_timedout rport_fast_io_fail_timedout __rport_fail_io_fast srp_reconnect_work store_srp_rport_dev_loss_tmo show_srp_rport_dev_loss_tmo store_srp_rport_fast_io_fail_tmo show_srp_rport_fast_io_fail_tmo show_failed_reconnects store_reconnect_delay show_reconnect_delay tmo srp_parse_tmo show_srp_rport_state store_srp_rport_delete show_srp_rport_roles show_srp_rport_id srp_host_setup srp_tmo_valid find_child_rport  scsi_transport_srp.ko   sQu                                                                                               	                                                                                        '                      -                      1                                                            )                     H                     b                     v                                                                                                                                                                        /    H              F   "         
      S    Y              l    e       	           n                         <                                     $                                                    
 H               	                    !                    ;                     S                    v     7                    0                    8                    L                                        M               2     [               L     <               d     \               |     j                                        k                    y                    $                    z                                   *    
 $               B                    Z                    t    
 0                                                           
                                                            
 <               >                    ]                    ~    
                                                             
                          -          -         8       (           B       9                 K          (       b           <       w                        `      J                 )                   >          '                 '                                      @      @          1                           Q       -    	      4       I    0
      6       a    p
      d       p    
      u          '                   '                   ' `                  ' @                  '                   '                   '                 
   '                 #          @       ?          @       T    P      <       c          e       z     	      v          	         m          	 m                  `                              	                &	   -        8       >	   -        8       V	   - p       8       n	   - 8       8       	   	       m       	                 	                   	    0              	    P              	   )                
   +                -
                   D
           %       _
    1              u
                     z
     (               4          d                  k       
                     
   /               
                     
                     
	    @      +       
                     
                   
                     
                                                                   `             $                     /            >       ;                     R                     d
                         P      /       k                     |                                                                         Q      E          0                                                                                                                	                     V    p              $                     1                     F                         p      '      _                     j                     ~                                                                         
                            (    	      d                                                                      
                     
                     )
                     <
                     ~          '       R
                     `
                               
       l
                     {
                      __crc_srp_tmo_valid __crc_srp_parse_tmo __crc_srp_start_tl_fail_timers __crc_srp_reconnect_rport __crc_srp_timed_out __crc_srp_rport_get __crc_srp_rport_put __crc_srp_rport_add __crc_srp_rport_del __crc_srp_remove_host __crc_srp_stop_rport_timers __crc_srp_attach_transport __crc_srp_release_transport __UNIQUE_ID_depends193 ____versions __UNIQUE_ID_retpoline192 __UNIQUE_ID_intree191 __UNIQUE_ID_name190 __UNIQUE_ID_vermagic189 _note_10 _note_9 __kstrtab_srp_tmo_valid __kstrtabns_srp_tmo_valid __ksymtab_srp_tmo_valid __kstrtab_srp_parse_tmo __kstrtabns_srp_parse_tmo __ksymtab_srp_parse_tmo __kstrtab_srp_start_tl_fail_timers __kstrtabns_srp_start_tl_fail_timers __ksymtab_srp_start_tl_fail_timers __kstrtab_srp_reconnect_rport __kstrtabns_srp_reconnect_rport __ksymtab_srp_reconnect_rport __kstrtab_srp_timed_out __kstrtabns_srp_timed_out __ksymtab_srp_timed_out __kstrtab_srp_rport_get __kstrtabns_srp_rport_get __ksymtab_srp_rport_get __kstrtab_srp_rport_put __kstrtabns_srp_rport_put __ksymtab_srp_rport_put __kstrtab_srp_rport_add __kstrtabns_srp_rport_add __ksymtab_srp_rport_add __kstrtab_srp_rport_del __kstrtabns_srp_rport_del __ksymtab_srp_rport_del __kstrtab_srp_remove_host __kstrtabns_srp_remove_host __ksymtab_srp_remove_host __kstrtab_srp_stop_rport_timers __kstrtabns_srp_stop_rport_timers __ksymtab_srp_stop_rport_timers __kstrtab_srp_attach_transport __kstrtabns_srp_attach_transport __ksymtab_srp_attach_transport __kstrtab_srp_release_transport __kstrtabns_srp_release_transport __ksymtab_srp_release_transport find_child_rport __UNIQUE_ID_ddebug325.1 do_srp_rport_del srp_rport_release show_failed_reconnects show_srp_rport_state state_name.32 show_srp_rport_roles show_srp_rport_id srp_transport_init srp_host_class srp_rport_class srp_transport_exit show_srp_rport_fast_io_fail_tmo __key.28 srp_reconnect_work rport_fast_io_fail_timedout rport_dev_loss_timedout srp_host_match srp_rport_match dev_attr_port_id dev_attr_roles dev_attr_reconnect_delay dev_attr_failed_reconnects dev_attr_delete dev_attr_state dev_attr_fast_io_fail_tmo dev_attr_dev_loss_tmo show_srp_rport_dev_loss_tmo show_reconnect_delay srp_host_setup store_srp_rport_delete __rport_fail_io_fast rport_fast_io_fail_timedout.cold rport_dev_loss_timedout.cold store_srp_rport_fast_io_fail_tmo store_srp_rport_dev_loss_tmo __srp_start_tl_fail_timers __UNIQUE_ID_ddebug315.5 __UNIQUE_ID_ddebug317.4 __UNIQUE_ID_ddebug320.3 __UNIQUE_ID_ddebug322.2 srp_reconnect_work.cold store_reconnect_delay __func__.27 __func__.26 __func__.25 __UNIQUE_ID___addressable_cleanup_module340 __UNIQUE_ID___addressable_init_module339 __UNIQUE_ID_license338 __UNIQUE_ID_description337 __UNIQUE_ID_author336 .LC0 .LC11 dev_set_name __this_module scsi_target_block transport_remove_device device_initialize cleanup_module kfree device_for_each_child __scsi_iterate_devices get_device __fentry__ init_module transport_setup_device __x86_indirect_thunk_rax __stack_chk_fail queue_delayed_work_on put_device scsi_target_unblock transport_class_unregister device_add kstrtoint mutex_lock attribute_container_register transport_configure_device __mutex_init transport_add_device mutex_lock_interruptible device_del cancel_delayed_work scsi_is_host_device __x86_return_thunk system_long_wq sprintf mutex_unlock attribute_container_unregister cancel_delayed_work_sync init_timer_key transport_destroy_device __dynamic_pr_debug delayed_work_timer_fn kmalloc_trace _dev_printk kmalloc_caches transport_class_register                  J             `             g             q             z                                                                          	                       S            a            o                   v                                                                                                                                                                                           
                        !            .                   E                    L                   Q            X            a                        :                   /                                                              !                               B                                                                                                 %            5            A            \                   a            h            |                                    T                            
                       J                                                             o                                                              	                                      ;                    M            0
      Y            y            X                                                                                                                                           L                   =                  E            p
      U            k                               
                                                        `                   @                                      
                               (                    3                    Q            Z            j            w                                                                                                                                                                                                        &            .            6            >            Q            h                                                                        	            	            I	            j	            r	            	            	            	            	            	            	            	            
                   
            
            1
            P
            p       X
            `
            i       q
            
            
            
            
                  
            
            
                  
                        0                  ;            Q            a                                             ~                           O            r                     ~                                       H
            W
            w
            
            
            
            
            c       
         	          
            
            
                        y                 	          %            A            U            g            q                                                            -            D                   K         	   p       P            u                   |         	   8                                                                                            +            ;            Q            Y            v                                                                                          ?            k                     ~                                                                	                                                                  -                   2             :                                                                              "             H       5             =             K                   W                          x                                                                                                              '            M                  c            n                                            #                     $                                          )                     *                                          /                      0           $                     (          2           ,          3           0                     4          &           8          '           <                     @          ,           D          -                                           A                     B                                          D                     E                                          ;                      <           $          }           (          5           ,          6           0                     4          8           8          9           <                     @          >           D          ?           H          ~           L                      P          !                                              p                    `                                             (                   0                   8                   @                    H             `      P                   X                     `                   h                   p             @      x                                                   P                                                                             P                                       	                   	                   	                   0
                   p
                   
                   `                                                         @                  p                                                         i                                                                                                     i	                                                                              I                    _                    f                                                           W                                                                $             $      (             4      ,             g      0             {      4                   8                   <                   @                   D                   H                   L                   P                   T             =      X                   \                   `             q	      d             
      h             
      l             
      p             :      t             P      x                   |             q                   
                   ,                                      j                   9                                          k                    p                    w                                                                                                            $                    (                    ,                    0             W      4             `      8             z      <                   @                   D                   H                   L                   P                   T                   X                   \                   `                   d                   h                   l                   p                   t                    x             \      |             `                                                                                               =                   @                                                                                                                                                                                                                                                                                                                                                                                                                                  
                   	                   
                                                         A                  P                  V                  v                  {                                                                         =      $            B      (            P      ,            V      0                  4                  8                  <                  @                  D                  H                  L                  P                  T                  X                  \             	      `            	      d            
	      h            h	      l            i	      p            n	      t            o	      x            p	      |            q	                  v	                  	                  	                  	                  	                  	                  	                  	                  	                  	                  	                  	                  $
                  0
                  7
                  9
                  :
                  >
                  f
                  p
                  v
                  }
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  9                   :                  ?                  F                  J                  U                  `                  g                  n                   o      $            v      (                  ,                  0                  4                  8                  <                  @                  D                  H                  L                  P            &      T            m      X            n      \            o      `            q      d            v      h                  l                  p                  t                  x                  |                                                \
                  p
                  r
                  t
                  v
                  {
                  
                  
                  
                  
                  
                  
                  @                  F                  N                  e                  f                  k                  p                  w                  y                  {                  |                                    "                  &                  (                  *                  ,                  1                                                                                                                                                                                             $                  (                  ,                  0                  4            f      8            g      <            h      @            j      D            o      H                  L                    P                   T            9       X            >       \                    `                   d                    h            S       l            T       p            V       t            [       x            m       |                                                                                                                                                X                  h                  j                  r                    B                {                        9                {                        {                |           $             }      (          |                                                              	   *                    
                   
                	   
                    ;
      $                   (          	          0                   4             1      8          	          @                   D             Y      H          	   b                                                                                       0             @      8             `      @                    P                   `                    p                   x                                                                                                                                 `                   !                                      )                  :                  P                                                                                                                                      8                    @             0       H                     P                    p                    x             0                                                                                 P                                         y                                        P                                         c       8                    P                     .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.init.text .rela.exit.text .rela.text.unlikely .rela__ksymtab .rela__ksymtab_gpl __kcrctab __kcrctab_gpl __ksymtab_strings .rela__mcount_loc .rodata.str1.8 .rodata.str1.1 .rela.smp_locks .rela.rodata .modinfo .rela.retpoline_sites .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela__bug_table .rela__jump_table .rela.data .rela.exit.data .rela.init.data .rela__dyndbg .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF .gnu_debuglink                                                                                          @       $                              .                     d       <                              ?                                                         :      @               @            6                    J                           >                              E      @                             6                    Z                                                         U      @                     `       6                    j                           r                             e      @                            6   	                 ~                     t      H                              y      @                           6                                               T                                    @               h            6   
                                                                                               (                                          2               D                                                        1                                          @               `      `      6                          2               X                                        2               Z      C                                                                                           @                            6                    
                          k                                    @               ء      `       6                                        +                                                                                                  @               8      `       6                    6                                                        1     @                     x      6                    D                          |                             U                    
!                                   P     @                           6                     d                    $      
                              t                    /      0                              o     @                             6   #                                     /      P                                   @                     h      6   %                                      0      0                                   @               (            6   '                                     02                                         @               8             6   )                                     82                                         @               P             6   +                                     @2                                        @               h            6   -                                     3                    @                    @               H      0       6   /                                      7                                          0                7      P                                                  P7                                                          P7      ,                             
                     dc                                                          c      (      7   }                 	                      t      
                                                   x                                   0	*H
01
0	`He0	*H
1a0]080 10UDebian Secure Boot CA2(oe:B&C0	`He0
	*H
  8ΐZ3ɅDOlRy;?r.6|,!uIuNtzuQ}fq,q@ oyñ{/!CC^]Ąc%zǷr龠8MjTȈs3_'#sr_y_(
Kna6K.Q![gJ*nWH]\(ܫ%kEB>v3)7"Wv1QU         ~Module signature appended~
 070701000C0039000081A4000000000000000000000001682F6DA7000260DB000000CA0000000200000000000000000000003D00000000usr/lib/modules/6.1.0-37-amd64/kernel/drivers/scsi/sd_mod.ko  ELF          >                    R         @     @ 4 3          GNU +R$וJR_J
ͳy0        Linux                Linux   6.1.0-37-amd64          fD      HH   H@X      ff.     f    HGXH8HH   H   Ht             USH   Jv5t0   Bv+0w   HH 
  
 Hu$ub[]    vH     Hsဿ"  u=   uHH   H@X    t3;  s?      ww[]    
t[]        H    HH   H        H    H߾       H    ff.         USHH/eH%(   HD$1H$       9   r1HT$eH+%(   u~H[]    HH   H`       tH    D   H<$ANAHALHH9sH9rH)+   DD9AGr            H  H  HzPH   ʉ    D  D9ABȉ  @  tzw:tZu5H  R  D  	tD 9G    t1      	uC)      	u)    H  R  D  	t  9G    f    H  HH?O  LBPD          vx 9Gр        y     @   D  Dֈ  	E9      ALAA!D  A      0u6N   x-O     ǀ      xOƀ   1L    ҹ  DDǀ        L    @Ƀ?  ut     뚺   ff.         AWAVAUA 
  ATUSHHL H   	LpXHH=    D   Aσ	IH    HCH   H+    HHHH=           C    I́   D{f   ƃ   Eu>L   0u     A     HD   []A\A]A^A_    ƃ   L  L      A  [	   ]A\A]A^A_    ff.         AWAVAUA 
  ATUSHHL H   	LpXHH=    D   Aσ	IH    HCH   H+    HHHH=        
   D{fA́   C    f   ƃ   AEu?D   0u  f   A     HD   []A\A]A^A_    ƃ   L  D   f   A  [	   ]A\A]A^A_            G@   D    tGx    D      HLeH%(   HD$1AD$    EHD$    fT$   Kft$D)E1ɈD$DȉD$
j h   j   LPhL  j Ht$4    H0OHT$eH+%(   u	H        ff.          SH_xH3P  t#H  Ht/HH    H        H      u1[    H    1H        H  H3Ht"HPH    H        [    H    1H            HXH    ff.          AVATUSHGXHL     I$  H   HcGHwHWAIHH9   BJA0uu9unt<u`LJALcLRILLL
LLIM)DM)ʃrE1EAO4O4A9rAt5ADOBHHIcHH9d    D[]A\A^        A   []DA\A^    Af    SHHeH%(   HD$HP  HPXH  H   	L HD$    HH@       HH$HT$I   L   MtBHHHH.    $D$CD$fCHD$eH+%(   uH1[    H        D      AW    AVAUIATAUHSLP  MxXM7  H   t          DL       pAwgpA   pAw"pAwyLD[L]A\A]A^A_    ﾃwۺq  HsI  L[]A\A]A^A_    p8Atvp BtӁpuɁp Atp(Au뷍"  Hr렍$羺  H[뉸[]A\A]A^A_    I  IHt"HAH    LH        AH    1LH            USH_XH+    u=  t
H[]    L  tH    t1H    H  HtHH    HH        H    1HH        f.         UHoS  HH        H    HCH      H      H[]    f    AT
   UHSHHHLceH%(   HD$1HT$D$        u/D$*  HHT$eH+%(   u8H[]A\    HA   H    1LH        H    ff.         HHH          H    ff.         HG   tP  <tg<t
   nonefB       Hdrive-maHHanaged
 HB       Hhost-manHHanaged
 HB
       Hhost-awaBre
 H       ff.         HHH          H    ff.         HHH          H    ff.         HHH      H        H         HHH      H        H         HHH                 f    HHH                 D      HH  H@H $  wU    t    u u=t=H        !u%t%H    H               t1۸
   nonefG       fD      HHH          H    ff.         HHH    H@P                 HHH                 f    HHH      PHH        H        ATIUHSH       t)H  
   L    HcЅHHE[]A\    Hff.          ATIUH   SHHeH%(   HD$1D$        tKHT$
   H    u1D$v LHT$eH+%(   u"H[]A\      HH    ff.         AUATIUHSHHLo   eH%(   HD$1H$           A   t<ulH
   H    uTH$Hu3AO  H{<LHT$eH+%(   u=H[]A\A]    H= wAO    HHH            ATIUH   SH    t*L   H        x  H[]A\    HH@     ATIUSHHHo   eH%(   HD$1D$     tNHt$L    uFL$L  H؃	ʈL  HT$eH+%(   uH[]A\    HH        ATIUSHHHo   eH%(   HD$1D$     tMHt$L    uEL$L  H؃	ʈL  HT$eH+%(   uH[]A\    HH    f    ATIUSHHHo   eH%(   HD$1D$     tKHt$L    uCL  L$H؃	ʈL  HT$eH+%(   uH[]A\    HH    @     ATUHSHHLg   eH%(   HD$1D$     tiA$   t<uOHt$H    u>A$P  D$	HA$P  HT$eH+%(   uH[]A\    HH    ff.     @     HHH    H@L      H        HHH    H@L      H    f    HHH    H@L      H    @     HH1H    H@L  <    H    ff.     f    u    HH5        ff.     f    UHHSH@eH%(   HD$8HGXHl$HHT$    HD$    HD$    HHD$0    @t$DD$A   HL$(DL$4E1HD$    D$_D$   j j j   PhL  UHL$PHt$@    H0x
   tHT$8eH+%(   uJH@[]    T$ppuAH    1HH    D$    H1H    D$    @     Hw"HP  HE1A   H            u.E1vHP  HE11ɾ   sD    ݸ    ff.     @     E1wD    HP  HE11ɾ   ff.     @     HDE1wD    @HP  HE1ɃHfD      HP  HE1E11ɾ   ff.     @     AWAVAUATUHSHDeH%(   HD$1A܃M  wVb  A  	v  
  HD$eH+%(   z	  1Ҿ   HH[]A\A]A^A_      At)  HD$eH+%(   1	        벃uHD$eH+%(   	  1Ҿ   됃
  HDHLu H   A	A   LxXH 	I$HDl$HD$      A   P    AL   $  HH H   	H@HH9G<     H  !Љ  I  AQ    <
  LU H   E  MH  D^E@AwD    A#$  tE	DE  Ht$1AO  u|$    	   Hf      vH          f   D$ȉ   t$A   H 	H	H   A     A   Ɖ         h  1HT$eH+%(     H[]A\A]A^A_    H
   H   HJXƇ   5HǇ       HǇ       HǇ       f   Ǉ               1_HD$eH+%(   -  1Ҿ   HH   H   A   HpXu  <   <  H O       u		H=  w
HH    HD$eH+%(     1HH[]A\A]A^A_e   HD$eH+%(   T  1Ҿ   HH   LhXA  <tdw.<   <   HD$eH+%(        p<   HD$eH+%(     1HH[]A\A]A^A_HD$eH+%(        H    HH        
   H$    $DD$HH    DH    H    H    HEA	    1Y      EH 
  L H=       		IH    HEHW  H+    HHHH=        HE
   Iˁ   HE   H+    Hf   HH    ƅ   Bƅ      L`XA  ǅ         ǅL  HD$eH+%(   6  HH[]A\A]A^A_    H    HH        pH    HH        U1DׅL(@ED	փ	   HD    @tMAA   Iy`H  G      AA  Iq`H  F   D׃  ƃ@   AA  Iy`H  G   D׋4       !D   ƅ    @   VALE11 |$   wH wAN    	Ѐκ
   f   ҈   D$*ƅ    f   ƅ       f   4T$Ht$H$    $E   Ƹ    AAtMI`MtAA f`@"4    D   @   Ht$   A  F	Ѐfǅ     ҈   HHȃH   D$ƅ   ƅ            Q   Ht$HIL9XD$   H9G)D$<   DL HH    H    H    A	            A|$    uhAƅ    fǅ    ҃HH
		   D$   ]H#	   H    HH        ff.     @     ATIUSHH  H?u_Ht.HVH    HH        Hǃ      []A\    HH    1H        Hǃ      []A\    HHFHHE    A$L  t}u   t
HL   HL  yƃ   m    USHH_XeH%(   HD$1H  H+         Pvct^H          uL   ƃ  L  Ѓ߈L  HT$eH+%(      H[]       t
HL   HL  tƃ   Hǃ      떋  HL  HH$        xu$  p<p@D$<0|$:%ts1DH  HtHH    HH        H    1HH            ff.     f    AUATIUHSHLo            HS<tH   t?A          LH        ƅxkH{H[]A\A]    H     HxP        9B1  ƃ      H[]A\A]    HHfD      AWAVAUATUSHHD   eH%(   HD$1HH   L`XHD   E   H$       w H  D   EyE   AǄ$      A$  <   I$             HD$eH+%(     H[]A\A]A^A_    H$    w H   D   Ey1E   I$  I4$H;  HEH    H        AH    E	   AA9DGD   EPHH        &D   H    HH           1HH    usAǄ$      EA   AD$<w~<      <j   _Ǉ       AǄ$      >AǄ$      $<ovt|EH    1H        <t]<|$HH   ǃ       HxH     HH@X    H)H`1HD$ t
<   <Bt7<t<As   u"I$L瀈O  <   HI$  A$  HxPI$   Љ  A$  A$  9B1  AƄ$              HH  H?HFHHE    ff.          ATIUHS    HtcH  Hu IHt)h    HMH    H        ^[]A\    h    MH    1H        Y[]A\    H  Hu DHt)h    HMH    H        Z[]A\    h    MH    1H        Xmff.     f    AWIAVA   AUE1ATUHSHH(eH%(   HD$ 1Ld$D$
   HD$    HD$    ;T$	у   ~A      A  E  H    E1HHD$%   A   HD$    D$ j j j A  PhL  ATHt$@    T$8H0ppc1DO||$
:^A   t
IL   IL  tAƇ   IǇ      HT$ eH+%(      H([]A\A]A^A_    |$
)|$ l$|$u9CʉQ  t
H9tHI  A  t1H    L    DLHLD    ff.         AWAVAUATUSH0Q  eH%(   HD$(1HD$    HD$     HD$    <  A   L$IHEHl$ID$
   D$    D%    MT$у   ~!  D$   u|$)?  Ab  EK  H    E1HLHD$       A    HD$     HC    HC    HC    fDd$D$% j j j A  PhL  UHt$H    T$@H0pp01N|$|$V|$:&A   MtIE L   IL  uQHT$(eH+%(   Z  H0[]A\A]A^A_    T$ u|$   D$   AƇ   IǇ      뚀|$ l$|$L$M<  I7DkL#Q   AIx5   ~,H   HtCtH  A  K
DA  SA  ?	A  kCI~ ?  	A    t7A   t-I  I7H   HPAH    H        { x IDM  pL$MA  @A  C@t
A     L9H    L    L$HLL6I  DHtLHPH    H        AƇ   IǇ      AH    1H         H    1H            @     AWAVAUATUSHĀLwXH|$I  IeH%(   HD$x1I  HjPHD$    2     P T$3u'HD$xeH+%(   ~&  H[]A\A]A^A_    H=             H$Hr&  HD$P    E1HD$     H\$1E  E1E11D$h    HD$i    D$q I>j j j A  PhL  HD$xPH$       A$   H0p<puT$Q  E  AH\$A%  E&  A  A     A       I  HxP    O  <A  EA   AA9AFՅDE   E	LH  IA  D   	  E  DA  I  Ay D   V     HzP    I6E  A     Et~A   E9  A  ?  D  d  A  1A  t*I  H(   AHPH    H         
   
  ǅ         	II9IFMHDH  9ЉFȅE  9FA   u  9G;  s  A  H|$I     	H    LH<$    L    HD$xeH+%(   2#  H|$H1[]A\A]A^A_       EDD   At"H      H="  <p  |$QA   }|$R:A   H\$Dt
IL   I6L  H  I  H  HPH    H        E"  E1<pAD%   !  I6O      E^  D$Q<  <I  |$R(>  E`        HD$@    H    H9D$   Ey11BD$S<%t  HH`  H\$E    A   M.IE f    AQ    A   "    I   @  H$LLAă       AP   +  @t?M  At2I  I6H  HH    H        I  E  I  I6H  HH    H        A   I}D    A  I}    ID   I;  sAO  N  @
  H       H
       O  A        ~	  IE1E1҃ HD$^    D   fDL$fHD$h    fDT$pI  uH9|$   McL|$^A
      LL    A
   1LI  HL$h    I  M  H  I6AWH    HEH    HD$pP    _AXE  E9t*I  I6H  HH    H        M.D$X    1HD$P    I  E      AO    I>A  @  j AL  A   HD$XPRHL$?   1    H  A   t2I  I6H  HPH    H        A  M.D$X    HD$P    HD$H    A  AAA׃AAL$   AO  A   w	  v  m  @D$?   D$    EADA   _	  H    H  HD$ H9  HH    HH        A  I  tI  H  HPA  H    H        D%   "wH      HFDH    L    /E  AA  t1I  H  AHPH    H        E  D   D  A     	HHH  q\|$RE   I  H  HPH    H            E1   LD$jfD$hD$lI>P  <E1E11ɃD$lj j j A  PhL  HD$xPH$       H    Ha  HD$PH0      H        I  HzP1    @	      IH   H   x   PfA  PA  P A  x?~HP8HA  A  @tgp,P(t
t	A  P0A  x4 y@4%A  A  Z  E  E3     L    I  L`P    IH(  Ht
x8	      H4$L    A   
  I   ,  I  1E1    L    A  N  j AL  <HL$XQ1RHL$?   D@    H(  t$WI  @A  @    A  A   ^  I  H
  I    I6H    LEH    HH        I  I6H  L$HH    H        A  I  H	  HEH    H        t*H	  HH    HH        I  Aǆ      /Hg  HH    HH        H$LL$Aă  I;  ?I  I6H  HPH    H        H$LL
  AQ  AA   I  I6Hx  HPH    H        A  rA  T$Hp p    I  I6H~  HPH    H        A  AQ  @   t*I  I6H  HPH    H        D$3 A  T$3	A  I>D$X    HD$P    HD$H       t<   A      HD$HAL  A$   
   HD$(   PHD$XPA  PHL$    Hm  D$X`  |$PU  T$TH$Hc?

  A   t*I  I6Hn  HPH    H        M&I$     H4$      L    	  H4$      L    uA   H4$A      L    uA  M&A$Q  t"H4$      L    i  M&A   L    A  I$D<wD    #$  u5I  I6H  HPH    H        AƆ   E1I  I6H  HH    H        A  AQ  @ I  I6HP  HPH    H        WA$O  1A   D D$D$   I>D\$8AL  A9A  DT$4AMN  ADAHD$HHD$(PHD$XPRHL$T$ t$0    H)|$X DT$4D\$8l  A   	  I  I6D\$H  HPH    H        Dd$PD\$AA   
  D$   I>   D\$4AL  A9A  AMN  t$(ADHt$XVARHL$T$ t$0    D\$LHLD$XT$TD9  H4$/  PHHcHcDD9  HcD)ǉу@?DAA     uf  PHcDM>  A   HD$h    HD$p    I    IHAO  5     D$j    (   f|$oD$hI>E1Ej L   j j A  PhL  j H$       LH0    M      IH0  HtWz~QA  A  J	A  J	A  R	A      AƆ   Iǆ      A8DxDhA    fA I
  II     
  A  AA	E  AA?  1    A   [A$  P  A  <  <,I  I6H/  HPH    H        Dd$PAA     A   e  |$?  AO  @  D$?   A   E9HD$j    D$r   |$I@|$J$5|$K *I  I6H  HPH    H        A  %H    I6I    LEH    1H        EH    1H        1H    HH        I  VA   t*I  I6Hm	  HPH    H        D$Hp<pI  I>HT$(HFHHE    I>A  AL  N  j <HL$XQ1RHL$1D@    HI>j AL  A   HD$XPA  PH$LLAąI  H  AHPA   H    H        A$ EHA$ 5I  I6H  HPEH    H        Iǆ      I6AWH    E1H    HD$pP    Y^AH    1H    1HH        AH    1H        I  H<  AHPH    H        H\$E    I  H  HPH    H        I  I>HT$PHFHHE    IE1E1HD$^    fD\$fD   fDd$pHD$h    I  A$N      I$  Ht	A$O      *  @       IHI>@   H¾       {  AEI  fP  6  DxA(  <Aă@      IU@IH   HuN  LBAH    	IHPILFHBMA   	HHHFE9tP
IA9tI  LL$H
  HH    HH        I  Ht$    I  L    A  A9I  I6H  HPEH    H        E  UI6H  HWH    H        I  1    L$H    1H        A  H    1H        BH4$      L    xA  kH    1H        Dd$PAA   <D$   A   1H    1H        A  H    1H         H    1H        B|$?&AO  @   DEEH    1H        tH    1H        A  E1I  Hj  I    H    I6LDH    HH        1       H$H< [A  NH    1H        A  H    1H        	H    1H        H    1H        ZAH    1H        E  3I  I6D$<DT$8D\$4H  HA   EH    H        |$?D\$4  A   AA   H    1H        H\$    H    1H        A   aI  I6H  HPH    H        A         A  L    L       L
         A   I  I6H  HPH    H        A  tE  E        L腮A   uAQ  @I  I6H  HPH    H        H       I  H    1H        A  ]H    1H        H    1H           LA   I  I6HN  HPA   EH    H    D\$    D\$fEH    1H        eH    1II  I6H  HPH    H        PAH    1H        \DT$8D$<AO  @bD$?   A   	H    1I    H    I6LDH    1H        AH    1H        E1A   H    H    A       |$?D\$4wAO  @DT$8D$<DA   H4$HH  A  Ѓ	1A  D$W	A  	A  AR     t5I  I6D\$Hv  HPH    H        D\$A  A  tA   t
A   uA  8L$   I  H.  H    H    H    HDIH    LEɨIHDVHH    HIH        ZaI  A  HxP   Љ  A  A  9B1  AƆ      H    1H         H    1H        A  yH    1H        ]H    1H        I6fN  | lI  D\$H@  HPH    H        D\$5H    1H        H    1H        A  A  	A  oEA   1D\$4H    H    A       D\$4D$   PH\$E  DE,H    H    I    HDH    H    IRMEȨI6LEH    1    X;H    14    A8IA8:I  I6H   HT$xeH+%(   H    HPuHH    []A\A]A^A_    H    1H        D\$H    1H        A  H\$EuiEnH    1H        3HD$xeH+%(   H    1VH    1H        D\$            ff.     f    AWIAVAUATI̹   UHSH`LoeH%(   HD$X1Lt$D$    HD$    LHD$    HA   <   
   H    L    J       H    	L      Å  AA    &  j AL  L   A@      LLT$AR  P    H?  T$t$LDD$AD$ AL  HHA)о   LA	H\$A	ǉDy҈SLT$AR  P@   I9LG    H   H  LHT$XeH+%(      H`[]A\A]A^A_    I
     E1   AǨA    D		  u11H  HxP    Lq   D$p<ptHLH  H}HHFHHE        f    AVAAUATUHSHP  LhXMe L          -  L    uL    []A\A]A^    IE L     A      HP  H     A$L  tA      A   t
A   A$   Pne   A  \A$L  ML    =   L    +H    IHP  NA@]I  Iu HtHH    H        H    1H        f    AWHHAVAUATUSHHHH$    <   H~H         H=      
      HH~  HPH        IH     1H        Aą  AE+ M}Mu+#IHiONH#k)ʃaAPtrM9uH4$H    1H    A    DH        L    H    AH<$    DH[]A\A]A^A_    AIE,L)H+  HLL    sd  H$fAUHPǅ      HE L  D  ǅ     C       un  L      L}L    H    HSPHǅ      HEHHm  H    L    L    Aƅ  DHkxʃBx  AE DA  LAE   IEH    D	ImXAE    ǃ   f    Hǅ      ǅ     Ѓ   Ct   A  fAM,fAE.HPH    C   1LH    Aƅr       CH  H  I    H    Hu LEH    HH        B@Һ   DHH4$H    1H    A    vHHHH   h      1L    `H4$H    1H        _H    H    H  HH  Hu H   HPH    H        >I      I    H    Hu LEH    1H        L    L    =        HH    H    HD$        HD$H    1H        ,A8ff.     @     HGxH  Kff.         ATUSHHH?eH%(   HD$11D$
   fD$P  HD$             P      j E1E11h      j   PhL  Ld$*ATHt$:    H0u#1HT$eH+%(      H[]A\    H    H    ~0D$p<pu$H  H;LHHFHE    |$:t듸0   D$+D$   g         USHoxHt$HE HL  ut@uƅ   1[]    @ttP  u7H  Ht<HH    HH           H-uHƅ   H    1HH        ff.          USHoxH   HH} R  uH߾   []
j E1E11h      H    j jHG   Pj     H0tH  Hu Ht"HH    H        1[]    H    1H        l           t1k  uHGxHtH Ht	L  u1           D      AWAVAUATUSH L?eH%(   HD$1HD$    IGD   A   PEB  9  HHL$HIHDA   HD$    1E11fD$E1   LD$5j h   j A  PATUHt$>    H0   AuH    L    xA%   uE p<pt_ۃ   >   EHD$eH+%(   ukH []A\A]A^A_    ۃI  I>HHFHHE    E<:t< t<tp}qf1댻    f    SH_xH          t=   t4H  H3H   HH    H        1H    tTH3L  u
u@t;H  Ht5HH    H        H1[  [[    H    1H        H    1H        `@     UHSH_xH;    H{    H         tH      1[]    Hff.     f    USHeH%(   HD$1H$    H   HH7  tc   tZR   u'H  H   HH    H        HHttq$ppug|$u`H3L  tm@tzt@R   u#H  HtvHH    H        1H@uu	ƃ  1HT$eH+%(   ucH[]    t@uƃ  R   t1HH    1H        H    1H            ff.           tHx1g  u1            Hx   =f.          SHHH?  eH%(   HT$1H$    H  HD$    H7D$  w$        Dƾ    ED   A   1H$    HD$    H7(     H    D$I    IDH4$D$	t~L$  t9   H$D$A   L@ Hu_HH    1H        HH    HD$eH+%(   u~H[    @!:E1H$L@ HtHHSH    H        HH    띀H    I    IDH4$$D$A            HGXH   H0  H0  H       fD      HH   HPX  H2<t   
   t    L   u0     	HHH# 
   E    
       ff.     @     AUIHATUHSHH(H?eH%(   HT$ 1D$HD$    HWHD$    HD$       HL$ɉL$EtD$j E1AHj j jR   Ld$0ATHt$@    H0u3DAA?   HT$ eH+%(      H([]A\A]    H  Hu D$HtzHMH    H        D$H    HD$    D$~D$p<pthxH  Hu Ht7HPH    H        MH    1H        D$H    1H        LH                AVIʹ   AUATUSHHHL'eH%(   HD$@1ILH<+  D$FLAADl$tD$tD$LFLNA$   D  ILIσ	IHH$LL$ LL$E   A   HFσ	HHHD$L.    u.H0  Ht"1ɀ|$H4tT$vQuL$HT$@eH+%(      HH[]A\A]A^    IM9r3Lt$AmHD$xvHL$+$H  IHt%ILH    H    AVHPAQ    Y^I1H    LAVH    AQ    XZ    f.         AWAVAULATLgUHLS    IƋEt~1EHH9snHEȃ<uLL    MHu LA      HLA    IEuHE MH    LHHp@{EH9rLL    H[]A\A]A^A_    f    H   1ҀHtG<v<uW1    <vHW+1    ff.         AWAVIιAUATAUSH(LXL$A  I   <t#   tH([]A\A]A^A_    I     I  HHPPA  A9AF?     	H9HG      9OH9HGH  5  
 HL$    L$HI  HEs  	l$$1EHLt$HLMIM;    T$$A   LLHt$DT$Ht$  D&DT$AAE9EGEl  D9c  Ht$LE1LEHn@EIHEHUHHʅ   H9   L4L9   I9   E <uOA$  unI$  Ll$I4$H   HH    H        L    L$HL$HLDT$   DT$AH@E9   D9   L$~GH9tBI$  Ll$I<$HtxRHIAPHH    HH        ^_XL4H    1H        5I2HH H  ;RI1H    PHAH        ZYHt$MD9sMLl$ILl$1    AWAVAUATUSHHHL Ht$L   $M~PMnXA  v@tAH[]A\A]A^A_    A  @uIh  HtLHHs
   LL$L    L$   M(  L$L    L$II   IEB   t:Iu $   	HA9     LL
       TI} L$    L$uI   IX      L$BH5        L$LL
       L       HL$LLH        HAUAATAUSH   HH@XH    Fut   ƃ   H Hǃ       f   Hǃ       D   EuCMHHH   ǃL  ǃ      ǃ       ǃ       []A\A]    ƃ   f.         AWAVAUATAUSHHD   w4	     H    HD[]A\A]A^A_       wܸ   H     HH H   HAP  WLyXE1  M(  LL$    EL$I      
uE1䉃   I   EJ8t LL    
!H    E3z)z$   
  w9	tuqII   E   A  	HBWJ  EA  I   1LD$L$H    LD$L$DHII      A  	8HH9D	HH   HAP  VHh  H HtP  HH2HD   H H   HAP  WLyX  HIE}zsz$_dI   EB    I   EJ    BH ff.     f    Hx   tbUH8  SHH    H       Hx  Hǃ           HHǃx      Hǃ       Hǃ      []        f.         AWAVAUATUSHH  L  H   M~P<t6H   t*A     1H[]A\A]A^A_    Hx   uH8  H    Hǃ       H    ǃ(      Hǃ0             
  H   HX  H`  H=    H`  Hǃp      Hh      Hx  H;FH8  IHI H$    D9  [  eL,%    AE,
  AM,   HH  %   D$    H0  H/  H    L    T$AE,%	AE,H0      Hǃ0      uYA   HL   A  9G	ID9AG      <t4H   t(1Hǃ      Hǃ      H<$    H  HtD  H3H  D  AIHtcAH   HH    H    1    9  A9X  eAE,L$%	AE,bHtHH    H    1    ?H    1H    1    #H    1H    1            AVAUATUHS  HL  HMl$P<t}   ttHx   t[H8  H    H       Hx  Hǃ           HHǃx      Hǃ       Hǃ          [1]A\A]A^    O  HN  A  hH;@   H꾶         H3   1  U  Hǃ      	Ј  Eȉ  E      E11ɺ   HH     ?wTLuL  IIM9t=   t-H  H3H!  HPMH    H        L       HEH	  H3H  H  HPIH    H        Hǃ      []A\A]A^      Eȉ  Eǃ      ȉ     HEIIHt
I@L  H  H  HPH    H        fHmHH3   H	HHHH   HHL          L      1AǄ$`      DUA$\  H    HH	HH艃   CH  HtGHH    H        $L   	HH D  H    1H        MH    1H        H  H3HtUHPH    H           H  H   HPH    H        ^H    1H        DH    1H        *   u'IH    1H        eH  Ht3HPH    H        H    1H        H    1H                                    US    tH        11    H    H         Ãu׻   H    H        Å   E111Ҿ    H        H    HuH        c1H       H        H    HuH        H        ÅtBH=        H=        H        1    H        u[]    S    tH        H    1    H=        H=        H            H        u[    D,t"D%   At%"w  HHrH            H                           p         )        p         )        p         )                          temporary   @                                     	                                                                    sd_setup_read_write_cmnd                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 @                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Medium access timeout failure. Offlining disk!
 max_retries must be between -1 and %d
  init_sd: sd driver entry point
 3sd: can't init extended cdb cache
    3sd: can't init discard page pool
     request not aligned to the logical block size
  FUA write on READ/WRITE(6) drive
       Unaligned partial completion (resid=%u, sector_sz=%u)
  sd_done: completed %d of %d bytes
      %s: Result: hostbyte=%s driverbyte=%s
  %s: Result: hostbyte=0x%02x driverbyte=%s
      formatted with unsupported protection type %u. Disabling disk!
 physical block alignment offset: %u
    sd_revalidate_disk: Memory allocation failure.
 Media removed, stopped polling
 Very big device. Trying to use READ CAPACITY(16).
      Using 0xffffffff as device size
        Adjusting the sector count from its reported value: %llu
       Sector size 0 reported, assuming 512.
  Host-aware SMR disk used as regular disk
       Invalid Concurrent Positioning Ranges VPD page
 Invalid Concurrent Positioning Range number
    %u concurrent positioning ranges
       %llu %d-byte logical blocks: (%s/%s)
   Test WP failed, assume Write Enabled
   Missing header in MODE_SENSE response
  Truncating mode parameter data from %d to %d bytes
     Incomplete mode parameter data
 Uses READ/WRITE(6), disabling FUA
      Write cache: %s, read cache: %s, %s
    Assuming drive cache: write back
       Assuming drive cache: write through
    getting Control mode page failed, assume no ATO
        Disabling DIF Type %u protection
       Enabling DIF Type %u protection
        Preferred minimum I/O size %u bytes not a multiple of physical block size (%u bytes)
   Preferred minimum I/O size %u bytes
    Optimal transfer size %u logical blocks > dev_max (%u logical blocks)
  Optimal transfer size %u logical blocks > sd driver limit (%u logical blocks)
  Optimal transfer size %u bytes < PAGE_SIZE (%u bytes)
  Optimal transfer size %u bytes not a multiple of preferred minimum block size (%u bytes)
       Optimal transfer size %u bytes not a multiple of physical block size (%u bytes)
        Optimal transfer size %u bytes
 field "begin" at drivers/scsi/sd.c:3516 memmove: detected field-spanning write (size %zu) of single %s (size %zu)
      SCSI disk (sd) name length exceeded.
   Enabling DIX %s, application tag size %u bytes
 REPORT ZONES start lba %llu failed
     REPORT ZONES report invalid length %u
  Invalid zone at LBA %llu with capacity %llu and length %llu; granularity = %llu
        Zone %d at LBA %llu is invalid: %llu + %llu
    Gap zone without constant LBA offsets
  %u zones of %u logical blocks + 1 runt zone
    %u zones of %u logical blocks
  Read zoned characteristics VPD page failed
     Invalid zone starting LBA granularity %llu
     Invalid zone alignment method
  constrained reads devices are not supported
    Changing capacity from %llu to max LBA+1 %llu
  Zone size %llu is not a power of two.
 3 drivers/scsi/sd.c Starting disk
 5 OPAL unlock failed
 sd_ioctl: disk=%s, cmd=0x%x
 6 sd_release
 %d
 %u
 %s
 dix dif %s%u
 sd sd_ext_cdb exit_sd: exiting sd driver
 PR command failed: %d
 writing reading device offline or changed
 access beyond end of device
 %s: block=%llu, count=%d
 %s %d/%u 512 byte blocks.
 Sense not available.
 sd_check_events
 DRIVER_OK Read Capacity(10) failed Read Capacity(16) failed managed aware on off supports DPO and FUA doesn't support DPO or FUA disabled enabled sd_revalidate_disk
 4 Test Unit Ready failed Spinning up disk... c. Unit Not Ready
 cready
 cnot responding...
 Unsupported sector size %d.
 Host-%s zoned block device
 Drive-managed SMR disk
 %u-byte physical blocks
 Assuming Write Enabled
 Write Protect is %s
 Mode Sense: %4ph
 7 No Caching mode page found
 Disabling FUA
 Cache data unavailable
 Asking for cache data failed
 ATO Got wrong page
 sd_open
 removable   sd_probe
 sd_probe: memory exhausted.
 %s supports TCG Opal
 Attached SCSI %sdisk
 Start/Stop Unit failed Failed to clear sense data
 Synchronize Cache(10) failed Synchronizing SCSI cache
 Stopping disk
 scsi_disk max_retries zoned_cap max_write_same_blocks max_medium_access_timeouts zeroing_mode write writesame writesame_16_unmap writesame_10_unmap provisioning_mode full unmap writesame_16 writesame_10 writesame_zero thin_provisioning app_tag_own protection_mode protection_type FUA cache_type allow_restart manage_shutdown manage_runtime_start_stop manage_system_start_stop manage_start_stop write through none write back write back, no read (daft) 5 3 REPORT ZONES drivers/scsi/sd_zbc.c &sdkp->rev_mutex 5 4 Zone size too large
            alias=scsi:t-0x14* alias=scsi:t-0x0e* alias=scsi:t-0x07* alias=scsi:t-0x00* alias=block-major-135-* alias=block-major-134-* alias=block-major-133-* alias=block-major-132-* alias=block-major-131-* alias=block-major-130-* alias=block-major-129-* alias=block-major-128-* alias=block-major-71-* alias=block-major-70-* alias=block-major-69-* alias=block-major-68-* alias=block-major-67-* alias=block-major-66-* alias=block-major-65-* alias=block-major-8-* license=GPL description=SCSI disk (sd) driver author=Eric Youngdale depends=scsi_mod,t10-pi retpoline=Y intree=Y name=sd_mod vermagic=6.1.0-37-amd64 SMP preempt mod_unload modversions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (          (                                             (    0  8  0  (                     8  0  (                                            (    0  8  0  (                     8  0  (                                              (    0    8    @    H    P                                                                         (                 (                 (                (            (                           (    0  8  0  (                     8  0  (                     8  0  (                     8                                                         0               0                                                                                                                                                                             0               0                       (  8  (                 8                                                     0               0                     0               0                     0               0                     0               0                                                                  X  `  h  p  x      X          X                                                                           (    0  8  P  8  0  (                     P  8  0  (                     P  8  0  (                     P  8  0  (                     P  8  0  (                     P                                                             (          (                       (                 (                 (                         (    0  8  H  8  0  (                     H                         (                  (                  (                  (                            (    0  8  `  h  p  x        `  8  0  (                     `                         (    0  8  h  p  x          h  8  0  (                     h                         (    0  8    8  0  (                                     8  0  (                                                                                                                                   8  0  (                                              (    0  8                    8  0  (                                              (  0  (                   0                         (    0  8  H  8  0  (                     H                               8  @  H  P  X  `  h  8               8                                                 (  0  8  @  H                                             (    0  8  X  `  h  p  x      X  8  0  (                     X                                                                    (          (                                                                                  (            (                                             (  P  X  `  h  p  x    P  (                 P                         (  0  x  0  (                   x        x        x                         (    0  8  0  (                                                      (    0  8  `  8  0  (                     `  h  p  h  `  h  p  h  `                         (    0  8  P  8  0  (                     P                 (                 (                         (    0  8  H  8  0  (                     H                                             (    0  8  H  8  0  (                     H                         (  0  (                   0  (                   0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                y,    set_capacity_and_notify                                 F    set_disk_ro                                                 scsi_print_sense_hdr                                    s%    ida_alloc_range                                         W0m>    blk_integrity_register                                  Ȋ"    scsi_mode_sense                                         -    blk_queue_logical_block_size                            'R    __rcu_read_lock                                         G    scsi_autopm_put_device                                  F    scsi_device_get                                         C    dev_set_name                                                memmove                                                 8    device_add_disk                                         6    queue_work_on                                           Sx    device_unregister                                       Nw    pm_runtime_set_autosuspend_delay                        e^    blk_pm_runtime_init                                     V7    system_state                                            Q    scsi_get_sense_info_fld                                 %    scsi_get_vpd_page                                       )    device_initialize                                       q    t10_pi_type1_crc                                        Al;    kstrtouint                                              z    kfree                                                   a/=    blk_queue_write_cache                                   I    scsicam_bios_param                                      ?    blk_mq_alloc_disk_for_queue                             R1^    kmem_cache_create                                       	    get_device                                              `sB    scsi_command_normalize_sense                            4    _raw_spin_lock_irqsave                                  㗨    mempool_free                                            mҳ    scsi_hostbyte_string                                    ]    blk_queue_required_elevator_features                    m    __fentry__                                              a    sysfs_emit                                              M    scsi_device_set_state                                   kw     scsi_test_unit_ready                                    pHe    __x86_indirect_thunk_rax                                ď    scsi_block_when_processing_errors                       ~    _printk                                                 ן
    scsi_register_driver                                    XS    mempool_create                                          *{    __blk_req_zone_write_unlock                             =1    put_disk                                                
EW    scsi_ioctl                                              V
    __stack_chk_fail                                        E    blk_queue_physical_block_size                           M    put_device                                              +e    blk_queue_max_zone_append_sectors                       Ou(    blk_queue_flag_set                                      *v    mempool_alloc                                           -N    disk_set_zoned                                          #    clear_page_rep                                              capable                                                     blk_queue_flag_clear                                    ^|    page_offset_base                                        Y    kvmalloc_node                                           ^    scsi_device_put                                             t10_pi_type3_crc                                        Y    unregister_blkdev                                       <m    t10_pi_type3_ip                                         b
8    __class_register                                        .    blk_revalidate_disk_zones                                   bdev_check_media_change                                 .Դ    device_add                                              qH    string_get_size                                         i    kstrtoint                                               i$    __rcu_read_unlock                                       KM    mutex_lock                                              0    sdev_prefix_printk                                      ?I%	    clear_page_orig                                         ܅    mempool_free_pages                                      Z    strncmp                                                 bv`    scsi_report_opcode                                      ŷ    ida_free                                                V    driver_unregister                                       D    clear_page_erms                                         abg    __scsi_execute                                          =    scsi_logging_level                                      ZG    class_unregister                                        j    del_gendisk                                             78    blk_queue_max_discard_sectors                            .ў    kmalloc_large                                           b    blk_queue_zone_write_granularity                        bdQ    opal_unlock_from_suspend                                    __mutex_init                                            \Yх    current_task                                            p\    _raw_spin_unlock_irqrestore                             8G    device_del                                              MK    kstrtobool                                              8    __sysfs_match_string                                    _    sed_ioctl                                               ŏW    memset                                                  *T1    __x86_indirect_thunk_r10                                s<\    kstrtoull                                               9[    __x86_return_thunk                                      @cs    disk_alloc_independent_access_ranges                    C    scsi_alloc_sgtables                                     3    init_opal_dev                                           `    scsi_autopm_get_device                                  P    jiffies                                                     scsi_print_command                                      {    free_opal_dev                                           ?<    sprintf                                                 le    vmemmap_base                                            p    blk_queue_alignment_offset                              yG    blk_queue_max_write_zeroes_sectors                      9    __pm_runtime_resume                                     82    mutex_unlock                                            '
r    __register_blkdev                                       Y.    scmd_printk                                             P3    scsi_free_sgtables                                      F    disk_set_independent_access_ranges                          scsi_mode_select                                        4    mempool_destroy                                         GV    __warn_printk                                           M    blk_queue_io_min                                             scsi_ioctl_block_when_processing_errors                 6F@    blkdev_compat_ptr_ioctl                                 wX    kmalloc_trace                                           nuz    kvfree                                                  O    t10_pi_type1_ip                                         
    __x86_indirect_thunk_r8                                     msleep                                                  fG    blk_queue_rq_timeout                                    @    blk_req_zone_write_trylock                              E:#    __kmalloc                                               -    kmalloc_caches                                              kmem_cache_destroy                                      Ӆ3-    system_wq                                               '	jv    mempool_alloc_pages                                     2S    scsi_set_medium_removal                                 zR    module_layout                                                             B	        	        
		        Q 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         $                                                                                                                                                                                                                                                      $                              $                              $                                                            $                                                                                                                                                                                    $                                                                                                                                                                            sd_mod                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   GCC: (Debian 12.2.0-14+deb12u1) 12.2.0  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0         #  #    A=      N=     f=    ~=    =    =    !   = 	     =    =    =    =    =    
>    >    .>    9> 	   L>      &  g       4&               U> |  0  ,  _     U    @    `      a> `      v> E    > ]     > ]     b  *    > `      V       >      >      >      >      >       
?    @  x        $      _ -            I       p
 k   @  c        ? 
     +? 
     ;? G    I?      U? c     b    @  x      Z       ]? `    e? ` @  n? `   w? `   ? `  	  ? ` @	  ? ` 	  ? b 	  ? Y  
  ?    @
  ?    `
 ?    a
 ?    b
 @    c
      d
 *     e
     f
 %@    g
 m     h
 .@    i
 -     j
     k
 5@    l
 :@    m
     n
 ?@    o
 P@    p
 \@    q
 f@    r
 v@    s
 @    t
 @    u
 @    v
 @    w
 @    x
 @    y
 @    z
 @    {
 @    |
 A    }
 A    ~
 /A    
 ?A    
 MA    
 `A    
 tA    
 A    
 A    
 A    
 A    
 A    
 A    
 A    
 A    
  B    
      
 B    
 "B    
 )B    
 4B    
 ?B    
 RB    
 bB    
 vB    
 B    
 B    
  B K   
  B ]   
  B      T   @  i3  `     
 Q     B     
  B ]    
  B ]   @
  C ]   `
  C ]   
  C   
  'C    %  i X @<  nW  Q  @=  F d @>   k   >  0C Q   >  >C k    ?  LC    @?  WC    `?  hC 9 ?  pC    ?  }C G   @  C Z  A  C    @A  C   A         
\ C B  0  C `       C `      C `      C *    C -    C G     C `      D `     D       D   @  !D D    +D  @  1D    <D 0    JD F     W  E     WD ]   @  dD    `  pD      D      D      D     
  D    @
  D    `
  D -   
  Š    
  D    
         D       D    @  %    P  D    `  LE      D             D       E    @  +V       	      	E     E     'E     8E     HE     SE     @     _E     kE     yE     E     E S    E S    E       E       E    @  D             E       E      i        E  @   F     
F   )  F k    A     @A  p
   A         ^        [ "F   @  .F f      `   @    `      :"    @  @F 0    $      x        o      IF     TF     fF     uF     F ]      F ]      D    @  F    `   ? 
       e   p
 k     F             a F               c F      F    F    G    G    1G           \ =G              ơ        NG      bG     {G    G    G   (    f     G `   @   G R     &  g     G       G       G    @  ]            G      H      H      H h   &H      .H D     @H      EH g @  IH j    RH    @  \H    `  iH      sH      }H c    ]             @  H      H c    6     	         g        i       
       k        l H 9  p  '	        H p @   / r            V        P  t @  M  v   	  v   H p    H p @  H m   H m   I m    I m @  4I m   JI x   VI x    fI z @  tI |   I ~   I       @  I        I     I  @  I    C z   I     H}   @  I    I    I     	J    @  X X    D            %     	  D    	  LE     	       @	  D    	  E    	  D     
  V    
  J     
  $J    @
 6J    A
 EJ    C
 NJ    D
 @    E
 _E    F
 E    `
  `J %  
  mJ %  
  q3 -      yJ    @        
       _     k        o       
        _     &          q       
       _        s       
       f            k          u       
       f        w       
        f        y       
       b        {       
        b        }       
       _                      
        _               
       f                      
       _                      
K                       
       f           U                        
             _               
       _     ?                        
E      k               
K       k               
       _                J      J    J    J    J    J    J    J           n 
K                "K      >K    YK    tK    K    K    K     K @   K      L    $L    7L      ;  *       GL *       SL 8      f     ]L   @   aV  J         fL     vL  @  L *     L *     L *     L *     L       L *  @  L      M G    M Q    M ?     2M ]      B U   @  )H      :M *     JM *     ZM *     jM *      xM *      M *   @  M *   `  ,  *     XE      M      M      M $      M $     M $     N $     N $      &N $   (   K   0  3N    8 7N    9 FN    : JN    ; NN    < UN    = `N    > fN    ? lN    @ qN    A wN    B N    C N    D N    E N    F F    H N    J      K N    L        ]               
    N  N     N      N     N    O    O    +O    AO    eO    O "   O (   O 0   O @          
c O      O     O    P    P    !P    0P    :P    EP    OP    YP 	   fP 
   vP    P    P 
   P    P    P    P 	     P    Q    
Q    Q    Q    #Q    2Q    @Q    XQ 	   eQ      ơ         tQ        Q    0   Q    8   U    @   Q    H         
[        
i Q      Q     Q    Q    R    R    .R    BR    WR      gR    }R    R    R    R    R      R       )      RI     R     R  @  %  m   D    S           
M      k               
        k               
       k                         
S     S             -S   @S SS   fS           yS     S    S    S    S    S             S     S    S    S           
            	                                                      
    N      6    T           
    N  N j T     'T       /T    p   7T      IT            
   :"    O  K   ZT    Ĉ kT      uT      T      T    ,G        
   N       T    ʈ T    ,G  T      T      T    G        
   N  R f   c  T    Ј U    Ј       
   U k "U    ӈ       
   *U k /U    Ո       
   *U k BU    JU    ׈       
    *U k WU    و cU    G        
   A      -   wU    ܈       
   A     -    -   c    O K   U    ވ       
   A      -   c    U           
   A      -   c    ]  *   U           
   A     -    -   ]  *   U           
   aV  J  x      c    U     U    ,G        
   N  N j U           
   aV  J  /"    U     U            
   A    :   U           
    aV  J  "  Z   V     V            
    U k V           
M  : k -V     =V           
M  : k w K   RV     mV           
    N  "     V           
     k   V &   V $     k   4&  Q    K   V           
   V    V     V     V      V      V      W      $W      ?W      `W      W      W      W      W      W      W      W      X      'X      <X      EX      UX      iX      |X      X      X      X      X      Y      #Y      :Y             
9                           
 KY      YY    lY    Y    Y    Y    Y      Y     Y    Z    "Z    9Z    NZ 
   eZ    xZ    Z      Z    Z          
   N  [     Z    $       
   N  Z    & 
[    G  %[           
   : k     N j ;[    *       
M  : k [       K   K[    ,       
M  : k 9N   -    g[    . [      [      [           
   aV  J  G U   ;     eg      k   [    3       
   N  [  c  b     9N U    K   [    5       
   N  [  O-  S    eg      k   [    7 t10_dif_type T10_PI_TYPE0_PROTECTION T10_PI_TYPE1_PROTECTION T10_PI_TYPE2_PROTECTION T10_PI_TYPE3_PROTECTION blist_flags_t scsi_device_state SDEV_CREATED SDEV_RUNNING SDEV_CANCEL SDEV_DEL SDEV_QUIESCE SDEV_OFFLINE SDEV_TRANSPORT_OFFLINE SDEV_BLOCK SDEV_CREATED_BLOCK scsi_vpd scsi_device same_target_siblings budget_map device_blocked restarts starved_entry max_queue_depth last_queue_full_depth last_queue_full_count last_queue_full_time queue_ramp_up_period last_queue_ramp_up scsi_level inq_periph_qual inquiry_mutex inquiry_len inquiry vpd_pg0 vpd_pg83 vpd_pg80 vpd_pg89 vpd_pgb0 vpd_pgb1 vpd_pgb2 sdev_target sdev_bflags eh_timeout manage_system_start_stop manage_runtime_start_stop manage_shutdown force_runtime_start_on_system_start lockable borken sdtr wdtr tagged_supported simple_tags was_reset expecting_cc_ua use_10_for_rw use_10_for_ms set_dbd_for_ms read_before_ms no_report_opcodes no_write_same use_16_for_rw skip_ms_page_8 skip_ms_page_3f skip_vpd_pages try_vpd_pages use_192_bytes_for_3f no_start_on_add allow_restart no_start_on_resume start_stop_pwr_cond no_uld_attach select_no_atn fix_capacity guess_capacity retry_hwerror last_sector_bug no_read_disc_info no_read_capacity_16 try_rc_10_first security_supported wce_default_on no_dif broken_fua lun_in_cdb unmap_limit_for_ws rpm_autosuspend ignore_media_change silence_suspend no_vpd_size queue_stopped offline_already disk_events_disable_depth supported_events max_device_blocked iorequest_cnt iodone_cnt ioerr_cnt iotmo_cnt sdev_gendev sdev_dev dma_drain_len dma_drain_buf sg_timeout sg_reserved_size bsg_dev access_state state_mutex sdev_state quiesced_by sdev_data Scsi_Host __devices __targets starved_list default_lock host_lock scan_mutex eh_abort_list eh_cmd_q ehandler eh_action host_wait hostt transportt tagset_refcnt tagset_freed host_blocked host_failed host_eh_scheduled host_no eh_deadline last_reset max_channel max_id max_lun max_cmd_len can_queue cmd_per_lun sg_prot_tablesize opt_sectors dma_boundary active_mode host_self_blocked reverse_ordering tmf_in_progress async_scan eh_noresume host_tagset short_inquiry no_scsi2_lun_in_cdb work_q_name work_q tmf_work_q max_host_blocked prot_capabilities prot_guard_type n_io_port dma_channel shost_state shost_gendev shost_dev shost_data scsi_target starget_sdev_user reap_ref single_lun pdt_1f_for_no_lun no_report_luns expecting_lun_change target_busy target_blocked max_target_blocked starget_data scsi_device_handler scsi_target_state STARGET_CREATED STARGET_RUNNING STARGET_REMOVE STARGET_CREATED_REMOVE STARGET_DEL scsi_data_buffer scsi_cmnd_submitter SUBMITTED_BY_BLOCK_LAYER SUBMITTED_BY_SCSI_ERROR_HANDLER SUBMITTED_BY_SCSI_RESET_IOCTL scsi_cmnd eh_entry abort_work eh_eflags budget_token jiffies_at_alloc prot_op prot_type prot_flags submitter cmd_len sc_data_direction cmnd sdb prot_sdb underflow transfersize resid_len sense_len sense_buffer extra_len host_scribble scsi_host_template queuecommand init_cmd_priv exit_cmd_priv eh_abort_handler eh_device_reset_handler eh_target_reset_handler eh_bus_reset_handler eh_host_reset_handler slave_alloc slave_configure slave_destroy target_alloc target_destroy scan_finished change_queue_depth mq_poll dma_need_drain bios_param show_info eh_timed_out eh_should_retry_cmd host_reset proc_name tag_alloc_policy track_queue_depth supported_mode emulated skip_settle_delay shost_groups sdev_groups rpm_autosuspend_delay scsi_host_state SHOST_CREATED SHOST_RUNNING SHOST_CANCEL SHOST_DEL SHOST_RECOVERY SHOST_CANCEL_RECOVERY SHOST_DEL_RECOVERY scsi_transport_template scsi_host_prot_capabilities SHOST_DIF_TYPE1_PROTECTION SHOST_DIF_TYPE2_PROTECTION SHOST_DIF_TYPE3_PROTECTION SHOST_DIX_TYPE0_PROTECTION SHOST_DIX_TYPE1_PROTECTION SHOST_DIX_TYPE2_PROTECTION SHOST_DIX_TYPE3_PROTECTION scsi_host_guard_type SHOST_DIX_GUARD_CRC SHOST_DIX_GUARD_IP zoned_disk_info zone_blocks scsi_disk disk_dev early_zone_info zone_info zones_optimal_open zones_optimal_nonseq zones_max_open zone_starting_lba_gran zones_wp_offset zones_wp_offset_lock rev_wp_offset rev_mutex zone_wp_offset_work zone_wp_update_buf openers min_xfer_blocks max_xfer_blocks opt_xfer_blocks max_ws_blocks max_unmap_blocks unmap_granularity unmap_alignment max_medium_access_timeouts medium_access_timed_out media_present write_prot protection_type provisioning_mode zeroing_mode nr_actuators ATO cache_override WCE RCD DPOFUA first_scan lbpme lbprz lbpu lbpws lbpws10 lbpvpd ws10 ws16 rc_basis urswrz ignore_medium_access_errors sdkp sd_dif_config_host sam_status SAM_STAT_GOOD SAM_STAT_CHECK_CONDITION SAM_STAT_CONDITION_MET SAM_STAT_BUSY SAM_STAT_INTERMEDIATE SAM_STAT_INTERMEDIATE_CONDITION_MET SAM_STAT_RESERVATION_CONFLICT SAM_STAT_COMMAND_TERMINATED SAM_STAT_TASK_SET_FULL SAM_STAT_ACA_ACTIVE SAM_STAT_TASK_ABORTED scsi_host_status DID_OK DID_NO_CONNECT DID_BUS_BUSY DID_TIME_OUT DID_BAD_TARGET DID_ABORT DID_PARITY DID_ERROR DID_RESET DID_BAD_INTR DID_PASSTHROUGH DID_SOFT_ERROR DID_IMM_RETRY DID_REQUEUE DID_TRANSPORT_DISRUPTED DID_TRANSPORT_FAILFAST DID_TRANSPORT_MARGINAL scsi_disposition NEEDS_RETRY SUCCESS FAILED QUEUED SOFT_ERROR ADD_TO_MLQUEUE TIMEOUT_ERROR SCSI_RETURN_NOT_HANDLED FAST_IO_FAIL scsi_mode_data block_descriptor_length medium_type device_specific longlba scsi_prot_operations SCSI_PROT_NORMAL SCSI_PROT_READ_INSERT SCSI_PROT_WRITE_STRIP SCSI_PROT_READ_STRIP SCSI_PROT_WRITE_INSERT SCSI_PROT_READ_PASS SCSI_PROT_WRITE_PASS scsi_prot_flags SCSI_PROT_TRANSFER_PI SCSI_PROT_GUARD_CHECK SCSI_PROT_REF_CHECK SCSI_PROT_REF_INCREMENT SCSI_PROT_IP_CHECKSUM scsi_driver gendrv init_command uninit_command eh_reset SD_EXT_CDB_SIZE SD_MEMPOOL_SIZE SD_DEF_XFER_BLOCKS SD_MAX_XFER_BLOCKS SD_MAX_WS10_BLOCKS SD_MAX_WS16_BLOCKS SD_LBP_FULL SD_LBP_UNMAP SD_LBP_WS16 SD_LBP_WS10 SD_LBP_ZERO SD_LBP_DISABLE SD_ZERO_WRITE SD_ZERO_WS SD_ZERO_WS16_UNMAP SD_ZERO_WS10_UNMAP sd_print_result sd_print_sense_hdr exit_sd init_sd sd_resume_runtime sd_resume_system sd_resume_common sd_resume sd_suspend_runtime sd_suspend_system sd_shutdown sd_start_stop_device scsi_disk_release sd_remove sd_probe sd_unlock_native_capacity read_capacity_10 read_capacity_16 SCpnt sd_done scmd sd_completed_bytes eh_disp sd_eh_action sd_eh_reset scsi_disk_free_disk sd_pr_clear sd_pr_preempt sd_pr_release sd_pr_reserve sd_pr_register sd_get_unique_id sd_rescan sd_sync_cache sd_check_events sd_ioctl sd_getgeo sd_release sd_open sd_uninit_command sd_init_command sd_config_write_same sd_setup_write_same10_cmnd sd_setup_write_same16_cmnd sd_config_discard spsp secp sd_sec_submit major_idx sd_major sd_default_probe max_retries_show max_retries_store zoned_cap_show max_write_same_blocks_store max_write_same_blocks_show max_medium_access_timeouts_store max_medium_access_timeouts_show zeroing_mode_store zeroing_mode_show provisioning_mode_store provisioning_mode_show thin_provisioning_show app_tag_own_show protection_mode_show protection_type_store protection_type_show FUA_show cache_type_show allow_restart_store allow_restart_show manage_shutdown_store manage_shutdown_show manage_runtime_start_stop_store manage_runtime_start_stop_show manage_system_start_stop_store manage_system_start_stop_show manage_start_stop_show cache_type_store zbc_zone_type ZBC_ZONE_TYPE_CONV ZBC_ZONE_TYPE_SEQWRITE_REQ ZBC_ZONE_TYPE_SEQWRITE_PREF ZBC_ZONE_TYPE_SEQ_OR_BEFORE_REQ ZBC_ZONE_TYPE_GAP zbc_zone_cond ZBC_ZONE_COND_NO_WP ZBC_ZONE_COND_EMPTY ZBC_ZONE_COND_IMP_OPEN ZBC_ZONE_COND_EXP_OPEN ZBC_ZONE_COND_CLOSED ZBC_ZONE_COND_READONLY ZBC_ZONE_COND_FULL ZBC_ZONE_COND_OFFLINE zbc_zone_alignment_method ZBC_CONSTANT_ZONE_LENGTH ZBC_CONSTANT_ZONE_START_OFFSET sd_zbc_read_zones sd_zbc_revalidate_zones sd_zbc_revalidate_zones_cb sd_zbc_free_zone_info sd_zbc_complete sd_zbc_setup_zone_mgmt_cmnd sd_zbc_prepare_zone_append sd_zbc_update_wp_offset_workfn sd_zbc_update_wp_offset_cb sd_zbc_cmnd_checks sd_zbc_report_zones sd_zbc_do_report_zones sd_zbc_parse_report    sd_mod.ko                                                                                                      	                                                                                                              #                      )                      ,                                                 !      %                  >     +      	       T     4             h     @      <                                       $                    
                   #            @       -            p       %                             p                  p      U                5      *   ,                7          9      R    P      +       [                 i    @             s                     	                0
                                                   @
      N          #                  
                 @      $           p                        $       '    P      $       B          -          #               T          -       k   #        0       t          .                 +           @                                                           %                 /           @      .           p      @           #                         R       0                 F                 b          \       u                                      0                                        /                 .                 ,       0           3       G            @      O   ,                 X   #        x       f   ,               s   #                   	         j           `      #                                 9                 A                              @      1                 :                 !                 
          `                   0              "                  .    $             N    `%            ^     '             v    '            ~    ,                .                2      3(                  N            [                                  ]                p_               ,                                       )                1    d             ;    d      M      P    e             a    f             s           
       z    pg      K           g                `i                 `j      S           j      u          @l      )           pl                %                   '                B    `      (       L                 V   # `             e    `      (       s   #                 #                  #                  #                   #                  # `                 # @                 #                2   #               K   #               d   # `              y   # @                 #                  #                  # `                 #               	   # @              	   #                0	                   E	                  Z	    &              o	    9              	    L              	    d              	    |              	                  	                  	                  
                  
                  ,
                 A
    #             V
    :             k
    Q             
    h             
                 
                 
                 
                 
          "                                             "                    (                    .                    5                    :                 @                 F    @n      *       a    pn             t     o                p                r                 `s      E          ,                     D                                                        
                                          /                     F                     V                     s                                                                                                            *                                                             s                                 
                     2
                     F
                     S
                     k
                     }
                     
   	         j       
                     
                
                     
                     
                     
                     
    }      v                            -                                          ?                     \                     s                                                                                                                     @                                                    }      )                           8                     ^                     Z                     i                     ~                                                                   x                                                                                                                      .                     <                     K                     Z                     b                     w                                                                                                                                                                                                                  '                     7                     A                     S    +      "       f                     q                                                                                                                                                                                                                                                             ,                     J                     X                     y                                                                                                                                                                                                                                       '                     :                     _                     s                                                                                        l                                                                                                                     '                     ;                     H                     Z                     f                     y                                                                                                             y      C          0w                                 /    +             ?                     W                     e                     l                     |                                                                                                                                                                                                                   __UNIQUE_ID_depends193 ____versions __UNIQUE_ID_retpoline192 __UNIQUE_ID_intree191 __UNIQUE_ID_name190 __UNIQUE_ID_vermagic189 _note_10 _note_9 sd_default_probe sd_eh_reset sd_unlock_native_capacity sd_eh_action sd_completed_bytes sd_config_discard sd_config_write_same sd_setup_write_same16_cmnd sd_page_pool sd_setup_write_same10_cmnd sd_major sd_sec_submit sd_resume scsi_disk_free_disk sd_get_unique_id sd_getgeo sd_ioctl sd_release scsi_disk_release sd_index_ida max_retries_store max_retries_show zoned_cap_show max_medium_access_timeouts_show max_write_same_blocks_show zeroing_mode_show provisioning_mode_show lbp_mode thin_provisioning_show app_tag_own_show protection_mode_show cap.24 cap.30 protection_type_show allow_restart_show FUA_show cache_type_show sd_cache_types max_medium_access_timeouts_store protection_type_store max_write_same_blocks_store zeroing_mode_store manage_shutdown_store manage_runtime_start_stop_store manage_system_start_stop_store allow_restart_store manage_shutdown_show manage_runtime_start_stop_show manage_system_start_stop_show manage_start_stop_show init_sd __key.22 sd_disk_class sd_cdb_cache sd_template exit_sd sd_uninit_command sd_pr_command.isra.0 sd_pr_register sd_pr_reserve CSWTCH.224 sd_pr_release sd_pr_preempt sd_pr_clear sd_init_command ops.25 flag_mask.26 __func__.23 read_capacity_error.constprop.0 sd_check_events provisioning_mode_store sd_done read_capacity_10 read_capacity_16 sd_revalidate_disk.isra.0 sd_revalidate_disk.isra.0.cold cache_type_store temp.31 sd_open sd_probe sd_bio_compl_lkclass sd_fops __already_done.1 sd_rescan sd_start_stop_device sd_resume_common sd_resume_runtime cmd.27 sd_resume_system sd_sync_cache sd_shutdown sd_remove sd_suspend_common.isra.0 sd_suspend_system sd_suspend_runtime __UNIQUE_ID___addressable_cleanup_module376 __UNIQUE_ID___addressable_init_module375 sd_pr_ops sd_pm_ops sd_disk_groups sd_disk_group sd_disk_attrs dev_attr_cache_type dev_attr_FUA dev_attr_allow_restart dev_attr_manage_start_stop dev_attr_manage_system_start_stop dev_attr_manage_runtime_start_stop dev_attr_manage_shutdown dev_attr_protection_type dev_attr_protection_mode dev_attr_app_tag_own dev_attr_thin_provisioning dev_attr_provisioning_mode dev_attr_zeroing_mode dev_attr_max_write_same_blocks dev_attr_max_medium_access_timeouts dev_attr_zoned_cap dev_attr_max_retries __UNIQUE_ID_alias332 __UNIQUE_ID_alias331 __UNIQUE_ID_alias330 __UNIQUE_ID_alias329 __UNIQUE_ID_alias328 __UNIQUE_ID_alias327 __UNIQUE_ID_alias326 __UNIQUE_ID_alias325 __UNIQUE_ID_alias324 __UNIQUE_ID_alias323 __UNIQUE_ID_alias322 __UNIQUE_ID_alias321 __UNIQUE_ID_alias320 __UNIQUE_ID_alias319 __UNIQUE_ID_alias318 __UNIQUE_ID_alias317 __UNIQUE_ID_alias316 __UNIQUE_ID_alias315 __UNIQUE_ID_alias314 __UNIQUE_ID_alias313 __UNIQUE_ID_license312 __UNIQUE_ID_description311 __UNIQUE_ID_author310 .LC28 .LC40 .LC58 .LC114 .LC2 cap.1 cap.0 sd_zbc_revalidate_zones_cb sd_zbc_cmnd_checks sd_zbc_do_report_zones sd_zbc_parse_report sd_zbc_update_wp_offset_workfn sd_zbc_update_wp_offset_cb __key.0 .LC4 set_capacity_and_notify set_disk_ro scsi_print_sense_hdr ida_alloc_range blk_integrity_register scsi_mode_sense blk_queue_logical_block_size __rcu_read_lock scsi_autopm_put_device scsi_device_get dev_set_name memmove __this_module device_add_disk queue_work_on sd_zbc_report_zones device_unregister pm_runtime_set_autosuspend_delay blk_pm_runtime_init system_state scsi_get_sense_info_fld scsi_get_vpd_page device_initialize cleanup_module t10_pi_type1_crc sd_zbc_read_zones kstrtouint kfree blk_queue_write_cache scsicam_bios_param sd_zbc_free_zone_info blk_mq_alloc_disk_for_queue kmem_cache_create scsi_command_normalize_sense _raw_spin_lock_irqsave mempool_free scsi_hostbyte_string blk_queue_required_elevator_features __fentry__ sysfs_emit init_module scsi_device_set_state scsi_test_unit_ready sd_zbc_revalidate_zones __x86_indirect_thunk_rax scsi_block_when_processing_errors mempool_create scsi_register_driver __blk_req_zone_write_unlock put_disk scsi_ioctl sd_zbc_setup_zone_mgmt_cmnd __stack_chk_fail blk_queue_physical_block_size blk_queue_max_zone_append_sectors blk_queue_flag_set mempool_alloc disk_set_zoned clear_page_rep capable blk_queue_flag_clear page_offset_base kvmalloc_node scsi_device_put t10_pi_type3_crc unregister_blkdev t10_pi_type3_ip __class_register blk_revalidate_disk_zones bdev_check_media_change device_add string_get_size kstrtoint __rcu_read_unlock sd_print_sense_hdr mutex_lock sdev_prefix_printk clear_page_orig mempool_free_pages strncmp scsi_report_opcode ida_free driver_unregister clear_page_erms __scsi_execute scsi_logging_level class_unregister del_gendisk blk_queue_max_discard_sectors kmalloc_large blk_queue_zone_write_granularity opal_unlock_from_suspend __mutex_init current_task _raw_spin_unlock_irqrestore device_del kstrtobool __sysfs_match_string sed_ioctl memset __x86_indirect_thunk_r10 kstrtoull __x86_return_thunk disk_alloc_independent_access_ranges scsi_alloc_sgtables scsi_autopm_get_device init_opal_dev jiffies scsi_print_command sd_dif_config_host free_opal_dev sprintf vmemmap_base blk_queue_alignment_offset blk_queue_max_write_zeroes_sectors __pm_runtime_resume mutex_unlock __register_blkdev scmd_printk scsi_free_sgtables disk_set_independent_access_ranges scsi_mode_select mempool_destroy __warn_printk blk_queue_io_min sd_zbc_complete sd_zbc_prepare_zone_append scsi_ioctl_block_when_processing_errors sd_print_result blkdev_compat_ptr_ioctl kmalloc_trace kvfree t10_pi_type1_ip __x86_indirect_thunk_r8 msleep blk_queue_rq_timeout __kmalloc blk_req_zone_write_trylock kmalloc_caches kmem_cache_destroy system_wq mempool_alloc_pages scsi_set_medium_removal                                          /            A             c             i            q                         5           A           \                    m                    r         +  z                                 )                                     e            q                     
           
  !         
  :         
  j         
  q                     '  ^         '           '                          0            D         %  V            [                                             W            p                     %                                    E           Q            h           u                                	  )           .            A            i                   p            $       u                                                                $                              '                   $                                         '                   $                                          	            (	            	            	
           
            "
           1
            
         :  
           
            
                        	         
  H            c         4                         J           h            ;       r            X       w                       ;                   X                                       
                                   C  
            [       
            X       
           
            [       +
            X       0
           A
            W
         	         \
           d
            t
            
         #  
            
            
                                    0                           "           0            A            N            g       Y         $  `           q                                                        !            .            k       9         $  @           Q            ^            k       i         $  p                                   o                	                  $                                     o                	                   $                                     k                 $  
                                   k       -         $  7           A            i                   t                               w                                      s                   {                $                                                k                $                                     k       1         $  ;           A            N            k       `         $  j           q            ~            o                	                  $                                                                        D            Z                                                                      R                                                        	                                           "            3           t                                                                     *            1            b            s                                                          $           f           }                                    k                                                      k                                                      k                              !            0            k       H            O           a            o           z                                    4         	  d           {                               X                                                                             !                    -           A            T                                                                            ~            4                                                   
              7                   A                    F         +  V         ,  p                   ~                               $                  X                +                                    %                           ?          %  U                                                                            +                                                     +  #!            `       !            0       "         3  "            0       #                   #            
      #            X       #         +  #         
  #            b$                   l$                    q$         +  $            $            ?      $            $       $           $           $            ?      $            $       $           %           %            a%            %         
  %            &           V&            &            U      &            X       &           &            U      &            X       &           &            '            '            ^'         	          c'           '           '         
  '           '            (         
  (           9)                   @)            X       E)           Q)         !  )         2  )         
  )            X      )            X       )         +  )            p*                   y*            X       ~*           +         
  +            +            +            +            +            ,            f      ,                  ,            X       ,           %,           *,            f      4,                  =,            X       B,           L,           h,            f      v,                  },            X       ,           ,           ,            f      ,                  ,            X       ,           ,            -         	  &.           .            p      .         5  .            .            M/            
0         	  0           1         &  1                  1            $       1           <2                  D2         5  {2                  2                    2           2                  2            $       2           2                  2                    2           2            2            (3         
  s3           z3         ?  D       3         7  4         	  4            ;5         1  5            X      5                  5           w6            6            6            6            7            p      7            $       7           8         ;  $8            o8            <9                  C9            X       H9           w9            0      ~9            $       9           9            9            9            9            {:            :            :            $       :                  :            ;                  ;            $       ;           6;            ~;            ;            8      ;                  ;           q<            <            `      <            X       <           <                  <                  <           =                  $=         5  ^=                  e=            X       j=           =            &      =            $       =           =            X>         	  _>            x>         ;  >            :      >            >         1  >            ~?            ?            ?            ?            ?         -  ?            /@            [@            @                  @                  @                  @            $       @           @                  @                  @           A                  A                  A           ;A                  EA                  JA           uA                  A            X       A           A                  A            $       A           =B                  DB            $       IB           B            [      B                    B           B            X      B                  B           C            C            y      C                    C           "D           @D           cD           D           D         "  D                   E                  E            $       E           :E                  AE            $       FE           E            0      E            $       E           !F            vF            `      }F                    F           F            G         =  'H         	  3H            IH            H            H            CI            I                  I            $       I           pJ            C      wJ            $       |J           J                  J                  J                  J            $       J           J                  J                  J           J                  J                  J           #K                  *K                  /K           ^K            K            L                   !L                  &L           uL            l      |L            $       L           L                  L            $       L           L            `      L                  L            X       L           L                  L            $       M           .M                  5M                  :M           MM            (       hM            >      oM            $       tM           M            M            M            N           0N            N           O                  O                    !O           2O         -  FO         -  xO                  O            $       O           O                  O                    O           O         -  O                  O                  O           O                  O            X       P           P           9P                  BP            $       GP           P            0      P            $       P           P                  P                  P           P                  P            $       P           P            l      Q            $       Q           Q            [      Q                    "Q           QQ                  XQ                  fQ                  qQ            $       vQ           Q            Q                  Q            $       Q           Q            0      Q            $       Q           Q            X      Q                  Q           R            >      R            $       R           $R                  -R            X       2R           sR                  zR            $       R           R                   R                  R           R            R                  R            $       R           S                  S                  S           3S            BS           TS            aS            S                  S                    S           'T                  .T            $       3T           PT            8      YT                  ^T           rT            p      {T            $       T           T                  T                  T           T                  T            $       T           U                  U            $       U           &U            `      KU            X      RU            $       WU           fU                  oU                  tU           U                  U                  U                  U                  U            $       U           U            X      U                  U           V                  V            $       $V           V            4      V            $       V           [W                  bW                  iW                  wW                  W                  W            $       W           W         
   X                  	X            $       X           X                  #X                    (X           <X            X      EX            $       JX           VX            y      _X                    dX           X                  X            $       X           X                  X            $       X           X                  X                  X           7Y                  >Y            $       IY           Y                  Y                  Y                  Y                  Y            $       Y                  Y           Y                  Y            0Z            @      AZ                  PZ           WZ            4      `Z            $       eZ           wZ            C      Z            $       Z           Z            &      Z            $       Z           Z            @      Z                  Z            $       Z           [            
[            (       [            ![            [                   [           [         	         [           .\            \         .  \           X]            ]            ]            ]            ]            ]         
  ]            ^            ^           ^            ^         C  ^            5_                  <_            X       A_           M_                  V_            X       [_           q_            _           _         
  _         ?  L       _         7  _                    _            `         	         `            j`                  s`                  ~`           `         	         `           `            `            `            `           `            Na         <  Za            ba            qa         	          a                  a            a            a                   a            _b            vb            b                  b                  b                  b            $       b           b                  c                  c           3c            @c            Pc                  Yc            X       ^c           jc                  rc           c                  c            $       c           c         <  c                  c                  c                  c            $       c           c            d            d         
   $d            0      +d            X      6d         
   <d         0  Od                  Xd            $       ]d           d            d            ?e         	  le           ue                  }e         5  e            e            e            )f           Sf                   ]f            $       bf           f                   f            $       f           f            f                   g         	  3g                  :g            $       ?g           Jg           Qg                  Zg            $       _g           qg            g           g         (  g            ph         	  h            (      h         5  h           ,i            Zi            ai            i            E      i            $       i           i            i            _      j            $       	j           'j           .j            _      7j            $       <j           Ej            E      Nj            $       Sj           aj            rj           {j           j           j            j           j            &k            E      -k            $       2k           k            _      k            $       k           k           l            _      l            $       l           l            E      "l            $       'l           1l            Al            el           ql            l            l                  l                  7m         9          Cm                    m                  m            1      m           m            m           m                  m            1      m           n            n                    n                    9n            An            fn           qn            n           n           n           o            o         	  o           o             	      o            4      o           p            7      p         5  Pp            (	      Wp            4      \p           hp             	      qp            4      vp           p            (	      p            4      p           p            p            p            q           q           Br            P	      Ir            4      Vr           fr            P	      rr            4      yr           r            r            r            r           	s            !s            `s      Ds           Zs            as            s           s           s            t           t            u            	      u            4      u           u         8  \v            	      fv            4      kv           v            	      v            4      v           v            	      v            4      v           1w            w           w         >  w            Zx           ix            x         A  x            x           x            x           x            y           y            z           z            z           z            {           }            /}            ;}         8  R}            }}         )  }           }            }           ~                   "~            Z      <~           e~         ?  D       w~            r      ~         7  ~            ~                   ~                        @n                  >         8                       )               
                  k                 j            0
      q            k      x                       0
                  k                              
                  k                                                  8  1            Z         )  i                       q                   x            n      }                       0      ɂ            4      ΂                      W            
      ^            4      c                       ă            .            
      5            4      :           q            
      z            4                                                n                             P
                  k      Ǆ                       
                  k                              P
                  k                 &            
      /            4      4           V            0      _            4      d                       q                  k                             
                  k                             q                  k                                                                                                         	          
               X                    #             L      *                     1                    8          *  Y                     `          	          e                                                                               x                                                  B                                                                               	                                               /                     	         @           	                                  L      '                   .            <                     
  
                                           	                        '             ,          /  3                    8          @  ?          	          D            M             L      T                    [             f            /             W      4             9             X4      @             N      E             J             X4                    Z                                        Z                                                          
       $                   (                    0                    4                    <                    @                                 ]                                                       6                       `%                   @                   0
                        (                    8            	      @                    H            `      `                  h                  p            @      x                                                @l                  pg                  @l                  pg      @            pl      H            f      x         	                                                                @                    p                           (             p      0             p      8                   @                   H             P      P                   X             @      `                   h             	      p             0
      x                                                    @
                   
                   @                   p                                       P                                                                                               @                                                         @                   p                                                                                                  (                  0            0      8                  @                  H                  P                  X                   `                    h            `      p                  x                                                @                                                                        $                  `%                   '                  '                  +                  +                  ,                  .                  2                   [                  ]                   p_                  d                  d                  e                   f      (            pg      0            g      8            `i      @            `j      H            j      P            @l      X            pl      `            l      h            @n      p            pn      x             o                  p                  r                  `s                  s                  0w                  x                  y                  }                  }                                                         ^                    b                    
                   q                                        .                    h                                        4                   @                                                           D      $             g      (             t      ,             (      0                   4                   8             
      <             !
      @             
      D             I      H             
      L             _      P                   T                   X                   \                   `             ?      d             o      h                   l                   p             	      t             6      x                   |                                                    :                   i                                                                            Q                                      s                                                         e                                                                            N                   n                   c                                      ,                                      $                   %                   &                   '                   '                   (                   $,                   K,                   ,                   %.                   0                   r3                  \                  ^                  `                  ke                  (f                  Ig                  g                   h      $            &j      (            j      ,            k      0            dl      4            ;      8            e       <            m      @            en      D            n      H            n      L            n      P            o      T            q      X            s      \            s      `            
t      d            w      h            y      l            z      p            }      t            }      x            h      |                                                     
                                        3                    @                    g                    h                    m                     p       $             v       (             y       ,                    0                    4                    8             3      <             4      @             9      D             ?      H             @      L             E      P                   T                   X                   \                   `                   d                   h                   l                   p                   t             i      x             p      |             n                   p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   *                   +                   ,                                                                           	                                    
                                    6                  <                  >                   @      $            B      (            D      ,            I      0            P      4            {      8                  <                  @                  D                  H                  L                  P                  T                  X                  \            (      `            -      d            2      h            @      l            F      p                  t                  x                  |                                                	                  	                  	                  	                  	                  	                  
                  
                  
                  
                  
                  
                  
                  
                  !
                  &
                  .
                  0
                  6
                  B
                  
                  
                  
                  
                                                                                                                               !                                                                                                                                                                          $                  (                  ,                  0                  4                  8            @      <            A      @            C      D            E      H            G      L            I      P            N      T                  X                  \                  `                  d                  h                  l            6
      p            @
      t            F
      x            K
      |            
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                                    4                  @                  d                  p                                                       D                  P                  t                                                                                                                                                ;                  @                                                                                           ?                  @                  n                  p                                                             $                  (                  ,                  0                  4                  8                  <                  @                  D            $      H            +      L                  P                  T                  X                  \                  `                  d                  h                  l                  p                  t                  x                  |            K                  L                  M                  O                  Q                  V                                                                                                                                                                                                                                                                                                o                  p                  q                  s                  x                                                                                                                                                                                                                         .                  0                  7                  ;                   <      $            C      (                  ,                  0                  4                  8                  <                  @                  D                  H                  L                  P                  T            a      X            b      \            c      `            e      d            j      h                  l                  p                  t                  x                  |                                                                   S                  `                                                                                                                                                                  #                  (                  )                  <                  a                  b                  c                  h                                                                                          1                  @                  q                                                                                                                                                                                                                                           p                   t      $            u      (            w      ,            y      0            {      4            }      8                  <                  @                  D                  H                  L                  P                  T                  X            $      \            Y      `            ]      d            ^      h            `      l            b      p            d      t            f      x            k      |                                                                                                                                                                                                                                                                                                                    $                  $                  $                  $                  $                  $                  $                  $                  $                  %                  %                  %                  %                  _%                  `%                  f%                  g%                   k%                  &                  &                  &                  	&                  &                   '                  '                   	'      $            
'      (            '      ,            z'      0            {'      4            }'      8            '      <            '      @            '      D            '      H            '      L            '      P            '      T            '      X            '      \            '      `            '      d            '      h            '      l            '      p            '      t            (      x            (      |            (                  (                  (                  (                  (                  (                  (                  +                  +                  +                  +                  +                  +                  ,                   ,                  !,                  ",                  $,                  ),                  .,                  G,                  H,                  I,                  K,                  P,                  l,                  ,                  ,                  ,                  ,                  ,                  ,                  ,                   ,                  ,                  ,                  ,                  ,                  ,                  ,                  ,                   ,      $            -      (            -      ,            -      0            -      4            -      8            -      <            -      @            .      D            .      H            .      L            .      P            !.      T            #.      X            %.      \            *.      `            .      d            .      h            .      l            .      p            .      t            .      x            .      |            .                  .                  /                  /                  /                  /                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  2                  2                  2                  2                  2                  2                  2                  2                  2                  h3                  i3                  j3                  l3                  n3                  p3                  r3                   w3                  3                  3                  3                  3                  3                  3                  4                   6      $            6      (            6      ,            6      0            6      4            6      8            6      <            6      @            :      D            :      H            :      L            :      P            ^;      T            p;      X            q;      \            ;      `            8>      d            :>      h            <>      l            D>      p            I>      t            O>      x            r>      |            @                  @                  @                  7@                  nC                  tC                  |C                  C                  F                  F                  F                  )F                  F                  F                  F                  G                  H                  
H                  H                  H                  H                  H                  2H                  K                  K                  K                  K                  K                  K                  K                  K                  L                  L       	            L      	            L      	            W      	            W      	            Y      	            Y      	            >Z      	            FZ       	            GZ      $	            IZ      (	            KZ      ,	            MZ      0	            OZ      4	            TZ      8	            [      <	             [      @	            '[      D	            ,[      H	            .[      L	            0[      P	            9[      T	            =[      X	            A[      \	            \      `	            &\      d	            -\      h	            6\      l	            \      p	            \      t	            \      x	            \      |	            \      	            \      	            \      	            \      	            \      	            \      	            \      	            \      	            ]      	            ]      	            ]      	            ]      	            ]      	            ]      	            ]      	            
^      	            ^      	            ^      	            ^      	            ^      	            ^      	            n_      	            p_      	            w_      	            _      	            _      	            _      	            _      	            _      	            _      	            `      	            `      	            `       
            `      
            `      
            `      
            `      
            `      
            qd      
            d      
            d       
            d      $
            d      (
            d      ,
            d      0
            d      4
            e      8
            e      <
            &e      @
            -e      D
            2e      H
            9e      L
            Ie      P
            ge      T
            he      X
            ie      \
            ke      `
            pe      d
            e      h
            e      l
            e      p
            e      t
            'f      x
            (f      |
            -f      
            f      
            f      
            f      
            f      
            f      
            f      
            f      
            f      
            f      
             g      
            g      
            
g      
            g      
            g      
            Hg      
            Ig      
            Ng      
            hg      
            pg      
            g      
            g      
            g      
            g      
            g      
            g      
            g      
            g      
            g      
            Xh      
            ]h      
            _h      
            gh                   ih                  jh                  zh                  h                  h                  h                  h                  h                   h      $            h      (            i      ,            ^i      0            `i      4            fi      8            j      <            j      @            &j      D            +j      H            \j      L            `j      P            fj      T            jj      X            j      \            j      `            j      d            j      h            j      l            j      p            j      t            j      x            k      |            k                  k                  k                  5l                  @l                  il                  pl                  l                                                                            :                  ;                  @                                                         e                   j                                       N                   l                  l                  l                  m                  m                  m                  =n                  @n                  jn                  pn                  n                   o                  o                   o                  o                  o                  o                  so                  ~o                  o                  o                   o      $            o      (            o      ,            o      0            o      4            o      8            o      <            o      @            o      D            p      H            p      L            p      P            p      T            p      X            p      \            p      `            p      d            q      h            q      l            q      p            q      t            q      x            q      |            q                  Or                  Ur                  [r                  \r                  or                  xr                  ~r                  r                  r                  r                  r                  r                  r                  r                  r                  r                  Ps                  Qs                  Ss                  Us                  Ws                  Ys                  ^s                  `s                  s                  s                  s                  s                  s                  s                  s                  s       
            s      
            t      
            t      
            t      
            t      
            	t      
            t      
            
t       
            t      $
            Kv      (
            Vv      ,
            pv      0
            qv      4
            v      8
            v      <
            v      @
            v      D
            /w      H
            0w      L
            7w      P
            9w      T
            ;w      X
            =w      \
            >w      `
            ?w      d
            Fw      h
            w      l
            w      p
            w      t
            w      x
            w      |
            w      
            w      
            w      
            x      
            x      
            y      
            y      
            
y      
            y      
            y      
            y      
            y      
            y      
            y      
            y      
            y      
            y      
            y      
            y      
            y      
            y      
            y      
            z      
            z      
            z      
            z      
            z      
            z      
            z      
             z      
            }      
            }      
             }                   (}                  {}                  |}                  }                  }                  }                  }                  }                   }      $            }      (            }      ,            }      0            }      4            }      8            }      <            }      @            }      D            }      H            }      L            }      P                  T                  X            ǀ      \            ɀ      `            ˀ      d            ̀      h            Ѐ      l            _      p            b      t            d      x            f      |            h                  m                                                                                                                              Å                    y                                        k                                        z$                           $             @d      (                     0             !r      4                                                               8             p_      H             `j      P             `i      x                                @                   d                                      `                   '                   p                                        n                                     	   `                   @
      `            `               	                  	                  	                   	                  	   `               	   @               	                   	                  	                  	   `               	   @               	                  	                  	   `               	                  	   @                	                       x      0            @      8            
      @                  P            p      `                  p            P      x                                                                                                                                                                                                                                                        '                                                                         ,                   9      (                  @            H      P                  `            Z      p                              f                  @                  v                                                                        @                                    p                   [                                                                                0                  8                  @                  P                  X                  `                  p                  x            0                                                                                                                                                               8                    P                     .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.altinstr_replacement .rela.init.text .rela.exit.text .rela.text.unlikely .rela.altinstructions .rela.rodata .rela__mcount_loc .rodata.str1.8 .rodata.str1.1 .rela.smp_locks .modinfo .rodata.cst2 .rela.retpoline_sites .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela__bug_table .rela.data .rela.exit.data .rela.init.data .data.once .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF .gnu_debuglink                                                                                             @       $                              .                     d       <                              ?                            Å                             :      @               k     (h      1                    J                     c                                    E      @               8            1                    e                           @                             `      @                    0      1                    u                           j                              p      @                    h      1   	                                      +      N                                    @               `            1                                               H                                    @                           1   
                                                                                @                    @      1                                         p                                         @               P     p      1                          2               @      W                                  2                                                                                                                 @                    0       1                                         (      |                                                                                                                                             
     @                    H       1                    (                                                       #     @               8      	      1                    6                    8                                   G                    (                                   B     @               8     W      1                    V                          !                              f                    `      <                              a     @               E            1   !                 w                                                        r     @               F           1   #                                     p                                    }     @               O            1   %                                     x                                         @               O            1   '                                                                                                                 @                    @               O     0       1   *                                     @                                         0               @                                                                                                                        B                                                  l6                                                         6     `      2                    	                      T     -                                                   P                                  0	*H
01
0	`He0	*H
1a0]080 10UDebian Secure Boot CA2(oe:B&C0	`He0
	*H
  @mMGYB}zB<'{q)SǼ[yaI6B3ʤXnOp\4
#:6ceg
I 0R&F17G{ž/߽gfҨN%iWgE։nɖA\1i+q
s@`	wda%*h{Q-gBA/H(96&-x6!\d$ v$޿V~C         ~Module signature appended~
 070701000BFFF0000081A4000000000000000000000001682F6DA700009A7B000000CA0000000200000000000000000000003A00000000usr/lib/modules/6.1.0-37-amd64/kernel/drivers/scsi/ses.ko ELF          >                    x          @     @ % $          GNU -</Wt]5        Linux                Linux   6.1.0-37-amd64      1    @     
HHuH    1H        1        D      USHo@H(Ht@@t\1H    HHt{H(H     H}    H}     H}    H      uKH{    H[]    1HH    t3HHHHP      HHu[]    H      H{[]    fD      HHH    H H HPH    ff.            uG <ވGW    ff.          AWA   AVAUAATIUHSHeH%(   HD$1    @t$Lt$D$ fD$
HD$    ffD$
j E1AHj    Lj jhL  AVHt$:    H0~LAt#T$ppuT$tu|$)tHT$eH+%(   uAH[]A\A]A^A_    uDM E9tEH    1LH            ff.           ~USH  LH1HL9tH  9u1[    HS    t   [    H{       1    D      AUATU   SL/HXIUAM$H  MeHZ:xTAE"f~JI<1AT$t0A4$@@@!H4Hu	P9tH9uIL9u1H[]A\A]    f    HSHHx t"  BHt   [    ǆ      [    ff.         HSHHx t&  Ht@   [    ǆ       [            HSHHx t%  Ht@  [    ǆ      [             HSHHx t)  RHt@  [    ǆ      [    @     AVAUIATA1USH L7eH%(   HD$HGXAV$I^HcHHIFHHH    11fA~" H~J1{ t2HtuD9uAU ʀS9|AF"H9|Ef$D$    Ll$
    MvD$ HD$
    DffT$fD$j E1ELj    Hj jhL  AUHt$B    H0~Mt#T$
ppuT$tu|$)tAH    1HH    D$    D$uHT$eH+%(   uH []A\A]A^        ff.          ATUSHeH%(   HD$1HD$    Hx t4H  AH=HHteHH|$XEtIAt"HT$eH+%(   u?H[]A\    D$   HT$H߈D$D$ݸ    @     ATUSHeH%(   HD$1HD$    Hx t4H  AH}HHtrHH|$EtTAt"HT$eH+%(   uLH[]A\    D$   Ȁ    HT$HD$D$1҃ո            ATUSHeH%(   HD$1HD$    Hx t4H  AHHHteHH|$EtIAt"HT$eH+%(   u?H[]A\    D$  HT$H߈D$,D$ݸ    @     ATUSHeH%(   HD$1HD$    Hx t4H  AHHHtlHH|$EtPAt"HT$eH+%(   uFH[]A\    D$D    HT$HD$eD$ָ    ff.     f    AWAVAUATUSH
  H8L7H|$H=    $    Ef"    D$HHD$(tMIVHtAN&
   HD$gD$L|$(       HD$LED$  1HD$E11    D$E11InHtHfA~&	  MnfE  EMcHT$01KD N<
L\$HD$ LEIE1A} u  CHfDHI9rq  AU tyttHtIcHHt+AU     w 0H   AEAD9  Ht
HCL9tAU 1ۀt	  E&  A9  vDNHi  I3  H {  H  E AV&INxKHH)H)ƃ  <  @   \  UHEH@Hȉ  HEz  H  AU IcIcHÀEHlIF&IFHUH9¸    HCAEAD9HD$ II9FHT$0H    H|$(H8[]A\A]A^A_    DNLHLD$DT$DL$L$    L$DL$H= DT$LD$H>  HLD$DT$L\$D$    IcD$L\$HHDT$LD$HEIcHIcIcHHHEEuxH   IcIc1H1@t~U1tLD$DT$L\$D$    HD$L\$DT$LD$[Ic1@LD$DT$L\$D$    HD$L\$DT$LD$]Ic1-<HEIcAG
  DT$f$fDxHc    DT$HHD   HH$H$DT$DB
fAEAXHcH1    SHHHwXeH%(   HD$1H$    HD$    u7H8  Hxh    uPH$Hu*HD$eH+%(   uEH[    H  1Hø  HH    H\$    H    H$         AWAVAUATUSHLg@H|$I$(M$HHt
@@  A$
tH    1LH        H=    (   
          
  H=    H    HH  H      H¾   Ly   A   E1H    1LH        AH$    L    H<$    H{    H{    H;    H    H    E1LH    H        HD[]A\A]A^A_    EU
  D$HHHD$    IH  $H¾   LAƅ@  Ht$EGIGLAH9  11	H9  xxHD8A9HCfK"  H9  HcE1HHH9t"H9stuPHAH9u$L;    H   LDT$fC DT$uEU
  DT$DHc$    IH  $H¾   LA   $L{    H
   LfC$RDT$  H$    E<  It$PHuI4$HD$DDT$H    Hx@    DT$H= I  HDT$    LcT$IE~"H$I  JHHH  H9u   LLI$H1    HHH    u$H   Ht@@u1LH4$H4$I$H    HHuZA   HCfK"$L;    H   LfC ADH$    E1Ic
  DT$H    DT$HH$1AE1H$zEU
  DHc$    IHtŋ$H¾
   Lu0$DT$L{fC&#AE1HC1fC"A
   1   LHOI$HHHP      HHuAA    SH        ÅuH        ÅtH        [    H        H                                                                                                                                                                                Attached Enclosure device
 5 %#llx
 3 SEND DIAGNOSTIC result: %8x
 Embedded Enclosure Device
 Failed to bind enclosure %d
 ses    Wrong diagnostic page; asked for %d got %u
     Failed to get diagnostic page 0x%x
 license=GPL v2 description=SCSI Enclosure Services (ses) driver author=James Bottomley alias=scsi:t-0x0d* depends=scsi_mod,enclosure,scsi_transport_sas retpoline=Y intree=Y name=ses vermagic=6.1.0-37-amd64 SMP preempt mod_unload modversions                                                                                                                                                                                                       (    0  8  P  X  `  h  p  x    P  8  0  (                     P                                                         (                                                                                                                                                (  0  P  X  `  h  p  x    P  0  (                   P                     0               0                     0               0                     0               0                     0               0                         (    0  8  p  8  0  (                     p          (            (                           (    0  8  P  8  0  (                     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      m    __fentry__                                              9[    __x86_return_thunk                                      V    scsi_register_interface                                 ן
    scsi_register_driver                                    1H
    class_interface_unregister                              0    sdev_prefix_printk                                      ɺm    enclosure_find                                          z    kfree                                                   M    put_device                                              l    enclosure_unregister                                    1    enclosure_remove_device                                 ?<    sprintf                                                 abg    __scsi_execute                                          V
    __stack_chk_fail                                        7    enclosure_add_device                                    4    kobject_uevent                                          V    driver_unregister                                       ŏW    memset                                                  -    kmalloc_caches                                          wX    kmalloc_trace                                               enclosure_component_alloc                               Ag    enclosure_component_register                            E:#    __kmalloc                                               (    scsi_is_sas_rphy                                        H    enclosure_for_each_device                               fx    sas_get_address                                         rP    enclosure_register                                          __scsi_iterate_devices                                  zR    module_layout                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ses                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      GCC: (Debian 12.2.0-14+deb12u1) 12.2.0  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0                      
9             X              
Y A=      Z=    u=    =    =    =    >    /> 	     @>     ]>    q>    >    >    >    >     ?    ?    2?      N?     i?    ?    ?    ?    ?    @   X   am d     Q f @   %@ d    /@ h    9@ d    D@ h @  O@ d   Z@ h    d    e@ j @  v@ l         
        `     b        a ~@     A k       5'  `   @   @      eg  m    J    @   n          c @     A k           @   :"      c  [   z	      0        
E        @    @      `    \   @             _       
       `     b     \        e       
       `     b     ]        g       
       `     b               i       
       `     ?          k        ^            c        @ 
     @     @    @     A    A    $A    8A    JA    \A    nA           
c A    !   A 	     A    A    A    A    A    A    A    B    B 	   !B      &  g       4&               *B |  0  ,  w     U    @    `      6B `      KB E    VB ]     eB ]     b  *    nB `      V       |B      B      B      B      B       B    @  x        $      _ -            I       p
 k   @  c       B 
      C 
     C G    C      *C c     b    @  x      Z       2C x    :C x @  CC x   LC x   UC x  	  ^C x @	  gC x 	  pC z 	  |C q  
  C    @
  C    `
 C    a
 C    b
 C    c
      d
 *     e
     f
 C    g
 m     h
 D    i
 -     j
     k
 
D    l
 D    m
     n
 D    o
 %D    p
 1D    q
 ;D    r
 KD    s
 YD    t
 gD    u
 vD    v
 D    w
 D    x
 D    y
 D    z
 D    {
 D    |
 D    }
 D    ~
 E    
 E    
 "E    
 5E    
 IE    
 WE    
 eE    
 rE    
 E    
 E    
 E    
 E    
 E    
 E    
      
 E    
 E    
 E    
 	F    
 F    
 'F    
 7F    
 KF    
 [F    
 gF    
  uF K   
  F ]   
  F      T   @  i3  `     
 Q     F     
  F ]    
  F ]   @
  F ]   `
  F ]   
  F   
  F    %  i X @<  nW  Q  @=  F | @>   k   >  G Q   >  G k    ?  !G    @?  ,G    `?  =G 9 ?  EG    ?  RG G   @  ^G r  A  iG    @A  uG   A         
t G B  0  G `       G `      G `      G *    G -    G G     G `      G `     G       G   @  G D     H  @  H    H 0    H F     W  E     ,H ]   @  9H    `  EH      WH      _H      kH     
  vH    @
  H    `
  H -   
  Š    
  H    
         H       H    @  %    P  H    `  LE      H             H       E    @  +V       	      H     H     H     
I     I     (I     D     4I     @I     NI     bI     nI S    uI S    I       I       I    @  D             I       I      i        I  @  I     I   )  I k    A     @A  p
   A         v        s I   @  J ~      `   @    `      :"    @  J 0    $      x        o      J     )J     ;J     JJ     _J ]      kJ ]      H    @  zJ    `  B 
       }   p
 k     J             y J               { J      J    J    J    J    K           t K              ơ        #K      7K     PK    pK    K   (    ~     K `   @   K R     &  g     K       K       K    @  ]            K      K      K      K    K      L D     L      L  @  L     'L    @  1L    `  >L      HL      RL c    ]             @  _L      iL c    6     	          wL      L       )      RI     L     L  @  %     G    L           
M                             
                       
                      
                       L 9  p  '	        L  @   /             V        P   @  M     	     L     L  @  L    L    M     ,M  @  AM    WM    cM     sM  @  M    M    M       @  M        M     M  @  M    C    M     H}   @  M    M    N     N    @  X X    H            %     	  H    	  LE     	       @	  H    	  E    	  H     
  V    
   N     
  1N    @
 CN    A
 RN    C
 [N    D
 D    E
 4I    F
 I    `
  mN %  
  zN %  
  q3 -      N    @        
       w                    
        w     &                 
       w               
       ~            k                 
       ~               
        ~               
       z               
        z               
       w                      
        w               
       ~                      
       w                      
K                       
       ~           U                        
             w               
       w     ?                        
E                     
K                      
       w                N      N    N    N    N    N    N    O            O                /O   (   '" c      :O c  @   -" c     FO c     MO       WO      gO       qO    0  |O        -               -       :"    @                 
       `     k          u                                p O       O    p         
         ɞ  O    Ĉ O            
        ɞ  O    ǈ       
    @ `  ~ y    O    Ɉ       
    @ `  ~ o     O    ˈ       
   @ `   k   O    ͈       
   @ ` P b      P    ψ       
    @ ` P b ,P    ш       
   @ ` [  ?   AP    ӈ       
   @ ` P b   ] MP    Ո \P    Ո kP    ш zP    ш P    Ո P    ш       
    ~ P    [  k   P    P    ܈       
    U c  P b   c  P    ވ P      enclosure_component_type ENCLOSURE_COMPONENT_DEVICE ENCLOSURE_COMPONENT_CONTROLLER_ELECTRONICS ENCLOSURE_COMPONENT_SCSI_TARGET_PORT ENCLOSURE_COMPONENT_SCSI_INITIATOR_PORT ENCLOSURE_COMPONENT_ARRAY_DEVICE ENCLOSURE_COMPONENT_SAS_EXPANDER enclosure_status ENCLOSURE_STATUS_UNSUPPORTED ENCLOSURE_STATUS_OK ENCLOSURE_STATUS_CRITICAL ENCLOSURE_STATUS_NON_CRITICAL ENCLOSURE_STATUS_UNRECOVERABLE ENCLOSURE_STATUS_NOT_INSTALLED ENCLOSURE_STATUS_UNKNOWN ENCLOSURE_STATUS_UNAVAILABLE ENCLOSURE_STATUS_MAX enclosure_component_setting ENCLOSURE_SETTING_DISABLED ENCLOSURE_SETTING_ENABLED ENCLOSURE_SETTING_BLINK_A_ON_OFF ENCLOSURE_SETTING_BLINK_A_OFF_ON ENCLOSURE_SETTING_BLINK_B_ON_OFF ENCLOSURE_SETTING_BLINK_B_OFF_ON enclosure_component_callbacks get_fault set_fault get_active set_active get_locate set_locate set_power_status show_id enclosure_device edev enclosure_component locate power_status scsi_protocol SCSI_PROTOCOL_FCP SCSI_PROTOCOL_SPI SCSI_PROTOCOL_SSA SCSI_PROTOCOL_SBP SCSI_PROTOCOL_SRP SCSI_PROTOCOL_ISCSI SCSI_PROTOCOL_SAS SCSI_PROTOCOL_ADT SCSI_PROTOCOL_ATA SCSI_PROTOCOL_UNSPEC blist_flags_t scsi_device_state SDEV_CREATED SDEV_RUNNING SDEV_CANCEL SDEV_DEL SDEV_QUIESCE SDEV_OFFLINE SDEV_TRANSPORT_OFFLINE SDEV_BLOCK SDEV_CREATED_BLOCK scsi_vpd scsi_device same_target_siblings budget_map device_blocked restarts starved_entry max_queue_depth last_queue_full_depth last_queue_full_count last_queue_full_time queue_ramp_up_period last_queue_ramp_up scsi_level inq_periph_qual inquiry_mutex inquiry_len inquiry vpd_pg0 vpd_pg83 vpd_pg80 vpd_pg89 vpd_pgb0 vpd_pgb1 vpd_pgb2 sdev_target sdev_bflags eh_timeout manage_system_start_stop manage_runtime_start_stop manage_shutdown force_runtime_start_on_system_start lockable borken sdtr wdtr tagged_supported simple_tags was_reset expecting_cc_ua use_10_for_rw use_10_for_ms set_dbd_for_ms read_before_ms no_report_opcodes no_write_same use_16_for_rw skip_ms_page_8 skip_ms_page_3f skip_vpd_pages try_vpd_pages use_192_bytes_for_3f no_start_on_add allow_restart no_start_on_resume start_stop_pwr_cond no_uld_attach select_no_atn fix_capacity guess_capacity retry_hwerror last_sector_bug no_read_disc_info no_read_capacity_16 try_rc_10_first security_supported wce_default_on no_dif broken_fua lun_in_cdb unmap_limit_for_ws rpm_autosuspend ignore_media_change silence_suspend no_vpd_size queue_stopped offline_already disk_events_disable_depth supported_events max_device_blocked iorequest_cnt iodone_cnt ioerr_cnt iotmo_cnt sdev_gendev sdev_dev dma_drain_len dma_drain_buf sg_timeout sg_reserved_size bsg_dev access_state state_mutex sdev_state quiesced_by sdev_data Scsi_Host __devices __targets starved_list default_lock host_lock scan_mutex eh_abort_list eh_cmd_q ehandler eh_action host_wait hostt transportt tagset_refcnt tagset_freed host_blocked host_failed host_eh_scheduled host_no eh_deadline last_reset max_channel max_id max_lun max_cmd_len can_queue cmd_per_lun sg_prot_tablesize opt_sectors dma_boundary active_mode host_self_blocked reverse_ordering tmf_in_progress async_scan eh_noresume host_tagset short_inquiry no_scsi2_lun_in_cdb work_q_name work_q tmf_work_q max_host_blocked prot_capabilities prot_guard_type n_io_port dma_channel shost_state shost_gendev shost_dev shost_data scsi_target starget_sdev_user reap_ref single_lun pdt_1f_for_no_lun no_report_luns expecting_lun_change target_busy target_blocked max_target_blocked starget_data scsi_device_handler scsi_target_state STARGET_CREATED STARGET_RUNNING STARGET_REMOVE STARGET_CREATED_REMOVE STARGET_DEL scsi_data_buffer scsi_cmnd_submitter SUBMITTED_BY_BLOCK_LAYER SUBMITTED_BY_SCSI_ERROR_HANDLER SUBMITTED_BY_SCSI_RESET_IOCTL scsi_cmnd eh_entry abort_work eh_eflags budget_token jiffies_at_alloc prot_op prot_type prot_flags submitter cmd_len sc_data_direction cmnd sdb prot_sdb underflow transfersize resid_len sense_len sense_buffer extra_len host_scribble scsi_driver gendrv init_command uninit_command eh_reset scsi_host_template queuecommand init_cmd_priv exit_cmd_priv eh_abort_handler eh_device_reset_handler eh_target_reset_handler eh_bus_reset_handler eh_host_reset_handler slave_alloc slave_configure slave_destroy target_alloc target_destroy scan_finished change_queue_depth mq_poll dma_need_drain bios_param show_info eh_timed_out eh_should_retry_cmd host_reset proc_name tag_alloc_policy track_queue_depth supported_mode emulated skip_settle_delay shost_groups sdev_groups rpm_autosuspend_delay scsi_host_state SHOST_CREATED SHOST_RUNNING SHOST_CANCEL SHOST_DEL SHOST_RECOVERY SHOST_CANCEL_RECOVERY SHOST_DEL_RECOVERY scsi_transport_template ses_device page1_types page10 page1_len page1_num_types page2_len page10_len ses_component ses_exit ses_init ses_intf_remove ses_remove ses_intf_add ses_match_to_enclosure ses_enclosure_data_process ses_enclosure_find_by_addr ecomp ses_set_power_status ses_get_power_status ses_show_id ses_set_active ses_set_locate ses_get_locate ses_get_status ses_set_fault ses_get_fault page_code bufflen ses_recv_diag init_device_slot_control ses_probe  ses.ko  Ի                                                                                                                                                                    
 j       .                    @      %    
               >    
        	       T    
        	       h    
        <                                       $                                        >                   (                                       ;            P                          $            P      2                        
          k       (                   1                  Q          E       `          I       n    `      H       }          L                                             `                 0                                  	                             %    `      6      2           X       J   
                a   
        1       |   
 @                 
 W                                                                                                                                  #                     )                     @                     Q                     \            >       h                                                                                                                                                                        
                                          /                     J                     Y                     h                     o                                                                                                                                                                                             
                      __UNIQUE_ID_depends193 ____versions __UNIQUE_ID_retpoline192 __UNIQUE_ID_intree191 __UNIQUE_ID_name190 __UNIQUE_ID_vermagic189 _note_10 _note_9 ses_remove ses_init ses_interface ses_template ses_probe ses_intf_remove ses_show_id init_device_slot_control ses_recv_diag ses_enclosure_find_by_addr ses_exit ses_get_page2_descriptor.isra.0 ses_get_status ses_get_fault ses_get_locate ses_get_power_status ses_set_page2_descriptor.isra.0 ses_set_fault ses_set_active ses_set_locate ses_set_power_status ses_enclosure_data_process ses_match_to_enclosure ses_intf_add ses_enclosure_callbacks __UNIQUE_ID_license314 __UNIQUE_ID_description313 __UNIQUE_ID_author312 __UNIQUE_ID_alias311 __UNIQUE_ID___addressable_cleanup_module310 __UNIQUE_ID___addressable_init_module309 .LC3 .LC6 __this_module cleanup_module kfree __scsi_iterate_devices scsi_is_sas_rphy __fentry__ init_module enclosure_remove_device scsi_register_driver __stack_chk_fail enclosure_add_device put_device enclosure_for_each_device sas_get_address enclosure_component_alloc sdev_prefix_printk driver_unregister class_interface_unregister __scsi_execute enclosure_find memset scsi_register_interface __x86_return_thunk sprintf enclosure_component_register kobject_uevent kmalloc_trace enclosure_unregister __kmalloc kmalloc_caches enclosure_register              5             F             5   (                     1                    6          ?   =          F   G          F   Q          5   s          C             2             2             2             2             ;             K             7             C             F   	         2            ;   !         5   .                   @         G   Q         5   ~         F            5            .            B   m         F                                   %                ?            9            5            F            :             F            I            F   !         5            F            5            F            F            5   E         F   U         F   a         5            F            F            5            F            F            5   P         D            /            B   K            (       W            %       `         ?            F            9            5   !         F   X         9   a         5            F   %         9   1         5            F            9            5   q	         F   	         9   	         5   	         M   $       	         J   f
         2            2            2            >   
         H   
         H   
         H   R         L            5            4            F   :                  D         <   N         =   Y         9   a         5               E                                   ?            M   ,                J            M   $                J   +            0       7            %       <         ?   R         2   [         2   d         2   m         2   u         2   }         2            2               `                   %                ?            F            L            L   z                            N            2            3   9         3            L            L   t         C             5   	                              E                                   8   -                    2          A   :          F                                  @                                 A                                                                               P                            (             P      0                   8                   @                    H                   P                   X             `      `                   h                    p                   x             `                   0                                      	                                      `                                        <                    F                                        }                   l                                                                $                   (                   ,                    0             D      4             T      8                   <                   @                   D                   H                   L                    P                   T                   X             p	      \                   `                   d             9                                                                                  K                    P                    V                    W                                                $                    (                    ,                    0                   4                   8                   <                   @                    D             D      H             P      L                   P                   T                   X                   \                   `                   d                   h                   l                   p                   t                    x             
      |                                                                      !                   b                   c                   d                   f                   h                   j                   l                   q                                                                                                                                                                                                                  '                   )                   *                   2                                                                                                                                                                                                                                                                     D                  I                   T      $            Y      (            `      ,            i      0                  4                  8                  <                  @                  D                  H                  L                  P                  T                  X                   \                  `            	      d                  h                  l                  p                  t                  x                  |                                                	                                                                                                                                                                                                                                                                                                                                                                         %                  \                  `                  g                  h                  i                  m                                                                                                             )                  0                  7                  8                  9                  =                                           $                  (                  ,                  0                  4                  8                  <                  @                  D                  H            l	      L            m	      P            n	      T            p	      X            u	      \            	      `            	      d            	      h            	      l            	      p            	      t            	      x            	      |            	                                                                                                                                                                                                                                                                              ]                  `                  g                  i                  k                  m                  n                  o                  s                                                                                                                                                                                                                            9                   >                                                            }                 0           8                    H                                  `                   P                          0                  8                  H            `      P            `      X            0      `                  h                  p                              1                      6           8         6           P         1            .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.init.text .rela.exit.text .rela__mcount_loc .rodata.str1.1 .rodata.str1.8 .modinfo .rodata.cst2 .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela.data .rela.exit.data .rela.init.data .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF .gnu_debuglink                                                                                         @       $                              .                     d       <                              ?                                                         :      @               xh            "                    J                     6      >                              E      @               0t             "                    Z                     t                                    U      @               t      `       "                    j                                                         e      @               Pu            "   	                 w      2               4                                         2                     T                                                                                                                                                                         h                                    @               Hw      p      "                                         j                                                                                                 @               y            "                                         @       @                                                   '      x                                    @               H      h      "                                         (                                          @                            "                    	                     )                                         @               ȍ             "                                        @)                    @                    @                     0       "                    3                    ,                                     8     0               ,      P                             A                     -                                     Q                     -      .                             V                     [                                                          [      h      #   0                 	                      Xc                                                               e                             0	*H
01
0	`He0	*H
1a0]080 10UDebian Secure Boot CA2(oe:B&C0	`He0
	*H
  {TgL	.vd+%~ǣ{,.KzK.T>ikd_7E͠SEݦ C8|xutR/
݌	YCaa
{%1uP#ژN1~佋RVLM
 {S1T*6sBLgà`nBhS-mld,@HGmƻroWNB!?x-V/Zv\suA
}Ul)iVX         ~Module signature appended~
 070701000C0024000081A4000000000000000000000001682F6DA7000156CB000000CA0000000200000000000000000000003900000000usr/lib/modules/6.1.0-37-amd64/kernel/drivers/scsi/sg.ko  ELF          >                    G         @     @ 6 5          GNU ӈ?+)&-@HhFX        Linux                Linux   6.1.0-37-amd64      AVLw0AUIATAUHLS     H   H   HH9uYD9chtHH9tK    uAu   t$uƃ   L    H[]A\A]A^    AE HH9uL1    H[]A\A]A^        AVAUATUSL   M   Ml$M   HHtHIt$HtHt    D$ Mt$011L    I$   I$   HH9t A   uf    DHH9uL    AE`t     uD[]A\A]A^    
  A$   uDϻ   []A\A]A^    LIu IUmAH    H                ATLhUSHH        sH    H    HH             u[L]A\    HhHSH    H        L[]A\        AUATUSH   HtUHCHtLAHA     uH   D[HD]A\A]    H0HPmEH    H        []A\A]    @     AVAUATUSH   HH   H   H   LLvM)     uWH{h usLe8AL    EhL9rƅ  E1HK  @HkxHC`    L    [D]A\A]A^    HEEH    H    H0HPm    AA뽐    AUATUSL/MtzMexMtqH_AD$hHHH9s\        AD$xED$`   IU HfEt0I}1Hc HH)H9HFH9r#HH)D9tH9r[   ]A\A]    ID$pHcHHHHCunfH@41H]P[]A\A]    H  uH   tHSHHBHDID$EL$`IH    H    H0HPm    H         AUATIUSH   HCH   S   { uz1f; uhsH    9HC~QH<L,    Ht@    vID$IAH    H    H0HPm    HCJ<(H    H    HC    HC    HC    []A\A]    HGDH    H    H0HPm            ATUSHLg   H   1Ht    H   Ht        tI    wO1HC(    fCC0    HC    ƃ    AƄ$   []A\    HsLG[]A\    HCDCH    H    H@H0HPm    ID$D   H    H    H0HPm            AWAVAUATUSH HNHt$DQ@  D     HA DD    M  B     +  D$Hc    D$HHE  ]E  Hc    9    4  HHHȍQE/  E&  
A   T$AADt$D$$DT$Dt$E1D|$EEI$AA)E   D9|$       Mf + t$A9AN݉\$Ic    H,    II$IFH<        $9}T$9      pHD$EH    H    AH@H0HPm$PDL$    X$A)E@DELT$ADt$DE1E1fE     U   DuE  E1H D[]A\A]A^A_    EID|$L1Et Dl$HEH<DH    I9uEA   AO   Dt$E$T
    
    HAmH1AEH    HH    D$    D$=  wG              HD$EEH    H    H@H0HPm        sAAff.             AUATLg`UHSwCA   LHV   t  HLAF݉Wu[]A\A]    HGAH    H    H0HPm    D      =     t
    U1Ҿ   SHeH,%    H        H  HH        []        H   AUATUHSHt}H   H   HH9tgLo0L    IHE H9t9H    tHU HEHBHH     HE    HE H"HELL    HC@`u[]A\A]        H{1[1]   A\A]    ff.     @     AWAVAULo0ATUHSH   LL       IH   I9t@   t1H{ t.H(  uLL1    H[]A\A]A^A_    H{H1H    Hǃ       HH)(  HHkH=        LH߉   L   L    tH   L#L{ILL    H[]A\A]A^A_    f.         AWAVAUATUHSHLg@I$HH$    H    H@@    H=       HH@H    
  M$P    IH        H        A   1L   H    HD$    AŅ       8  DI~mH        H$I~ H    H    I    IFHI~H    IFHH    IFP    AF`    IFX    A   Aǆ      AF@EnDE1Ht$H        e
      EB  I   AvD   H߁  P    AŅ       I       AVDHu@MNmLH=    I      P    IH=     H    HL        E$EFDH    1H4$H        LuxHD[]A\A]A^A_    H        AvDH    H    H    H    L    H    몃t8H4$AI    1H    H        LMc    E$H4$A  H    1H    A    T    hH4$AH    1H        H4$I    H    1H    I    H    H    E    D      ATUSHHHhXH    HI    tHHHBHH     LHHH"H    H5    HSH   HCHC    HCHC     HC[]A\            AWAVAUATUSHH  eH%(   HD$1      LcM  M|$HAG`        L  D0  D     D   H=           )9    B   EU       H  HH   HHH   HHH   HHH   HH H   HH(H   HH0H   HH8H   HH@H   HHHH   HHPH   H@XH   Hǃ       HIl$0    H        Hs  ƃ   H    I|$1ɺ                I$       I$   A$         HD$eH+%(     H1[]A\A]A^A_    DDkxDCz CyDAfDk~HD$    f% fC|Al ~otiE^HT$`   L    DD$<ov3|$	(IL   L  *I?`   LH        {       A$   t    Hf       vƃ    H    H5        H   H  H  H  H  Hǃ       H      nI7DChIWmEH    H    DT$    DT$    D      UHSHHHH8H      t~[]    []M[   ]        AWAVAUIATIUHSHeH%    H@&  H@ ?  @  HW  CAC{    L{XM   Cy      `   9O9NH   HH$Hcʺ   HHL$I    HT$H4$L    H      Ds{fC~   HH{8    H߉HLAHcŅu
IcELHEH[]A\A]A^A_       pp5H     H#Cxuf{~ tI?HFHLHH[]A\A]A^A_    HHL^Hkf    ATUSH   H   H]H           Lc L    H;    Ch{d ChuRt0L    H      t&~A1[]A\    H{1ɺ          Cd H{11Ҿ       뚾       H3HSmH    H        Hff.          AWHIAVAUATUSIXHLH$HHHD$    HD$IXH9tXI     H"    MXLL    tIIFHAHM&InIF    IXH9uHt$H|$    E@Et    88trH<$I8    88   H<$    I}     I   A   t~IHH    []A\A]A^A_    Iu E8IUmH    H        f       Iu L$IUmH    H        Wf    AWAVAUATUSHoxLw@H      E`           L}XLeHL    H]HIL9t0H{11Ҿ             H       HL9u11H}       LL    LH        uDH=      P    H       H   Hǅ          t'~[]A\A]A^A_    [   ]A\A]A^A_    []A\A]A^A_Hu HUmI    H    H             AWIAVAUATUHSHH@L$eH%(   HD$8HGHD$Fz F5    ǆ       fFx    HF|      DkDA  CBLsES<fD$IFT$H H@HD$     HD$(    H$    HD$0    p  1H<$@1҃"    IH= s  C@<   I    II  MHI  ILHLH)I)Ӄr1҉уI<H<9rC@fA  L   I  Aǂ      E   D$   L$1    @ƉL$t$  Cd  |  t  H$HSHH    H<$   K  AB  D$KDE11LA 
  Pjj LT$    LT$HAF  IB8   C4H   HD$D``E  H=    A          C8tDkdAAAH   t$H   p(        P	;  H   DHǀ       H       HD$8eH+%(     H@D[]A\A]A^A_    k  5AA  "ALfLM~8L$L    E9nhL$rKA      ACdt=L        >  HYHH>ACduH{DLL$:L$AuLL$    HC(SA 
  |$KDHD$(    HD$ C0	HSHD$0D$HD$4|$D$5E1ɅWAjPH|$Ht$8    LT$HA'IB8H       AƆ  ƃ     AFx   HAN`ft A9  1	D9   A)9u    IFH    H    L$H0HPm    L$       HGDK@H    H    EH0HPm    )IFEH    H    H0HPm    S<gAą       BAA  ALLPfSAVdSIVpDk HS(AVxS0AV`9	HEEH    H    H0HPm      H    tH       Hǃ       HAHH	HHAIFEL$H    H    H0HPm    L$   1LA        ff.         AWAVAUATUHSHH(  Ht$Ld$$H|$(L$`  HT$LD$H)   eH%(   H$   1HD$$    HǄ$      HHW  ƃ  HED$Ht$HI  D   Hx8    i  A~8Su  AFd   A~`    INPH¸H9HFH$H  AF@P  1HLHL$HD$    HT$Ht$L    H   Et/HD$pDH   H@H    tL       $LLHxnMtM7HH$   eH+%(     H(  []A\A]A^A_    AVD9Sh         LHHHLHHLHtHnLH]HWLHFH@    u:H'LHHLHHHCH    H    H0HPm        ff.          AWIAVAUATIUSHH@  eH%(   H$8  1Ll$<H|$@HD$<    LHǄ$0      H)HD$       HD$     D$8    HD$(    HD$0    HeH%    H  I9   '  I   H  LuM         AF`  AGA  I#'  $   HH|$    H+  DL$EI  I)  HC$H$    Aׅ  HFHH  H}8H|$    D  H|$EY  ƅ   DL$DL$        DL$  t$L$D)9MЃ$$AF  LDH H	E"  %H$McLC<D$ @{@1C8    f{BCA SDHKHHCX    Hs`ChHCp    A      1LL    H4$LL    H   {<   MXLHHHcЅLHHH$8  eH+%(     H@  []A\A]A^A_    I>    #HDD    DAv/D$(t(D$   A   1Mc1ɍD D$aL       HHHDH    H            j E1E1LHLHAXI6IVmEH    H        +I6IVmEH    H        DL$H    HH    u(HzHHHc    I6IVmH    H        D      AWAVAUATUSHxL   eH%(   HD$p1M	  M~M	  HD$     II       AT$@Ӄz"      "  C     r"  l     v"    y"  u1   u"  B  L    Y  	  I? In8HH@  9G	9N    A9^ht%fA   	  Iv`LLIH    1pp"    q"  ,  L      A  18u  o  vo"  |  "  u=IcF\HH=  HcHT$peH+%(     Hx[]A\A]A^A_    v  !  IHx    H묁g    t     I   Hx    Hz"  6  	  "      S     S  w-"     1I? L    Hc"  uxAG`  I?    HAt$DI?L    Hu2AG`V  At$DI?L       HS  ttHsHuIAWD1IwmMHx  P    H_~"    v)"     "  uHw  L    Hc(|"    }"  C  I~01H<$    I   M   H<$HI9HT$ tf    t$HHT$ I9u    L    HcI1Hx    HcI7IWmAH    H        .HmHpAG@L    HcMAW`HIHD$X    Ht$PLHD$`    HD$P    HD$h    IH     H H	HT$P   T$XH   T$\   T$`HPp  	к    D$d    HHHI? LH@  9GAVh	9O    HcmL    AWl1_A  L    Hc8L       I  1H1A  I? LH@  9G	    HcAG`bILH H   H      Hc1L    HcL      23339OЉAV\HiQH%kdi   )i   HiQH%AFX1DI^0H    I   M   HHT$ L9u  HHT$ L9  f    uH    HD$ L@h    HcL    A  1A  L    Hc"     "  u L    A  1m"  =AG`D$I?    ^  HD$ E1X   PLAA   LLEZ    IF0H\$ HH$       H<$H    7  H<$    HD$       ƀ   H<$    HcD$HH=      
      HH  IF0M   IHH$    I   E1HD$@   AG   AIAG   AGChAGHCpIGHAtNL9tI   AC|"Cy"C~AG    uH=           )9Ǹ    BxHt$H<$    eH%    @uAH@ ?  @u4  HL    u1HH$    H$pHIM@     LL    HuAD$IM    uAD$IM    uAD$IM    uIIM9uyH    L    HcHƀ   H<$    HL$ LLX   o1҉хNHcHD$(    1H|$(HD$0    HD$8    HD$@    HD$H        IFHD$
H|$ uW    H|$Ht$(       H\$ H<$HD$       H<$H    tH|$Ht$(    &D$D$    HHH    HH    AWAVAUATUSHHXn@DgLeH%(   HD$P1    A %   =     H        DH    I    IH}  @`t?LH    A    HD$PeH+%(   J  HXD[]A\A]A^A_    I   H$   A   $  P	  LH        I        o  I}     Aǅ   I}     Aǅuy   u2I}       Me L       l$2    Me L       l$  A}h  AL    I}     I}     A   tH<$       H<$#LH    A    Lt$(1M}HD$(    HD$0    LHD$8    HD$@    HD$H        AMht&H^         LL    AU`tLL    L    AE`Z  AUh@  L        AE`uAuhtCLt$(1M}HD$(    HD$0    LHD$8    HD$@    HD$H        A}d t&H         LL    AU`tLL    L    AE`  A}d tOL        AE`uA}d tJIu IUmAH    H        nA}d AEh  H=    H   +      HH  HxH    H        H   H}8HE0    H   H    H    MuXH   ǅ          ƅ   LH:  p  HEX    Lmf      E}`E  IuPIUHHHD$HT$ Ht$    HL$tHt$HT$ ImPHU HuH.HL               9      IU HHR  ? 9G	9O}     !     A   ?  P	   H        H   H   LAEh    SAEdIE AEl H@   AE@4HLA    H    D$AEd I}1ɺ          H<$       AAEdAEhAH<$       H<$       A`Iu DM`IUmH    DEhH            vH<$       Iu IUmIH    H        .LHD$A    HD$LHD$A    HD$AE    A    AWAVAUATIUHSHXH4$eH%(   HD$P1D$' eH%    H  H9     L   M  MuMx         A   t
I#  AHT$'DLHH  C8g  H=    $   
      IHs  C`HH H	1IChAF{5v{@AF	AFSy	AFS|AFf%?	fAFS~AF%?	AFCy7  %?
   AFH   IFH   IFC|f  e  fn  f҃AVI#  H<$$   L    IH  IcnL9LFLd$LI$  H'HLlL    HD$PeH+%(   *  HXH[]A\A]A^A_    H$HA      p  eH%    @<  I?H$H$    AׅHc|   ppEA      DLHT$'yHH|$' V  AF`J  H
   fAF    1I#HD$PeH+%(     H4$HXHL[L]A\A]A^A_I6IVmEH    H            i  AF   I#!HOH@ ?  @IWH$H0    AD$h܋      H$HH$H$H&    C0H   f{ uW     LHǉL$HD$    Ht$H<$L    HuaL$)ͅ   CIL$$D9   HC(JH   H+    HHH    9|XLc   I9rHAHA    AH    0b{y Hc   HHD$H    Ht$H<$H    HuHcl$HD$(    1H|$(HD$0    HD$8    HD$@    HD$H        IEHD$|$' uAF`   Hu`    H|$   Ht$(    DLHT$'H脿HHtH|$Ht$(    H(HHcHCAH    H    H@H0HPm    H|$Ht$(    H    H    =      Sw                  x            H         P    Å   H    H    H        H    HH= wLH               Åt?H=        H=     uH    H        H         P    [    H=    Ht    H        H=        1  P           H        H    H    A        AVDH    H            H    H            H    H    E        H    H            t$L$<DH    eH%    $L                                                                                                                                                                                                                                          sg_poll: res=0x%x
 6 sg_device_destroy
 sg_fasync: mode=%d
 sg_remove_scat: k_use_sg=%d
 sg scsi_generic kernel 4%s: cdev_alloc failed
 4 sg_alloc: dev=%d 
 sg%d &sdp->open_rel_lock &sdp->open_wait 4%s: sg_alloc failed
 %s 3%s: device_create failed
 generic 4%s: sg_sys Invalid
 5 drivers/scsi/sg.c 6%s: device detaching
 sg_release
 sg_remove_sfp: sfp=0x%p
 %s
 sg_start_req: dxfer_len=%d
 sg_link_reserve: size=%d
 sg_link_reserve: BAD size
 sg_new_write: queue full
 sg_write: count=%d
 sg_write: queue full
 sg_ioctl: cmd=0x%x
 sg_open: flags=0x%x
 &sfp->read_wait &sfp->f_mutex sg_add_sfp: sfp=0x%p
 sg_read: count=%d
 include/linux/thread_info.h sg-big-buff  sg_mmap starting, vm_start=%p, len=%d
  sg_vma_fault: offset=%lu, scatg=%d
     sg_remove_scat: k=%d, pg=0x%p
  sg_finish_rem_req: res_used=%d
 sg_unlink_reserve: req->k_use_sg=%d
    sg_build_indirect: buff_size=%d, blk_size=%d
   sg_build_indirect: k=%d, num=%d, ret_sz=%d
     sg_build_indirect: k_use_sg=%d, rem_sz=%d
      sg_build_reserve: req_size=%d
  3%s: process %d (%s) changed security contexts after opening file descriptor, this is not allowed.
    %s: kmalloc Sg_device failure
  Unable to attach sg device type=%d, minor number exceeds %d
    %s: idr allocation Sg_device failure: %d
       3%s: unable to make symlink 'generic' back to sg%d
    Attached scsi generic sg%d type %d
     sg_cmd_done: pack_id=%d, res=0x%x
      sg_remove_sfp:    bufflen=%d, k_use_sg=%d
      sg_common_write:  scsi opcode=0x%02x, cmd_size=%d
      sg_common_write: start_req err=%d
      sg_write:   scsi opcode=0x%02x, cmd_size=%d
    4sg_write: data in/out %d/%d bytes for SCSI command 0x%x-- guessing data in;
   program %s not setting count and/or reply_len properly
        sg_add_sfp: bufflen=%d, k_use_sg=%d
    sg_read_oxfer: num_read_xfer=%d
                                                sg_alloc        sg_read sg_write        sg_rq_end_io    sg_add_device           sg_remove_device        allow_dio               def_reserved_size               scatter_elem_sz                                                                                                                                                                                                                                                                                                                                                                                                                                                 parm=allow_dio:allow direct I/O (default: 0 (disallow)) parm=def_reserved_size:size of buffer reserved for each fd parm=scatter_elem_sz:scatter gather element size (default: max(SG_SCATTER_SZ, PAGE_SIZE)) alias=char-major-21-* version=3.5.36 license=GPL description=SCSI generic (sg) driver author=Douglas Gilbert parmtype=allow_dio:int parmtype=def_reserved_size:int parmtype=scatter_elem_sz:int srcversion=4E923F37BACABCB305CCC35 depends=scsi_mod,scsi_common retpoline=Y intree=Y name=sg vermagic=6.1.0-37-amd64 SMP preempt mod_unload modversions                                                                                                                                                                                                                                                                               (  0  (                   0  (                                (  0  (                   0  (                   0                                                                 (                 (                                        (  0  (                   0                       (                 (                 (                       (                 (                                                                      (    0  8  X  `  X  8  0  (                     X                       (                 (                                 (                 (                                        (    0  8  0  (                     8  0  (                                            (    0  8  H  8  0  (                     H                                                      (    0  8  P  8  0  (                     P                                                             (    0  8  H  8  0  (                     H  8  0  (                     H                                                         (    0  8  P  8  0  (                     P                         (    0  8  0  (                     8  0  (                     8  0  (                     8                         (    0  8  x        x  8  0  (                     x        x                         (    0  8  ` 8  0  (                     `                        (    0  8  x 8  0  (                     x  x                        (    0  8    8  0  (                                                  (    0  8    8  0  (                                              (    0  8    8  0  (                       8  0  (                                                         H  P  x                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         m    __fentry__                                              !P    _raw_write_lock_irqsave                                     _raw_write_unlock_irqrestore                            9[    __x86_return_thunk                                      pHe    __x86_indirect_thunk_rax                                ,4    _raw_read_lock_irqsave                                  .    _raw_read_unlock_irqrestore                             =    scsi_logging_level                                      0    sdev_prefix_printk                                      [ev    idr_remove                                              z    kfree                                                   >FV    fasync_helper                                           KM    mutex_lock                                              82    mutex_unlock                                            o    hugetlb_optimize_vmemmap_key                            m    __free_pages                                                blk_rq_unmap_user                                       l    blk_mq_free_request                                     E:#    __kmalloc                                               |    alloc_pages                                             ;?    register_chrdev_region                                      __class_create                                          V    scsi_register_interface                                     class_destroy                                           w˄    register_sysctl                                         3`    unregister_chrdev_region                                \    unregister_sysctl_table                                 1H
    class_interface_unregister                                  idr_destroy                                             \Yх    current_task                                            ᠍    __task_pid_nr_ns                                        ~    _printk                                                 UrS    __list_del_entry_valid                                  DC    __wake_up                                               P    jiffies                                                 p7    jiffies_to_msecs                                        h    __list_add_valid                                        w/    cdev_alloc                                              -    kmalloc_caches                                          wX    kmalloc_trace                                           	O    idr_preload                                                 idr_alloc                                               ?<    sprintf                                                     __mutex_init                                            T    __init_waitqueue_head                                   L3)F    __preempt_count                                         ѹ4l    cdev_add                                                ،    device_create                                           e    sysfs_create_link                                       8c    cdev_del                                                ,H    __SCT__preempt_schedule                                 Ӆ3-    system_wq                                               6    queue_work_on                                           ̈    kill_fasync                                             <    scsi_normalize_sense                                    }    __scsi_print_sense                                      _i    refcount_warn_saturate                                  V
    __stack_chk_fail                                        Hۈ    __check_object_size                                     k    _copy_to_user                                           ^    put_sg_io_hdr                                           G    scsi_autopm_put_device                                  ^    scsi_device_put                                         k    module_put                                              dʧ    sysfs_remove_link                                       ٬    device_destroy                                          _    scsi_alloc_request                                      b    blk_rq_map_user_io                                      '    blk_execute_rq_nowait                                       get_sg_io_hdr                                               __msecs_to_jiffies                                          _copy_from_user                                             scsi_cmd_allowed                                        ~    __get_user_1                                            ď    scsi_block_when_processing_errors                       N4    scsi_command_size_tbl                                   Nv    __copy_overflow                                         $    ___ratelimit                                            )g    __get_user_4                                            1G    blk_trace_remove                                        p    blk_trace_startstop                                     \    __put_user_4                                                 scsi_ioctl_block_when_processing_errors                 
EW    scsi_ioctl                                              nm    blk_trace_setup                                         ]{    __SCT__might_resched                                    :    _raw_write_lock_irq                                     v    _raw_write_unlock_irq                                   uyH    init_wait_entry                                         Q     schedule                                                &    prepare_to_wait_event                                   T    finish_wait                                             `8    nonseekable_open                                             idr_find                                                F    scsi_device_get                                         `    scsi_autopm_get_device                                  7; |    __module_get                                            le    vmemmap_base                                            ^|    page_offset_base                                            proc_dointvec                                                param_ops_int                                           q9    compat_ptr_ioctl                                        zR    module_layout                                                   .	        2	         	                                  
                                                                          $                                                                                                                                                                                                                                                                                         sg                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       GCC: (Debian 12.2.0-14+deb12u1) 12.2.0  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0                      
c A=      O=     `=    q=    =    =    =    =    =        = 	   = 
   =    >    > 
   >    ->    ?>    P>    b>    l>    >     > !   > "   > #   > $   > U   >    >    >       ?     ?    ?    #?    0?    ??    I?    T?    ^?    h? 	   u? 
   ?    ?    ? 
   ?    ?    ?    ?    !   @ 	     @    !@    .@    :@    C@    P@    ]@    t@    @ 	   @      &  g       4&               @ |  0  ,  a     U    @    `      @ `      @ E    @ ]     @ ]     b  *    @ `      V       @      @      A      )A      >A       SA    @  x        $      _ -            I       p
 k   @  c       fA 
     qA 
     A G    A      A c     b    @  x      Z       A b    A b @  A b   A b   A b  	  A b @	  A b 	  A d 	  A [  
  A    @
  B    `
 B    a
 7B    b
 GB    c
      d
 *     e
     f
 kB    g
 m     h
 tB    i
 -     j
     k
 {B    l
 B    m
     n
 B    o
 B    p
 B    q
 B    r
 B    s
 B    t
 B    u
 B    v
 B    w
 C    x
 C    y
 $C    z
 3C    {
 CC    |
 RC    }
 `C    ~
 uC    
 C    
 C    
 C    
 C    
 C    
 C    
 C    
 C    
  D    
 D    
 "D    
 6D    
 FD    
      
 YD    
 hD    
 oD    
 zD    
 D    
 D    
 D    
 D    
 D    
 D    
  D K   
  D ]   
  E      T   @  i3  `     
 Q     !E     
  4E ]    
  BE ]   @
  ME ]   `
  WE ]   
  aE   
  mE    %  i X @<  nW  Q  @=  F f @>   k   >  vE Q   >  E k    ?  E    @?  E    `?  E 9 ?  E    ?  E G   @  E \  A  E    @A  E   A         
^ E B  0  E `       F `      F `      F *    (F -    2F G     =F `      KF `     TF       ]F   @  gF D    qF  @  wF    F 0    F F     W  E     F ]   @  F    `  F      F      F      F     
  F    @
  F    `
  F -   
  Š    
  G    
         G       G    @  %    P  $G    `  LE      6G             BG       E    @  +V       	      OG     [G     mG     ~G     G     G     C     G     G     G     G     G S    G S    G       H       H    @  D             $H       .H      i        :H  @  FH     SH   )  ]H k    A     @A  p
   A         `        ] hH   @  tH h      `   @    `      :"    @  H 0    $      x        o      H     H     H     H     H ]      H ]      G    @  H    `  fA 
       g   p
 k     H             c I               e I      1I    AI    QI    `I    wI           ^ I              ơ        I      I     I    I    I   (    h     	J `   @   J R     &  g     J       'J       4J    @  ]            EJ      MJ      WJ      bJ j   lJ      tJ D     J      J i @  J l    J    @  J    `  J      J      J c    ]             @  J      J c    6     	         i        k       
       m        n J 9  p  '	        J r @   / t            V        P  v @  M  x   	  x   K r    K r @  $K o   5K o   MK o    eK o @  zK o   K z   K z    K | @  K ~   K    K       @  K        K     K  @  L    C |   L     H}   @  #L    0L    DL     OL    @  X X    G            %     	  $G    	  LE     	       @	  BG    	  E    	  G     
  V    
  YL     
  jL    @
 |L    A
 L    C
 L    D
 C    E
 G    F
 G    `
  L %  
  L %  
  q3 -      L    @        
       a     m        q       
        a     &          s       
       a        u       
       h            k          w       
       h        y       
        h        {       
       d        }       
        d               
       a                      
        a               
       h                      
       a                      
K                       
       h           U                        
             a               
       a     ?                        
E      m               
K       m               
       a                L      L    L    M    M    M    'M    =M           p PM                hM   X   0        rM        lJ    @   M    H   M    P   M    `   M k      M c     M k      O     @  ]     `  M      O k             M      M      M      M       O    0  M    @      `  P              
 M     M   @   0 #      rM #      lJ    @   M    H   M    P   M \  `   M \     M      M      O  \     ]  \     M #     O   @       `  M    h  M    p  M    x  M      O      M #     \    P  \    N       F        $        N    @   _    `   N       )N       7N         9      EN     RN      ^N 
        
      hN 
      tN 
      M        O k   @                  |N     N 
  $   N        `        M    @   6    `   N      N      M      O      N      
J      N       N        N        N    @   hX       nX        N 
      N       O     O   (  <%  `        O                )O    1O 
      
     hN 
     %  
                 i X @  :O   H  @O `       MO     lv  D     VO ,    cO G    O       kO      n@       `      xO     O    O 
     O 
   Ș  O    И  O 
   ؘ  O 
     O 
     O 0     i X @                           `   O     O        h       D  @   O G     %       ,  *      O `   @  O ,    P ]      u_ K      
P    @  P 
   `  V     h        P 0                              $P            
 *P     4P      ^N 
        
      hN 
      tN 
      M        O   @       `                            Z          
                _                                                                                                                                            X GP    c  UP            
 n  oP    Ȉ       
 n  M       ~P    ʈ       
    n  3!    P    ̈       
    n  P  P    Έ       
   P  n  P    P    Ј       
   P  P    ҈ P       P    p         
    P   P ɞ  Q    ֈ Q    c        
   P   P ɞ  &Q    و       
E       M  4Q    ۈ AQ      ZQ    ^  bQ    G        
   #     '   "     oQ     yQ    :        
2   '   Q    b     Q           
R   '   [       Q   K   Q           
R   n  [  ?     Q   P  Q     Q    ;  Q    K&  Q    K&         
9                 g          
 scsi_msg_byte COMMAND_COMPLETE EXTENDED_MESSAGE SAVE_POINTERS RESTORE_POINTERS DISCONNECT INITIATOR_ERROR ABORT_TASK_SET MESSAGE_REJECT MSG_PARITY_ERROR LINKED_CMD_COMPLETE LINKED_FLG_CMD_COMPLETE TARGET_RESET ABORT_TASK CLEAR_TASK_SET INITIATE_RECOVERY RELEASE_RECOVERY TERMINATE_IO_PROC CLEAR_ACA LOGICAL_UNIT_RESET SIMPLE_QUEUE_TAG HEAD_OF_QUEUE_TAG ORDERED_QUEUE_TAG IGNORE_WIDE_RESIDUE ACA QAS_REQUEST BUS_DEVICE_RESET ABORT scsi_host_status DID_OK DID_NO_CONNECT DID_BUS_BUSY DID_TIME_OUT DID_BAD_TARGET DID_ABORT DID_PARITY DID_ERROR DID_RESET DID_BAD_INTR DID_PASSTHROUGH DID_SOFT_ERROR DID_IMM_RETRY DID_REQUEUE DID_TRANSPORT_DISRUPTED DID_TRANSPORT_FAILFAST DID_TRANSPORT_MARGINAL blist_flags_t scsi_device_state SDEV_CREATED SDEV_RUNNING SDEV_CANCEL SDEV_DEL SDEV_QUIESCE SDEV_OFFLINE SDEV_TRANSPORT_OFFLINE SDEV_BLOCK SDEV_CREATED_BLOCK scsi_vpd scsi_device same_target_siblings budget_map device_blocked restarts starved_entry max_queue_depth last_queue_full_depth last_queue_full_count last_queue_full_time queue_ramp_up_period last_queue_ramp_up scsi_level inq_periph_qual inquiry_mutex inquiry_len inquiry vpd_pg0 vpd_pg83 vpd_pg80 vpd_pg89 vpd_pgb0 vpd_pgb1 vpd_pgb2 sdev_target sdev_bflags eh_timeout manage_system_start_stop manage_runtime_start_stop manage_shutdown force_runtime_start_on_system_start lockable borken sdtr wdtr tagged_supported simple_tags was_reset expecting_cc_ua use_10_for_rw use_10_for_ms set_dbd_for_ms read_before_ms no_report_opcodes no_write_same use_16_for_rw skip_ms_page_8 skip_ms_page_3f skip_vpd_pages try_vpd_pages use_192_bytes_for_3f no_start_on_add allow_restart no_start_on_resume start_stop_pwr_cond no_uld_attach select_no_atn fix_capacity guess_capacity retry_hwerror last_sector_bug no_read_disc_info no_read_capacity_16 try_rc_10_first security_supported wce_default_on no_dif broken_fua lun_in_cdb unmap_limit_for_ws rpm_autosuspend ignore_media_change silence_suspend no_vpd_size queue_stopped offline_already disk_events_disable_depth supported_events max_device_blocked iorequest_cnt iodone_cnt ioerr_cnt iotmo_cnt sdev_gendev sdev_dev dma_drain_len dma_drain_buf sg_timeout sg_reserved_size bsg_dev access_state state_mutex sdev_state quiesced_by sdev_data Scsi_Host __devices __targets starved_list default_lock host_lock scan_mutex eh_abort_list eh_cmd_q ehandler eh_action host_wait hostt transportt tagset_refcnt tagset_freed host_blocked host_failed host_eh_scheduled host_no eh_deadline last_reset max_channel max_id max_lun max_cmd_len can_queue cmd_per_lun sg_prot_tablesize opt_sectors dma_boundary active_mode host_self_blocked reverse_ordering tmf_in_progress async_scan eh_noresume host_tagset short_inquiry no_scsi2_lun_in_cdb work_q_name work_q tmf_work_q max_host_blocked prot_capabilities prot_guard_type n_io_port dma_channel shost_state shost_gendev shost_dev shost_data scsi_target starget_sdev_user reap_ref single_lun pdt_1f_for_no_lun no_report_luns expecting_lun_change target_busy target_blocked max_target_blocked starget_data scsi_device_handler scsi_target_state STARGET_CREATED STARGET_RUNNING STARGET_REMOVE STARGET_CREATED_REMOVE STARGET_DEL scsi_data_buffer scsi_cmnd_submitter SUBMITTED_BY_BLOCK_LAYER SUBMITTED_BY_SCSI_ERROR_HANDLER SUBMITTED_BY_SCSI_RESET_IOCTL scsi_cmnd eh_entry abort_work eh_eflags budget_token jiffies_at_alloc prot_op prot_type prot_flags submitter cmd_len sc_data_direction cmnd sdb prot_sdb underflow transfersize resid_len sense_len sense_buffer extra_len host_scribble scsi_host_template queuecommand init_cmd_priv exit_cmd_priv eh_abort_handler eh_device_reset_handler eh_target_reset_handler eh_bus_reset_handler eh_host_reset_handler slave_alloc slave_configure slave_destroy target_alloc target_destroy scan_finished change_queue_depth mq_poll dma_need_drain bios_param show_info eh_timed_out eh_should_retry_cmd host_reset proc_name tag_alloc_policy track_queue_depth supported_mode emulated skip_settle_delay shost_groups sdev_groups rpm_autosuspend_delay scsi_host_state SHOST_CREATED SHOST_RUNNING SHOST_CANCEL SHOST_DEL SHOST_RECOVERY SHOST_CANCEL_RECOVERY SHOST_DEL_RECOVERY scsi_transport_template sg_io_hdr dxfer_direction mx_sb_len iovec_count dxfer_len dxferp cmdp sbp pack_id masked_status msg_status sb_len_wr host_status resid sg_io_hdr_t compat_sg_io_hdr sg_scsi_id scsi_id scsi_type h_cmd_per_lun d_queue_depth sg_scsi_id_t sg_req_info req_state sg_io_owned problem sg_req_info_t sg_header pack_len twelve_byte target_status other_flags sg_scatter_hold k_use_sg sglist_len bufflen dio_in_use cmd_opcode Sg_scatter_hold sg_request parentfp sense_b res_used sg_fd sfd_siblings parentdp rq_list_lock f_mutex timeout_user async_qp req_arr force_packid cmd_q next_cmd_len keep_orphan mmap_called res_in_use f_ref Sg_request sg_device open_rel_lock sfds sfd_lock detaching open_cnt sgdebug d_ref Sg_fd Sg_device compat_sg_req_info sg_remove_sfp sg_remove_sfp_usercontext sg_add_request sg_get_rq_mark sg_build_reserve schp sg_remove_scat buff_size sg_build_indirect srp sg_finish_rem_req exit_sg init_sg cl_dev cl_intf sg_remove_device sg_device_destroy sg_add_device sg_rq_end_io sg_rq_end_io_usercontext sg_mmap sg_vma_fault sg_fasync sg_poll cmd_in sg_ioctl sg_write sg_new_read sg_read sg_release sg_open sg.ko   &                                                                                                   	                      
                                                                  #                      )                      .                            #                         2                   ?                  X           	       n                             <                                       $                                                                   .                   #                    P      |                                                    -                      ,          	      >          E         #              P   #              e    @
             v                   Q   #              ~   #                 .                    .                  #        (          .                  .                   # @                          L           
      `          )                    0                              &    
      [      4                 <   .                 E   .                 N            	       Z    8              f   	         m       y    p                                                  (       
                 _          	 m                  0                                       ]      
    P                              5   .                B    !            V    p$      K      _           	       k   #         (       r   	        0           (      
          3               .                    .                                         :      [                           %                   '                            8       +    8       ;       L    s       Z       k                                                                 %           #                 :                         (           h       
       $    Q             I    (       (       c                      p                 P       (                                                  
                    
 x                                                        
                                          &                     6                     M                     ]                     p                        ,                                                                                                                                                         L                                                                      !                     .                     9                     L                   X                     l                                                               	                                                                                                                                                                        ,                     <                     I                     ]                     j                                                                                                                                                                                             	                     	                     "	                     3	                     F	                     X	                     b	                     x	                     	                     	                     	                     	                     	                     	                     	                     
                     
                     &
                     7
                     D
                     P
                     f
                     ~
                     
                     
                     
                     
                     
                     
                     h                                                               -                     5                     B                     R                     _                     x                                                                                                                                                                                              a                                                               )                     >                     H                     ]                     l                     u                                           __UNIQUE_ID_srcversion194 __UNIQUE_ID_depends193 ____versions __UNIQUE_ID_retpoline192 __UNIQUE_ID_intree191 __UNIQUE_ID_name190 __UNIQUE_ID_vermagic189 _note_10 _note_9 sg_get_rq_mark sg_poll sg_device_destroy sg_index_lock sg_index_idr sg_fasync sg_mmap sg_mmap_vm_ops sg_vma_fault sg_remove_scat sg_finish_rem_req sg_build_indirect scatter_elem_sz_prev sg_build_reserve init_sg sg_big_buff __key.25 sg_sysfs_class sg_interface sg_sysfs_valid sg_sysctls exit_sg sg_check_file_access.part.0 __already_done.3 sg_remove_request.isra.0 sg_add_request sg_add_device sg_fops __key.37 __key.38 __func__.36 __func__.27 sg_add_device.cold sg_remove_sfp sg_remove_sfp_usercontext sg_rq_end_io __func__.31 sg_rq_end_io_usercontext sg_rq_end_io.cold sg_new_read sg_release sg_remove_device __func__.26 sg_common_write.constprop.0 sg_allow_dio sg_new_write.isra.0 sg_write __func__.33 _rs.34 sg_write.cold sg_ioctl sg_open __key.29 __key.30 .LC45 sg_read __func__.35 __UNIQUE_ID___addressable_cleanup_module333 __UNIQUE_ID___addressable_init_module332 __UNIQUE_ID_allow_dio329 __UNIQUE_ID_def_reserved_size328 __UNIQUE_ID_scatter_elem_sz327 __UNIQUE_ID_alias326 __UNIQUE_ID_version325 __UNIQUE_ID_license324 __UNIQUE_ID_description323 __UNIQUE_ID_author322 __UNIQUE_ID_allow_diotype321 __param_allow_dio __param_str_allow_dio __UNIQUE_ID_def_reserved_sizetype320 __param_def_reserved_size __param_str_def_reserved_size __UNIQUE_ID_scatter_elem_sztype319 __param_scatter_elem_sz __param_str_scatter_elem_sz .LC39 .LC36 .LC66 __check_object_size __class_create idr_find _copy_from_user register_sysctl scsi_autopm_put_device scsi_device_get __msecs_to_jiffies blk_trace_startstop __this_module queue_work_on __SCT__preempt_schedule finish_wait kill_fasync class_destroy get_sg_io_hdr cleanup_module kfree prepare_to_wait_event __wake_up __module_get __fentry__ __scsi_print_sense init_module _raw_write_lock_irq _raw_read_unlock_irqrestore __x86_indirect_thunk_rax scsi_block_when_processing_errors scsi_ioctl scsi_cmd_allowed ___ratelimit __stack_chk_fail refcount_warn_saturate unregister_sysctl_table __copy_overflow __put_user_4 blk_mq_free_request __free_pages _raw_read_lock_irqsave module_put page_offset_base sysfs_create_link scsi_device_put compat_ptr_ioctl cdev_add hugetlb_optimize_vmemmap_key idr_remove __task_pid_nr_ns init_wait_entry __list_add_valid blk_rq_map_user_io sysfs_remove_link idr_alloc blk_execute_rq_nowait device_create idr_preload mutex_lock sdev_prefix_printk fasync_helper class_interface_unregister scsi_logging_level scsi_command_size_tbl __list_del_entry_valid __mutex_init jiffies_to_msecs current_task idr_destroy _raw_write_unlock_irq scsi_register_interface blk_trace_remove __x86_return_thunk _copy_to_user __init_waitqueue_head blk_rq_unmap_user _raw_write_unlock_irqrestore scsi_autopm_get_device nonseekable_open blk_trace_setup sprintf vmemmap_base __preempt_count __get_user_1 unregister_chrdev_region mutex_unlock put_sg_io_hdr alloc_pages __get_user_4 scsi_ioctl_block_when_processing_errors scsi_alloc_request proc_dointvec kmalloc_trace _raw_write_lock_irqsave param_ops_int scsi_normalize_sense __kmalloc __SCT__might_resched kmalloc_caches cdev_del system_wq cdev_alloc                 {   !             u                                                              {                
            M            ^            p                                                                                    {            
                                                              
                                  !         w   3                   :                   ?            K         w   Q         {   {                                    )                                                           {               *            P                  X            h            v                    }                                        {               9            o                        (                                               {               &            H            e                   l            P       x                     w                           =                                               {                           '            6            y                                                                                      p                                               {   6            ^                                                                  1            U                  n                                                                          $	            T	            	                  	                  	                   	                   	            	                  	                   	                  	                   
            
                  A
         {   G
            
            
            H      
                   
            
         {   
         	   
            
                             	                           h                   ,            1         {   j            ~                                                         y            {   (            e            w                                                            
            
         {   7
            @
            H
         o           O
                   _
                   q
            
            
         
          
            
                   
            
            
                   
            
         
           
                   
                     
                                           Z         
          _            f                                 
                      6                
                                                     N                                      
                                     +                  0            J            Q         
          V            a                   i            p         
          x                     w                                               0                                              w                                                             q                                                      0                    7                  @                   L            S            8       Z                   b            q         {                                                                              p   !         {   t            i       z                                                                                 y            s   )                                    (                |               !         c   0            D            K                                       p                                                                         {               +            1         {   P                             f                           X                                 {                           #         k   >            f            {         y            y                           J                                              {               [                                                         w                        o                       9                  @                   E            T            i            V      p                   u                     {                                    y            s            y   (            2                   7            A         
          L            X                                                P                   o                                              {   $         M   8                                             
                      S            ^                                                       >            j            p                        /            Y                                                                                     
                                       !             4             s      ;                    G             i                          P                                                    P!                  W!                   c!            !            !            !         {   S"         u   {"         m   "         f   "         i   
#            _#            #            D$                  K$                   W$            ^$            q$         {   %                    ;%            u%         i   %            %            %            &            &         f   &         i   &'            .'            P'                    '            '                   '                    '            '                   (                  
(                   (            )(            x      0(                   5(            F(                   l(            (            (                  (                   (            (         {   )            )            )            )            *            *            *            *         n   ;+            g+            +            +            +            0,            _,            ,            ,            ,         n   ,                  ,                   ,            -            -            -            -             .            0.            }.            .            .            .            7/            {/            /            /            /            /            &0            g0            |0            0            0         ~   0            0            D       0            1            1            1            1            1                    1            1         w   "2            52            G2            Y2            w2            2            2            3            3            33         x   F3            Y3            l3         r   3            3            3         {   3            4         
          4            4                   %4         h   B4         
          M4            w4            4         
          4            4            4         l   4            5            5            65            `5            i5         k   r5            5            5         
          5            6             6            06         x   C6         r   K6            k6            p6            6            6            6         x   6         r   7            "7            '7            M7                  T7                   Y7            |7            d       7            7         
           7            1      7            7         
           7            A      7            8         M   8            K8            x8            ~8            8                  8                  8            8         o           8         z   9            R9            Z9         w   9         y   9            9            9            :            8      :                   :            :                  /:            F:            O      M:                   R:            g:            :            :            :         {   :                    .;            };            ,       ;            <            <         w   <            <            =                    9=            s=            ">            e      )>                   .>            >            >            >         f   
?            M?            \?            ?            ?                   ?         f   ?            )@            Q@            e@         x   @         r   @            `      @                   @            @         r   A                      {                                                             (                   2                   :                   @                   G             Z       V             g          
           n             ]       u          o           z          g             
                                        
                                  
                    t             
                @                    j                 j             
                                       
   
                                                         
          %          t   7          
          <             C                    H                          8       
             q                                 4      %             8       ,             `      1             6             
      =             8       D                   I             N             
      U             8       \                    d             i             J      p             (       w             2      |                          t                                                                        &                                                                                P                          (                   0                   8                   @                   H             @
      P                     X             
      `             0      h                    p             
      x             p                                                          0                                                                                               !                   p$                   (                   3                   :                    ^                                                         N                                                         s                                       4      $             {5      (             8                o                        :                   p$                                     (                                             0            3      @                  P            P                                      h                 o                                           
           (                    0          o           8                     H                   P                    X          o           `                     p                                                                                              o                                                         g                   8                   n                          $             x      (                   ,             #	      0             
      4             
      8             +      <                   @                   D             v      H             
      L             I      P             (      T                   X             W      \                   `             e      d                   h                   l             ^#      p             %'      t             *      x             v4      |             <                                                                                 
                                                                                }                    ~                            $                    (                    ,                    0                    4                    8                    <                    @                    D                    H                    L                    P                    T                    X             h      \             i      `             k      d             m      h             o      l             t      p                   t                   x                   |                                                                                                                                                                                                                               %                   G                   H                   J                   O                   P                   W                   Y                   Z                   [                                                                                                                                                                                                                                                                                                                               ]                  a                  c                  e                   g      $            l      (                  ,                  0                  4                  8                  <                  @            .      D            4      H            6      L            8      P            =      T            i      X            j      \            l      `            n      d            s      h                  l                  p                  t                  x                  |                                                                                                                                                                                                                  u                  v                  x                  }                                                                                                                                                                                                                                                                                                	                  	                  	                   	                  	                  !	                  #	                  (	                  5
                  @
                  M
                   O
      $            W
      (            ^
      ,            
      0            
      4            
      8            
      <            
      @            
      D            
      H            
      L            
      P            *      T            +      X            @      \            B      `            C      d            G      h                  l                  p                  t                  x                  |                                                                                                                                           	                                                                                          m                  n                  p                  r                  t                  v                  {                                                                                                            
                  
                  
                  
                  
                  
                  
                  
                  "
                   &
                  <                  @                  A                  C                  E                  G                  I                   N      $            k      (            p      ,            w      0            x      4            y      8                  <                  @                  D                  H                   L            '      P            )      T            +      X            -      \            .      `            /      d            3      h                  l                  p                   t            "      x            $      |            &                  (                  -                                                                                                                                                                                    #                  $                  *                  /                  0                  7                  9                  ;                  @                  D                  H                  X                  M                  N                  O                  Q                  S                  U                  W                  \                                                                                                                                                                                            $                  (                  ,                  0            b      4            c      8            e      <            j      @                  D                  H                  L                  P                  T                  X                  \                  `                  d            	      h                  l                  p                  t                  x                  |                                                ~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $            
      (                  ,                  0                  4                  8                  <                  @                  D                  H                  L                  P            #      T            $      X            <      \            !      `            !      d            !      h            !      l            !      p            !      t            !      x            !      |            !                  T#                  U#                  V#                  X#                  Z#                  \#                  ^#                  c#                  b$                  p$                  w$                  |$                  ~$                  $                  $                  $                  $                  '                  '                  '                  '                  !'                  #'                  %'                  *'                  '                  '                  (                  (                  (                  (                  (                   (                  (                  (                  (                  *                  *                  *                  *                   *      $            *      (            *      ,            *      0            C0      4            \0      8            3      <            3      @            3      D            3      H            3      L            3      P            3      T            3      X            3      \            i4      `            m4      d            n4      h            p4      l            r4      p            t4      t            v4      x            {4      |            :                  :                  :                  :                  :                  :                  :                  :                  :                  <                  <                  <                  <                  <                  <                  <                  <                  =                  >                  >                  
>                  >                  >                  >                  >                  A                                                                                                                   L                                        m                                                                           d                                        d                        u?                e                         Y                   s                          @                   H                   `                                  
                                    v                      }                                         q                        f0                                        o6                                        &7                                         r=      $                     8         }           P         v            .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.init.text .rela.exit.text .rela.text.unlikely .rela__mcount_loc .rodata.str1.1 .rodata.str1.8 .rela.smp_locks .rela.rodata .modinfo .rela__param .rodata.cst2 .rela.retpoline_sites .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela__bug_table .rela__jump_table .rela.data .rela.exit.data .rela.init.data .data.once .rela.static_call_sites .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF .gnu_debuglink                                                                                       @       $                              .                     d       <                              ?                            A                             :      @                     H3      3                    J                     A                                    E      @               	           3                    Z                     B      L                              U      @               p            3                    j                     B                                    e      @               `
     @      3   	                 ~                     C                                    y      @                          3                          2               D                                        2               0G                                                       K      ,                                    @               @           3                                         K      `                                    @               H           3                                         @N      &                                                  hP      x                                    @               P            3                                         P                                                        P                                          @               p            3                                        P                                          @                          3                                        lQ      
                             #                    [                                        @                    H*      3                    2                     c                                    B                    |      $                              =     @               B            3                    S                    }                                    N     @               xC     H       3   !                 e                     }                                    `     @               C     x       3   #                 p                    8~                                    k     @               8D            3   %                                     @~                                    {     @               PD            3   '                                     H~                                                        I~      (                                   @               hD            3   *                                     ~                    @                    @               XE     0       3   ,                                            $                                   0                      P                                                  P                                                          P      H4                                                                                                                  h      4   f                 	                                                                               E                                  0	*H
01
0	`He0	*H
1a0]080 10UDebian Secure Boot CA2(oe:B&C0	`He0
	*H
  &YpG$9 kSf"i,Wf]nW`aT`Y',[z)Tkӣ&.:+e	fs}?-{Sdx
pYUA&gt֡	1A=Pk	lս]ʭ=#*q\}_M?rk$#yMSF4cz,27;BBK4])<3B꫔MT-?r
,         ~Module signature appended~
 070701000C0069000041ED000000000000000000000002688C09C800000000000000CA0000000200000000000000000000003C00000000usr/lib/modules/6.1.0-37-amd64/kernel/drivers/scsi/smartpqi   070701000C006A000081A4000000000000000000000001682F6DA700044BAB000000CA0000000200000000000000000000004800000000usr/lib/modules/6.1.0-37-amd64/kernel/drivers/scsi/smartpqi/smartpqi.ko   ELF          >                    <         @     @ 4 3          GNU ʙ%Wѻ9<ѷ~        Linux                Linux   6.1.0-37-amd64      3  HHRHк   HH3  t2   	1҃   HRHH3  uӃ1   Hf3  HA(    aA    HA0        ff.         H      t1Ƀt    B=u	1ɉ    B=f.         ATUHSHHH0  2   tXHH2  IH    HHHt/   H߃0A$
   fAD$       []A\    H    Hff.               UHS1:HHtc   JvUtPƀ"  HwHG    ;   s?H<@HH3  tHG(HuGHG0    ;   r[]        ff.     @     H         AU1ATUHSLoL    1  1  ~T1HcÉLH@HL      M11҉I    H        Aąu#1  91  E1[D]A\A]    L    I   DH        ff.         AUATIUSHLopH0  IEXH8  IE`H@  IEhHH  IEpx  
  AEx   ImE H    H   H$    H    H9xT       E uIT$`IEHH @  IT$`I$P  IEPH @  I$`  H1[]A\A]    H[]A\A]         ATUSHH2  t
        HCp#      Hkpf}HŐ   kd    IH    I!H    t8HD$    H    I9xKd       E <@u1H[]A\    H{H    D$H       D$˸ff.     @     AVAUIPQI DREGATUHSHH    LgpHL  "H$    H    H9           I$L9uMt$AD$E1t&Ll$H    H9           AuMl$@AD$@E1t(Ld$H    H9           AE u1H[]A\A]A^    ff.     @     ATUHSFHu0F
tH3   2  	Ј2  AvguIDf
2  D	Ј2      HEDЉ    HH[]A\        
    u    
        	u    @     HHH0  2   ttAULH2  ATUHSHL    IHHt6   H       H    LL    Hc[]A\A]    LL    HH    @     H:          @        HH<   w@<(t
vr<*      ȉHA   fA   A1    <t<      ȉHA   ȉA   A1    <t<
u|      f%   	   HHA   DƉA   A1    <u,H   HHA   ȉA   A1           ff.          UH   SHH   2  eH%(   H$   1HHH@x+E1H$   eH+%(      H   D[]    H\uD$EtHL   AQhr   utu tLT$D\$I   H
Ht
I9rLL9sOJt9CCHu@HH    MHIA  M   +u$HH    MHLL         fD      ATUHSHHH0  2   tXHH2  IH    HHHt/  H    H       L    H[]A\    H    Hff.         ATUHSHHH0  2   tyHH2  IH    HHHtPH    @<t*H    H   LH        H[]A\    @hH    <wH,    H    Hff.         ATUHSHHH0  2   tWHH2  IH    HHHt.Hh`H    H       LH    H[]A\    H    Hff.     f    AWAVAUATUSHH HHHT$H0  2     HH2  H<$    HH<$HHa  B<   B-Z,j7Db8Dj9Dr:$B.Dz;D$B/D$B0D$B1D$B2D$B3D$B4D$B5D$B6D$    ˾   H    AWAVAUATUD$APD$HPD$RPD$^PD$ePD$lPD$sPD$PDL$DD$hH|$p    HHhH []A\A]A^A_    BZj'Db(Dj)Dr*$BDz+D$BD$B D$B!D$B"D$B#D$B$D$B%D$B&D$    Hl    ATUHSHeH%(   HD$1HHH$    H0  2   toHH2  IH    HHHtFH@HH$    H       LH    HHT$eH+%(   uH[]A\    H    H    @     H
   HH    H  2      H    f         H
   HH    H  2      H    f         H
   HH    H  2      H    f         AVI    AUA   ATIUH    S1HcL    HMH)L9E tCH        HI9uHcþ   H    I<H)    []HA\A]A^    H        ff.         H   HH    H  HR    H    f    H   HH    H  H0    H    f    H   HH    H  HA    H    f    H   HH    H  H    H    f    HH       H        H    f         AW   AVI   AUIATUSHH   DBH    eH%(   H$   1Ld$LHI1  L狈      HcC<  KDC   I<,H)H        HHž   I<,H)C<K  KDCH        HHLKILCAH    C<u;LD$L$    LD$L$HA   I<,H    LH)    HHC<   uJChI    <        I<,H       D@+H)+    I}LLH    H       H$   eH+%(           {>LI<,H    H)+    HcHufKj   H    H)L    yLC$HKH    HI    HH   I<,H    H)    HHYt)L    f.         AW1AVAUATUSH(eH%(   HD$ 1HHfL$L0  A2     IH2  HIHHD$    HIH  EwE1Ll$1MD$   I    Uv   }     I1     DMHHcDE  H)RI<EH    P    Ã} XZtkE<teBm   fD$</wD$0/wD$0Hc   HL$H    H)L    BL-{A   ÍA<   E tQtLHc   LH    H)L    IItREu   DD9I    E<t}?wHcL$   H    H)L    Ht$H|$    HcHT$ eH+%(   uHH([]A\A]A^A_    HcLH    H)L    %H|$H    H    @     AVAUATUSH3  HttHGL   IL      tA1#HK@E1LLH`    A;$   sH{H    HS8HuI$3  H    IǄ$3      []A\A]A^    fD      AVAUATUSH84  H   HGIL   EHtGDuLfEt/I1HL]Pt]XE1LI$H4  HH    I9uI$H4      E1HP  LI$@4      IǄ$84      []A\A]A^         AT1UHSHHHeH%(   HD$1HT$D$     uvHHL0  IH2  L    HHHtn    t9B<t3D$L爂       HD$eH+%(   uMHH[]A\    L    HHT$eH+%(   uH[]A\    L    H    D      UHHSHHH  1eH%(   HD$1HT$D$     u;|$ 2  	H؈2  HT$eH+%(   uH[]    H            UHHSHHH  1eH%(   HD$1HT$D$     u;|$ 2  	H؈2  HT$eH+%(   uH[]    H            UHHSHHH  1eH%(   HD$1HT$D$     u;|$ 2  	H؈2  HT$eH+%(   uH[]    H            UHHSHH(eH%(   HD$ 1H$    HD$    HD$    HD$           H9HG      t$   H     H    HH       H    H       H    H    H   HT$ eH+%(      H([]    pHLHLl1҉уH<H<9rQ$LL=1H        H냸   LfL               H0  H   2  uHp1        @     AVAUIATUSHH0  LH2  L    A   Iƅ   I  HHp@    HHt]@<   A   SI   C<SI   sjL  f   C<tAP  {	uAO  LL    1[]A\A]A^    H82  H82  A   A   H@H9t;KtH  H@H9t;Ku;su;{uHW대K=LfslL    Vff.     @     AWHE1HAVA   AUATE`USLHA H$    AHLHOW@    HP;A D9t4LhE9uH4$HV@@   HPD)APLn8@   @HD[]A\A]A^A_    ff.         USHH0eH%(   HD$(13      2   u"3  HD$(eH+%(   uxH0[]    1HH$    H 4  HD$    HD$    HD$    HD$                HH    2   uHH    q    f         ATIUHS  H  fFH    A$2      H    I$  HA$  :A$   AA))9AC)уtHM I$  H
HMHJ1A$   I$  A$  H[]A\    []A\    D      HAWAAVAUATUSH   H   IH   HIIE    urHڸ     H   H   H+    H4E1ELHHHH5        HtbI$El$AD$   @1[]A\A]A^A_    =     u6I       HuI   H    HH    H    H    aff.     f    AUATMAUHSHHH{	H)H   1DT$0Ll$8HC    HCx    HL   fKDKHHC  w7     hu|    KC 'fC%DffC'E18       1KC &S&fC'KA   EE H}HHs@L[L]A\A]    atfulDf먀   t  CC뛀wC    CS C   2  C!DȉC&]t       CC    fC DȉC&%1CC 'DC&fS'CA      DAfCfDfCC CA   tC!DS"DK$2  <-            ff.          AWIAVAUIATUSHHX  HH  HHNHHHNHHHNHHHN HH HN(HH(HN0HH0HN8HH8BHP  X  L%    h  H(  IĘ:   9u^E1!           H(   9u8L4$H    I9    H    uH[]A\A]A^A_    H  HIHPIWHPIWHPIWHP IW HP(IW(HP0IW0H@8IG8EHHH$)H`  h  A?AE
u7fA<u%A:G
u3AGH[]A\A]A^A_    5+!@     S   HH   eH%(   H$   1HT$@HHHH|$   HD$    HD$8    H<   H$`fD$1  H1  D$
D$    fD$H1  HL$HD$1  fD$(uHK`HT$PH @  H1  H$   eH+%(   u
HĈ   [                AW   A<   A   AVAUATUSHH   eH%(   H$   1Ll$HHl$	LHH|$HHD$	    HD$@    H)?HHHt$L4@D$`IfDD$
N$3D$A$  fDL$*fD$J3  HPPH@HD$   HT$ LfD$(e    H|$HS`HE1HHD$X<   H)H @  ?I$  LHD$	    HD$@    H   ft$
Ht$f|$*HA$  D$`D$fD$J3  HPPH@HD$   HT$ LfD$(    H|$HS`HD$XHHHt$H)H @  L;I$  LHD$	    HD$<    H<   HD$`fL$
A$  D$D$D   fD$*    H|$LHD$	    Ht$HD$@    HH)M?H<   HD$`fD$
A$  D$fD$J3  HPPH@HD$   HT$    fD$(A$  fT$*LfD$0    HK`HT$XH @  I$  H$   eH+%(   uHĐ   []A\A]A^A_        f         ATUHSHAą       1ۅtH    ;   rHD[]A\            H                SH2  f2  t9H{    HCH    H       H5        H3  [        f.         US1  HtQǃ1      H+Ņt	[]    H    Ņ    H    H߃    []    HGpHff.         ATUSHHǘ3  Ƈ     ƃ2  HP2      H2      4    H    H1  HtH    H    2  B  1  1~3HcH{H@HL      L    ;1  |ǃ1      1     H   Ht HCH  E1   H       H   Ht HCH   E1   H       HH   Ht HCH   E1   H       H{`Ht'    H{    H{H  HǇH      H[]A\        H{H{    ǃ1      HH2  l    SHHH  eH%(   HD$11fD$Ht/H{HT$,       1f|$H4  HD$eH+%(   u
H[        D      SH    t?H    u1[    H    H߄u[    H߃    1ϸ[    @     USH_xHMŅuU2  H1  ƃ2      ƃ2   11H 4         H1      ƃ2   H1      []    f         AWIAVAUATAUJ   SHHXH<$HHD$@    HD$8ID$
HMHtGLL{ LkPLHLLT$LL   L    LT$tL   LSPLsXM.M\$
K,L؋]PIL$HMI MpLhM9l  LLd$PML$$LT$IHl$HL\$H$uLLD$    LD$+1LA$       tIWPIGXHBHH     HL$MEPIGPH"IGXIEPMHPI9   IIwHFLXH   HD$HIDA$   )׍)9Cǃ)9rtAFfFH$A$   I<)9LD$0L\$(HT$ Ht$    HT$ H$L\$(Ht$I<I)HL    LD$0Hl$HLd$P9]Pt
]PKD@Ht$8H|$@HX[]A\A]A^A_    @     AWIAVIAUATIUSH0\$pDl$xLL$LL$hT$DD$ALL$eH%(   HD$(HH   H4$H@    HL`(@	È]H]HH{	HC    HHC8    )H@1HT$SA$   CB    DkAA	DkEH4$LL$fCDD$fC0F<tA2       HS A9IFC3sA  tAK   A$   tgwtc  CCfIHK ItHt
HK(HH)I)׃r1҉փI<7H<19rA$   uCC	   MtK AfCAACAACLD$'        uL1<   fSHt$HLC2   1HT$(eH+%(      H0[]A\A]A^A_    E   HH{@I$   LL$'L$'S	ʈS<uI$H   HHC4aM U  mK	AK ALLiALfLY        fD      AWAVAUIATIUHSH8  H$H|$H   Ht$HeH%(   H$0  1D$D    HD$<    HHOD  uh@t$I@}  3  @_  @  |$H q  DD$dE   LT$PDH  MLLL$XL;O   M9   G$f$   OAƉD$Df$   D_*fL$*fD$   L$Dt$hE   EL1DT$,IL|$01HHD$pLIHL$ DAIHD$xD)DA׉$   )1t$$   1҉D$$   t$$   9D$uL9|$         @@u|$H A2  tҋD$`A9,2  r|$H A2   tD$`A9(2  rA2  tD$`A902  rsG&T$D<D$   W(OT$HT$ HL$H1t$$   AщL$L<  |$H E  H$DDXE9A    ECD\T$L$L  T@L$$   D$   $   D$*HD$pHGD$   A)LH$   OtHH$   OAD$   A  oL$HH$   IEAI   AvHH$   AD$   D$   A   D$   G,I  D$`9  G=   tIH	D$,IG.I L|$<DT$DfD$<D$,D$@/  @t!  @!  @  LLLpHHIH@    I~LL`(1HI    H)IFH    PHEh<AEf%?|$IfAF
$   AF$  AF  A$   IN AFH$  IF@ABfAFfAF0$   HЀvƄ$         AF3H$   ЃO    t$   AV   AFAVMt "AFAfAFAGAF8AGAF<LLT$D$;     LT${      L   !  fANB  F+fAw|$H AL1AH$   IH1Ht$0HT$I1҉$   LHIH1Ht$0$   HA9L$   Lt$pL$   M9HT$$   Љ$   $   1t$1҉$   A$   t$$   A9COW(I1L$   G(AADɀ|$H L$LA1AW&A)ЉT@$  @uD@$  DE$  HD$ H$  |$H A2  @  L5LpHHIH@    I~	L`(DHIF    )IF8    H@1HAEf%?fAF
$   AF4$   AF$   AF$     A$   IN AFABfAFfAF0$   HЀvƄ$         AF3H$   Ѓ    t$   AV   AFAVMt "AFAfAFAGAF8AGAF<LLT$D$;     LT$r    E   LщI~@I$   LL$;L$;AVLT$	AV<fAVAF2H4$LѺ   LZE1fAA*ȉ$   fD$   A
   D$   oj LLjAWLL$H$   HH$0  eH+%(     H8  []A\A]A^A_    $  AF$  AF4	$  AFD|$1AЋD@$   B:HD@$   fAvADD@$  D$   A
U  GH$   HyHIF HDHDH)
H)΃1҉уLL9rH$   HyHIF HDHDH)
H)΃1҉уLL9r1<   &I$   LI~PLL$;E   L$;AVLT$	ʉAVL$   AV TT$   AV TTTfTTfT    f    AVMAUIATIUHSHH^HeH%(   HD$1HN(H{	HF    HHC    )HC8    H@1HH      CFHs fCfCHB   HCHE H   C;   H9HGsb¨n  t   @{ l  @ Hr
CC     wf
  CCXH   H{(HHS HTHTH)HHH)r1AȃNN9rq   HD$        <   u;fCL1LL1HT$eH+%(      H[]A\A]A^    H   LH{@LL$E   IL$S<	ʈSA$U  둀KTCCB   { LLLfL        @     AWAVAUATUSHL5    D$   HHt$L,Am    HIM	  4  tL2   uH[]A\A]A^A_    H    u2   tӾ   HZ2   tH=    L)    L9sNHD$    H    I9               Am \H1[]A\A]A^A_                 AVAUATUSHHH0  L1  L       H   H         LH2  L    H  I    tH  H  HBHH     LLH  H"H      L    HHH    jH      H[]A\A]A^    [L]A\A]A^    []A\A]A^         u    UHhSHH    tD tDHCKHt?9KtKSH5    H[]H	      9Su     u[]    1뿾   HPff.          AWAVL3  AUATIUHSHLH(eH%(   HD$ 1HD$H$    HD$HD$HD$    td      3  AD$tO2   Au`3  L    HD$ eH+%(     H(D[]A\A]A^A_        뢀2   tHA2   tH#A<$I@fAD$ufAD$AD$I}HLHP    L1HIE    H  Ie3	  H    Hu	2   uPIu0Ht{H   HH}HHU H  H  H)H)  HE1AM H    u2   t   Hv2   f|HtVtZA   tAu~ tH}HE     HHǅ      HH)  HbA PFMAE    f    AWAVAUATUSHĀ   eH%(   HD$x1HD$    HD$     HD$(    HD$0       I  H    IH    AO|IO`HHHHL$    A\$tUH$    E1E11HL$f   ]t(I,E ftOfuHDI3  ]u؄uhL    1HT$xeH+%(     H[]A\A]A^A_    5        HDI3  |HIM   H$dH    I            H    fHH=    uH    "ATs%EHH    t2EAN9rHEHtHHL    H    u΅  ENH       Lʀx t΃DA\6HH=    uH$ItH\H    AFftAF   1H|$@   1HD$9    Ht$8HD$p    H<   LD$8ufD$:D$D  	    A t;AGANH<$TJsAG
IGHtLL    II    uH        L    HTC   f7    f    AWIAVAUATLH8USH   eH%(   H$   1    IE1IW  P  H   H    H  IGHAG@        9    ALd$(IH\$8t$$D$ LMHl$0IƉHD$@    D$ 11D$ƍ@?     H<    HD$    IFH   IL     MoPL|$1MH$MA'HD$@LEwHIIGH9\$   IEH4$E1L  HT$@H,    HE I}H< uDL|$MCt2L,$HcHHE1LHLHILP    I~u    D$$   9  M~DLd$(Hl$0MLt$DD$B   @fEFLDEFHHOFA_QRM    fMHE 1H|$P   HD$I    HǄ$          H<   D$HufD$JIGfT$RHt@LIWHHT$TD$\11Ht$HLH$   eH+%(   uNHĐ   []A\A]A^A_    LMLd$(Hl$0DD$I1Ld$(H\$8MHl$0        f         AWAVAUATUHSH  eH%(   H$  1Ld$H|$HD$    LL$   HǄ$       H)$    HD$    HH$   LHǄ$       HǄ$      H)  HH~ tDv<HAAt3E1H$  eH+%(      HĨ  D[]A\A]A^A_    H=    @         IHtTH    1A@   j ILHZYuCHC1LLHHD$u&$   $   Hu
$   Ht<t
L    <   HT$H$   H9HG    tр|$uʀ|$uÀ|$uC@A             AUI˹   EATI@UHSH   eH%(   H$   1Ld$D$    L$   LLHHD$LHPAQMMZYÅt'H$   eH+%(   uMHĐ   []A\A]    L1LHL$ÃtH}T$PE1Ht$HH               AVe    AUATUHH=    S    H   j E1Ae  HH       HHAXE   Lm!      CE     LD   E    H         I| D   H        H   H}EQ LEZ H    HEAH   H   HEIH   HER    H    [D]A\A]A^    AHE     L    AVLX     AUIATUSH0H=    eH%(   HD$(1H$    HD$    HD$    HD$    HD$         H    HH<HW>TD H    5    HH)    D$|$l      |$IHiQCH%    <$C	    C C
D$x    |$C    kdC
    DC)    E1Hپ   CA   LH    CDWZZj H߉    X    HD$(eH+%(   u%H5    H0L I[    ]A\A]A^            AT    A
  UHH=    S    Ht?D`HHE1j A    H   H    
H߉    X[]A\        HGx1p@ƃHl1    D      ATI   
  UH=    S    Htjj H    E1HA      LHtZŅu+   E1HLj A      H    EXH    []A\             AWAVAUATIU  SHH=    HT$       H  j @HE1A   LIH    D$Y   A] ˉ=j H    E1MHLZ   AAL9soLL    Ls  L    IHt]HuIE LI    HD$L8D$H[]A\A]A^A_    LE1    LE1    L    D$    뷸LD$    1E1    D$ff.     f    UHH=    ,   S      Ht}HHE1A,   H<HW>DV  HC    HLinux 2.H1.18-045HK   HHSH    HHC    C' C(DWZZj 2H߉    X[]            AU   IIAT   A 
  UHSH   eH%(   H$   1Ld$D$    LLHHD$H    HPj ZYÅt'H$   eH+%(   uiHĐ   []A\A]    AEAU1LH?1҈D$*d$1L$ÃtH}T$PE1Ht$HH           ff.         AWAVAUATUSH   H<$eH%(   H$   12  D$ &  H1  HHHD$(    uT2   At0H$   eH+%(     H   D[]A\A]A^A_    2     AH<$H$      H$   H$   H$   HǄ$       HǄ$       HǄ$           H$   H$Hl$2  {  De   ADHH$HH    HD$HH    HUȉEAHA1AvLH2HH HpHrH@    Hpr@pr@pr@pr@prp9rH    H<$H$          L$   MQ  A$ˉHkH{       HD$HL  Lt$HLLL    HE     H$   HE    HE    A    H|$ L$   n  HD$HD$ ȉHH$HD$@T$0n  H=     
        HD$HH          D\$@E  HD$@@tH$2  @D$0L$@  D,B<        HD$8Hs  1H=      
      HH    L$   L  H$   LL    t"H$   L$   H  L  M4$D9uD$X    1E11Dl$1D
    E  L$@9  HL$D`HHTz?,  L$ IE1M  M  I  H΃IGAG<	AG<  AUAWZ    H<$L  AG<
  ЃD$\
  H=    @         HD$PH  IGA@   E1ɾ   HD$`Hj HL$XH|$6AXP  H|$P   H    H|$P   HWHHT$h    H|$PHT$hAHOIOAHOIOIHRIWQ0  AG<
  AGhAG<AGt     A     	      H5    HP2  HA    E<&    L$09HL$AăHRE1HT1IM'H$   L0!z 	AWAG<>I 3DL$9H$H$   H$   H$   H$   H$   H$   HH2  HHD$    H82  HL82  HD$H@HI9  H  H<H@I9uH$DD$XH82  H@El  HD$8Dd$XL4$INIm L9uXH  H@I9tEHEH9CuU<C<1Шu-F  Hs,H9u,
     t   M< I82  IH@M9uHL@I9  H     #I  I  LH-  L9  IC<t    tH  H  HBHH  L  H"    H$   H  L$   LL    wH$   L$   H  L  M4$Pe<S<S<ECECE<tECES<CE<C<	ЈC<HEAHCAHEIHCIHEQHCQHE`HC`EjC@ fCj      C<   U<;	ЈC<rEhChEtCtA2  tK=H   Hǃ       Hǃ      H)  1HH  H  H  H  ;R  LD$0H|$     H|$ LD$0*              AG<U>S>UpSpU<	ЈC<EuCu      EvCvEwCwExCxEyCyEzCzHE{HC{H   H   H   H   *Dd$XE   HD$8IJIm E<       H$L  LLL@2  L    tH$L@2  L  L  M&L$   L  H$   LL    t!H$   L$   H  L  M&M<@II9PH|$Ht$    H$H4         H$   H$   H
HH  H9u8HH   t@?H  H$   HHH  H9tH@<tH   uH$H1      H1      H$   I"    HE LLH$   H9R  Hl$H,$L|$ M   I      H|$    tI  I  HBHH     M  I  MtI      L    I  I  H$   MHL$H-  H9   IA<     LH    HuAG<DI   DA    t?I  E1 N  DLH    A   AHA9|AG<uI      AG?L    L|$ H$H82  H@I9uJH  H@I9t7H  Htsjf;sltfsl    C=tH      c=H$   L$$HH H H$   H9u;   H   t=H  H  H$   HH-  H9tcHS<tH   뿃u3HcKSsI$1          HH    LԭI$ 3  H    H$E12  H$   H     H"    HL0L0H$   H9uyIAD$<@uJ    tI$  I$  HBHI$  I$  MtI$      L    I  I  H$   MH-  H9uH|$8    H|$    H$       H|$H    EtH$2   u
2   &  H|$(    HsH9uHC$H9E$1|$0  HH    HD$8H    A݅mD$X    `H=    @         HHH  j HT$h   A  H|$A@   HD$p_HL$h¸uA<CHψD$h    D$hAGh@     H=        HtYj HT$h   HH|$A  A@   HD$xt^u HD$p@A   <  H|$p    H=             HHM  j HT$h   A  H|$A   HD$pA[HL$h¸u&yu QHHvQAփ@t$\HψD$`    D$`AW<AGtD$\	AG<H|$P    A   uAƇ   I AW   AG<  IG    AG    tWIEIGIEIG$AEtEMEt
AG>AEAGpIGHL$8HIG`D$XHL<Dt$XIFIG,IFIG4HC4H9E41AG<?  IG   AWAG<[H|$H1@  LHT$HHH<$z   A   fEWjH$HQ  H   AG<          ?  1   AGAG<AOAWAG<HD$HD$H    D$0     ȉHH$HD$@HD$H    H|$PD$\    D$\NHL$H   Hy    HL$H   HAHHD$P    Ht$HHD$PHVIWAHVIWIH@IGQ  AGxFrAGy   AGz  fAGj  AWu  AGvH  IG{H  I   H  I   FsAGw  A   Fktf    t  A   HL$H  A   2       1HǄ$       L$   й   %?  CHP2  	      H5    H    LD$     H  LD$ H  Hǅ      D$0H|$p	HcHHAI?={  uHD$LH9KD$XLHL@I9'A  @       H8j HT$hE1HH|$A@      HD$p`YLT$h"  AD$h=@   voL    DD$h  LLD$x    Hj L$   E1HHT$hH|$   H$   ZLT$x   A
9L$h    A:?    AGh<   <t}ufAz*vABAR$    M  AƇ   AB,-H$2  @   AG<wb<wHH$ 2  $2  9GA  fAz*t    L    fAz*t    H$ 2  A  <	uH$$2  A  AǇ      H$H@H   H    H            H$   1    H$   1AHT$8HT$HH    ff.          HP2  /ff.     @     H0  ff.     @     SH  HH[    f    AU        ATIUSH   eH%(   H$   1Ll$D$    LHH=        H_  HHD$a   LPA   ILj H    膲XZt3H    H$   eH+%(     HĐ   []A\A]        11LLfD$*L$ÃtID$T$PE1Ht$HH       u} u}vf}k}a}Wf}
LM
MDA$ 2  
MDA$$2  
MDA$(2  
MDA$,2  
EA$02           AWAVAUATL@USHH          H{1    ~6HcHHH@HM      L    ;|ǃ        HE1E1    H    L5    S8C<I	  9~7L,$H    H9x           S8C<9E   L'ƃY 11HH{@   []A\A]A^A_        HH    ǃ     ;H=    A   L)    H    HHHiMbH   H&    H-    H	  2H=    L)      1H    HHH        ff.     @     AWAVIAUATUSHHH.eH%(   HD$@11  HUp    A   IFhD    A9  L$0E1k<j  <@    <
  IE(Ht
ǀ       IELIu       C1IFhD    A9|  A9F  AIV J;     L,IIL3  AE   <I<uZIE(H H   ƀ    @> AESB1HT$@eH+%(     HH[]A\A]A^A_    <uBAE<2   I       H7    BE1<t       EeDb
Mi  L   Me0<   <AD$MU(<S  H  A|$ A$t\AL$HtQ`   M   It$H9HFH  `   HC    tAD$A 7  A   <ADEHEDH    H       
HD$8    M](MAD$$AD$<   A   <w8q  <  AT$A   A   )A   A;   A  AD$Hu]AD$
HuRAD$A	E   8<#  A|$   1<AD$AF   Ht   H9HFID$<$HD$HT$  EDH|$`   I   H9HFǃ   	  UAt$@1DH|$tft.L$0EE   ;1  >  11LHͷ1ɺ   LH軷   A$<V  wr<8  <wAEt  A|$    A   It$H1LD$I|0H|1HyLHH)H)Hf<Q  <uuA|$ y1A   E   I   D E591  tJx3   IL$IxHIHLIL I)B L)HA   (E11  H1  D(AwLE1D9  A1HH1  J;    t?HHuH1  D(Av2       
   H    z	 yHHD ƀ3  J3  r
f3  z 3  uf  fuBf4  ut$H|$HT$8DT$ L\$    L\$DT$ uA?|$9  D)E   EA|$ @   `AT$A   A   )A;   A|$    (IL   A{@   A|$ tAL$H     LA   1>   L$    L$  A   7D$H1  1  H5    HX3          ED$E|$:>   ADfADIH   ƀ    @> AEB4  At$1H|$tt9AD$A DADX2   A       H蠯    2       	   H聯       I|$;HH0  H   H|$   H    DT$7HT$(L\$     L\$ HT$(DT$7u.A2   A       H    HD$DT$ LH    DJL$;H1  D  BPBH    PL\$(    ZYDT$ L\$|H    HT$(L\$     L\$ HT$(   IL   Az@     AB@H L0  A2       H5    IP2  1ɿ    LT$(L\$ LD$    LD$L\$ LT$(    A   EAC@H L0  A2       H5    1ɿ    L$IP2  L\$LT$    L$LT$L\$          HD$DJLH    DBH1    BH    PL\$     _L\$    AWIAVAUATUSHHH  H    H4  A   A  H    H1    L1  L    
EDD    L    uH1  E1E1    L-    3  ƃ2  3  I	  9~AL$$H    H9              3  3  9E   1=    H@ƍtv%       t*H3  HRHHt	Hx( u!H`H9uHH[]A\A]A^A_鳇H=    A   L)    H    HCHiMbH   H&    H-    H	  H=    L)      1HsH   H        ff.     f    AWAVA  AUATA   USHH_xH|$H4  t$H    H1    ƃ2  H1      L1  L    
EDD    L    AǅuH1  E1E1    L-    3  ƃ2  3  I	  9~BLd$H    H9             3  3  9E$  |$ t HD$1H߁p@ƃH3         t*H3  H4RHHƋt	Hx( uxH`H9u苃1  ~6IcH{DAH@HH      H    D;1  |ʀ2  1ǃ1      ƃ2   H[]A\A]A^A_    H=    A   L)    H    HCHiMbH   H&    H-    H	  H=    L)      1HKH   H             1@            AV        AUIATUSHHeH%(   HD$@1ILHH=        H  Hl$H|$E1HHLHt$   H)A   HD$    HD$8    ?HfT$   H$rI}D$   iAƅt0H    HD$@eH+%(   2  HHD[]A\A]A^    11LLT$Ht$E1AIE   H       Eu1ɀ{ t3T1;       HHu1fDCH9rH|$	1A   HHHt$HD$    HD$8    H)M?H      $sfD$I}D$   dAƅ11LLI}T$E1Ht$   AH       A1  D    A@     USH        H    Ņ    H    Ņ    HŅ    2  H    H߃    H(  ǃX      ǃh      (   t<H  11H     Hp@@    HpHpH   ;   rH1  1ǃ1      H觀Ņ    HUŅt	[]    1  H  L      11Ҿ   ǃ1     H 4  f2      Hf2  Hǃ3      Hǃ3      kŅuH3  Ht4x3  |3   3  H    H3  H	  H3      2  0uiHŅ    HŅ    HPŅ    H>Ņ    H4      u/H[]    HŅ    2  @yƃ2   H1      H    HCpHH            AWAVLAUATUSHH(eH%(   HD$ 1<       ?  HHuD$ƃA   1A  Hh    L`L    
EDD    L    uHE1E1    ƃL-    SCI	  9~<Ld$H    H9             SC9E  H(         LHD$    Ht$fD$HcD$D$ HD$T$fT$D$.    L    L    Hk    LҥLt-H    H    HD$ eH+%(               Lu}LAH    Eu    H-    H HL   tI   L        HD$    H    H9          H     t    D$H=    A   L)    H    HHiMbH   H&    H-    H	  H=    L)      1H    HH                      SH_xH{t[    H1      ƃ2   11Ҿ   H 4      H1      ƃ2   H1            HuH    uH[f    U   HAWAVAUATSHH   eH%(   H$  1L|$LHH|$hHL$dHD$d    HǄ$       H)HH$   H$   HǄ$       HǄ$      H)  H2     H4  I      M           X   LL    H  |$Tf  T$?F  Dl$A6  -  H|$hE1   HD$e    HǄ$       HD$dHD$HD$tH$   Ht$DA  A    D$$   <t	<t<T$~L$T$   	ЈD$~<   f
  fD$f2  @tD$$   H$      Ht$dH8f|$T A;  H|$(   1HD$$    HD$L    HE  X   LL    H  L    H$  eH+%(   <  H   D[A\A]A^A_]    2   &A뻀|$  D$        IH  Dl$TD$@   HD$X1LLH$    H4$LL    H  1H|$h   T$HD$e    HǄ$       DHD$dHD$HD$tL    I=        H    LH            HT$H$   H$   JT.JT(H)AL H)HL1H    4H{E1LH$   D$pĒAŅSL   $   oo     @K  v$   At)   Cv`t1$   $   H   $   H  L$$fD$&X   LL    HuHD$Tf|$ Ld$X   LH    HLL    HdAY   Wv      E@
   2   $H{$   E11H$   H       T$$   TfTfD$&    H9L$$H$   HGHD$4s4   t$   @t$4tL1fL0T$%H$   LD$8Ht$4H|1H|0L)HH)Ѓrƃ1ɉσL>M89r뮋T$$   TT3AAA   A   $   t$4֋L1L0<    Aff.         HHHeH%(   HT$1H H0  	Btmv7B   BXu\HD$eH+%(      HHH=B  t
B@u%HD$eH+%(      HHBHufHT$eH+%(   uoH    H$    HtHBHHH   fT$       H8f$@@   D$$- !   H    H    @     AWAVAULATUHSHeH%(   HD$1    tLی tH]LeE1D;Et]C <    <   <   E   D$	 HLHD$    $fT$D$CfD$
CD$1HI9uEu>   HD$eH+%(      H[]A\A]A^A_    Cv tH5          H    LL    HHHH@H9t#    tƂ    H  H@H9uL    C             QIHE1H    h    Z    f.         HHt H   HtH         Ƈ"              AWIAVAUATUSH   eH%(   H$   HH(H   H0  H$L1  L    fA            ff.         AUATUSHHH   H   H     L0  A$2      }?    A$2   U    ǆ       H    A  fA9$      O,E<          "   (     HLwu   LHHL~t=U       bƃ"  H    H    [1]A\A]    }> tw1    Up   PH   MHj Lj D   HtHH     []A\A]    L@II  O,E<uLlMHHHLrf
fh   *w"SH      H:x".H      Hff.     @     USHo(HH    {tDCtLHS(   t><t7HH   x@ u'x? u!HH0  2   t(  ƅ"  H    H[]    ff.     f    SH_(H    H    H[    f.         ATIUSi   HH    H"H$    H    H9    
       ID$hH    tut1H[]A\    ID$h  I|$H    H       fD      AWIAVAUIATUSHHoht$   BL  AB  B  B        E4           E4   E H    L   HL  HD$    H    H9xV
       A$t؋       AE    1IATHHu1H[]A\A]A^A_    H[]A\A]A^A_    D      5    0    Z   !    HGhH       tu    HGh  HH    H       1@     HGh       f         HGh       ff.         S   HH eH%(   HD$1HH$    HD$    HD$    uD$t6T$уu(uHT$eH+%(   uH [    2  ݸ    ff.     @     S 0  HH eH%(   HD$1HH$    HD$    HD$    Lu)HT$L$H   T$H H	HSxT$   HT$eH+%(   u
H [            AW'   
  AVAUATUHSH H=    eH%(   HD$1H$    HD$    HD$        Hw  LpIH   LH	   HHCC     CL}M          L     H
  H   H+    H4E1A   LH   HH5        HH   H   HH$    HD$    HD$D$   H}E1H޹      AH       L    HD$eH+%(   utH D[]A\A]A^A_    =     u6I       HuI   L    HH    H    AH    A|    f.         U@   SHHHGhP            H-    HL  =HChH    u:H$    H    H9               HChH  @uH[]    ff.         U   SHHHGhP            H-    HL  =HChH    u:H$    H    H9               HChH  uH[]    ff.         HGhH    u2  t
HGh   HGh   P     fD      U   SHHHGhP            H-    HL  =HChH    uJH$    H    H9               HChH     u1H[]    H[]            U   SHHHGhP            H-    HL  =HChH    uGH$    H    H9               HChH  u1H[]    H[]    f.         HGh              ff.     f    HGh       ff.         HGh   P     f.         ATIUSHH    HGhH$ H        	   7H$    H    H9          ID$hH    tHs1H[]A\        f        fD      1    @     1    @         fD              USHGHHoHx H    {  uH    H[]    H    tHHCHBHH     HH"HCf         1    @     1    @     AWAVAUATUSHH(  eH%(   H$   1Ll$H|$HD$    HǄ$      LH)  HK8L0  ^  HE1AHt	  t;DDH    H$   eH+%(   -  H(  []A\A]A^A_    {,{<H=    ,  
      IH   K(S8    H<      s<H{0I@   A,  IP,A@  A@1fA@H  L$HI@ AHGAH(    H4$LL,      Aą
L$H{@s<A,  I0      T$H{ЉS$f=     Ht$     Ds8D+t$E1A        ATUHSH0Le0HL9toHHL9uH}     H    tHU HEHBHH     HHE H"HE[]A\    ff.          AVI
  AUIպP   ATUHH=    S    H   HH@0H} HC0Hk@HC8    IHtYH    uELc LeHLkLmLsLL    tH]L+LcI$H[]A\A]A^    L    H    1H[]A\A]A^    @     ATUSH   H_@H	H[@HtH    tHP  H0  LH2  L    H82  HH82  H@H9t%H  HtH;iHt+H  H@H9uۻL    []A\    HtZwD׻ff.         AUATUSHp  H_@HI	H[@HtH    tHP  L0  IH2  H    I82  II82  H@H9t(HH  HtH;jHt0H  H@H9u۽LH    []A\A]    Htރ8
   xxtπxy tɀxwtHH  H@H9t(:
upxf9rxu   f9   uHB$HVxzt?
tH  H@H9t:?
uGW?={  uHG$HH@$HI$1"f    H82  H82  H@H9t%H  HtH9rHtH  H@H9u1    D      AW   AVI
  AUATUSH8  HH=        H  L`HI3  1L`HHL`!HH[  H=    (   
      IHL  HC@s(H8    H,  H      C(IGI_Hǀ      Hǀ      Hǀ       Hǀ      HSH  H   ǀ     ǀ       Hǀ      Hǀ      I    AŅtJLUHH}HI9tHHI9uH    HD[]A\A]A^A_    IwH{     Lc8HS0LH$L    tH$L{8MgIM<$AG I 3  ArL    AWAx    ATUSL 3  Mt.I|$Il$HH9tHHH9u[L]A\    []A\    @     ATUHSHv`H(H   HH@H{ Ht
@<       HHtuH{HH  HCH  H      H  HCHt-      HC@<tuvO<t<	u
Ǉ         AąuD[]A\    AHDHǅ      []A\    <t    AątϾ       H=Ǉ         AątAf.         SHH  HtvHǃ      [        =     H   u:    @   9O1  9O   f9O   9Of      f   f   f   f9f   G΍t	f   f9GHHf   H          H{H    D$H       D$    H}H    H           H}H    H       H}H    H           HHH   ~ uH        ~
 tH        H        t*    V
2  	Ј2      V
2  	Ј2      V
2  	Ј2      V
2  	Ј2      V
2  	Ј2      V
2  	Ј2      V
2  	Ј2          H3  Ht1x3  |3   3  H    Hǘ3  H	  HG            SHƃ2   11H 4         H1      H1      ƃ2   H1  [    HĘ   []A\A]A^A_        HEH    L$H       CL$A   $    <    <        H{H    H           H{H    D$H       D$    H{H    D$H       D$    H{H    D$H       D$    H{H    D$H       D$    H}H    H           H}   ډD$H    H       Dd$        AV   @    AUATAUHSH   eH%(   H$   1ILt$@L   LH=        H  HT$Hù?   1HHt$0H$`H}A   @  fD$< D$,@      Aą   LLH    T$8Ht$0E1AHE   H       Eut|$K ugCS    Cf   fCf   C$	ЊS@   fCFf   CH҃	Њ2  	Ј2  AH    H$   eH+%(   t    HĈ   D[]A\A]A^    2   t*SH    u2   tH߾   [    [        H{H    H           IFH    L$H       L$    IEH    H           H1  HsLD$D  H   1Ҿ  HAHUDH    PDL$E@    L=    XZI	      H1    L\$H{  1ESUHH   DщH    PDL$EC    Y^    HpH    H            H[   ]    IEH    H       A ubII    u    IGH    HL$T$H       T$HL$    IH    H           IGHtLL    H    H    IOE1HP  H    1Iw    H        H        I`H    H           H$H    H    AH@H   HD$    E1LT$8    H1  EHuAOEG  PH   H        Y    HLH        -   1H$   HAOt                  g          :    
      
  	                H    H    HEH1  HuEOEGAO  PH   H        ^    I    H$AOH    LT$xAWH@H   HD$h    LT$x    I    KDKH    I$1  DC  ID$H       H|$    H  I       H     H|$LH  H"H      c<    H$HIHL$H   <z  H        H$H    E1H@H   HD$    Ld$    H  H  HBH\AOAWH            I    IMIUH    HH        H$T$hH    L$   H@H   HD$x    L$       H    I    5H    H$H    H@H   HD$        H$H    H    H@H   HD$    A    H$H    H    H@H   HD$        H        H$       H    -   H    H3H    'H    H    H    H    H    H    H    H    H    H    H    H    H    H    H    sH    gH    [H    OH    CH    7H    +H    H        I1  IxL\$H    ABEJ  ARH   ARH        ^L\$       I1  ACL$H    IxEK  ASAH   RH        A|$ XL$        H}HADH    H           H}Aع   DH    H           <	ADE    H}AU ADH    H           H}ADDH    H              H}AEDH    HH           XH   [H    ]A\A]A^A_    I   H                AVAUATL   UHLSHHHVH    eH%(   HD$1H    HHD    =     t H{uH    L    )  {t{uH    L    `  uH    H    u1҉`  
  4      HHuH    L      H1  H    H    I       H1  H    H        H4  H    H        E1E1E1H82  1DH2  Hp2  H82      H    H@2  H`3  H`3  Hh3  HX2  Dx3  LX3  HX2  Hǃp3      H`2  LP2  Hǃh2          E11ɺ    H2  L2  H2  H    H2  Hǃ2      H2      H3  11E1H        H3     L3  H3  H H 4  H    H3  HX4  H    HX4  H`4  Hx4  Hx4  H4  H3  H3  H3  Hǃ3      LP4  Hǃh4      Lp4  Hǃ4      H3                Hf2  H&HkH1  f H   H 2  H    H(2      ǃ02  	f2      LctI$   H        
  I   HL    Ņu>HL    H{H        H{t4H   H           HCH    H          H   A      H{HHC`uH   H        }      (       H{~   w
,    tH   H        -    HC`HChH @  =     HCpHCHH  uKH{    H{      H    uH          &H    Ņ  H    Ņ  H    Ņt:=     t  HCH    H                  G  H    ŅtHCH    H         H    ŅtHCH    H       
  H    =        fC[   t+ v       "  ǃ       6i  J+rH H	i     9H   G         9Љ      GSx  9GE1f   P H% H   H      HCH       H   HuHCH    H       	  H    ŅtHCH    H       	  H    ŅtHCH    H       	  2  H    H߃    HCE1H       H       H   H   HP?L   ǃ     HH   H   H  H@  H  H)H)H   H)LLH(  H)LLH8  HH0  H@  HH      Ņt8HCH    H         HCH    H       x  H{ŅtHCH    H       S     fwHC   H    H       T   fwHC   H    H       )   fw&HC   H    H         2  uHCH    H       ӨtHCH    H       H=          H{E1    ŅyHCH    H       8  1  ǃ1     ;   s1  H   E1ɾ
  L$Hk`    H{HH3  HuH   H           L   L   E1D;               HEHHuHCH    H       QE1  HLL    HuHCH    H       fDeH`AHEH$HEoH         D   11D   AvD6AMcMcHx?HA9tJ/1H?H9tLH   19sHH   HCE1H    HH       H   HH(     H@?D   1HH  H  II)ID9t2HLH   LXII)HHLLH`L  1HH)HA9tI JD ?I   IXHH1  E1H   H1  H  II)ID9tPHHAH   LXII)HHHIHPL`IHI)ILhH1  1L1  HCH    H       )  9sHi   HH  fǃ1   H     1ҍz9t DAffD@H   fDfǃ1    19sHi   f  HH   1;   s'HPE1H D@D@H@H   HHRH    Ņk  H    ŅY  1  tu!HCpHH    H    ǃ1     Hƃ2      Ņ  H
2  0t1H    ŅtHCH    H         2  @H    ŅtHCH    H            H        IHuHCH    H       a  1ƀ@   1H8  ǀ  fǀ   Hǀ  H   I$     A$     A$  fA$     fA$  H    I$   H{    LA$D  A$     A$  A$  I$0  HCH   H    ŅtHCH    H       cHL    Ņt!HCH    H       L    1L1  H    Ņt)HCH    H         L      H=    <   
      IHtxj f   E1A<   HH    H    ^ŅuEID$,C@ LHC0ID$4HC8    H    ŅtAHCH    H       xL    HCH    H       PH    ŅtHCH    H       )H5    H2  1ɿ        H    
H    HD$eH+%(   t    H[]A\A]A^    H{H    H           H{H    H           H{H    H           H{H    H           H{H    H           H{H    H           H{H    H           H{H    H           H{H    H           H{H    H           HH    '  H       HH    H       L        HH(H    []H   A\A]A^A_    H   H    H       L    H{    Lb    HD$ eH+%(          H        HH    HkH        tH  H L    H    HD$ eH+%(   uH(L[]A\A]A^A_HD$ eH+%(   iH(L   []A\A]A^A_    H([]A\A]A^A_    H        HSH   ft0w^ftnH        H5        H          <  H        L    H       C    H        C    H        H5        H       C       H4$IDFL   N  HsPH   H        H2  AY@   A   H    IH$H    H{L   DA  IPH       L    XH$   eH+%(      HĈ   D[]A\A]A^A_    A   -IL5    Hl$HA  H   I	  ƃ2  HD$13  3  9   E1LD$XH    H9y=H=    L)    1HuAH   H        H
    H	         D$ HL$    D$ HL$o    HHl$t1H=    L)      1HsH   H        Hl$ 1IL|$(IMD;      I   H\$01M  HD$HLHL$    HL$HI   Ht$8HL$@HPH HhHD$HHHD$HD$HzPH9  Hj(H5  HCPHHXHl$ L-    MH  HL$ L|$(I	  Ld$Hl$HD$1ALl$(11IDt$0HIL|$8AD;   sZI$  1HD$@M$   HHLIL    I|- HH+   HPHPPH9  H@PAHPHDLl$(L|$8Dt$0HD$ E11;   s,0HH	9tApHH	9tAH   D	  Ld$Hl$Et1H=    L)      1H    HKH       IH  Ld$D$    H   HL$0Hl$Ht$Ht$pHL   Ht$pHt$x1Ht$`Ht$h       HH@    HD$`HUHHE1HrHfB EfBIEHBAE<t2  t
IH   B
B2   yfB Ht$0H1HE1    ID   A   HID HD$(	  H|$`    H,  EM AŃu  El  l$   ILd$L 4  Hl$Ht$    H    ƃ2   11Ҿ   L    HL$@Ht$8LIHL$    HL$Ht
   H\$0II   @HE Ht$H;   HT$H    HT$H2  H     HBPH"HBXƅ"  
H    H    H    aLI    Ht
   IHD$@II   HD2  Eu+ƃ2   11Ҿ   H 4  Ld$Hl$    1H|$PH    H9D$ySH=    DL$(L)      1HsH   EH        H    Dt$(H	  HD$           HzPHBXHGH8H2   u
HD$(A
HsEH1  AM EEH   H      PAT    ZY]ILd$L 4  Hl$Ht$   '	 H    u*ƃ2   L11Ҿ   A       H    tEt_'      II|$H    H           IT$H    H           H{@   XH    []H       H{   XH    []H       H{   H    H           H{   H    H           I|$H    H           I|$H    H           H            SH            H        H    H  H    HtqH    H    t-H    H    tH    H    u"   	1   H        HH    H            tkw*A      H    H               0  v(A    H    H                      H    H    H        ÅtH=        [    H        H=                                                                     Volume is in an unknown state (%u)      strnlen __fortify_strlen                pqi_process_raid_io_error                           [                                [  !                              -  "                              -  #                              -  $                              -  6                              -  7                              =                                =                                =                                =                                =                                =  	                              =                                =  `                              =  a                              =  `                              =  a                              =  `                              =  a                                E                                 F                                 G                                 H                                 J                                 K                                 L                                 O                                 Q                                 R                                 S                                 T                                 k                                 l                                 m                                 o                                 p                                 q                                 r                                                                                                                                                                     '                                (                                )                                *                                +                                ,                                                                                                Y                                                                                                                                                                                                                                                                                                                                 	                                
                                 	                                	                                	                                	                                	                                	                                	                                	                                	                                
	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0                                @                                A                                P                                R                                `                                a                                b                                c                                p                                q                                r                                s                                t                                u                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (                                <                                 <                                <                                <                                <  	                              <  P                              <  Q                              <  R                              <  S                              <  T                              <  U                              <                                 <                                <                                <                                <                                 <                                                                                                                                  .                                o                                                                                                                                                                 	                                                                	                              X                                   a1                                a1                                ET                                FT                                GT                                IT                                JT                                KT                                MT                                NT                                OT                                '                                )                                E                                                                                                                                 !                                                                 "                                                                 !                                "                                #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ctrl_ready_timeout              disable_managed_interrupts      hide_vsep       expose_ld_first lockup_action   disable_ctrl_shutdown           disable_heartbeat               disable_device_id_wildcards                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    smartpqi %s enabled
 failed to enable %s
 %d
 0x%x
 N/A RAID UNKNOWN %s
 0x%016llx
 0x%8phN
 %x
 [%s]  %s  
 2.1.18-045 Enclosure SMP     %d:%d: %d:%d -:-  %08x%08x  %016llx%016llx  %s %.8s %.16s  SSDSmartPathCap%c En%c %-12s AIO%c  qd=%-6d %s %s
 Active Inactive [%d:%d:%d:%d] %20.20s  PORT: %.2s  BOX: %hhu  BAY: %hhu  none reboot panic include/linux/dma-mapping.h unknown command 0x%c
 error creating event queue
 controller offline
 unknown data direction: %d
 removed -%u Firmware version: %s
 RAID map too small invalid RAID-1 map invalid RAID-1(Triple) map invalid RAID-5 or RAID-6 map Volume online Volume not configured Volume failed Volume degraded Volume undergoing recovery Hardware is overheating Volume undergoing expansion Hardware has overheated Volume queued for expansion Volume has been ejected Volume status not available report physical LUNs failed
 report logical LUNs failed
 logical device %08x%08x %s
 offline scsi %d:%d:%d:%d %s
 added 3 RAID AIO cache could not be flushed
 %s found
 &ctrl_info->scan_mutex &ctrl_info->lun_reset_mutex &ctrl_info->ofa_mutex failed to enable PCI device
 failed to set DMA mask
 error initializing PQI mode
 error creating admin queues
 error enabling events
 scsi_host_alloc failed
 scsi_add_host failed
 add SAS host failed
 error updating host wellness
 SUCCESS FAILED memcpy Online Firmware Activation Serial Management Protocol Maximum Known Feature RAID 0 Read Bypass RAID 1 Read Bypass RAID 5 Read Bypass RAID 6 Read Bypass RAID 0 Write Bypass RAID 1 Write Bypass RAID 5 Write Bypass RAID 6 Write Bypass New Soft Reset Handshake RAID IU Timeout TMF IU Timeout Firmware Triage RPL Extended Formats 4 and 5 Multi-LUN Target sas_ncq_prio_enable raid_bypass_cnt raid_level ssd_smart_path_enabled sas_address path_info unique_id lunid enable_r6_writes enable_r5_writes enable_stream_detection lockup_action rescan vendor serial_number model firmware_version driver_version RAID-0 RAID-4 RAID-1(1+0) RAID-5 RAID-5+1 RAID-6 RAID-1(Triple) include/linux/dma-mapping.h memcpy        irq %u init failed with error %d
       PQI reset failed during quiesce with error %d
  PQI reset failed with error %d
 timed out waiting for PQI signature
    timed out waiting for PQI IDLE
 timed out waiting for PQI all registers ready
  %s not supported by controller
 %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X
       6Microchip SmartPQI Driver (v2.1.18-045)
      4%s: invalid lockup action setting "%s" - supported settings: none, reboot, panic
     4%s: ctrl_ready_timeout parm of %u second(s) is less than minimum timeout of %d seconds - setting timeout to %d seconds
       4%s: ctrl_ready_timeout parm of %u seconds is greater than maximum timeout of %d seconds - setting timeout to %d seconds
      %s %s: rejecting DMA map of vmalloc memory
     timed out waiting for admin response
   error creating inbound RAID queue
      error creating inbound AIO queue
       error changing queue property
  error creating outbound queue
  error creating queue group number %u/%u
        re-enabling SIS mode failed with error %d
      scsi %d:%d:%d:%d: timed out after %lu seconds waiting for %d outstanding command(s)
    scsi %d:%d:%d:%d: waiting %lu seconds for %d outstanding command(s)
    no heartbeat detected - last heartbeat count: %u
       failed to allocate memory for PQI configuration table
  heartbeat disabled by module parameter
 failed to enable firmware features in PQI configuration table
  failed to allocate host buffer for Online Firmware Activation
  error updating time on controller
      Volume pending encryption rekeying      Volume ready for recovery operation     Wrong physical drive was replaced       A physical drive not properly connected Volume waiting for transforming volume  Volume undergoing background erase      Volume disabled due to SCSI ID conflict Volume undergoing rapid parity initialization   Volume ready for predictive spare rebuild       Encrypted volume inaccessible - key not present Volume queued for rapid parity initialization   Volume undergoing encryption re-keying process  Volume undergoing encryption process    Volume pending migration to encrypted state     Volume encrypted but encryption is disabled     Volume not supported on this controller RPL returned unsupported data format %u
        RPL returned extended format 2 instead of 4
    failed to allocate memory, device discovery stopped     requested %u bytes, received %u bytes
  obtaining device info failed, skipping physical device %016llx%016llx
  obtaining device info failed, skipping logical device %08x%08x
 scsi %d:%d:%d:%d removing device with %d outstanding command(s)
        scsi %d:%d:%d:%d addition failed, device not added
     FATAL: Smart Family Controller lockup detected  waiting %u seconds for driver activity to quiesce
      driver activity quiesced after waiting for %u seconds
  I/O interrupt: producer index (%u) out of range (0-%u): consumer index: %u
     request ID in response (%u) out of range (0-%u): producer index: %u  consumer index: %u
        request ID in response (%u) does not match an outstanding I/O request: producer index: %u  consumer index: %u
  Task Management Function error: %d (response code: %u)
 received 'logical unit failure' from controller for scsi %d:%d:%d:%d
   re-scanning %s scsi %d:%d:%d:%d
        received unhandled error %d from controller for scsi %d:%d:%d:%d
       unexpected IU type: 0x%x: producer index: %u  consumer index: %u
       event interrupt: producer index (%u) out of range (0-%u): consumer index: %u
   unable to flush controller cache
       drivers/scsi/smartpqi/smartpqi_init.c   Microchip Smart Family Controller       controller not probed because device ID wildcards are disabled
 controller device ID matched using wildcards
   failed to allocate controller info block
       &ctrl_info->block_requests_wait failed to obtain PCI resources
 failed to map memory for controller registers
  failed to set PCIe completion timeout
  kdump init failed with error %d
        error obtaining controller properties
  error obtaining controller capabilities
        failed to allocate PQI error buffer
    transition to PQI mode failed
  failed to allocate admin queues
        obtaining device capability failed
     max. inbound queue element length of %d is less than the required length of %d
 max. outbound queue element length of %d is less than the required length of %d
        max. inbound IU length of %u is less than the min. required length of %d
       the controller does not support inbound spanning
       the controller supports outbound spanning but this driver does not
     MSI-X init failed with error %d
        failed to allocate I/O request pool
    failed to allocate IU buffers
  failed to allocate PQI scatter-gather chain buffers
    failed to allocate operational queues
  error obtaining advanced RAID bypass configuration
     error obtaining product details
        error obtaining ctrl serial number
     error enabling multi-lun rescan
        timed out waiting for soft reset status
        Online Firmware Activation: resetting controller
       Online Firmware Activation: %s
 Online Firmware Activation ABORTED
     unexpected Online Firmware Activation reset status: 0x%x
       field "request.cdb" at drivers/scsi/smartpqi/smartpqi_init.c:6670       memcpy: detected field-spanning write (size %zu) of single %s (size %zu)
       received Online Firmware Activation memory allocation request
  received Online Firmware Activation quiesce request
    received Online Firmware Activation cancel request: reason: %u
 received unknown Online Firmware Activation request: event ID: %u
      resetting scsi %d:%d:%d:%d due to cmd 0x%02x
   waiting %u seconds for queued I/O to drain (queued I/O count: %u; non-empty inbound queue count: %u)
   queued I/O drained after waiting for %u seconds
        scsi %d:%d:%d:%d: waiting %u seconds for LUN reset to complete (%d command(s) outstanding)
     reset of scsi %d:%d:%d:%d: %s
  RAID Bypass on encrypted logical volumes on NVMe        controller is offline: status code 0x%x
        controller not ready after %u seconds
  SIS command failed for command 0x%x: status = 0x%x
     %s %s: rejecting DMA map of vmalloc memory
     doorbell register bit 0x%x not cleared
 firmware triage condition invalid
      timed out waiting for firmware triage status
 parm=ctrl_ready_timeout:Timeout in seconds for driver to wait for controller ready. parmtype=ctrl_ready_timeout:uint parm=disable_managed_interrupts:Disable the kernel automatically assigning SMP affinity to IRQs. parmtype=disable_managed_interrupts:int parm=hide_vsep:Hide the virtual SEP for direct attached drives. parmtype=hide_vsep:int parm=expose_ld_first:Expose logical drives before physical drives. parmtype=expose_ld_first:int parm=lockup_action:Action to take when controller locked up.
		Supported: none, reboot, panic
		Default: none parmtype=lockup_action:charp parm=disable_ctrl_shutdown:Disable controller shutdown when controller locked up. parmtype=disable_ctrl_shutdown:int parm=disable_heartbeat:Disable heartbeat. parmtype=disable_heartbeat:int parm=disable_device_id_wildcards:Disable device ID wildcards. parmtype=disable_device_id_wildcards:int license=GPL version=2.1.18-045 description=Driver for Microchip Smart Family Controller version 2.1.18-045 author=Microchip srcversion=95A9E9FE1745E77EF33D45E alias=pci:v00009005d0000028Fsv*sd*bc*sc*i* alias=pci:v00009005d0000028Fsv00001E93sd00001002bc*sc*i* alias=pci:v00009005d0000028Fsv00001E93sd00001001bc*sc*i* alias=pci:v00009005d0000028Fsv00001E93sd00001000bc*sc*i* alias=pci:v00009005d0000028Fsv000017AAsd00000623bc*sc*i* alias=pci:v00009005d0000028Fsv000017AAsd00000622bc*sc*i* alias=pci:v00009005d0000028Fsv000017AAsd00000621bc*sc*i* alias=pci:v00009005d0000028Fsv000017AAsd00000620bc*sc*i* alias=pci:v00009005d0000028Fsv000017AAsd00000522bc*sc*i* alias=pci:v00009005d0000028Fsv000017AAsd00000520bc*sc*i* alias=pci:v00009005d0000028Fsv000017AAsd00000221bc*sc*i* alias=pci:v00009005d0000028Fsv000017AAsd00000220bc*sc*i* alias=pci:v00009005d0000028Fsv00001CC4sd00000201bc*sc*i* alias=pci:v00009005d0000028Fsv00001CC4sd00000101bc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd00000B45bc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd00000B29bc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd00000B27bc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd0000544Fbc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd0000544Ebc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd0000544Dbc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd0000544Bbc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd0000544Abc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd00005449bc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd00005447bc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd00005446bc*sc*i* alias=pci:v00009005d0000028Fsv00001CF2sd00005445bc*sc*i* alias=pci:v00009005d0000028Fsv00001F0Csd00003161bc*sc*i* alias=pci:v00009005d0000028Fsv00001DFCsd00003161bc*sc*i* alias=pci:v00009005d0000028Fsv00001458sd00001000bc*sc*i* alias=pci:v00009005d0000028Fsv00001D8Dsd00000916bc*sc*i* alias=pci:v00009005d0000028Fsv00001D8Dsd00000806bc*sc*i* alias=pci:v00009005d0000028Fsv00001D8Dsd00000908bc*sc*i* alias=pci:v00009005d0000028Fsv00001D8Dsd00000800bc*sc*i* alias=pci:v00009005d0000028Fsv00001590sd00000383bc*sc*i* alias=pci:v00009005d0000028Fsv00001590sd00000382bc*sc*i* alias=pci:v00009005d0000028Fsv00001590sd00000381bc*sc*i* alias=pci:v00009005d0000028Fsv00001590sd0000036Fbc*sc*i* alias=pci:v00009005d0000028Fsv00001590sd0000032Ebc*sc*i* alias=pci:v00009005d0000028Fsv00001590sd000002DCbc*sc*i* alias=pci:v00009005d0000028Fsv00001590sd000002DBbc*sc*i* alias=pci:v00009005d0000028Fsv00001590sd00000294bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00001101bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00001100bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00001002bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00001001bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000701bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000700bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000655bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000654bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000653bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000652bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000651bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000650bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000609bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000603bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000602bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000601bc*sc*i* alias=pci:v00009005d0000028Fsv0000103Csd00000600bc*sc*i* alias=pci:v00009005d0000028Fsv00001028sd00001FE0bc*sc*i* alias=pci:v00009005d0000028Fsv000013FEsd00008312bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014F0bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014E0bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014D0bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014C4bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014C3bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014C2bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014C1bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014C0bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014B1bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014B0bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014A6bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014A5bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014A4bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014A2bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014A1bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd000014A0bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001491bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001490bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001480bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001475bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001474bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001473bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001472bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001471bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001470bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001463bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001462bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001461bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001460bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001452bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001450bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001441bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001440bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001430bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001420bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001412bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001411bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001410bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001402bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001400bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001380bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001304bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001303bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001302bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001301bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001300bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001282bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001281bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001280bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001202bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001201bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00001200bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd0000090Abc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000908bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000907bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000906bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000905bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000904bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000903bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000902bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000901bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000900bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd0000080Abc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000809bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000808bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000807bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000806bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000805bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000804bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000803bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000802bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000801bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000800bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000659bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000608bc*sc*i* alias=pci:v00009005d0000028Fsv00009005sd00000110bc*sc*i* alias=pci:v00009005d0000028Fsv000019E5sd0000D22Cbc*sc*i* alias=pci:v00009005d0000028Fsv000019E5sd0000D22Bbc*sc*i* alias=pci:v00009005d0000028Fsv000019E5sd0000D22Abc*sc*i* alias=pci:v00009005d0000028Fsv000019E5sd0000D229bc*sc*i* alias=pci:v00009005d0000028Fsv000019E5sd0000D228bc*sc*i* alias=pci:v00009005d0000028Fsv000019E5sd0000D227bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000089bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000088bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000087bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000086bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000072bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000071bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000070bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd0000006Fbc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd0000006Dbc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd0000006Cbc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd0000006Bbc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000054bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000053bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000052bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000051bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd0000004Fbc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd0000004Cbc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd0000004Bbc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd0000004Abc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000048bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000047bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000046bc*sc*i* alias=pci:v00009005d0000028Fsv00001BD4sd00000045bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd0000F461bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd0000F460bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd0000C461bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd0000C460bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd00008461bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd00008460bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd0000110Bbc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd00001109bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd00001108bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd00001107bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd00001106bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd00001105bc*sc*i* alias=pci:v00009005d0000028Fsv0000193Dsd00001104bc*sc*i* alias=pci:v00009005d0000028Fsv0000152Dsd00008A37bc*sc*i* alias=pci:v00009005d0000028Fsv0000152Dsd00008A36bc*sc*i* alias=pci:v00009005d0000028Fsv0000152Dsd00008A24bc*sc*i* alias=pci:v00009005d0000028Fsv0000152Dsd00008A23bc*sc*i* alias=pci:v00009005d0000028Fsv0000152Dsd00008A22bc*sc*i* alias=pci:v00009005d0000028Fsv0000105Bsd00001321bc*sc*i* alias=pci:v00009005d0000028Fsv0000105Bsd00001211bc*sc*i* depends=scsi_mod,scsi_transport_sas,scsi_common retpoline=Y intree=Y name=smartpqi vermagic=6.1.0-37-amd64 SMP preempt mod_unload modversions                                                                                                                                                                                                                                                                                                              h                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (                 (                       (  0  (                 0  (                                    0               0                         (  0  H  0  (                                                                        (                 (                                                                                                                                                                         (    0  8  X  `  h  p  x                    X  8  0  (                     X                     0               0                                                       (  0  (                   0                                                                           (    0  8                           (    0  8  `  h  p  h  `  8  0  (                     `                         (  0  (                                          (  0  (                                      0               0               0                (          (                (          (                (          (                @          @                                   (  0  (                   0                         (    0  8  @  8  0  (                                   H          H                                                                   (    0  8  0  (                     8                       (  0  (                 0                         (    0  8  @  8  0  (                     @  8  0  (                     @                                                       (    0  8    8  0  (                                          (                                                                                                                                                                                                                          (    0  8    8  0  (                                            (    0  8  h  8  0  (                     h                         (    0  8  p x   p 8  0  (                     p                        (  0  @  0  (                   @                         (    0  8  P  8  0  (                     P  8  0  (                     P                         (  0  (                   0  (                   0  (                                                                        (    0  8  `  8  0  (                     `                         (    0  8    8  0  (                                              (    0  8    8  0  (                                              (    0  8   8  0  (                                               (            (                                          (  0  8  0  (                   0                   (  0  `  h  `  0  (                   `               (                                         (     (                                         (    0  8  H  P  H  P  H  8  0  (                     H                                                  (            (                                          (    0  8  8 8  0  (                     8 @ 8 @ 8 @ 8 @ 8 @ 8 @ 8                                                            (            (                                          (    0  8  @  8  0  (                     @                         (    0  8    8  0  (                                                          (    0  8  @  8  0  (                     @                         (    0  8  P  8  0  (                     P                                             (  0  x  0  (                   x                                                       (    0  8  `                                                                                                             (    0  8  P  8  0  (                     P                                                     (    0  8                         (                 (  0  8  @  (                 (                                                  0  H                       8  0  (                       0  @    (                   (  0    0  (                                     h  @  P  X  `  X  P  X  `  X  P              0  `  8 @ 8 @ 8 @            @  8  0  (                     @                   (  0  @  H  @  0  (                     `  8  0  (                     `  8  0  (                     `  8  0  (                     `  8  0  (                       P            8  0  (                                                                              (               (                         (    0  8  H  8  0  (                     H  8  0  (                                                                           0            0                  0            0                     (    0  8  X  8  0  (                     X                                                                                                                                                                                       (               (                  (  H                           (                                                                                                           (    0  8  ` 8  0  (                     `                                               (  0  (                   0  (                                                                        (                 (                                   (    0  8  @  8  0  (                     @                                                                                                                 `                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     