package accesscontrol

import (
	"context"
	"encoding/xml"
	"time"

	"lc/common/onvif/soap"
)

// against "unused imports"
var _ time.Time
var _ xml.Name

//
// The Decision enumeration represents a choice of two available options for an access request:
//

// Decision type
type Decision string

const (

	// The decision is to grant access.
	// DecisionGranted const
	DecisionGranted Decision = "Granted"

	// The decision is to deny access.
	// DecisionDenied const
	DecisionDenied Decision = "Denied"
)

//
// Non-normative enum that describes the various reasons for denying access.
// The following strings shall be used for the reason field:
//

// DenyReason type
type DenyReason string

const (

	// The device shall provide the following event, whenever a valid credential
	// is not enabled or has been disabled (e.g., due to credential being lost etc.) to prevent
	// unauthorized entry.
	//
	// DenyReasonCredentialNotEnabled const
	DenyReasonCredentialNotEnabled DenyReason = "CredentialNotEnabled"

	// The device shall provide the following event, whenever a valid credential
	// is presented though it is not active yet;: e.g, the credential was presented before the
	// start date.
	//
	// DenyReasonCredentialNotActive const
	DenyReasonCredentialNotActive DenyReason = "CredentialNotActive"

	// The device shall provide the following event, whenever a valid credential
	// was presented after its expiry date.
	//
	// DenyReasonCredentialExpired const
	DenyReasonCredentialExpired DenyReason = "CredentialExpired"

	// The device shall provide the following event, whenever an entered PIN code
	// does not match the credential.
	//
	// DenyReasonInvalidPIN const
	DenyReasonInvalidPIN DenyReason = "InvalidPIN"

	// The device shall provide the following event, whenever a valid credential
	// is denied access to the requested AccessPoint because the credential is not permitted at
	// the moment.
	//
	// DenyReasonNotPermittedAtThisTime const
	DenyReasonNotPermittedAtThisTime DenyReason = "NotPermittedAtThisTime"

	// The device shall provide the following event, whenever the presented
	// credential is not authorized.
	//
	// DenyReasonUnauthorized const
	DenyReasonUnauthorized DenyReason = "Unauthorized"

	// The device shall provide the following event, whenever the request is
	// denied and no other specific event matches it or is supported by the service.
	//
	// DenyReasonOther const
	DenyReasonOther DenyReason = "Other"
)

// GetServiceCapabilities type
type GetServiceCapabilities struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetServiceCapabilities"`
}

// GetServiceCapabilitiesResponse type
type GetServiceCapabilitiesResponse struct {
	XMLName xml.Name `xml:"GetServiceCapabilitiesResponse"`

	// The capability response message contains the requested Access Control
	// service capabilities using a hierarchical XML capability structure.
	//
	Capabilities ServiceCapabilities `xml:"Capabilities,omitempty"`
}

// GetAccessPointInfoList type
type GetAccessPointInfoList struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAccessPointInfoList"`

	// Maximum number of entries to return. If not specified, less than one
	// or higher than what the device supports, the number of items is determined by the
	// device.
	//
	Limit int32 `xml:"http://www.onvif.org/ver10/schema Limit,omitempty"`

	// Start returning entries from this start reference. If not specified,
	// entries shall start from the beginning of the dataset.
	//
	StartReference string `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl StartReference,omitempty"`
}

// GetAccessPointInfoListResponse type
type GetAccessPointInfoListResponse struct {
	XMLName xml.Name `xml:"GetAccessPointInfoListResponse"`

	// StartReference to use in next call to get the following items. If
	// absent, no more items to get.
	//
	NextStartReference string `xml:"NextStartReference,omitempty"`

	// List of AccessPointInfo items.
	AccessPointInfo []AccessPointInfo `xml:"AccessPointInfo,omitempty"`
}

// GetAccessPointInfo type
type GetAccessPointInfo struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAccessPointInfo"`

	// Tokens of AccessPointInfo items to get.
	Token []ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// GetAccessPointInfoResponse type
type GetAccessPointInfoResponse struct {
	XMLName xml.Name `xml:"GetAccessPointInfoResponse"`

	// List of AccessPointInfo items.
	AccessPointInfo []AccessPointInfo `xml:"AccessPointInfo,omitempty"`
}

// GetAccessPointList type
type GetAccessPointList struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAccessPointList"`

	// Maximum number of entries to return. If not specified, less than one
	// or higher than what the device supports, the number of items is determined by the
	// device.
	//
	Limit int32 `xml:"http://www.onvif.org/ver10/schema Limit,omitempty"`

	// Start returning entries from this start reference. If not specified,
	// entries shall start from the beginning of the dataset.
	//
	StartReference string `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl StartReference,omitempty"`
}

// GetAccessPointListResponse type
type GetAccessPointListResponse struct {
	XMLName xml.Name `xml:"GetAccessPointListResponse"`

	// StartReference to use in next call to get the following items. If
	// absent, no more items to get.
	//
	NextStartReference string `xml:"NextStartReference,omitempty"`

	// List of AccessPoint items.
	AccessPoint []AccessPoint `xml:"AccessPoint,omitempty"`
}

// GetAccessPoints type
type GetAccessPoints struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAccessPoints"`

	// Tokens of AccessPoint items to get.
	Token []ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// GetAccessPointsResponse type
type GetAccessPointsResponse struct {
	XMLName xml.Name `xml:"GetAccessPointsResponse"`

	// List of AccessPoint items.
	AccessPoint []AccessPoint `xml:"AccessPoint,omitempty"`
}

// CreateAccessPoint type
type CreateAccessPoint struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl CreateAccessPoint"`

	// AccessPoint item to create
	AccessPoint AccessPoint `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AccessPoint,omitempty"`
}

// CreateAccessPointResponse type
type CreateAccessPointResponse struct {
	XMLName xml.Name `xml:"CreateAccessPointResponse"`

	// Token of created AccessPoint item
	Token ReferenceToken `xml:"Token,omitempty"`
}

// SetAccessPoint type
type SetAccessPoint struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl SetAccessPoint"`

	// AccessPoint item to create or modify
	AccessPoint AccessPoint `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AccessPoint,omitempty"`
}

// SetAccessPointResponse type
type SetAccessPointResponse struct {
	XMLName xml.Name `xml:"SetAccessPointResponse"`
}

// ModifyAccessPoint type
type ModifyAccessPoint struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl ModifyAccessPoint"`

	// AccessPoint item to modify
	AccessPoint AccessPoint `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AccessPoint,omitempty"`
}

// ModifyAccessPointResponse type
type ModifyAccessPointResponse struct {
	XMLName xml.Name `xml:"ModifyAccessPointResponse"`
}

// DeleteAccessPoint type
type DeleteAccessPoint struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl DeleteAccessPoint"`

	// Token of AccessPoint item to delete.
	Token ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// DeleteAccessPointResponse type
type DeleteAccessPointResponse struct {
	XMLName xml.Name `xml:"DeleteAccessPointResponse"`
}

// SetAccessPointAuthenticationProfile type
type SetAccessPointAuthenticationProfile struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl SetAccessPointAuthenticationProfile"`

	// Token of the AccessPoint.
	Token ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`

	// Token of the AuthenticationProfile.
	AuthenticationProfileToken ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AuthenticationProfileToken,omitempty"`
}

// SetAccessPointAuthenticationProfileResponse type
type SetAccessPointAuthenticationProfileResponse struct {
	XMLName xml.Name `xml:"SetAccessPointAuthenticationProfileResponse"`
}

// DeleteAccessPointAuthenticationProfile type
type DeleteAccessPointAuthenticationProfile struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl DeleteAccessPointAuthenticationProfile"`

	// Token of the AccessPoint.
	Token ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// DeleteAccessPointAuthenticationProfileResponse type
type DeleteAccessPointAuthenticationProfileResponse struct {
	XMLName xml.Name `xml:"DeleteAccessPointAuthenticationProfileResponse"`
}

// GetAreaInfoList type
type GetAreaInfoList struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAreaInfoList"`

	// Maximum number of entries to return. If not specified, less than one
	// or higher than what the device supports, the number of items is determined by the
	// device.
	//
	Limit int32 `xml:"http://www.onvif.org/ver10/schema Limit,omitempty"`

	// Start returning entries from this start reference. If not specified,
	// entries shall start from the beginning of the dataset.
	//
	StartReference string `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl StartReference,omitempty"`
}

// GetAreaInfoListResponse type
type GetAreaInfoListResponse struct {
	XMLName xml.Name `xml:"GetAreaInfoListResponse"`

	// StartReference to use in next call to get the following items. If
	// absent, no more items to get.
	//
	NextStartReference string `xml:"NextStartReference,omitempty"`

	// List of AreaInfo items.
	AreaInfo []AreaInfo `xml:"AreaInfo,omitempty"`
}

// GetAreaInfo type
type GetAreaInfo struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAreaInfo"`

	// Tokens of AreaInfo items to get.
	Token []ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// GetAreaInfoResponse type
type GetAreaInfoResponse struct {
	XMLName xml.Name `xml:"GetAreaInfoResponse"`

	// List of AreaInfo items.
	AreaInfo []AreaInfo `xml:"AreaInfo,omitempty"`
}

// GetAreaList type
type GetAreaList struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAreaList"`

	// Maximum number of entries to return. If not specified, less than one
	// or higher than what the device supports, the number of items is determined by the
	// device.
	//
	Limit int32 `xml:"http://www.onvif.org/ver10/schema Limit,omitempty"`

	// Start returning entries from this start reference. If not specified,
	// entries shall start from the beginning of the dataset.
	//
	StartReference string `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl StartReference,omitempty"`
}

// GetAreaListResponse type
type GetAreaListResponse struct {
	XMLName xml.Name `xml:"GetAreaListResponse"`

	// StartReference to use in next call to get the following items. If
	// absent, no more items to get.
	//
	NextStartReference string `xml:"NextStartReference,omitempty"`

	// List of Area items.
	Area []Area `xml:"Area,omitempty"`
}

// GetAreas type
type GetAreas struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAreas"`

	// Tokens of Area items to get.
	Token []ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// GetAreasResponse type
type GetAreasResponse struct {
	XMLName xml.Name `xml:"GetAreasResponse"`

	// List of Area items.
	Area []Area `xml:"Area,omitempty"`
}

// CreateArea type
type CreateArea struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl CreateArea"`

	// Area item to create
	Area Area `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Area,omitempty"`
}

// CreateAreaResponse type
type CreateAreaResponse struct {
	XMLName xml.Name `xml:"CreateAreaResponse"`

	// Token of created Area item
	Token ReferenceToken `xml:"Token,omitempty"`
}

// SetArea type
type SetArea struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl SetArea"`

	// Area item to create or modify
	Area Area `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Area,omitempty"`
}

// SetAreaResponse type
type SetAreaResponse struct {
	XMLName xml.Name `xml:"SetAreaResponse"`
}

// ModifyArea type
type ModifyArea struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl ModifyArea"`

	// Area item to modify
	Area Area `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Area,omitempty"`
}

// ModifyAreaResponse type
type ModifyAreaResponse struct {
	XMLName xml.Name `xml:"ModifyAreaResponse"`
}

// DeleteArea type
type DeleteArea struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl DeleteArea"`

	// Token of Area item to delete.
	Token ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// DeleteAreaResponse type
type DeleteAreaResponse struct {
	XMLName xml.Name `xml:"DeleteAreaResponse"`
}

// GetAccessPointState type
type GetAccessPointState struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl GetAccessPointState"`

	// Token of AccessPoint instance to get AccessPointState for.
	//
	Token ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// GetAccessPointStateResponse type
type GetAccessPointStateResponse struct {
	XMLName xml.Name `xml:"GetAccessPointStateResponse"`

	// AccessPointState item.
	AccessPointState AccessPointState `xml:"AccessPointState,omitempty"`
}

// EnableAccessPoint type
type EnableAccessPoint struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl EnableAccessPoint"`

	// Token of the AccessPoint instance to enable.
	Token ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// EnableAccessPointResponse type
type EnableAccessPointResponse struct {
	XMLName xml.Name `xml:"EnableAccessPointResponse"`
}

// DisableAccessPoint type
type DisableAccessPoint struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl DisableAccessPoint"`

	// Token of the AccessPoint instance to disable.
	Token ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Token,omitempty"`
}

// DisableAccessPointResponse type
type DisableAccessPointResponse struct {
	XMLName xml.Name `xml:"DisableAccessPointResponse"`
}

// ExternalAuthorization type
type ExternalAuthorization struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl ExternalAuthorization"`

	// Token of the Access Point instance.
	AccessPointToken ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AccessPointToken,omitempty"`

	// Optional token of the Credential involved.
	CredentialToken ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl CredentialToken,omitempty"`

	// Optional reason for decision.
	Reason string `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Reason,omitempty"`

	// Decision - Granted or Denied.
	Decision Decision `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Decision,omitempty"`
}

// ExternalAuthorizationResponse type
type ExternalAuthorizationResponse struct {
	XMLName xml.Name `xml:"ExternalAuthorizationResponse"`
}

// ServiceCapabilities type
type ServiceCapabilities struct {
	XMLName xml.Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Capabilities"`

	// The maximum number of entries returned by a single Get<Entity>List or
	// Get<Entity> request.
	// The device shall never return more than this number of entities in a single response.
	//

	MaxLimit uint32 `xml:"http://www.onvif.org/ver10/schema MaxLimit,attr,omitempty"`

	//
	// Indicates the maximum number of access points supported by the device.
	//

	MaxAccessPoints uint32 `xml:"http://www.onvif.org/ver10/schema MaxAccessPoints,attr,omitempty"`

	//
	// Indicates the maximum number of areas supported by the device.
	//

	MaxAreas uint32 `xml:"http://www.onvif.org/ver10/schema MaxAreas,attr,omitempty"`

	//
	// Indicates that the client is allowed to supply the token when creating access
	// points and areas.
	// To enable the use of the commands SetAccessPoint and SetArea, the value must be set to true.
	//

	ClientSuppliedTokenSupported bool `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl ClientSuppliedTokenSupported,attr,omitempty"`
}

// AccessPointInfoBase type
type AccessPointInfoBase struct {
	*DataEntity

	// A user readable name. It shall be up to 64 characters.
	//
	Name Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Name,omitempty"`

	// Optional user readable description for the AccessPoint. It shall
	// be up to 1024 characters.
	//
	Description Description `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Description,omitempty"`

	// Optional reference to the Area from which access is requested.
	//
	AreaFrom ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AreaFrom,omitempty"`

	// Optional reference to the Area to which access is requested.
	//
	AreaTo ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AreaTo,omitempty"`

	//
	// Optional entity type; if missing, a Door type as defined by [ONVIF Door Control
	// Service Specification] should be assumed. This can also be represented by the
	// QName value "tdc:Door" – where tdc is the namespace of the door control service:
	// "http://www.onvif.org/ver10/doorcontrol/wsdl". This field is provided for future
	// extensions; it will allow an access point being extended to cover entity types
	// other than doors as well.
	//
	EntityType QName `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl EntityType,omitempty"`

	// Reference to the entity used to control access; the entity type
	// may be specified by the optional EntityType field explained below but is
	// typically a Door.
	//
	Entity ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Entity,omitempty"`
}

// AccessPointInfo type
type AccessPointInfo struct {
	*AccessPointInfoBase

	// The capabilities for the AccessPoint.
	Capabilities AccessPointCapabilities `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Capabilities,omitempty"`
}

// AccessPoint type
type AccessPoint struct {
	*AccessPointInfo

	//
	// A reference to an authentication profile which defines the authentication
	// behavior of the access point.
	//
	AuthenticationProfileToken ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AuthenticationProfileToken,omitempty"`

	Extension AccessPointExtension `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Extension,omitempty"`
}

// AccessPointExtension type
type AccessPointExtension struct {
}

// AccessPointCapabilities type
type AccessPointCapabilities struct {

	// A list of security level tokens that this access point supports.
	// See [Authentication Behavior Service Specification].
	//
	SupportedSecurityLevels []ReferenceToken `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl SupportedSecurityLevels,omitempty"`

	Extension SupportedSecurityLevelsExtension `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Extension,omitempty"`

	//
	// Indicates whether or not this AccessPoint instance supports EnableAccessPoint
	// and DisableAccessPoint commands.
	//

	DisableAccessPoint bool `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl DisableAccessPoint,attr,omitempty"`

	//
	// Indicates whether or not this AccessPoint instance supports generation of duress events.
	//

	Duress bool `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Duress,attr,omitempty"`

	//
	// Indicates whether or not this AccessPoint has a REX switch or other input that
	// allows anonymous access.
	//

	AnonymousAccess bool `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AnonymousAccess,attr,omitempty"`

	//
	// Indicates whether or not this AccessPoint instance supports generation of
	// AccessTaken and AccessNotTaken events. If AnonymousAccess and AccessTaken are both true, it
	// indicates that the Anonymous versions of AccessTaken and AccessNotTaken are supported.
	//

	AccessTaken bool `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl AccessTaken,attr,omitempty"`

	//
	// Indicates whether or not this AccessPoint instance supports the
	// ExternalAuthorization operation and the generation of Request events. If AnonymousAccess and
	// ExternalAuthorization are both true, it indicates that the Anonymous version is supported as
	// well.
	//

	ExternalAuthorization bool `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl ExternalAuthorization,attr,omitempty"`
}

// SupportedSecurityLevelsExtension type
type SupportedSecurityLevelsExtension struct {
}

// AreaInfoBase type
type AreaInfoBase struct {
	*DataEntity

	// User readable name. It shall be up to 64 characters.
	//
	Name Name `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Name,omitempty"`

	// User readable description for the Area. It shall be up to 1024
	// characters.
	//
	Description Description `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Description,omitempty"`
}

// AreaInfo type
type AreaInfo struct {
	*AreaInfoBase
}

// Area type
type Area struct {
	*AreaInfo

	Extension AreaExtension `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Extension,omitempty"`
}

// AreaExtension type
type AreaExtension struct {
}

// AccessPointState type
type AccessPointState struct {

	// Indicates that the AccessPoint is enabled. By default this field value
	// shall be True, if the DisableAccessPoint capabilities is not supported.
	//
	Enabled bool `xml:"http://www.onvif.org/ver10/accesscontrol/wsdl Enabled,omitempty"`
}

// Type used to reference logical and physical entities.

// ReferenceToken type
type ReferenceToken string

// Type used for names of logical and physical entities.

// Name type
type Name string

// Description is optional and the maximum length is device specific.
// If the length is more than maximum length, it is silently chopped to the maximum length
// supported by the device/service (which may be 0).
//

// Description type
type Description string

// Type used to represent the numbers from 1 ,2 , 3,...

// DataEntity type
type DataEntity struct {

	// A service-unique identifier of the item.

	Token ReferenceToken `xml:"token,attr,omitempty"`
}

// PACSPort type
type PACSPort interface {

	/*
		This operation returns the capabilities of the access control service.
		A device which provides the access control service shall implement this method.
	*/
	GetServiceCapabilities(request *GetServiceCapabilities) (*GetServiceCapabilitiesResponse, error)

	GetServiceCapabilitiesContext(ctx context.Context, request *GetServiceCapabilities) (*GetServiceCapabilitiesResponse, error)

	/*
		This operation requests a list of AccessPointInfo items matching the given tokens.
		The device shall ignore tokens it cannot resolve and shall return an empty list if
		there are no items matching the specified tokens.
		The device shall not return a fault in this case.
		If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be returned.
	*/
	GetAccessPointInfo(request *GetAccessPointInfo) (*GetAccessPointInfoResponse, error)

	GetAccessPointInfoContext(ctx context.Context, request *GetAccessPointInfo) (*GetAccessPointInfoResponse, error)

	/*
		This operation requests a list of all AccessPointInfo items provided by the device.
		A call to this method shall return a StartReference when not all data is returned and more
		data is available. The reference shall be valid for retrieving the next set of data.
		Please refer to section 4.8.3 in [ONVIF PACS Architecture and Design Considerations] for more details.
		The number of items returned shall not be greater than the Limit parameter.
	*/
	GetAccessPointInfoList(request *GetAccessPointInfoList) (*GetAccessPointInfoListResponse, error)

	GetAccessPointInfoListContext(ctx context.Context, request *GetAccessPointInfoList) (*GetAccessPointInfoListResponse, error)

	/*
		This operation requests a list of AccessPoint items matching the given tokens.
		The device shall ignore tokens it cannot resolve and shall return an empty list if there are
		no items matching the specified tokens. The device shall not return a fault in this case.
		If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be returned.
	*/
	GetAccessPoints(request *GetAccessPoints) (*GetAccessPointsResponse, error)

	GetAccessPointsContext(ctx context.Context, request *GetAccessPoints) (*GetAccessPointsResponse, error)

	/*
		This operation requests a list of all AccessPoint items provided by the device. A call to
		this method shall return a StartReference when not all data is returned and more data is available.
		The reference shall be valid for retrieving the next set of data.
		The number of items returned shall not be greater than the Limit parameter.
	*/
	GetAccessPointList(request *GetAccessPointList) (*GetAccessPointListResponse, error)

	GetAccessPointListContext(ctx context.Context, request *GetAccessPointList) (*GetAccessPointListResponse, error)

	/*
		This operation creates the specified access point in the device. The token field of the
		AccessPoint structure shall be empty and the device shall allocate a token for the access point.
		The allocated token shall be returned in the response. If the client sends any value in the
		token field, the device shall return InvalidArgVal as a generic fault code.
	*/
	CreateAccessPoint(request *CreateAccessPoint) (*CreateAccessPointResponse, error)

	CreateAccessPointContext(ctx context.Context, request *CreateAccessPoint) (*CreateAccessPointResponse, error)

	/*
		This method is used to synchronize an access point in a client with the device. If an access
		point with the specified token does not exist in the device, the access point is created.
		If an access point with the specified token exists, then the access point is modified.
		A call to this method takes an AccessPoint structure as input parameter.
		The token field of the AccessPoint structure shall not be empty.
		A device that signals support for the ClientSuppliedTokenSupported capability shall implement this command.
		If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.
	*/
	SetAccessPoint(request *SetAccessPoint) (*SetAccessPointResponse, error)

	SetAccessPointContext(ctx context.Context, request *SetAccessPoint) (*SetAccessPointResponse, error)

	/*
		This operation modifies the specified access point. The token of the access point to modify
		is specified in the token field of the AccessPoint structure and shall not be empty.
		All other fields in the structure shall overwrite the fields in the specified access point.
		If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.
	*/
	ModifyAccessPoint(request *ModifyAccessPoint) (*ModifyAccessPointResponse, error)

	ModifyAccessPointContext(ctx context.Context, request *ModifyAccessPoint) (*ModifyAccessPointResponse, error)

	/*
		This operation deletes the specified access point. If it is associated with one or more
		entities some devices may not be able to delete the access point, and consequently a
		ReferenceInUse fault shall be generated.
		If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.
	*/
	DeleteAccessPoint(request *DeleteAccessPoint) (*DeleteAccessPointResponse, error)

	DeleteAccessPointContext(ctx context.Context, request *DeleteAccessPoint) (*DeleteAccessPointResponse, error)

	/*
		This operation defines the authentication behavior for an access point.
	*/
	SetAccessPointAuthenticationProfile(request *SetAccessPointAuthenticationProfile) (*SetAccessPointAuthenticationProfileResponse, error)

	SetAccessPointAuthenticationProfileContext(ctx context.Context, request *SetAccessPointAuthenticationProfile) (*SetAccessPointAuthenticationProfileResponse, error)

	/*
		This operation reverts the authentication behavior for an access point to its default behavior.
	*/
	DeleteAccessPointAuthenticationProfile(request *DeleteAccessPointAuthenticationProfile) (*DeleteAccessPointAuthenticationProfileResponse, error)

	DeleteAccessPointAuthenticationProfileContext(ctx context.Context, request *DeleteAccessPointAuthenticationProfile) (*DeleteAccessPointAuthenticationProfileResponse, error)

	/*
		This operation requests a list of AreaInfo items matching the given tokens. The device shall
		ignore tokens it cannot resolve and shall return an empty list if there are no items
		matching the specified tokens. The device shall not return a fault in this case.
		If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be returned.
	*/
	GetAreaInfo(request *GetAreaInfo) (*GetAreaInfoResponse, error)

	GetAreaInfoContext(ctx context.Context, request *GetAreaInfo) (*GetAreaInfoResponse, error)

	/*
		This operation requests a list of all AreaInfo items provided by the device. A call to this
		method shall return a StartReference when not all data is returned and more data is available.
		The reference shall be valid for retrieving the next set of data.
		The number of items returned shall not be greater than the Limit parameter.
	*/
	GetAreaInfoList(request *GetAreaInfoList) (*GetAreaInfoListResponse, error)

	GetAreaInfoListContext(ctx context.Context, request *GetAreaInfoList) (*GetAreaInfoListResponse, error)

	/*
		This operation requests a list of Area items matching the given tokens. The device shall
		ignore tokens it cannot resolve and shall return an empty list if there are no items
		matching the specified tokens. The device shall not return a fault in this case.
		If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be returned.
	*/
	GetAreas(request *GetAreas) (*GetAreasResponse, error)

	GetAreasContext(ctx context.Context, request *GetAreas) (*GetAreasResponse, error)

	/*
		This operation requests a list of all Area items provided by the device. A call to this
		method shall return a StartReference when not all data is returned and more data is available.
		The reference shall be valid for retrieving the next set of data.
		The number of items returned shall not be greater than the Limit parameter.
	*/
	GetAreaList(request *GetAreaList) (*GetAreaListResponse, error)

	GetAreaListContext(ctx context.Context, request *GetAreaList) (*GetAreaListResponse, error)

	/*
		This operation creates the specified area in the device. The token field of the Area
		structure shall be empty and the device shall allocate a token for the area.
		The allocated token shall be returned in the response.
		If the client sends any value in the token field, the device shall return InvalidArgVal as a generic fault code.
	*/
	CreateArea(request *CreateArea) (*CreateAreaResponse, error)

	CreateAreaContext(ctx context.Context, request *CreateArea) (*CreateAreaResponse, error)

	/*
		This method is used to synchronize an area in a client with the device. If an area with the
		specified token does not exist in the device, the area is created. If an area with the
		specified token exists, then the area is modified. A call to this method takes an Area
		structure as input parameter. The token field of the Area structure shall not be empty.
		A device that signals support for the ClientSuppliedTokenSupported capability shall
		implement this command.
		If no token was specified in the request, the device shall return
		InvalidArgs as a generic fault code.
	*/
	SetArea(request *SetArea) (*SetAreaResponse, error)

	SetAreaContext(ctx context.Context, request *SetArea) (*SetAreaResponse, error)

	/*
		This operation modifies the specified area. The token of the area to modify is specified in
		the token field of the Area structure and shall not be empty. All other fields in the
		structure shall overwrite the fields in the specified area.
		If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.
	*/
	ModifyArea(request *ModifyArea) (*ModifyAreaResponse, error)

	ModifyAreaContext(ctx context.Context, request *ModifyArea) (*ModifyAreaResponse, error)

	/*
		This operation deletes the specified area. If it is associated with one or more entities
		some devices may not be able to delete the area, and consequently a ReferenceInUse fault shall be generated.
		If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.
	*/
	DeleteArea(request *DeleteArea) (*DeleteAreaResponse, error)

	DeleteAreaContext(ctx context.Context, request *DeleteArea) (*DeleteAreaResponse, error)

	/*
		This operation requests the AccessPointState for the access point instance specified by the token.
	*/
	GetAccessPointState(request *GetAccessPointState) (*GetAccessPointStateResponse, error)

	GetAccessPointStateContext(ctx context.Context, request *GetAccessPointState) (*GetAccessPointStateResponse, error)

	/*
		This operation allows enabling an access point. A device that signals support for
		DisableAccessPoint capability for a particular access point instance shall implement this command.
	*/
	EnableAccessPoint(request *EnableAccessPoint) (*EnableAccessPointResponse, error)

	EnableAccessPointContext(ctx context.Context, request *EnableAccessPoint) (*EnableAccessPointResponse, error)

	/*
		This operation allows disabling an access point. A device that signals support for the
		DisableAccessPoint capability for a particular access point instance shall implement this command.
	*/
	DisableAccessPoint(request *DisableAccessPoint) (*DisableAccessPointResponse, error)

	DisableAccessPointContext(ctx context.Context, request *DisableAccessPoint) (*DisableAccessPointResponse, error)

	/*
		This operation allows to deny or grant decision at an access point instance. A device that
		signals support for ExternalAuthorization capability for a particular access point instance
		shall implement this method.
	*/
	ExternalAuthorization(request *ExternalAuthorization) (*ExternalAuthorizationResponse, error)

	ExternalAuthorizationContext(ctx context.Context, request *ExternalAuthorization) (*ExternalAuthorizationResponse, error)
}

// pACSPort type
type pACSPort struct {
	client *soap.Client
	xaddr  string
}

func NewPACSPort(client *soap.Client, xaddr string) PACSPort {
	return &pACSPort{
		client: client,
		xaddr:  xaddr,
	}
}

func (service *pACSPort) GetServiceCapabilitiesContext(ctx context.Context, request *GetServiceCapabilities) (*GetServiceCapabilitiesResponse, error) {
	response := new(GetServiceCapabilitiesResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetServiceCapabilities", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetServiceCapabilities(request *GetServiceCapabilities) (*GetServiceCapabilitiesResponse, error) {
	return service.GetServiceCapabilitiesContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAccessPointInfoContext(ctx context.Context, request *GetAccessPointInfo) (*GetAccessPointInfoResponse, error) {
	response := new(GetAccessPointInfoResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointInfo", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAccessPointInfo(request *GetAccessPointInfo) (*GetAccessPointInfoResponse, error) {
	return service.GetAccessPointInfoContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAccessPointInfoListContext(ctx context.Context, request *GetAccessPointInfoList) (*GetAccessPointInfoListResponse, error) {
	response := new(GetAccessPointInfoListResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointInfoList", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAccessPointInfoList(request *GetAccessPointInfoList) (*GetAccessPointInfoListResponse, error) {
	return service.GetAccessPointInfoListContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAccessPointsContext(ctx context.Context, request *GetAccessPoints) (*GetAccessPointsResponse, error) {
	response := new(GetAccessPointsResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPoints", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAccessPoints(request *GetAccessPoints) (*GetAccessPointsResponse, error) {
	return service.GetAccessPointsContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAccessPointListContext(ctx context.Context, request *GetAccessPointList) (*GetAccessPointListResponse, error) {
	response := new(GetAccessPointListResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointList", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAccessPointList(request *GetAccessPointList) (*GetAccessPointListResponse, error) {
	return service.GetAccessPointListContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) CreateAccessPointContext(ctx context.Context, request *CreateAccessPoint) (*CreateAccessPointResponse, error) {
	response := new(CreateAccessPointResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/CreateAccessPoint", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) CreateAccessPoint(request *CreateAccessPoint) (*CreateAccessPointResponse, error) {
	return service.CreateAccessPointContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) SetAccessPointContext(ctx context.Context, request *SetAccessPoint) (*SetAccessPointResponse, error) {
	response := new(SetAccessPointResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/SetAccessPoint", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) SetAccessPoint(request *SetAccessPoint) (*SetAccessPointResponse, error) {
	return service.SetAccessPointContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) ModifyAccessPointContext(ctx context.Context, request *ModifyAccessPoint) (*ModifyAccessPointResponse, error) {
	response := new(ModifyAccessPointResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/ModifyAccessPoint", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) ModifyAccessPoint(request *ModifyAccessPoint) (*ModifyAccessPointResponse, error) {
	return service.ModifyAccessPointContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) DeleteAccessPointContext(ctx context.Context, request *DeleteAccessPoint) (*DeleteAccessPointResponse, error) {
	response := new(DeleteAccessPointResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/DeleteAccessPoint", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) DeleteAccessPoint(request *DeleteAccessPoint) (*DeleteAccessPointResponse, error) {
	return service.DeleteAccessPointContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) SetAccessPointAuthenticationProfileContext(ctx context.Context, request *SetAccessPointAuthenticationProfile) (*SetAccessPointAuthenticationProfileResponse, error) {
	response := new(SetAccessPointAuthenticationProfileResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/SetAccessPointAuthenticationProfile", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) SetAccessPointAuthenticationProfile(request *SetAccessPointAuthenticationProfile) (*SetAccessPointAuthenticationProfileResponse, error) {
	return service.SetAccessPointAuthenticationProfileContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) DeleteAccessPointAuthenticationProfileContext(ctx context.Context, request *DeleteAccessPointAuthenticationProfile) (*DeleteAccessPointAuthenticationProfileResponse, error) {
	response := new(DeleteAccessPointAuthenticationProfileResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/DeleteAccessPointAuthenticationProfile", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) DeleteAccessPointAuthenticationProfile(request *DeleteAccessPointAuthenticationProfile) (*DeleteAccessPointAuthenticationProfileResponse, error) {
	return service.DeleteAccessPointAuthenticationProfileContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAreaInfoContext(ctx context.Context, request *GetAreaInfo) (*GetAreaInfoResponse, error) {
	response := new(GetAreaInfoResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAreaInfo", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAreaInfo(request *GetAreaInfo) (*GetAreaInfoResponse, error) {
	return service.GetAreaInfoContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAreaInfoListContext(ctx context.Context, request *GetAreaInfoList) (*GetAreaInfoListResponse, error) {
	response := new(GetAreaInfoListResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAreaInfoList", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAreaInfoList(request *GetAreaInfoList) (*GetAreaInfoListResponse, error) {
	return service.GetAreaInfoListContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAreasContext(ctx context.Context, request *GetAreas) (*GetAreasResponse, error) {
	response := new(GetAreasResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAreas", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAreas(request *GetAreas) (*GetAreasResponse, error) {
	return service.GetAreasContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAreaListContext(ctx context.Context, request *GetAreaList) (*GetAreaListResponse, error) {
	response := new(GetAreaListResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAreaList", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAreaList(request *GetAreaList) (*GetAreaListResponse, error) {
	return service.GetAreaListContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) CreateAreaContext(ctx context.Context, request *CreateArea) (*CreateAreaResponse, error) {
	response := new(CreateAreaResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/CreateArea", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) CreateArea(request *CreateArea) (*CreateAreaResponse, error) {
	return service.CreateAreaContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) SetAreaContext(ctx context.Context, request *SetArea) (*SetAreaResponse, error) {
	response := new(SetAreaResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/SetArea", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) SetArea(request *SetArea) (*SetAreaResponse, error) {
	return service.SetAreaContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) ModifyAreaContext(ctx context.Context, request *ModifyArea) (*ModifyAreaResponse, error) {
	response := new(ModifyAreaResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/ModifyArea", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) ModifyArea(request *ModifyArea) (*ModifyAreaResponse, error) {
	return service.ModifyAreaContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) DeleteAreaContext(ctx context.Context, request *DeleteArea) (*DeleteAreaResponse, error) {
	response := new(DeleteAreaResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/DeleteArea", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) DeleteArea(request *DeleteArea) (*DeleteAreaResponse, error) {
	return service.DeleteAreaContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) GetAccessPointStateContext(ctx context.Context, request *GetAccessPointState) (*GetAccessPointStateResponse, error) {
	response := new(GetAccessPointStateResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointState", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) GetAccessPointState(request *GetAccessPointState) (*GetAccessPointStateResponse, error) {
	return service.GetAccessPointStateContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) EnableAccessPointContext(ctx context.Context, request *EnableAccessPoint) (*EnableAccessPointResponse, error) {
	response := new(EnableAccessPointResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/EnableAccessPoint", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) EnableAccessPoint(request *EnableAccessPoint) (*EnableAccessPointResponse, error) {
	return service.EnableAccessPointContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) DisableAccessPointContext(ctx context.Context, request *DisableAccessPoint) (*DisableAccessPointResponse, error) {
	response := new(DisableAccessPointResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/DisableAccessPoint", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) DisableAccessPoint(request *DisableAccessPoint) (*DisableAccessPointResponse, error) {
	return service.DisableAccessPointContext(
		context.Background(),
		request,
	)
}

func (service *pACSPort) ExternalAuthorizationContext(ctx context.Context, request *ExternalAuthorization) (*ExternalAuthorizationResponse, error) {
	response := new(ExternalAuthorizationResponse)
	err := service.client.CallContext(ctx, service.xaddr, "http://www.onvif.org/ver10/accesscontrol/wsdl/ExternalAuthorization", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *pACSPort) ExternalAuthorization(request *ExternalAuthorization) (*ExternalAuthorizationResponse, error) {
	return service.ExternalAuthorizationContext(
		context.Background(),
		request,
	)
}

// QName type
type QName string
