From 60185bb34c7697a4285bd2673bba349483e46806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=B7=E4=B8=9C?= <535915157@qq.com> Date: Sun, 26 Dec 2021 14:48:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9opcua=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E9=A9=B1=E5=8A=A8=EF=BC=8C=E4=BC=98=E5=8C=96=E5=89=8D?= =?UTF-8?q?=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/IoTGateway/DesignTimeBuild/.dtbcache.v2 | Bin 443639 -> 443639 bytes .vs/IoTGateway/v16/.suo | Bin 102912 -> 118784 bytes Dockerfile-win | 35 - .../Views/DeviceVariable/Index.cshtml | 6 +- IoTGateway/iotgateway.db | Bin 311296 -> 311296 bytes .../DriverOPCUaClient.csproj | 2 - .../Drivers/DriverOPCUaClient/OPCUaClient.cs | 29 +- .../OpcUaHelper/FormUtils.cs | 1021 ++++++++++++ .../OpcUaHelper/OpcUaClientHelper.cs | 1446 +++++++++++++++++ .../OpcUaHelper/OpcUaStatusEventArgs.cs | 65 + .../PluginInterface/DriverReturnValueModel.cs | 5 +- Quickstarts.ReferenceClient.Config.xml | 89 - drivers/net5.0/DriverModbusMaster.dll | Bin 98816 -> 98304 bytes drivers/net5.0/DriverModbusMaster.pdb | Bin 48052 -> 47880 bytes drivers/net5.0/DriverOPCUaClient.deps.json | 2 - drivers/net5.0/DriverOPCUaClient.dll | Bin 7680 -> 44032 bytes drivers/net5.0/DriverOPCUaClient.pdb | Bin 11048 -> 25136 bytes drivers/net5.0/DriverSiemensS7.dll | Bin 103424 -> 103424 bytes drivers/net5.0/DriverSiemensS7.pdb | Bin 46648 -> 46536 bytes drivers/net5.0/PluginInterface.dll | Bin 9728 -> 10240 bytes drivers/net5.0/PluginInterface.pdb | Bin 11652 -> 11548 bytes drivers/net5.0/ref/DriverModbusMaster.dll | Bin 41984 -> 41472 bytes drivers/net5.0/ref/DriverOPCUaClient.dll | Bin 6144 -> 14336 bytes drivers/net5.0/ref/DriverSiemensS7.dll | Bin 32256 -> 32256 bytes iotgateway.db | Bin 311296 -> 311296 bytes 25 files changed, 2547 insertions(+), 153 deletions(-) delete mode 100644 Dockerfile-win create mode 100644 Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/FormUtils.cs create mode 100644 Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/OpcUaClientHelper.cs create mode 100644 Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/OpcUaStatusEventArgs.cs delete mode 100644 Quickstarts.ReferenceClient.Config.xml diff --git a/.vs/IoTGateway/DesignTimeBuild/.dtbcache.v2 b/.vs/IoTGateway/DesignTimeBuild/.dtbcache.v2 index 919d74d65727ee97c128acbf55f8b221fc688013..a4508958804377f5c143f8138da77940f6ec11ff 100644 GIT binary patch delta 39638 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�FBRSCBb&}4!4gUc>yPJFj`!OIq z46psS|Ei-l{;Q5pG~9$f)lQDDe`syummAofi3<;ae{81GRs$ zsz2lRF(d0+rY9N;v}!_TxK)0R1sB{Zr*`00`306eY~F7*mOs?^{?ho48Q;b#8ow@- zema%By<8cVjUSzu%gGLYVMy=`!&y4E^-S6Si8rRzd+snE3hL5qHcZ?wFVwj<{o*ONIGI+%cKg`>99VF|lQG#2u53g(L2m zN8B;_pS?Tcj%ob$za#FLN8B;F3!899JmQXd#2u6EpTR35VG#Z=b;r~@cgJMsfP+8G zzt8oRc(?ntM!!nD+XZEXa08P3XS}M~`#WAt4&67RxNkM^_^V=2p2`el-wE0G8hBg= z%2Sz3DS=DrP;$*o$5;QQe;$nB&x3tc59b^6;p4x{=XIidSneJF9>-V$$JlWeKLI!g z2(K7W)~no4;IIGRyU*&}$>Bu!m29R#!?(bEqYMW}!;3cl=gA^QYCKqN4c1tLHa7+4 zRBOBjo{Lw(v|gJF;E#RHrFw%#m%%R6Xd_IcMw?)oG};W)tkD*j7L6{4S+3C)Fe@~= z5@w}FSHY~(=vgplY4mKEvo(4S%sCoe4YOLKYhc!Bcnyr2G`bdMtwz_utkdYZFy|un zJlOLzdOpng8odDK0*zh>bD>5rg1Jbe7sFhv(Mw=1(deZxmumDfn9DSJIn3o6y#nS6 zja~_JrADuUxk{t!Vb*JS4Lld18(}tTbQ8=bjb06NwWiZ+V6V~WW|++yB``#z*TP(@ z(ci%QMx)okT&L0NVXoKc4KO!o^hTH)HTqka-)i(Gn42_uGtA8z-2$^kqqo4^qTx00 zT!7vNbDKtQhq+y&cfj0%me~rsRik&p+^NyKVD8fB-7t4+^d6XdG2D>U<0 zdVK4xBY%a<_pkT()_;}DH=N}9FmJg&AeoG0g7jykKgd8v27(M?WDrOeBUvEXjAVo8 z!x$R|Hk^^+AR`$W2{M|I(I8_P84J(G88d+-m+uKI;a7Ql>l0D_Bv#BMkSUBz0V!sr z7^H-e5|C0xN{5^&a0i&K7pC|1+2G zbvXL-SoR|x-x!(y_a5Kyc>j-ie6vM8s$+jV^(*GLh}AjmZ~hrow)9367TQ=)gM6nk z|L{S^A6ET0{$WOfKaG6!0IYdY#bJ4!Uuyc{8h@nK;(^}Z^gxf%b5jsO4v delta 34668 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 OmufxtOSSRGwf_g4bC2Kv diff --git a/.vs/IoTGateway/v16/.suo b/.vs/IoTGateway/v16/.suo index 4d51e5c3cb54af626320bda5692c2e1f87ebf99d..e4544144b26694b9009186f9ecd62cc6c02eb3ca 100644 GIT binary patch delta 15914 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 o^Ke1Sx#&(T`R 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 - - diff --git a/Plugins/Drivers/DriverOPCUaClient/OPCUaClient.cs b/Plugins/Drivers/DriverOPCUaClient/OPCUaClient.cs index 249fb5b..5861d75 100644 --- a/Plugins/Drivers/DriverOPCUaClient/OPCUaClient.cs +++ b/Plugins/Drivers/DriverOPCUaClient/OPCUaClient.cs @@ -7,6 +7,7 @@ using Opc.Ua.Client; using System.Collections.Generic; using System.Threading.Tasks; using Opc.Ua.Configuration; +using OpcUaHelper; namespace DriverOPCUaClient { @@ -14,9 +15,7 @@ namespace DriverOPCUaClient [DriverInfoAttribute("OPCUaClient", "V1.0.0", "Copyright WHD© 2021-12-19")] public class OPCUaClient : IDriver { - Session session = null; - ApplicationConfiguration config = null; - ConfiguredEndpoint endpoint = null; + OpcUaClientHelper opcUaClient = null; #region 配置参数 [ConfigParameter("设备Id")] @@ -37,18 +36,7 @@ namespace DriverOPCUaClient { DeviceId = deviceId; - ApplicationInstance application = new ApplicationInstance - { - ApplicationName = "ConsoleReferenceClient", - ApplicationType = ApplicationType.Client, - ConfigSectionName = "Quickstarts.ReferenceClient", - CertificatePasswordProvider = new CertificatePasswordProvider(null) - }; - config = application.LoadApplicationConfiguration(silent: false).Result; - - EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint(application.ApplicationConfiguration, Uri, false); - EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(application.ApplicationConfiguration); - endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration); + opcUaClient = new OpcUaClientHelper(); } @@ -57,7 +45,7 @@ namespace DriverOPCUaClient get { - return session != null && session.Connected; + return opcUaClient != null && opcUaClient.Connected; } } @@ -65,7 +53,7 @@ namespace DriverOPCUaClient { try { - session = Session.Create(config, endpoint, false, false, config.ApplicationName, 30 * 60 * 1000, new UserIdentity(), null).Result; + opcUaClient.ConnectServer(Uri).Wait((int)Timeout); } catch (Exception) { @@ -78,7 +66,7 @@ namespace DriverOPCUaClient { try { - session?.Close(); + opcUaClient?.Disconnect(); return !IsConnected; } catch (Exception) @@ -92,8 +80,7 @@ namespace DriverOPCUaClient { try { - session?.Dispose(); - session = null; + opcUaClient = null; } catch (Exception) { @@ -111,7 +98,7 @@ namespace DriverOPCUaClient { try { - var dataValue = session.ReadValue(new NodeId(ioarg.Address)); + var dataValue = opcUaClient.ReadNode(new NodeId(ioarg.Address)); if (DataValue.IsGood(dataValue)) ret.Value = dataValue.Value; } diff --git a/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/FormUtils.cs b/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/FormUtils.cs new file mode 100644 index 0000000..ff766d7 --- /dev/null +++ b/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/FormUtils.cs @@ -0,0 +1,1021 @@ +using Opc.Ua; +using Opc.Ua.Client; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpcUaHelper +{ + /// + /// 辅助类 + /// + public class FormUtils + { + /// + /// Gets the display text for the access level attribute. + /// + /// The access level. + /// The access level formatted as a string. + private static string GetAccessLevelDisplayText( byte accessLevel ) + { + StringBuilder buffer = new StringBuilder( ); + + if (accessLevel == AccessLevels.None) + { + buffer.Append( "None" ); + } + + if ((accessLevel & AccessLevels.CurrentRead) == AccessLevels.CurrentRead) + { + buffer.Append( "Read" ); + } + + if ((accessLevel & AccessLevels.CurrentWrite) == AccessLevels.CurrentWrite) + { + if (buffer.Length > 0) + { + buffer.Append( " | " ); + } + + buffer.Append( "Write" ); + } + + if ((accessLevel & AccessLevels.HistoryRead) == AccessLevels.HistoryRead) + { + if (buffer.Length > 0) + { + buffer.Append( " | " ); + } + + buffer.Append( "HistoryRead" ); + } + + if ((accessLevel & AccessLevels.HistoryWrite) == AccessLevels.HistoryWrite) + { + if (buffer.Length > 0) + { + buffer.Append( " | " ); + } + + buffer.Append( "HistoryWrite" ); + } + + if ((accessLevel & AccessLevels.SemanticChange) == AccessLevels.SemanticChange) + { + if (buffer.Length > 0) + { + buffer.Append( " | " ); + } + + buffer.Append( "SemanticChange" ); + } + + return buffer.ToString( ); + } + + /// + /// Gets the display text for the event notifier attribute. + /// + /// The event notifier. + /// The event notifier formatted as a string. + private static string GetEventNotifierDisplayText( byte eventNotifier ) + { + StringBuilder buffer = new StringBuilder( ); + + if (eventNotifier == EventNotifiers.None) + { + buffer.Append( "None" ); + } + + if ((eventNotifier & EventNotifiers.SubscribeToEvents) == EventNotifiers.SubscribeToEvents) + { + buffer.Append( "Subscribe" ); + } + + if ((eventNotifier & EventNotifiers.HistoryRead) == EventNotifiers.HistoryRead) + { + if (buffer.Length > 0) + { + buffer.Append( " | " ); + } + + buffer.Append( "HistoryRead" ); + } + + if ((eventNotifier & EventNotifiers.HistoryWrite) == EventNotifiers.HistoryWrite) + { + if (buffer.Length > 0) + { + buffer.Append( " | " ); + } + + buffer.Append( "HistoryWrite" ); + } + + return buffer.ToString( ); + } + + /// + /// Gets the display text for the value rank attribute. + /// + /// The value rank. + /// The value rank formatted as a string. + private static string GetValueRankDisplayText( int valueRank ) + { + switch (valueRank) + { + case ValueRanks.Any: return "Any"; + case ValueRanks.Scalar: return "Scalar"; + case ValueRanks.ScalarOrOneDimension: return "ScalarOrOneDimension"; + case ValueRanks.OneOrMoreDimensions: return "OneOrMoreDimensions"; + case ValueRanks.OneDimension: return "OneDimension"; + case ValueRanks.TwoDimensions: return "TwoDimensions"; + } + + return valueRank.ToString( ); + } + + /// + /// Gets the display text for the specified attribute. + /// + /// The currently active session. + /// The id of the attribute. + /// The value of the attribute. + /// The attribute formatted as a string. + public static string GetAttributeDisplayText( Session session, uint attributeId, Variant value ) + { + if (value == Variant.Null) + { + return String.Empty; + } + + switch (attributeId) + { + case Attributes.AccessLevel: + case Attributes.UserAccessLevel: + { + byte? field = value.Value as byte?; + + if (field != null) + { + return GetAccessLevelDisplayText( field.Value ); + } + + break; + } + + case Attributes.EventNotifier: + { + byte? field = value.Value as byte?; + + if (field != null) + { + return GetEventNotifierDisplayText( field.Value ); + } + + break; + } + + case Attributes.DataType: + { + return session.NodeCache.GetDisplayText( value.Value as NodeId ); + } + + case Attributes.ValueRank: + { + int? field = value.Value as int?; + + if (field != null) + { + return GetValueRankDisplayText( field.Value ); + } + + break; + } + + case Attributes.NodeClass: + { + int? field = value.Value as int?; + + if (field != null) + { + return ((NodeClass)field.Value).ToString( ); + } + + break; + } + + case Attributes.NodeId: + { + NodeId field = value.Value as NodeId; + + if (!NodeId.IsNull( field )) + { + return field.ToString( ); + } + + return "Null"; + } + } + + // check for byte strings. + if (value.Value is byte[]) + { + return Utils.ToHexString( value.Value as byte[] ); + } + + // use default format. + return value.ToString( ); + } + + /// + /// Discovers the servers on the local machine. + /// + /// The configuration. + /// A list of server urls. + public static IList DiscoverServers( ApplicationConfiguration configuration ) + { + List serverUrls = new List( ); + + // set a short timeout because this is happening in the drop down event. + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create( configuration ); + endpointConfiguration.OperationTimeout = 5000; + + // Connect to the local discovery server and find the available servers. + using (DiscoveryClient client = DiscoveryClient.Create( new Uri( "opc.tcp://localhost:4840" ), endpointConfiguration )) + { + ApplicationDescriptionCollection servers = client.FindServers( null ); + + // populate the drop down list with the discovery URLs for the available servers. + for (int ii = 0; ii < servers.Count; ii++) + { + if (servers[ii].ApplicationType == ApplicationType.DiscoveryServer) + { + continue; + } + + for (int jj = 0; jj < servers[ii].DiscoveryUrls.Count; jj++) + { + string discoveryUrl = servers[ii].DiscoveryUrls[jj]; + + // Many servers will use the '/discovery' suffix for the discovery endpoint. + // The URL without this prefix should be the base URL for the server. + if (discoveryUrl.EndsWith( "/discovery" )) + { + discoveryUrl = discoveryUrl.Substring( 0, discoveryUrl.Length - "/discovery".Length ); + } + + // ensure duplicates do not get added. + if (!serverUrls.Contains( discoveryUrl )) + { + serverUrls.Add( discoveryUrl ); + } + } + } + } + + return serverUrls; + } + + /// + /// Finds the endpoint that best matches the current settings. + /// + /// The discovery URL. + /// if set to true select an endpoint that uses security. + /// The best available endpoint. + public static EndpointDescription SelectEndpoint( string discoveryUrl, bool useSecurity ) + { + // needs to add the '/discovery' back onto non-UA TCP URLs. + if (!discoveryUrl.StartsWith( Utils.UriSchemeOpcTcp )) + { + if (!discoveryUrl.EndsWith( "/discovery" )) + { + discoveryUrl += "/discovery"; + } + } + + // parse the selected URL. + Uri uri = new Uri( discoveryUrl ); + + // set a short timeout because this is happening in the drop down event. + EndpointConfiguration configuration = EndpointConfiguration.Create( ); + configuration.OperationTimeout = 5000; + + EndpointDescription selectedEndpoint = null; + + // Connect to the server's discovery endpoint and find the available configuration. + using (DiscoveryClient client = DiscoveryClient.Create( uri, configuration )) + { + EndpointDescriptionCollection endpoints = client.GetEndpoints( null ); + + // select the best endpoint to use based on the selected URL and the UseSecurity checkbox. + for (int ii = 0; ii < endpoints.Count; ii++) + { + EndpointDescription endpoint = endpoints[ii]; + + // check for a match on the URL scheme. + if (endpoint.EndpointUrl.StartsWith( uri.Scheme )) + { + // check if security was requested. + if (useSecurity) + { + if (endpoint.SecurityMode == MessageSecurityMode.None) + { + continue; + } + } + else + { + if (endpoint.SecurityMode != MessageSecurityMode.None) + { + continue; + } + } + + // pick the first available endpoint by default. + if (selectedEndpoint == null) + { + selectedEndpoint = endpoint; + } + + // The security level is a relative measure assigned by the server to the + // endpoints that it returns. Clients should always pick the highest level + // unless they have a reason not too. + if (endpoint.SecurityLevel > selectedEndpoint.SecurityLevel) + { + selectedEndpoint = endpoint; + } + } + } + + // pick the first available endpoint by default. + if (selectedEndpoint == null && endpoints.Count > 0) + { + selectedEndpoint = endpoints[0]; + } + } + + // if a server is behind a firewall it may return URLs that are not accessible to the client. + // This problem can be avoided by assuming that the domain in the URL used to call + // GetEndpoints can be used to access any of the endpoints. This code makes that conversion. + // Note that the conversion only makes sense if discovery uses the same protocol as the endpoint. + + Uri endpointUrl = Utils.ParseUri( selectedEndpoint.EndpointUrl ); + + if (endpointUrl != null && endpointUrl.Scheme == uri.Scheme) + { + UriBuilder builder = new UriBuilder( endpointUrl ); + builder.Host = uri.DnsSafeHost; + builder.Port = uri.Port; + selectedEndpoint.EndpointUrl = builder.ToString( ); + } + + // return the selected endpoint. + return selectedEndpoint; + } + + /// + /// Browses the address space and returns the references found. + /// + /// The session. + /// The set of browse operations to perform. + /// if set to true a exception will be thrown on an error. + /// + /// The references found. Null if an error occurred. + /// + public static ReferenceDescriptionCollection Browse( Session session, BrowseDescriptionCollection nodesToBrowse, bool throwOnError ) + { + try + { + ReferenceDescriptionCollection references = new ReferenceDescriptionCollection( ); + BrowseDescriptionCollection unprocessedOperations = new BrowseDescriptionCollection( ); + + while (nodesToBrowse.Count > 0) + { + // start the browse operation. + BrowseResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + session.Browse( + null, + null, + 0, + nodesToBrowse, + out results, + out diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToBrowse ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToBrowse ); + + ByteStringCollection continuationPoints = new ByteStringCollection( ); + + for (int ii = 0; ii < nodesToBrowse.Count; ii++) + { + // check for error. + if (StatusCode.IsBad( results[ii].StatusCode )) + { + // this error indicates that the server does not have enough simultaneously active + // continuation points. This request will need to be resent after the other operations + // have been completed and their continuation points released. + if (results[ii].StatusCode == StatusCodes.BadNoContinuationPoints) + { + unprocessedOperations.Add( nodesToBrowse[ii] ); + } + + continue; + } + + // check if all references have been fetched. + if (results[ii].References.Count == 0) + { + continue; + } + + // save results. + references.AddRange( results[ii].References ); + + // check for continuation point. + if (results[ii].ContinuationPoint != null) + { + continuationPoints.Add( results[ii].ContinuationPoint ); + } + } + + // process continuation points. + ByteStringCollection revisedContiuationPoints = new ByteStringCollection( ); + + while (continuationPoints.Count > 0) + { + // continue browse operation. + session.BrowseNext( + null, + true, + continuationPoints, + out results, + out diagnosticInfos ); + + ClientBase.ValidateResponse( results, continuationPoints ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, continuationPoints ); + + for (int ii = 0; ii < continuationPoints.Count; ii++) + { + // check for error. + if (StatusCode.IsBad( results[ii].StatusCode )) + { + continue; + } + + // check if all references have been fetched. + if (results[ii].References.Count == 0) + { + continue; + } + + // save results. + references.AddRange( results[ii].References ); + + // check for continuation point. + if (results[ii].ContinuationPoint != null) + { + revisedContiuationPoints.Add( results[ii].ContinuationPoint ); + } + } + + // check if browsing must continue; + revisedContiuationPoints = continuationPoints; + } + + // check if unprocessed results exist. + nodesToBrowse = unprocessedOperations; + } + + // return complete list. + return references; + } + catch (Exception exception) + { + if (throwOnError) + { + throw new ServiceResultException( exception, StatusCodes.BadUnexpectedError ); + } + + return null; + } + } + + /// + /// Finds the type of the event for the notification. + /// + /// The monitored item. + /// The notification. + /// The NodeId of the EventType. + public static NodeId FindEventType( MonitoredItem monitoredItem, EventFieldList notification ) + { + EventFilter filter = monitoredItem.Status.Filter as EventFilter; + + if (filter != null) + { + for (int ii = 0; ii < filter.SelectClauses.Count; ii++) + { + SimpleAttributeOperand clause = filter.SelectClauses[ii]; + + if (clause.BrowsePath.Count == 1 && clause.BrowsePath[0] == BrowseNames.EventType) + { + return notification.EventFields[ii].Value as NodeId; + } + } + } + + return null; + } + + /// + /// Browses the address space and returns the references found. + /// + /// The session. + /// The NodeId for the starting node. + /// if set to true a exception will be thrown on an error. + /// + /// The references found. Null if an error occurred. + /// + public static ReferenceDescriptionCollection Browse( Session session, BrowseDescription nodeToBrowse, bool throwOnError ) + { + try + { + ReferenceDescriptionCollection references = new ReferenceDescriptionCollection( ); + + // construct browse request. + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection( ); + nodesToBrowse.Add( nodeToBrowse ); + + // start the browse operation. + BrowseResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + session.Browse( + null, + null, + 0, + nodesToBrowse, + out results, + out diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToBrowse ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToBrowse ); + + do + { + // check for error. + if (StatusCode.IsBad( results[0].StatusCode )) + { + throw new ServiceResultException( results[0].StatusCode ); + } + + // process results. + for (int ii = 0; ii < results[0].References.Count; ii++) + { + references.Add( results[0].References[ii] ); + } + + // check if all references have been fetched. + if (results[0].References.Count == 0 || results[0].ContinuationPoint == null) + { + break; + } + + // continue browse operation. + ByteStringCollection continuationPoints = new ByteStringCollection( ); + continuationPoints.Add( results[0].ContinuationPoint ); + + session.BrowseNext( + null, + false, + continuationPoints, + out results, + out diagnosticInfos ); + + ClientBase.ValidateResponse( results, continuationPoints ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, continuationPoints ); + } + while (true); + + //return complete list. + return references; + } + catch (Exception exception) + { + if (throwOnError) + { + throw new ServiceResultException( exception, StatusCodes.BadUnexpectedError ); + } + + return null; + } + } + + /// + /// Browses the address space and returns all of the supertypes of the specified type node. + /// + /// The session. + /// The NodeId for a type node in the address space. + /// if set to true a exception will be thrown on an error. + /// + /// The references found. Null if an error occurred. + /// + public static ReferenceDescriptionCollection BrowseSuperTypes( Session session, NodeId typeId, bool throwOnError ) + { + ReferenceDescriptionCollection supertypes = new ReferenceDescriptionCollection( ); + + try + { + // find all of the children of the field. + BrowseDescription nodeToBrowse = new BrowseDescription( ); + + nodeToBrowse.NodeId = typeId; + nodeToBrowse.BrowseDirection = BrowseDirection.Inverse; + nodeToBrowse.ReferenceTypeId = ReferenceTypeIds.HasSubtype; + nodeToBrowse.IncludeSubtypes = false; // more efficient to use IncludeSubtypes=False when possible. + nodeToBrowse.NodeClassMask = 0; // the HasSubtype reference already restricts the targets to Types. + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + ReferenceDescriptionCollection references = Browse( session, nodeToBrowse, throwOnError ); + + while (references != null && references.Count > 0) + { + // should never be more than one supertype. + supertypes.Add( references[0] ); + + // only follow references within this server. + if (references[0].NodeId.IsAbsolute) + { + break; + } + + // get the references for the next level up. + nodeToBrowse.NodeId = (NodeId)references[0].NodeId; + references = Browse( session, nodeToBrowse, throwOnError ); + } + + // return complete list. + return supertypes; + } + catch (Exception exception) + { + if (throwOnError) + { + throw new ServiceResultException( exception, StatusCodes.BadUnexpectedError ); + } + + return null; + } + } + + /// + /// Constructs an event object from a notification. + /// + /// The session. + /// The monitored item that produced the notification. + /// The notification. + /// The known event types. + /// Mapping between event types and known event types. + /// + /// The event object. Null if the notification is not a valid event type. + /// + public static BaseEventState ConstructEvent( + Session session, + MonitoredItem monitoredItem, + EventFieldList notification, + Dictionary knownEventTypes, + Dictionary eventTypeMappings ) + { + // find the event type. + NodeId eventTypeId = FindEventType( monitoredItem, notification ); + + if (eventTypeId == null) + { + return null; + } + + // look up the known event type. + Type knownType = null; + NodeId knownTypeId = null; + + if (eventTypeMappings.TryGetValue( eventTypeId, out knownTypeId )) + { + knownType = knownEventTypes[knownTypeId]; + } + + // try again. + if (knownType == null) + { + if (knownEventTypes.TryGetValue( eventTypeId, out knownType )) + { + knownTypeId = eventTypeId; + eventTypeMappings.Add( eventTypeId, eventTypeId ); + } + } + + // try mapping it to a known type. + if (knownType == null) + { + // browse for the supertypes of the event type. + ReferenceDescriptionCollection supertypes = FormUtils.BrowseSuperTypes( session, eventTypeId, false ); + + // can't do anything with unknown types. + if (supertypes == null) + { + return null; + } + + // find the first supertype that matches a known event type. + for (int ii = 0; ii < supertypes.Count; ii++) + { + NodeId superTypeId = (NodeId)supertypes[ii].NodeId; + + if (knownEventTypes.TryGetValue( superTypeId, out knownType )) + { + knownTypeId = superTypeId; + eventTypeMappings.Add( eventTypeId, superTypeId ); + } + + if (knownTypeId != null) + { + break; + } + } + + // can't do anything with unknown types. + if (knownTypeId == null) + { + return null; + } + } + + // construct the event based on the known event type. + BaseEventState e = (BaseEventState)Activator.CreateInstance( knownType, new object[] { (NodeState)null } ); + + // get the filter which defines the contents of the notification. + EventFilter filter = monitoredItem.Status.Filter as EventFilter; + + // initialize the event with the values in the notification. + e.Update( session.SystemContext, filter.SelectClauses, notification ); + + // save the orginal notification. + e.Handle = notification; + + return e; + } + + /// + /// Returns the node ids for a set of relative paths. + /// + /// An open session with the server to use. + /// The starting node for the relative paths. + /// The namespace URIs referenced by the relative paths. + /// The relative paths. + /// A collection of local nodes. + public static List TranslateBrowsePaths( + Session session, + NodeId startNodeId, + NamespaceTable namespacesUris, + params string[] relativePaths ) + { + // build the list of browse paths to follow by parsing the relative paths. + BrowsePathCollection browsePaths = new BrowsePathCollection( ); + + if (relativePaths != null) + { + for (int ii = 0; ii < relativePaths.Length; ii++) + { + BrowsePath browsePath = new BrowsePath( ); + + // The relative paths used indexes in the namespacesUris table. These must be + // converted to indexes used by the server. An error occurs if the relative path + // refers to a namespaceUri that the server does not recognize. + + // The relative paths may refer to ReferenceType by their BrowseName. The TypeTree object + // allows the parser to look up the server's NodeId for the ReferenceType. + + browsePath.RelativePath = RelativePath.Parse( + relativePaths[ii], + session.TypeTree, + namespacesUris, + session.NamespaceUris ); + + browsePath.StartingNode = startNodeId; + + browsePaths.Add( browsePath ); + } + } + + // make the call to the server. + BrowsePathResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = session.TranslateBrowsePathsToNodeIds( + null, + browsePaths, + out results, + out diagnosticInfos ); + + // ensure that the server returned valid results. + Session.ValidateResponse( results, browsePaths ); + Session.ValidateDiagnosticInfos( diagnosticInfos, browsePaths ); + + // collect the list of node ids found. + List nodes = new List( ); + + for (int ii = 0; ii < results.Count; ii++) + { + // check if the start node actually exists. + if (StatusCode.IsBad( results[ii].StatusCode )) + { + nodes.Add( null ); + continue; + } + + // an empty list is returned if no node was found. + if (results[ii].Targets.Count == 0) + { + nodes.Add( null ); + continue; + } + + // Multiple matches are possible, however, the node that matches the type model is the + // one we are interested in here. The rest can be ignored. + BrowsePathTarget target = results[ii].Targets[0]; + + if (target.RemainingPathIndex != UInt32.MaxValue) + { + nodes.Add( null ); + continue; + } + + // The targetId is an ExpandedNodeId because it could be node in another server. + // The ToNodeId function is used to convert a local NodeId stored in a ExpandedNodeId to a NodeId. + nodes.Add( ExpandedNodeId.ToNodeId( target.TargetId, session.NamespaceUris ) ); + } + + // return whatever was found. + return nodes; + } + + /// + /// Collects the fields for the type. + /// + /// The session. + /// The fields. + /// The node id for the declaration of the field. + public static void CollectFieldsForType( Session session, NodeId typeId, SimpleAttributeOperandCollection fields, List fieldNodeIds ) + { + // get the supertypes. + ReferenceDescriptionCollection supertypes = FormUtils.BrowseSuperTypes( session, typeId, false ); + + if (supertypes == null) + { + return; + } + + // process the types starting from the top of the tree. + Dictionary foundNodes = new Dictionary( ); + QualifiedNameCollection parentPath = new QualifiedNameCollection( ); + + for (int ii = supertypes.Count - 1; ii >= 0; ii--) + { + CollectFields( session, (NodeId)supertypes[ii].NodeId, parentPath, fields, fieldNodeIds, foundNodes ); + } + + // collect the fields for the selected type. + CollectFields( session, typeId, parentPath, fields, fieldNodeIds, foundNodes ); + } + + /// + /// Collects the fields for the instance. + /// + /// The session. + /// The fields. + /// The node id for the declaration of the field. + public static void CollectFieldsForInstance( Session session, NodeId instanceId, SimpleAttributeOperandCollection fields, List fieldNodeIds ) + { + Dictionary foundNodes = new Dictionary( ); + QualifiedNameCollection parentPath = new QualifiedNameCollection( ); + CollectFields( session, instanceId, parentPath, fields, fieldNodeIds, foundNodes ); + } + + /// + /// Collects the fields for the instance node. + /// + /// The session. + /// The node id. + /// The parent path. + /// The event fields. + /// The node id for the declaration of the field. + /// The table of found nodes. + private static void CollectFields( + Session session, + NodeId nodeId, + QualifiedNameCollection parentPath, + SimpleAttributeOperandCollection fields, + List fieldNodeIds, + Dictionary foundNodes ) + { + // find all of the children of the field. + BrowseDescription nodeToBrowse = new BrowseDescription( ); + + nodeToBrowse.NodeId = nodeId; + nodeToBrowse.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse.ReferenceTypeId = ReferenceTypeIds.Aggregates; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = (uint)(NodeClass.Object | NodeClass.Variable); + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + ReferenceDescriptionCollection children = FormUtils.Browse( session, nodeToBrowse, false ); + + if (children == null) + { + return; + } + + // process the children. + for (int ii = 0; ii < children.Count; ii++) + { + ReferenceDescription child = children[ii]; + + if (child.NodeId.IsAbsolute) + { + continue; + } + + // construct browse path. + QualifiedNameCollection browsePath = new QualifiedNameCollection( parentPath ); + browsePath.Add( child.BrowseName ); + + // check if the browse path is already in the list. + int index = ContainsPath( fields, browsePath ); + + if (index < 0) + { + SimpleAttributeOperand field = new SimpleAttributeOperand( ); + + field.TypeDefinitionId = ObjectTypeIds.BaseEventType; + field.BrowsePath = browsePath; + field.AttributeId = (child.NodeClass == NodeClass.Variable) ? Attributes.Value : Attributes.NodeId; + + fields.Add( field ); + fieldNodeIds.Add( (NodeId)child.NodeId ); + } + + // recusively find all of the children. + NodeId targetId = (NodeId)child.NodeId; + + // need to guard against loops. + if (!foundNodes.ContainsKey( targetId )) + { + foundNodes.Add( targetId, browsePath ); + CollectFields( session, (NodeId)child.NodeId, browsePath, fields, fieldNodeIds, foundNodes ); + } + } + } + + /// + /// Determines whether the specified select clause contains the browse path. + /// + /// The select clause. + /// The browse path. + /// + /// true if the specified select clause contains path; otherwise, false. + /// + private static int ContainsPath( SimpleAttributeOperandCollection selectClause, QualifiedNameCollection browsePath ) + { + for (int ii = 0; ii < selectClause.Count; ii++) + { + SimpleAttributeOperand field = selectClause[ii]; + + if (field.BrowsePath.Count != browsePath.Count) + { + continue; + } + + bool match = true; + + for (int jj = 0; jj < field.BrowsePath.Count; jj++) + { + if (field.BrowsePath[jj] != browsePath[jj]) + { + match = false; + break; + } + } + + if (match) + { + return ii; + } + } + + return -1; + } + } +} diff --git a/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/OpcUaClientHelper.cs b/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/OpcUaClientHelper.cs new file mode 100644 index 0000000..f9424e6 --- /dev/null +++ b/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/OpcUaClientHelper.cs @@ -0,0 +1,1446 @@ +using Opc.Ua; +using Opc.Ua.Client; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace OpcUaHelper +{ + /// + /// 一个二次封装了的OPC UA库,支持从opc ua服务器读写节点数据,批量读写,订阅,批量订阅,历史数据读取,方法调用操作。 + /// + public class OpcUaClientHelper + { + #region Constructors + + /// + /// 默认的构造函数,实例化一个新的OPC UA类 + /// + public OpcUaClientHelper( ) + { + dic_subscriptions = new Dictionary( ); + + var certificateValidator = new CertificateValidator( ); + certificateValidator.CertificateValidation += ( sender, eventArgs ) => + { + if (ServiceResult.IsGood( eventArgs.Error )) + eventArgs.Accept = true; + else if (eventArgs.Error.StatusCode.Code == StatusCodes.BadCertificateUntrusted) + eventArgs.Accept = true; + else + throw new Exception( string.Format( "Failed to validate certificate with error code {0}: {1}", eventArgs.Error.Code, eventArgs.Error.AdditionalInfo ) ); + }; + + SecurityConfiguration securityConfigurationcv = new SecurityConfiguration + { + AutoAcceptUntrustedCertificates = true, + RejectSHA1SignedCertificates = false, + MinimumCertificateKeySize = 1024, + }; + certificateValidator.Update( securityConfigurationcv ); + + // Build the application configuration + var configuration = new ApplicationConfiguration + { + ApplicationName = OpcUaName, + ApplicationType = ApplicationType.Client, + CertificateValidator = certificateValidator, + ApplicationUri = "urn:MyClient", //Kepp this syntax + ProductUri = "OpcUaClient", + + ServerConfiguration = new ServerConfiguration + { + MaxSubscriptionCount = 100000, + MaxMessageQueueSize = 1000000, + MaxNotificationQueueSize = 1000000, + MaxPublishRequestCount = 10000000, + }, + + SecurityConfiguration = new SecurityConfiguration + { + AutoAcceptUntrustedCertificates = true, + RejectSHA1SignedCertificates = false, + MinimumCertificateKeySize = 1024, + SuppressNonceValidationErrors = true, + + ApplicationCertificate = new CertificateIdentifier + { + StoreType = CertificateStoreType.X509Store, + StorePath = "CurrentUser\\My", + SubjectName = OpcUaName, + }, + TrustedIssuerCertificates = new CertificateTrustList + { + StoreType = CertificateStoreType.X509Store, + StorePath = "CurrentUser\\Root", + }, + TrustedPeerCertificates = new CertificateTrustList + { + StoreType = CertificateStoreType.X509Store, + StorePath = "CurrentUser\\Root", + } + }, + + TransportQuotas = new TransportQuotas + { + OperationTimeout = 6000000, + MaxStringLength = int.MaxValue, + MaxByteStringLength = int.MaxValue, + MaxArrayLength = 65535, + MaxMessageSize = 419430400, + MaxBufferSize = 65535, + ChannelLifetime = -1, + SecurityTokenLifetime = -1 + }, + ClientConfiguration = new ClientConfiguration + { + DefaultSessionTimeout = -1, + MinSubscriptionLifetime = -1, + }, + DisableHiResClock = true + }; + + configuration.Validate( ApplicationType.Client ); + m_configuration = configuration; + } + + #endregion Constructors + + #region Connect And Disconnect + + /// + /// connect to server + /// + /// remote url + public async Task ConnectServer( string serverUrl ) + { + m_session = await Connect( serverUrl ); + } + + /// + /// Creates a new session. + /// + /// The new session object. + private async Task Connect( string serverUrl ) + { + // disconnect from existing session. + Disconnect( ); + + if (m_configuration == null) + { + throw new ArgumentNullException( "_configuration" ); + } + + // select the best endpoint. + EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint( serverUrl, UseSecurity ); + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create( m_configuration ); + + ConfiguredEndpoint endpoint = new ConfiguredEndpoint( null, endpointDescription, endpointConfiguration ); + + m_session = await Session.Create( + m_configuration, + endpoint, + false, + false, + (string.IsNullOrEmpty( OpcUaName )) ? m_configuration.ApplicationName : OpcUaName, + 60000, + UserIdentity, + new string[] { } ); + + // set up keep alive callback. + m_session.KeepAlive += new KeepAliveEventHandler( Session_KeepAlive ); + + // update the client status + m_IsConnected = true; + + // raise an event. + DoConnectComplete( null ); + + // return the new session. + return m_session; + } + + /// + /// Disconnects from the server. + /// + public void Disconnect( ) + { + UpdateStatus( false, DateTime.UtcNow, "Disconnected" ); + + // stop any reconnect operation. + if (m_reConnectHandler != null) + { + m_reConnectHandler.Dispose( ); + m_reConnectHandler = null; + } + + // disconnect any existing session. + if (m_session != null) + { + m_session.Close( 10000 ); + m_session = null; + } + + // update the client status + m_IsConnected = false; + + // raise an event. + DoConnectComplete( null ); + } + + #endregion Connect And Disconnect + + #region Event Handlers + + /// + /// Report the client status + /// + /// Whether the status represents an error. + /// The time associated with the status. + /// The status message. + /// Arguments used to format the status message. + private void UpdateStatus( bool error, DateTime time, string status, params object[] args ) + { + m_OpcStatusChange?.Invoke( this, new OpcUaStatusEventArgs( ) + { + Error = error, + Time = time.ToLocalTime( ), + Text = String.Format( status, args ), + } ); + } + + /// + /// Handles a keep alive event from a session. + /// + private void Session_KeepAlive( Session session, KeepAliveEventArgs e ) + { + try + { + // check for events from discarded sessions. + if (!Object.ReferenceEquals( session, m_session )) + { + return; + } + + // start reconnect sequence on communication error. + if (ServiceResult.IsBad( e.Status )) + { + if (m_reconnectPeriod <= 0) + { + UpdateStatus( true, e.CurrentTime, "Communication Error ({0})", e.Status ); + return; + } + + UpdateStatus( true, e.CurrentTime, "Reconnecting in {0}s", m_reconnectPeriod ); + + if (m_reConnectHandler == null) + { + m_ReconnectStarting?.Invoke( this, e ); + + m_reConnectHandler = new SessionReconnectHandler( ); + m_reConnectHandler.BeginReconnect( m_session, m_reconnectPeriod * 1000, Server_ReconnectComplete ); + } + + return; + } + + // update status. + UpdateStatus( false, e.CurrentTime, "Connected [{0}]", session.Endpoint.EndpointUrl ); + + // raise any additional notifications. + m_KeepAliveComplete?.Invoke( this, e ); + } + catch (Exception exception) + { + throw; + } + } + + /// + /// Handles a reconnect event complete from the reconnect handler. + /// + private void Server_ReconnectComplete( object sender, EventArgs e ) + { + try + { + // ignore callbacks from discarded objects. + if (!Object.ReferenceEquals( sender, m_reConnectHandler )) + { + return; + } + + m_session = m_reConnectHandler.Session; + m_reConnectHandler.Dispose( ); + m_reConnectHandler = null; + + // raise any additional notifications. + m_ReconnectComplete?.Invoke( this, e ); + } + catch (Exception exception) + { + throw; + } + } + + #endregion Event Handlers + + #region LogOut Setting + + /// + /// 设置OPC客户端的日志输出 + /// + /// 完整的文件路径 + /// 是否删除原文件 + public void SetLogPathName( string filePath, bool deleteExisting ) + { + Utils.SetTraceLog( filePath, deleteExisting ); + Utils.SetTraceMask( 515 ); + } + + #endregion LogOut Setting + + #region Public Members + + /// + /// a name of application name show on server + /// + public string OpcUaName { get; set; } = "Opc Ua Helper"; + + /// + /// Whether to use security when connecting. + /// + public bool UseSecurity + { + get { return m_useSecurity; } + set { m_useSecurity = value; } + } + + /// + /// The user identity to use when creating the session. + /// + public IUserIdentity UserIdentity { get; set; } + + /// + /// The currently active session. + /// + public Session Session + { + get { return m_session; } + } + + /// + /// Indicate the connect status + /// + public bool Connected + { + get { return m_IsConnected; } + } + + /// + /// The number of seconds between reconnect attempts (0 means reconnect is disabled). + /// + public int ReconnectPeriod + { + get { return m_reconnectPeriod; } + set { m_reconnectPeriod = value; } + } + + /// + /// Raised when a good keep alive from the server arrives. + /// + public event EventHandler KeepAliveComplete + { + add { m_KeepAliveComplete += value; } + remove { m_KeepAliveComplete -= value; } + } + + /// + /// Raised when a reconnect operation starts. + /// + public event EventHandler ReconnectStarting + { + add { m_ReconnectStarting += value; } + remove { m_ReconnectStarting -= value; } + } + + /// + /// Raised when a reconnect operation completes. + /// + public event EventHandler ReconnectComplete + { + add { m_ReconnectComplete += value; } + remove { m_ReconnectComplete -= value; } + } + + /// + /// Raised after successfully connecting to or disconnecing from a server. + /// + public event EventHandler ConnectComplete + { + add { m_ConnectComplete += value; } + remove { m_ConnectComplete -= value; } + } + + /// + /// Raised after the client status change + /// + public event EventHandler OpcStatusChange + { + add { m_OpcStatusChange += value; } + remove { m_OpcStatusChange -= value; } + } + + /// + /// 配置信息 + /// + public ApplicationConfiguration AppConfig => m_configuration; + + #endregion Public Members + + #region Node Write/Read Support + + /// + /// Read a value node from server + /// + /// node id + /// DataValue + public DataValue ReadNode( NodeId nodeId ) + { + ReadValueIdCollection nodesToRead = new ReadValueIdCollection + { + new ReadValueId( ) + { + NodeId = nodeId, + AttributeId = Attributes.Value + } + }; + + // read the current value + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out DataValueCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToRead ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToRead ); + + return results[0]; + } + + /// + /// Read a value node from server + /// + /// type of value + /// node id + /// 实际值 + public T ReadNode( string tag ) + { + DataValue dataValue = ReadNode( new NodeId( tag ) ); + return (T)dataValue.Value; + } + + /// + /// Read a tag asynchronously + /// + /// The type of tag to read + /// tag值 + /// The value retrieved from the OPC + public Task ReadNodeAsync( string tag ) + { + ReadValueIdCollection nodesToRead = new ReadValueIdCollection + { + new ReadValueId() + { + NodeId = new NodeId(tag), + AttributeId = Attributes.Value + } + }; + + // Wrap the ReadAsync logic in a TaskCompletionSource, so we can use C# async/await syntax to call it: + var taskCompletionSource = new TaskCompletionSource( ); + m_session.BeginRead( + requestHeader: null, + maxAge: 0, + timestampsToReturn: TimestampsToReturn.Neither, + nodesToRead: nodesToRead, + callback: ar => + { + DataValueCollection results; + DiagnosticInfoCollection diag; + var response = m_session.EndRead( + result: ar, + results: out results, + diagnosticInfos: out diag ); + + try + { + CheckReturnValue( response.ServiceResult ); + CheckReturnValue( results[0].StatusCode ); + var val = results[0]; + taskCompletionSource.TrySetResult( (T)val.Value ); + } + catch (Exception ex) + { + taskCompletionSource.TrySetException( ex ); + } + }, + asyncState: null ); + + return taskCompletionSource.Task; + } + + /// + /// read several value nodes from server + /// + /// all NodeIds + /// all values + public List ReadNodes( NodeId[] nodeIds ) + { + ReadValueIdCollection nodesToRead = new ReadValueIdCollection( ); + for (int i = 0; i < nodeIds.Length; i++) + { + nodesToRead.Add( new ReadValueId( ) + { + NodeId = nodeIds[i], + AttributeId = Attributes.Value + } ); + } + + // 读取当前的值 + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out DataValueCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToRead ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToRead ); + + return results.ToList( ); + } + + /// + /// read several value nodes from server + /// + /// all NodeIds + /// all values + public Task> ReadNodesAsync( NodeId[] nodeIds ) + { + ReadValueIdCollection nodesToRead = new ReadValueIdCollection( ); + for (int i = 0; i < nodeIds.Length; i++) + { + nodesToRead.Add( new ReadValueId( ) + { + NodeId = nodeIds[i], + AttributeId = Attributes.Value + } ); + } + + var taskCompletionSource = new TaskCompletionSource>( ); + // 读取当前的值 + m_session.BeginRead( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + callback: ar => + { + DataValueCollection results; + DiagnosticInfoCollection diag; + var response = m_session.EndRead( + result: ar, + results: out results, + diagnosticInfos: out diag ); + + try + { + CheckReturnValue( response.ServiceResult ); + taskCompletionSource.TrySetResult( results.ToList( ) ); + } + catch (Exception ex) + { + taskCompletionSource.TrySetException( ex ); + } + }, + asyncState: null ); + + return taskCompletionSource.Task; + } + + /// + /// read several value nodes from server + /// + /// 所以的节点数组信息 + /// all values + public List ReadNodes( string[] tags ) + { + List result = new List( ); + ReadValueIdCollection nodesToRead = new ReadValueIdCollection( ); + for (int i = 0; i < tags.Length; i++) + { + nodesToRead.Add( new ReadValueId( ) + { + NodeId = new NodeId( tags[i] ), + AttributeId = Attributes.Value + } ); + } + + // 读取当前的值 + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out DataValueCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToRead ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToRead ); + + foreach (var item in results) + { + result.Add( (T)item.Value ); + } + return result; + } + + /// + /// read several value nodes from server + /// + /// all NodeIds + /// all values + public Task> ReadNodesAsync( string[] tags ) + { + ReadValueIdCollection nodesToRead = new ReadValueIdCollection( ); + for (int i = 0; i < tags.Length; i++) + { + nodesToRead.Add( new ReadValueId( ) + { + NodeId = new NodeId( tags[i] ), + AttributeId = Attributes.Value + } ); + } + + var taskCompletionSource = new TaskCompletionSource>( ); + // 读取当前的值 + m_session.BeginRead( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + callback: ar => + { + DataValueCollection results; + DiagnosticInfoCollection diag; + var response = m_session.EndRead( + result: ar, + results: out results, + diagnosticInfos: out diag ); + + try + { + CheckReturnValue( response.ServiceResult ); + List result = new List( ); + foreach (var item in results) + { + result.Add( (T)item.Value ); + } + taskCompletionSource.TrySetResult( result ); + } + catch (Exception ex) + { + taskCompletionSource.TrySetException( ex ); + } + }, + asyncState: null ); + + return taskCompletionSource.Task; + } + + /// + /// write a note to server(you should use try catch) + /// + /// The type of tag to write on + /// 节点名称 + /// 值 + /// if success True,otherwise False + public bool WriteNode( string tag, T value ) + { + WriteValue valueToWrite = new WriteValue( ) + { + NodeId = new NodeId( tag ), + AttributeId = Attributes.Value + }; + valueToWrite.Value.Value = value; + valueToWrite.Value.StatusCode = StatusCodes.Good; + valueToWrite.Value.ServerTimestamp = DateTime.MinValue; + valueToWrite.Value.SourceTimestamp = DateTime.MinValue; + + WriteValueCollection valuesToWrite = new WriteValueCollection + { + valueToWrite + }; + + // 写入当前的值 + + m_session.Write( + null, + valuesToWrite, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, valuesToWrite ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, valuesToWrite ); + + if (StatusCode.IsBad( results[0] )) + { + throw new ServiceResultException( results[0] ); + } + + return !StatusCode.IsBad( results[0] ); + } + + /// + /// Write a value on the specified opc tag asynchronously + /// + /// The type of tag to write on + /// The fully-qualified identifier of the tag. You can specify a subfolder by using a comma delimited name. E.g: the tag `foo.bar` writes on the tag `bar` on the folder `foo` + /// The value for the item to write + public Task WriteNodeAsync( string tag, T value ) + { + WriteValue valueToWrite = new WriteValue( ) + { + NodeId = new NodeId( tag ), + AttributeId = Attributes.Value, + }; + valueToWrite.Value.Value = value; + valueToWrite.Value.StatusCode = StatusCodes.Good; + valueToWrite.Value.ServerTimestamp = DateTime.MinValue; + valueToWrite.Value.SourceTimestamp = DateTime.MinValue; + WriteValueCollection valuesToWrite = new WriteValueCollection + { + valueToWrite + }; + + // Wrap the WriteAsync logic in a TaskCompletionSource, so we can use C# async/await syntax to call it: + var taskCompletionSource = new TaskCompletionSource( ); + m_session.BeginWrite( + requestHeader: null, + nodesToWrite: valuesToWrite, + callback: ar => + { + var response = m_session.EndWrite( + result: ar, + results: out StatusCodeCollection results, + diagnosticInfos: out DiagnosticInfoCollection diag ); + + try + { + ClientBase.ValidateResponse( results, valuesToWrite ); + ClientBase.ValidateDiagnosticInfos( diag, valuesToWrite ); + taskCompletionSource.SetResult( StatusCode.IsGood( results[0] ) ); + } + catch (Exception ex) + { + taskCompletionSource.TrySetException( ex ); + } + }, + asyncState: null ); + return taskCompletionSource.Task; + } + + /// + /// 所有的节点都写入成功,返回True,否则返回False + /// + /// 节点名称数组 + /// 节点的值数据 + /// 所有的是否都写入成功 + public bool WriteNodes( string[] tags, object[] values ) + { + WriteValueCollection valuesToWrite = new WriteValueCollection( ); + + for (int i = 0; i < tags.Length; i++) + { + if (i < values.Length) + { + WriteValue valueToWrite = new WriteValue( ) + { + NodeId = new NodeId( tags[i] ), + AttributeId = Attributes.Value + }; + valueToWrite.Value.Value = values[i]; + valueToWrite.Value.StatusCode = StatusCodes.Good; + valueToWrite.Value.ServerTimestamp = DateTime.MinValue; + valueToWrite.Value.SourceTimestamp = DateTime.MinValue; + valuesToWrite.Add( valueToWrite ); + } + } + + // 写入当前的值 + + m_session.Write( + null, + valuesToWrite, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, valuesToWrite ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, valuesToWrite ); + + bool result = true; + foreach (var r in results) + { + if (StatusCode.IsBad( r )) + { + result = false; + break; + } + } + + return result; + } + + #endregion Node Write/Read Support + + #region DeleteNode Support + + /// + /// 删除一个节点的操作,除非服务器配置允许,否则引发异常,成功返回True,否则返回False + /// + /// 节点文本描述 + /// 是否删除成功 + public bool DeleteExsistNode( string tag ) + { + DeleteNodesItemCollection waitDelete = new DeleteNodesItemCollection( ); + + DeleteNodesItem nodesItem = new DeleteNodesItem( ) + { + NodeId = new NodeId( tag ), + }; + + m_session.DeleteNodes( + null, + waitDelete, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, waitDelete ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, waitDelete ); + + return !StatusCode.IsBad( results[0] ); + } + + #endregion DeleteNode Support + + #region Test Function + + /// + /// 新增一个节点数据 + /// + /// 父节点tag名称 + [Obsolete( "还未经过测试,无法使用" )] + public void AddNewNode( NodeId parent ) + { + // Create a Variable node. + AddNodesItem node2 = new AddNodesItem( ); + node2.ParentNodeId = new NodeId( parent ); + node2.ReferenceTypeId = ReferenceTypes.HasComponent; + node2.RequestedNewNodeId = null; + node2.BrowseName = new QualifiedName( "DataVariable1" ); + node2.NodeClass = NodeClass.Variable; + node2.NodeAttributes = null; + node2.TypeDefinition = VariableTypeIds.BaseDataVariableType; + + //specify node attributes. + VariableAttributes node2Attribtues = new VariableAttributes( ); + node2Attribtues.DisplayName = "DataVariable1"; + node2Attribtues.Description = "DataVariable1 Description"; + node2Attribtues.Value = new Variant( 123 ); + node2Attribtues.DataType = (uint)BuiltInType.Int32; + node2Attribtues.ValueRank = ValueRanks.Scalar; + node2Attribtues.ArrayDimensions = new UInt32Collection( ); + node2Attribtues.AccessLevel = AccessLevels.CurrentReadOrWrite; + node2Attribtues.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + node2Attribtues.MinimumSamplingInterval = 0; + node2Attribtues.Historizing = false; + node2Attribtues.WriteMask = (uint)AttributeWriteMask.None; + node2Attribtues.UserWriteMask = (uint)AttributeWriteMask.None; + node2Attribtues.SpecifiedAttributes = (uint)NodeAttributesMask.All; + + node2.NodeAttributes = new ExtensionObject( node2Attribtues ); + + AddNodesItemCollection nodesToAdd = new AddNodesItemCollection { node2 }; + + m_session.AddNodes( + null, + nodesToAdd, + out AddNodesResultCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToAdd ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToAdd ); + } + + #endregion Test Function + + #region Monitor Support + + /// + /// 新增一个订阅,需要指定订阅的关键字,订阅的tag名,以及回调方法 + /// + /// 关键字 + /// tag + /// 回调方法 + public void AddSubscription( string key, string tag, Action callback ) + { + AddSubscription( key, new string[] { tag }, callback ); + } + + /// + /// 新增一批订阅,需要指定订阅的关键字,订阅的tag名数组,以及回调方法 + /// + /// 关键字 + /// 节点名称数组 + /// 回调方法 + public void AddSubscription( string key, string[] tags, Action callback ) + { + Subscription m_subscription = new Subscription( m_session.DefaultSubscription ); + + m_subscription.PublishingEnabled = true; + m_subscription.PublishingInterval = 0; + m_subscription.KeepAliveCount = uint.MaxValue; + m_subscription.LifetimeCount = uint.MaxValue; + m_subscription.MaxNotificationsPerPublish = uint.MaxValue; + m_subscription.Priority = 100; + m_subscription.DisplayName = key; + + for (int i = 0; i < tags.Length; i++) + { + var item = new MonitoredItem + { + StartNodeId = new NodeId( tags[i] ), + AttributeId = Attributes.Value, + DisplayName = tags[i], + SamplingInterval = 100, + }; + item.Notification += ( MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs args ) => + { + callback?.Invoke( key, monitoredItem, args ); + }; + m_subscription.AddItem( item ); + } + + m_session.AddSubscription( m_subscription ); + m_subscription.Create( ); + + lock (dic_subscriptions) + { + if (dic_subscriptions.ContainsKey( key )) + { + // remove + dic_subscriptions[key].Delete( true ); + m_session.RemoveSubscription( dic_subscriptions[key] ); + dic_subscriptions[key].Dispose( ); + dic_subscriptions[key] = m_subscription; + } + else + { + dic_subscriptions.Add( key, m_subscription ); + } + } + } + + /// + /// 移除订阅消息,如果该订阅消息是批量的,也直接移除 + /// + /// 订阅关键值 + public void RemoveSubscription( string key ) + { + lock (dic_subscriptions) + { + if (dic_subscriptions.ContainsKey( key )) + { + // remove + dic_subscriptions[key].Delete( true ); + m_session.RemoveSubscription( dic_subscriptions[key] ); + dic_subscriptions[key].Dispose( ); + dic_subscriptions.Remove( key ); + } + } + } + + /// + /// 移除所有的订阅消息 + /// + public void RemoveAllSubscription( ) + { + lock (dic_subscriptions) + { + foreach (var item in dic_subscriptions) + { + item.Value.Delete( true ); + m_session.RemoveSubscription( item.Value ); + item.Value.Dispose( ); + } + dic_subscriptions.Clear( ); + } + } + + #endregion Monitor Support + + #region ReadHistory Support + + /// + /// read History data + /// + /// 节点的索引 + /// 开始时间 + /// 结束时间 + /// 读取的个数 + /// 是否包含边界 + /// 读取的数据列表 + public IEnumerable ReadHistoryRawDataValues( string tag, DateTime start, DateTime end, uint count = 1, bool containBound = false ) + { + HistoryReadValueId m_nodeToContinue = new HistoryReadValueId( ) + { + NodeId = new NodeId( tag ), + }; + + ReadRawModifiedDetails m_details = new ReadRawModifiedDetails + { + StartTime = start, + EndTime = end, + NumValuesPerNode = count, + IsReadModified = false, + ReturnBounds = containBound + }; + + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection( ); + nodesToRead.Add( m_nodeToContinue ); + + m_session.HistoryRead( + null, + new ExtensionObject( m_details ), + TimestampsToReturn.Both, + false, + nodesToRead, + out HistoryReadResultCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToRead ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToRead ); + + if (StatusCode.IsBad( results[0].StatusCode )) + { + throw new ServiceResultException( results[0].StatusCode ); + } + + HistoryData values = ExtensionObject.ToEncodeable( results[0].HistoryData ) as HistoryData; + foreach (var value in values.DataValues) + { + yield return value; + } + } + + /// + /// 读取一连串的历史数据,并将其转化成指定的类型 + /// + /// 节点的索引 + /// 开始时间 + /// 结束时间 + /// 读取的个数 + /// 是否包含边界 + /// 读取的数据列表 + public IEnumerable ReadHistoryRawDataValues( string tag, DateTime start, DateTime end, uint count = 1, bool containBound = false ) + { + HistoryReadValueId m_nodeToContinue = new HistoryReadValueId( ) + { + NodeId = new NodeId( tag ), + }; + + ReadRawModifiedDetails m_details = new ReadRawModifiedDetails + { + StartTime = start.ToUniversalTime( ), + EndTime = end.ToUniversalTime( ), + NumValuesPerNode = count, + IsReadModified = false, + ReturnBounds = containBound + }; + + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection( ); + nodesToRead.Add( m_nodeToContinue ); + + m_session.HistoryRead( + null, + new ExtensionObject( m_details ), + TimestampsToReturn.Both, + false, + nodesToRead, + out HistoryReadResultCollection results, + out DiagnosticInfoCollection diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToRead ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToRead ); + + if (StatusCode.IsBad( results[0].StatusCode )) + { + throw new ServiceResultException( results[0].StatusCode ); + } + + HistoryData values = ExtensionObject.ToEncodeable( results[0].HistoryData ) as HistoryData; + foreach (var value in values.DataValues) + { + yield return (T)value.Value; + } + } + + #endregion ReadHistory Support + + #region BrowseNode Support + + /// + /// 浏览一个节点的引用 + /// + /// 节点值 + /// 引用节点描述 + public ReferenceDescription[] BrowseNodeReference( string tag ) + { + NodeId sourceId = new NodeId( tag ); + + // 该节点可以读取到方法 + BrowseDescription nodeToBrowse1 = new BrowseDescription( ); + + nodeToBrowse1.NodeId = sourceId; + nodeToBrowse1.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse1.ReferenceTypeId = ReferenceTypeIds.Aggregates; + nodeToBrowse1.IncludeSubtypes = true; + nodeToBrowse1.NodeClassMask = (uint)(NodeClass.Object | NodeClass.Variable | NodeClass.Method); + nodeToBrowse1.ResultMask = (uint)BrowseResultMask.All; + + // 该节点无论怎么样都读取不到方法 + // find all nodes organized by the node. + BrowseDescription nodeToBrowse2 = new BrowseDescription( ); + + nodeToBrowse2.NodeId = sourceId; + nodeToBrowse2.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse2.ReferenceTypeId = ReferenceTypeIds.Organizes; + nodeToBrowse2.IncludeSubtypes = true; + nodeToBrowse2.NodeClassMask = (uint)(NodeClass.Object | NodeClass.Variable); + nodeToBrowse2.ResultMask = (uint)BrowseResultMask.All; + + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection( ); + nodesToBrowse.Add( nodeToBrowse1 ); + nodesToBrowse.Add( nodeToBrowse2 ); + + // fetch references from the server. + ReferenceDescriptionCollection references = FormUtils.Browse( m_session, nodesToBrowse, false ); + + return references.ToArray( ); + } + + #endregion BrowseNode Support + + #region Read Attributes Support + + /// + /// 读取一个节点的所有属性 + /// + /// 节点信息 + /// 节点的特性值 + public OpcNodeAttribute[] ReadNoteAttributes( string tag ) + { + NodeId sourceId = new NodeId( tag ); + ReadValueIdCollection nodesToRead = new ReadValueIdCollection( ); + + // attempt to read all possible attributes. + // 尝试着去读取所有可能的特性 + for (uint ii = Attributes.NodeClass; ii <= Attributes.UserExecutable; ii++) + { + ReadValueId nodeToRead = new ReadValueId( ); + nodeToRead.NodeId = sourceId; + nodeToRead.AttributeId = ii; + nodesToRead.Add( nodeToRead ); + } + + int startOfProperties = nodesToRead.Count; + + // find all of the pror of the node. + BrowseDescription nodeToBrowse1 = new BrowseDescription( ); + + nodeToBrowse1.NodeId = sourceId; + nodeToBrowse1.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse1.ReferenceTypeId = ReferenceTypeIds.HasProperty; + nodeToBrowse1.IncludeSubtypes = true; + nodeToBrowse1.NodeClassMask = 0; + nodeToBrowse1.ResultMask = (uint)BrowseResultMask.All; + + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection( ); + nodesToBrowse.Add( nodeToBrowse1 ); + + // fetch property references from the server. + ReferenceDescriptionCollection references = FormUtils.Browse( m_session, nodesToBrowse, false ); + + if (references == null) + { + return new OpcNodeAttribute[0]; + } + + for (int ii = 0; ii < references.Count; ii++) + { + // ignore external references. + if (references[ii].NodeId.IsAbsolute) + { + continue; + } + + ReadValueId nodeToRead = new ReadValueId( ); + nodeToRead.NodeId = (NodeId)references[ii].NodeId; + nodeToRead.AttributeId = Attributes.Value; + nodesToRead.Add( nodeToRead ); + } + + // read all values. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToRead ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToRead ); + + // process results. + + List nodeAttribute = new List( ); + for (int ii = 0; ii < results.Count; ii++) + { + OpcNodeAttribute item = new OpcNodeAttribute( ); + + // process attribute value. + if (ii < startOfProperties) + { + // ignore attributes which are invalid for the node. + if (results[ii].StatusCode == StatusCodes.BadAttributeIdInvalid) + { + continue; + } + + // get the name of the attribute. + item.Name = Attributes.GetBrowseName( nodesToRead[ii].AttributeId ); + + // display any unexpected error. + if (StatusCode.IsBad( results[ii].StatusCode )) + { + item.Type = Utils.Format( "{0}", Attributes.GetDataTypeId( nodesToRead[ii].AttributeId ) ); + item.Value = Utils.Format( "{0}", results[ii].StatusCode ); + } + + // display the value. + else + { + TypeInfo typeInfo = TypeInfo.Construct( results[ii].Value ); + + item.Type = typeInfo.BuiltInType.ToString( ); + + if (typeInfo.ValueRank >= ValueRanks.OneOrMoreDimensions) + { + item.Type += "[]"; + } + + item.Value = results[ii].Value;//Utils.Format("{0}", results[ii].Value); + } + } + + // process property value. + else + { + // ignore properties which are invalid for the node. + if (results[ii].StatusCode == StatusCodes.BadNodeIdUnknown) + { + continue; + } + + // get the name of the property. + item.Name = Utils.Format( "{0}", references[ii - startOfProperties] ); + + // display any unexpected error. + if (StatusCode.IsBad( results[ii].StatusCode )) + { + item.Type = String.Empty; + item.Value = Utils.Format( "{0}", results[ii].StatusCode ); + } + + // display the value. + else + { + TypeInfo typeInfo = TypeInfo.Construct( results[ii].Value ); + + item.Type = typeInfo.BuiltInType.ToString( ); + + if (typeInfo.ValueRank >= ValueRanks.OneOrMoreDimensions) + { + item.Type += "[]"; + } + + item.Value = results[ii].Value; //Utils.Format("{0}", results[ii].Value); + } + } + + nodeAttribute.Add( item ); + } + + return nodeAttribute.ToArray( ); + } + + /// + /// 读取一个节点的所有属性 + /// + /// 节点值 + /// 所有的数据 + public DataValue[] ReadNoteDataValueAttributes( string tag ) + { + NodeId sourceId = new NodeId( tag ); + ReadValueIdCollection nodesToRead = new ReadValueIdCollection( ); + + // attempt to read all possible attributes. + // 尝试着去读取所有可能的特性 + for (uint ii = Attributes.NodeId; ii <= Attributes.UserExecutable; ii++) + { + ReadValueId nodeToRead = new ReadValueId( ); + nodeToRead.NodeId = sourceId; + nodeToRead.AttributeId = ii; + nodesToRead.Add( nodeToRead ); + } + + int startOfProperties = nodesToRead.Count; + + // find all of the pror of the node. + BrowseDescription nodeToBrowse1 = new BrowseDescription( ); + + nodeToBrowse1.NodeId = sourceId; + nodeToBrowse1.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse1.ReferenceTypeId = ReferenceTypeIds.HasProperty; + nodeToBrowse1.IncludeSubtypes = true; + nodeToBrowse1.NodeClassMask = 0; + nodeToBrowse1.ResultMask = (uint)BrowseResultMask.All; + + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection( ); + nodesToBrowse.Add( nodeToBrowse1 ); + + // fetch property references from the server. + ReferenceDescriptionCollection references = FormUtils.Browse( m_session, nodesToBrowse, false ); + + if (references == null) + { + return new DataValue[0]; + } + + for (int ii = 0; ii < references.Count; ii++) + { + // ignore external references. + if (references[ii].NodeId.IsAbsolute) + { + continue; + } + + ReadValueId nodeToRead = new ReadValueId( ); + nodeToRead.NodeId = (NodeId)references[ii].NodeId; + nodeToRead.AttributeId = Attributes.Value; + nodesToRead.Add( nodeToRead ); + } + + // read all values. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos ); + + ClientBase.ValidateResponse( results, nodesToRead ); + ClientBase.ValidateDiagnosticInfos( diagnosticInfos, nodesToRead ); + + return results.ToArray( ); + } + + #endregion Read Attributes Support + + #region Method Call Support + + /// + /// call a server method + /// + /// 方法的父节点tag + /// 方法的节点tag + /// 传递的参数 + /// 输出的结果值 + public object[] CallMethodByNodeId( string tagParent, string tag, params object[] args ) + { + if (m_session == null) + { + return null; + } + + IList outputArguments = m_session.Call( + new NodeId( tagParent ), + new NodeId( tag ), + args ); + + return outputArguments.ToArray( ); + } + + #endregion Method Call Support + + #region Private Methods + + /// + /// Raises the connect complete event on the main GUI thread. + /// + private void DoConnectComplete( object state ) + { + m_ConnectComplete?.Invoke( this, null ); + } + + private void CheckReturnValue( StatusCode status ) + { + if (!StatusCode.IsGood( status )) + throw new Exception( string.Format( "Invalid response from the server. (Response Status: {0})", status ) ); + } + + #endregion Private Methods + + #region Private Fields + + private ApplicationConfiguration m_configuration; + private Session m_session; + private bool m_IsConnected; //是否已经连接过 + private int m_reconnectPeriod = 10; // 重连状态 + private bool m_useSecurity; + + private SessionReconnectHandler m_reConnectHandler; + private EventHandler m_ReconnectComplete; + private EventHandler m_ReconnectStarting; + private EventHandler m_KeepAliveComplete; + private EventHandler m_ConnectComplete; + private EventHandler m_OpcStatusChange; + + private Dictionary dic_subscriptions; // 系统所有的节点信息 + + #endregion Private Fields + } +} \ No newline at end of file diff --git a/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/OpcUaStatusEventArgs.cs b/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/OpcUaStatusEventArgs.cs new file mode 100644 index 0000000..891d021 --- /dev/null +++ b/Plugins/Drivers/DriverOPCUaClient/OpcUaHelper/OpcUaStatusEventArgs.cs @@ -0,0 +1,65 @@ +using Opc.Ua; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpcUaHelper +{ + /// + /// OPC UA的状态更新消息 + /// + public class OpcUaStatusEventArgs + { + + + /// + /// 是否异常 + /// + public bool Error { get; set; } + /// + /// 时间 + /// + public DateTime Time { get; set; } + /// + /// 文本 + /// + public string Text { get; set; } + + /// + /// 转化为字符串 + /// + /// + public override string ToString( ) + { + return Error ? "[异常]" : "[正常]" + Time.ToString( " yyyy-MM-dd HH:mm:ss " ) + Text; + } + + + } + + /// + /// 读取属性过程中用于描述的 + /// + public class OpcNodeAttribute + { + /// + /// 属性的名称 + /// + public string Name { get; set; } + /// + /// 属性的类型描述 + /// + public string Type { get; set; } + /// + /// 操作结果状态描述 + /// + public StatusCode StatusCode { get; set; } + /// + /// 属性的值,如果读取错误,返回文本描述 + /// + public object Value { get; set; } + + } +} diff --git a/Plugins/PluginInterface/DriverReturnValueModel.cs b/Plugins/PluginInterface/DriverReturnValueModel.cs index a891b82..fad546a 100644 --- a/Plugins/PluginInterface/DriverReturnValueModel.cs +++ b/Plugins/PluginInterface/DriverReturnValueModel.cs @@ -1,4 +1,6 @@ -using System; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -11,6 +13,7 @@ namespace PluginInterface public object Value { get; set; } public object CookedValue { get; set; } public string Message { get; set; } + [JsonConverter(typeof(StringEnumConverter))] public VaribaleStatusTypeEnum StatusType { get; set; } public Guid VarId { get; set; } } diff --git a/Quickstarts.ReferenceClient.Config.xml b/Quickstarts.ReferenceClient.Config.xml deleted file mode 100644 index bbf98d0..0000000 --- a/Quickstarts.ReferenceClient.Config.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - Quickstart Console Reference Client - urn:localhost:UA:Quickstarts:ReferenceClient - uri:opcfoundation.org:Quickstarts:ReferenceClient - Client_1 - - - - - - Directory - %LocalApplicationData%/OPC Foundation/pki/own - CN=Console Reference Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost - - - - - Directory - %LocalApplicationData%/OPC Foundation/pki/issuer - - - - - Directory - %LocalApplicationData%/OPC Foundation/pki/trusted - - - - - Directory - %LocalApplicationData%/OPC Foundation/pki/rejected - - - - false - - - - - - - 600000 - 1048576 - 1048576 - 65535 - 4194304 - 65535 - 300000 - 3600000 - - - - 60000 - - opc.tcp://{0}:4840 - http://{0}:52601/UADiscovery - http://{0}/UADiscovery/Default.svc - - - 10000 - - - - - - - %LocalApplicationData%/OPC Foundation/Logs/Quickstarts.ReferenceClient.log.txt - true - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/drivers/net5.0/DriverModbusMaster.dll b/drivers/net5.0/DriverModbusMaster.dll index c0f8248ba8e4094a5dba95a3ea469745398c08e9..ac6c033aade7c8b80715e235afd32e7881ef0aa2 100644 GIT binary patch literal 98304 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 diff --git a/drivers/net5.0/DriverModbusMaster.pdb b/drivers/net5.0/DriverModbusMaster.pdb index 6e338f90b2410b42d86f07a9def964c45bb196e0..5de12cf422d30698ea57a1aba789c8c396392bec 100644 GIT binary patch delta 21127 zcmZXc2UrwG8^>o)jv^=`?NE?Y#4aL&2#OxPHx*E^90DqefHb>zSh1J2YZQCz1qHiU zqp|l`qNp(@vBwfMiGKfg*~5t+&+~t0e)GOlcXoE~KzIM8D1NV)*G6a8j4xc%CeSb4Hy%U9}C4p&!K4a6{cX8%m)w%ZzR%BZ0@nXLbTXW zu-18^EDF^Un1ank`W@11NGp-r3Ib~=C|D1qX-L;0-HG%Mr0-s`reI-66Ob-Kx)$lLNZ%m!s41{6H5DuusSfEb zq(_i`K&muXu#V;e3qv{q=^UizklsStz(QaxEfj1R(s4*nAia##LRU**4z(04327SA zHAr_L{S)aIqye=B7F%1v<{@2)^jD;BkT$RsSaVASOGlcEv;^s9qz{ljL+V^dU@hw4 z(jXm)bSu*RNIxPqwoz|6Z*Y)nN^I&@)fP!N<1f}Eo2F<&SI>I(IR21ki0MvZlj zY*CaW+Y0>+SwuTBC&(?@i4{SMpuRCqY&CQpGKzI#-cTMIa&|65^P0cJIYp5R7 z5b}U}KpD^|XgahU+6o}9| z484SeKDC%Nvn%{D^&q1(_qs7~M7tfdYn5*i3ifL22LpzF{xs7Alq ztPvCl^@k=vo1nAM&yb_GHq$`8p|Q|Xs0_LQ{h_sFO;V~R&G4+&rC72#&?;z`R9=Va zO#9bi4p0jy8X6C+gHA*LLJd=`SWjp$v;;bsN)6U!wbBd?8`8S0Sz2Az25JxaN&dPl z2>Ag}F|-0Y3|)ubr&+TX>DD@CG{A=CLF=JI(BlErpbcXKZCC~LXrL|g9AwKPpyWa1 zvtyG6*|C$*xj_o{7_!Wua{fobd@>YF1BF5{Py#dndJjbouECB&_Xg`~u*b+egWf=& z1{<-FLyXuo=)e#qYnrKK9iVXN40IcM2SpE6vc5wN9h$JBp(bnsA*$g?IFQ?0;)RL{0Qi`!+=Z8~j__1OCjG(*?t1;40X3O%b^Hio}6Y#=W^<&1S zjl#Pe-UsoTh@U!)>F{FswZH;}H8{2c8*yA0tmK&DjXAaho1liF12eEG$2Gxb9Gjzm zR+B5hh?qIYGyn^ZJ;1fV3V8;O;M(7?$K<#9hHW{Hf!`i$qLl0Vf>mH+nRSg(;D7=Xxq!GH$ds#4{~LDXm~KsC zGsJg5z8T~Mt|`~gk=Y#F8Tl4a1Nbef{5lpU7vLm?gO-;bLMB+&su}l?*%I7H%2)a8 zfSZErL2ATX$?^5U4KW-8w*)uBa11;e?1GDIEyZK~-BHlEx_~wiW3C+2WoW{&CAcZa zZb9auZKHib4 z<7osQ9FxBt$K?0?%HmDSwxX&|9Xu2n^Zi=Rf;gr-gDy`eTp$~Hsp8eCYuzW-O&F}ijEUkjv55y&y^_8^X_!C;PQbA@o+1{{wG89HAN zJy<#mr~?X6p@4SsQK%c9q4?~A9338vb?2Dk6Ci`1_D&+lrpPC8On%zXhIsP#G_bh9 z>Xz?||g>BJ4eF38iM^T3T{KV3atK5kS)0j+ic z$25aNj%h%{Ii?wm;Fu;bl4BasD6os%A?@$cI9?5m{&Z{%S3n((<(N7g$1!!N9?9CzZFo<+1D$HU)P9*`eBk0zkNRW6{tMcfozbxtuh5!_7n(~?cXj0{XGHko5j z@Dz?|K*b!>1g3Iqg8tbwu7Eb-bZ~RI!*K8n95e=|4rg*qr|m3`>GgXyxRqR=j+i;$ z@LY~{bVtnN3evzLxV78>ed9#j2HXUB+C=lg?y`R}cmZyB51DCz3put1FXEUk+2XIP z!>!5KlCK5GF}9Rrdi`4lZpU@F9PBA`EBL?Tm=47iIB^Vq8qi9PX-||?GuEF5u&TPC z>hxdDG5ObUOt+zd4Y%Q1_`T!-QT#fNX+rBcrWM#=V7mUzpzl%8UT$ED%-&!pC%^cHRwS{9E;8vNbe>?)d78qu<4FSG#2UKA@$26lI z9Mg<;a!eE21@0)(eDUjW<=Dp@2qs z1_cIg2mX;`YVa(_G~ja_(*VwMoDRMK4wO4wCUX$ju!8XG@IHZ$VsO%%_(fC*kt@)< z#3j5K7?=ilnd9c*D;(1RuX0QSyv8vN@H)qI*={hMiiL6`yn%o)ZiK|)+yHNaBjk8` z`~C^1hk)2Fwm z9LIy7;q@k7u21djo^u73xEY8O5kQU6K|`Dbo+a}Oa1Xfw`mFI1oGf#9@GFi3!LPx6 zWq%j&pWqak;n%S@DCjR2SRvpo$M)cN9BVkHmtEQe@8M77I{1rYdKP@Z3!K4EGycf& z40`@kK{^^x!b!)`C-6YI!Id&+fT^+``WybivY$R*{sYdGnP&JeI9q0VT7Kp@0{jJ> zEBk|}Lnb)kwX5nNQWJ7amqEcX-32u`rVl$t9Mdb85?m;^M_(fm4+qmbAf2=(;1RN4 zr$B+J(4e}2p7CZJ(?L{|V;Yb-$21`PI;6Tj-39pVM>U&*@mr5-CO_>nc>p?m@Wn@T zu0iU+ieow~>T*nb#F}IJaAm_W`E5BSza7WazI`=g{i%Ygx&WsfMn^mvOGM|iDEr5N zU6CIr^H}f&UqKP?!7;V8hW)?~(PuMex(lTA9a#?dbZ`E~bD9D4<)2ZoB&6 ziE;&cJUensOW25GTd)hqv?m%1&ein`z^;NCFRE1oa0WM#IT(5A>DN>)Af{WZ8OL;V zHs_f9EjYFjmpD7?=>BNUmC~D^8^^THZ8)Z3y9*7ghvf-w%P~#UgJbHo9mg~(&#$bL zhVAvW0Plp1wda_&x;Mx8tsv{b@jCc@IHm#na!dp6C^V`ba7S<_@DxVtiYrM4ekdrG z3aTz_XO4Tr--Tn^nwoFepJRGR8<@TipcPIMT<{5^>OxXk4+GOqqP^YIP=Gwmpclt9 zgJhv`bptiQy*Z}s-G^g3!25Dc{(c;CV9Bwj2W%IsaJje9k`(yg+8UyLI4&6631T?XO3{B00bfTm)V$ zb1U$8@DiEnM4kX%%JD?-GMQ-wCvoi0F`e%8+AtaZg8 zu=own=a?QD3pl1XwS_{{>h@{dFREgxf9XD1%mvUUS;8^h2TM67|FUm*ImZE zf@2@>N}(A(7RsML=tZSODyUk4rr=fJ4f2Z6bzA)nui=D+Rp{h2jK%8(-I%#_%g>C$aj{x6a&gd-U~W}_}%gV)!@V6GMVEf*0sO~ zTLG`ERp0g=5nAGdY}JhD-J^nI8qm>i_!!4Dz~h2Nb$t!^1e!9mN0;~{$Fv7d>4a9* z0a_INz;QbG99MxFIR6b__=Ycj!fj^Z}{eaS;v0j3TR1gaSa}j`4~FzK%O2p zO@r z9EXFS2yLqUbkO|9F%9r{j@y9$z+4RN(X5|xEPem@?3)VDIc|&!FF2+TF)ul$0leZ^ z1%55KS9fRz{*z-`kvCsi$7sZFzZOWZ{O>rXO-FnYD?%HL20(lXOr6th`W}2)UNP$6 zFOF%&K48WMKdr#WYDR0c={{8#RK1P=&9Q0ezLx2N&ZD}85>&8O{FiMwZi?g4z;?(R zBiQ8cRdU!dO)w&V&Hqk@ORwK{;_xjcCme|K|E zr|sgaXi^=u%?O_l6wRu6C#K@BXi?3yH3B(~!B9gKEvx;1B0fUlR?T$~A6+`L%`l~| z#7n{a+r!V4?4R~Z_R3p{yeTX3GG&FnN@m$niM*02{gg}#{nS~>PH2>@!e7Y-2Pm0! zkdkEtD_K&Ak{u6KviJxk>l~?M?V^-y5;P=Q$!^6e*`|0Uo7h#!mLw{fO_GwmNHS%% zy_7oEIa$fRhvxQCGUF5_djkcfD%qb<*8vC~q-0m2ErXTJ7Ju4NfIsaRlZC&h$Z3m# zx+uB`EfpHUSFu3wQ>+mJ6$gY6#WB1x)nGTRnld9+WL<)(efFx5tX{y-+n2zi1XlOi zt5O1{P_mZZYRPI~KYM8@n|3SnCd~23fUaHL#z(G&PJ_LIT zRhvj&*teZ3s`92(qJ=%-S0d%rHI+==Sp&PbbESonmE%{uN|vTk!yeG+VNdw!Dv+Ri z30Q3kbJDMk&8a@ZceC9o&_Dy4E(hw^IJ1b+>zbq6hMkH8AD zzLl`>T1mr&g%`GmZw2g#ph}(OV0EPqB&&f%5bVbwJ#0j9rBu$WsUZz4ys*te^srbb z8>w8fTG#}Cy_Bzj#l&E7$!zi0Eum`I9=>{5tPpI1e}%1%fZ0ji!&-MJfyK-u%j~7~ zfIZ=-h5hWMheZtRhVTm59=>W7c{Q*J{#q$t0*lQBi`8ClGRJL64s|DYpP_2dTL;M_-bL3d+A~4^eT}`Dqt1Km9XZ? zteKM4O;*GDB(s)MYp~b>u;*h-U|oCbDkP|c#r#^4RZCVQS*>LCk}Z*Jg=AT4sX58& zC0ilcO35-e$qReEk5;mJ$(BgA0yd;?rDU=G1Zv4@V9WYyVK4R7OZgHhUjggfuM)O% zKjyAv{rah4$Mw^|uI;CltR5C82duTW0@f$F5;jT8+A7&FSYuYGRU^MZtC31HDA}&n zw$)LQUMkX~=#jQW%9kMjMO%UV$P~4QG#klkC98+U8321brBW(k?W8RR>)Kl*<+YO4 zOC=>zz5>=Sm3b=Jyi_&p`B;r7_W$`h;@)!maGO=mpMp_ z-2AWN2VJ57xq#3|8a$mp()Ti~AUM`w%^>S!N~dp-fFDCG#Jug~b+@tuf0U zs`rytNU{}@Wu2un0M;eD0v7w9tPY7Wi_g{uDA}VNJ?ySwC9rVAPRnJ1WYw_dc^cT7 z`C8bFd_C;S0&S3zc@=7dOqgS#HW+&X)`S%lYC@H4&u~qs37ZIO%2I}xpyc-vB`Dbo zYsxl`(1t15z>!YcFcX$IQX6K=Y1e@Jte? z2KX7^ig+QwTZZxWVy!?!YvU8exIjNMsh{yn#+Qf-13OjIeeq79mw_fU79E1TtEs=( zGsv~7#qmoziIal@s$Cbw%RwCtG_js&iwVjdOzbQ62==U|RpNr+plZ4&J`AqzU{Xu5 zQOH*sBK8mIVu+lyS=CL3ila0hrAstO5o*XE43JsC-Sc6cx@5xstUl-4X zcBpD&@|7vJVy!TF;-EyaTUd4El;z^WFnI>>-4}0%bvD#1b`cwfSGQ6;SnMDE)wfyP z817RY`KS2wD^2wjTStUc`KA_59Vd?A=%jcyBGBNQW+U21$}^u@I87@iaa1BMij+qU zU#0kSq&(`Wh0~je>L_`QKpEnoD2<`b={v=pQQ_6}NvshaVW1gNVj@Q?#f{O`t<3mS zd>t)c*{OvyeZ@{O)#IEwNi2@3p3%(9;?0;)Lz}bIV$;~Klp_w0jjZ-nh-YKlR9&Ij zHlh$Gk8*az>;y3)&O`Qy;)FO~Ie$((5$9c%pHoXz#LKdN71GH3}7cY-* z&Yd}r#C!4Wt9qStXKqu`scX6g?UA_y<_?~lGk3T+t81f#?+ep&^D?rt@VA4h*+X+O zGShQg8;aVw`M9~aZtv#NwrzWNx3=yry?oNs(^A{DOKa!l?d9q1<>TYy+1AS|J;h^y zXL?)rwjL=yK3;9p+lfZqT-_tYbxBrweqMe` zR$5AKnp;&L3${!=jqkwN9q)~q55|p*-dj<&#bHxsk@zejNcZRO%dfK%d`EU--Th48 z_0bzXt~xie=*Wa_BlGgphr0RaZl&3PWu(V3u1F!Ox~Z~RX2RsuZrAlhu0sH0<=k1s>+YZ*nw9de5Tt}Z#U_r*O0|382mNb zixxMi^C`>Iimtu;HE@S2CA##?(JOMWOJH`cA++l+tsYS5nL=~VqE#mTi=rLdOm5d^ zyLi5*gKGAhOM93e|2$Brxa!;eUi7Ti5$(4s?Z8(XT+`h@Z3rxVwb3(V&aS`2v|cVM$8%@LQ!_t) z+TmxHtB74xZ1HqhH?g_6vX`?;``|l0Iq$ojnOuL)y^zHdJ3d@Ev-3jnMz0pCJF|X$ zPtBG$tZ=xse{0ap{uf(l4v6NWD!I8TEn?e!s=4!R#!JWYoTxRw|C)R~G--+0Gr6J4 zsFT??+8`c^tY_U`TnpOoWxLdC(6)=>yyV8J^#?9pqh>GnT{H5z(TeEhU3?SV-THco z7n0kmx(wU4n40bMZt>z#lj;R5j)`yZD#iG;Xy4meHR4^=Epqyez5VB)QCDJ@7VWe7 zIdu4RF{ZbxDrWfR8Psgt^RhoqS-FSLj2O0}Ym@cQ;I!A_pV-Q4wR&G^35A`voUZHD zVPx>k^p$Py1m)b9SGDT27`DCNYaC424K>WSt!*2<%|YlOYU0|xgj5o7u| zMT~6GLplR%JYVSZ{jSY{Wfw9neY+2TCpQw3ojWuoKhMoSFRQIQk>it^pQedy>^H_N zImRS(Zh=?GpZmsj6!-LTjch&F>O75Uf$`?IFJE~^7EiVK$1mc<0lB$Q{3GI&O!=Ib z+q);MyGK>VnuHjyYO^C^P1Z2mftIi5h^~E`sKW0#m63CF&7+~KzMC5Q{pCe*7wY<5 z6RrB$i6i^gQti~-y-5MDx6hc@@ufa^`wx$8{37eMp#b@qpHg&Jy62P6rcT|s{zk~Q zRU_kf4X~IfweeeDE0w9@{9n{Y*xA#g9&bGpF!lW!_tgt_>JZRa_jZ7jwBPh^u0ISO zHzau3(CBpQh9ic`GYXHDrx6skY%(zE`V@ zvy;TWTD9ts*H0DH|Ell;?@LR4qgO7jG2YeMrm474+er21=%pg6S##-c^@68d4qc~x z`6{#g&|dM9)=o8P`a|g)S}@lvCU#C)%y%Yxy40?{{Gj+*+g-Q);g4Ey8dpRE&JR&DIJ&#^G z3=cN@OFeGUgJw~*;?(X3A2h3WoOGF<;B{24C0}yFK>I z3hH=nhxl)bqw4YAHI1e@V)%gR%_3U`lwNbYAlmFQ9NZKbmY<&^PqqEM zC*}0UF#PHMztjVN3tjN6ykKaTzkcVMm7-lD^0Kq!IvxAXT}C}L$tq3E{5KShjlawdd--Zgu0e#D$njoiYF)bzOQj4Z=dT2c4P4I1I* zoINW(2G!Thd)EJD!fi95rg$LDLG{mp&RgkXk8a%X#TujNnElu6!kV_|5HCJUtFIC^ zEV@YBBz(eSWow^_q2)u~&mHYFZLjE@?y3qn={%d--B{z`WBbJw{s(VOZ5t`tc#FN$ z>#6SCx0yuFPy2@r@NrPa&bYlbxPH$KL&RC>E~=zc58sosD0)p~Y|Po1-Fw(So7rxf!X3yCEPfcnLK(KeOAs zG}DzKEB@U+queU1jo5NP1J#^K$CuG6udN%<$Hr?%RHEbsfK4QuM2UXDd=%wUb z=cr6he3cP8&1`XIyR~V}#CZdn+P`}vox1^%69*()Jq-Ll`^UKcJ=YnDmj-LEK_byicT=w?Dyn#-tmFHG`pcQSq?qYD1@^y4s$YAIDi+}f=H_%>; z8fdMW_R&asg?0Mw)P*T0W=HIsHny&F`*6Zxh|lHY<;bZw5A01vsoL!mmKs&zF`v?VDW~ zw&3CqjV*U(r-`iwxu^=vf7?oH>SGhNul+w;V-GiU$g^*FzP~tdP*c^e7t4O9X3MX{ zFRQq9JbcQw=%pWrPJSh>AJjmlb6mWOoGI^Lj2kd^Ud+NrY0a0!UAiXTMa?yrWB(;* zlf(}t&HwEeJ}GqJ;)gRYXJ$eP8@z{!U$*7%moF_Q`f?lPwkwc2!;8`*8-Hv{&*MSo)<+ zj+ob}-kURi#wXx(7OxC;i2E?D^-gNq?p~v#iSL$$Y|-yIxnk>2bG{j5cozLZyrzA)60Vn9aC9EOfZJf0?97(KKZH}9I3d$YHT`7066&S+)?L$kwmtl(mS+!N`}DT}3TV`0sNvvU)G_TH z-DDemrc8Jk|3}Q)zmNHi`Kf8C_%ySp>dc3p56D?3|H$*cgC7J>S1+7ZWc){=_+Y4$ zIC7|!s%KXDGrF7B-5B`uyaofq_1;^T7c160mjaFqt*L6aCwv!8=W@a8{DK(Qkfo2F z>f7&nkcNO(s`y8pC1>3~>R1K!KNB_aq37-u+yA{swVTJ~;sbYnMq#?)Aek22r!9ES@t2x#vL}%U^X=HtK&9ya=^^H8Aqagk9L+X_BY41 zfBjQeXnm~4=B1t4Zxk`-!OYOLLFLy(r|f#-mn>t|G@~oiDPXT<<+$@@w_~@(JGULs zYvo7;q^c^%-kCzqUm|b4&~17Yvv~HX_E!(SxF9ahZlG#<@v7u(A3kSN#H=5pm)srZ zGwwluQ}IH!qw3KR6Y0XKcQ#Ade(ZSk#0dd?)^%KRNZgTQBiiLysUFW7Dt+Lx{G;QE z$Ie@xK|H{Ha7PdAahK>g1rl+KR{lKt)b)VzZ*2$Ty-lhrn zLXNbX)!lvnh2!FZVU1M(SQMOl2D!=2kR?@<@jkr1W^UwCd(}FT5&z`nKAv)$YidM|%EWO2_?zTO;a$X(H)cf;i zWWM^%_x~27JHAlLl@Cs@S{~oic+AF|7JHQ1h3j{>{l(1q!)tMRUOm<4vu~uw_@Q@i zR_=Y%H@etq)}r#<>(Sz&Jhg7{mm|ArEYBJ@_@rz9SEycZw6N2HzfQ^BC8lH+q<1gK zss89bug8>k)RSiN?YWwUt3oF$y&q*BtsE%FC#Cn7hg52Nx0nKF9T+Pf)f9(qY}+pC zO}$dXM+XYTo1)k|-%=Nu*Zm8H4(a!Csl8u(cyX5Pjnm_&cpBQw$V$r|Zn(d@Zn?LE zg4Ye2wmWR8t$)#r(?_3Ltj?5!zaCi?4oC0P%--duZrGJQE9}6%zMCRW{CtxOta^uc zlD+dXm@NwB&miqVAMViudUC_jSZ+nO)1r1bdz7Iy13g#ky@6u@8bxrBIi5HjN zUHVq^D{zjCuX(nDMwIF{_m{x3PvM(P=WGq%v11(9QIDYPRJ`w0zs`-_bYLcJ!UqkH z_ka2EQ^iv#^gCJlsRIL@28(lzC8qy`z~4 z`KkiO4KFby*hk_`uej%eQESk47KQN#s!GN_y_n8urNFHTivPJoC}#Z zVMbL1W>?)v^O{^l>81(OzxGl!j25-{fVfFb1P>c|-2eHe!(5(11q<#jjgIeH{C@J~ z#&s!zI+iX`^%xu3@Ev?NB}`CBm$v+tv~2tum;PH^sAy^{^;9*7|2EZ>Ut@9U^ix%R z%JY?DsnwSJq{N9cF5^Et!{Ew1=&$<(GyIc-#tKt$&`fvl+VXWz$j`{c=QJzY8Z?Jr z5G+)%s6zTxG(T@^H#L#B=lNi?8Rc5Vwo<>PlM>qpV2?R@fE5j)j&P^qq0_3h6@xzv$HqCA4Sp>(-&{H zx1$kPT~ofASZ7J=((X&H3$1Gz?wfS_)T)vun2gqgyVE!-ST7TpsKQoVuhvp9`X#(2icA|cHgsU|b;r5cd!vqf~>5^Ki3`>MlqV(nR6GC%) zIaKNhf!K0rtLi+ltjmYrT@h77?JNzB+gE%Ss3taB-A!D!dQ=nXG8u;OpGIx?Mmw%) zDOAN)?HTE6R1d)3+S06Q&(MiCW9?Kgx%;Z4Lkc#uO;^Fv+R%1;g{cL@e=|p0Ze(f1 zy65*7VJgNNAa&@Kz@m_!L;28N;Xz1mgRhSQ2jt|ZfZw#MS)cs+QRIfi z(ub3O9(uy&hvU;x%=)a@?P6%lm<;(cs3-IiibG#fa%RFh1A^g=L~0_Ndu)&_PG~7J zSF2DKhH7z4&SoNAg7i0}w~?C3WXwh;XFZW7Azg`dE7CuazCr3Jm$8m=Im<*^jC3o~ z{Yc*+{f5*{N5;D8$XNl>F-R+sZbJGP={uzD8pzbFa|1ccZy;koAl-s=AJUIV^>pQ| zv#yMVAT32&j`S$f^GHqfWXx7i&UztDLb?j+R-_M*zCzkc9|O~uv!O^wAl-^|KhoDo zzasT9kg;F`v}>S7!^mh*a1N>5P{vFQF-FJH@(EZs~NL_IzgdcU07de6;utK zfNnysphn(Zm<`my+m8i6BcUp22XqX&>`i@iXXZZL*&wJGnx=+X3GIcPI(KJ_pl?vV zZ&x&x17@nz#70a^p?f_{OnL64!2P{XdiOxd*+3xfth#n2>ZA+#Ra3!Q>) zLQiooGS-THLEha6HzZ?@ta~>{mIMuh#&>JY1n3;}82Shq`?Y3vkf)#EZ_viXnML|J zvuwY%%%Xc+)?L`%z)8IXxhiNqv<=z?9fXcUr=g3`b*O==Ejy-iVGaFVm?NZu;-JUf zTv!UyBB%=51HJNZ$Mgc)u~txbC>BbF3ZW?h?b(medFV+%do}xnOryZ|tOe8_>ILOM zul!xvra)JA0D264gc=69GHa+~PzTlzDu!l5C!rhA-_U2MNpJ@i5$wj6LT91-&|9cM zh#PAPxj;qG!Vq;wwmhUGI|}^?eSi!?JF;ewKNJt8LdDQD=vt^dGYoTQEupSZG*kkW zLyMpd(BZI7>GAEOu(5*pa6Td;#sE!bPgKe`2rhf<;9XdAWzx&y80VZ$Cn)-g6L0vZEVK|7%n z&7Q2xtvt6lcpKAvH7?(!|-ZS5VV8gesx!kOsO4-G|;nhCP*RMK2|L0`=>yWQ%$WaSbfgO12Sju6Ijz zueUw(>SNEQLQA2|&_U=NbQgLFvA*`WH|?2OUkBy^jfAE`OQFrsLFgQG16tV6fi>yx zz?}PAv1n)`bQh8((xm9eiY3YtasR~#Ney(>joHM+#%v9=3p$f%#9lz=1B{p#R0J)A z)IY>*W1!j4N~jw8d7v@72C+fLObK;?dPBq1Fms`; z&?)E<^bN8eY|PxDa3~X+3T=Q+L9ZaQBxB|Pr9kD-D(E;=1AT!kl8u>LvI&byuAMZV z*X(ETRp>A1U$NYjsXM2bvcXURBtR#jr;u@~DGP*#q?)m5(2vkPNS;OwHeo(us%^Zs zEHAAID}jE1CP;D9klzBGhaN%=(wi`AsB5}8^T;q)vxp1}mIytAbcR?kmm$=c1q(r5 zFVliKXEtU1p*hgXO!8T>GntmGQI;iZk|k%&pk7&2&i~+{gz|D|CNv+afVMzghsxR9 zp*rjh)GAx8!(6g;m^;)NQe`(_N1)#zS&lACgvLU%A(LEPri8jc0<TxrUd%$mvHPw~s`+{45^(0oeLV*nm^rZq~TaW=) z!LA-FIi_2a*bwnP$hU!7f*VTp3nXp?_CvlcWDkGiTE7|}AZiPYP=F61xIXyAf&gQw zfxZ%(fbmSg1FF_<3U)%iIn)aAW>UO0*b&3gvJ1F1hNI=tU?=Pnb1}XXV{RyDQ&&J6 zkTGYD=`ytC*hI)Ou~VC%6mLvYGqj5sbLH3q+<{|i#jPH9dsAz1G``=xm@H#m>Tx%YX&d=*9K|6=2%4N1;Br_nUDu?#ppAVV~I}+^t$a4Vd=6mJN`n$B~xF zKa^wgXLIe*2bvtPwbY*Q+zSU0UXmkNgGsMf&g1-0QBK!IM`0&Fo|1&9gwF{kAUA^^3x?7iJhrs+Eb+* z(*#CwOamItF(#m9KX3&!gE1V_fX0Fyqz-9Qt8qMQnK~@vm^vKCF?BeeV_LBZ9P885 zVj@>S6((`qmE(rU(;h5`zm+r~8sKEGqr|-=b^_BWL@PE0{x*`IR%|LJq-8_&&!%w& z9^mO5(|~4hOf#6tF|F7vj%gFl20Kd~hJ)we2+}gG*j$d)bePWL3i^Wua6731I#=e` z;{_bkU9gbjH1HyDd#Qe;#2vt`k*5_|48L2gUybEt_?pQAM`i8vkVd$aV{>o?$28+* z9McLd=a^Qgl4E+gTLJDQwNL$3fjvaV`nN;D%DMu2-C%4LPMO*OdOcxmHOI6k)^JP% zSj#aDU>(QgU(Ye!hFUhF>reOL1_XFYBcuu&Ii?0TaZD?)nd3I#EnqLH{$z>0!8XV{ zOY8%t4^MQ-w<5kXnEJ<|!q_$(_*6hYG~?|Y({1%5$27nl9Mg=ntUXwE!tX1!NAcAh z(}aGiWwC$p0lkY0pc(B3caa*P+hz|&tYsSDUXJMp(!!b?ZD7c$cpDqcpA6R=yh`Xy%puHx?P@s}3 z&?PyJ70@!x_yosvNq**-X7mfkG$Ac(C-f`){!;rCe-f+im+dAvlp7#1eSfYU zAaOW1z+2!5DW2Y~Z>#Ydpe>*Q+^NTR>+!vMTvLz##@n;DJ(|E%j%R?Mfn%fr(0jJ} zIafeu{R@ui!`VxYOTPK=3>8Aj#hy{2rVvG5J4$QzSM6|I4uz_#?+Ej_Li@na;mY2uS5R_{=dq z3%=kDPV1)`|Hm;cDRDaL>mpCb*;nuosl62vXMw418T1YQp_1R7Dll0Kyg1e#MBNF& z`4ZFPQqFM%SO;7v`Gdd>WHzisVkKCYW4a7_9MfH(&oRC&zz1@!pc~i_JX~rJFXAGP z0Mk1l9kq?%A1V3e;KnlBI;Lm55yx~88FNenGWpJG@nK_%$!i;=y8yq1sAB_g6OPGm z&N2BdzBedtyrvw}t!T+H?GdXw#`@D|E=64deH(yxbB@X1oMW1SHOCa+g5xt79PwzZ z5FOKkMA%3D1PmgCM$Fzd2B@RX&j~#q~<^pI>w2|4>HBbU}mMQV7Ry!a&a9fV`g;RER zYC0d=bEPyiSB}Zwfn)N!aZL9|M~>;m&z)mh=T02cs6AvYwWCtwg$+-E?*-ypg%`)v zp*P1gARms&-~TGiEW2u_liwzjyxleqvopi?+@6b$WSWF|sCdpp=t`@#6y9v^bK2%5q$ zj>%uhG5L!)re{=fJuZ3sBf!&Ymq0CkRWK3-)1@_`fKu=bjz@v%*WvU- z^BfJH#qkf|*&L4n&*6A1c&@|>)K`P&iHxg8+pY`+0v9k2JYQn+j|VT1m~QV0;Dr*? zE|~~kB(W=a5_qx1?ZD;WB@)w#JQ=){n05^nOhG|~6hKQlm1BR7>3FC2hH3CGlj3PW zTBaRE{^{^9m;5xq8Q@BZ-M}-!E5Ovh_yJ`W3aYq(+2EBD(~RbTS8@Ki;ME+@leNaD zvf4{D8}SP`raiQ<9xtk8v48QIv6u^>XT}na=~Zp1%&D#e+V>S4(|xjxW7;FjIi}m7 zl4J6(5Lx>CK?PM@099DYG5J?<+!?%D)&`$5YiCUFDQh@(0d(Q89Bc%w8RI;(#It2avpvw6} zRN#|nOWPn_<5L{dH9jqCSLaUxpW!$i{2Lcf^)J?A^`&|Rm+SEru0gsazjM4>;)9qm zeHx>a?kfC;q!lOvUjrYJc!0zjFdafTS=H>itUW%OqgVXU=Y<={YMDlSvmW27$G17A z6}iK;cR=D}Xx|_#EPC zgV6x~g8#f!pH9Zd9EXFS$~x5f)wFA$aRoHO=NxwczrbX)4brS%a!gD9s$TqSj$6V1 zhGY5+^Y%Nd#oOke?*;gPj?bJjx4I4u!S6Yy75Tt14ftP<>9+gGF>N~H3s@1_Uo-$> z`m;J)BC7BS1sA0yqYgfE9A5pzB^`enR~JA_V2&e9TY;9qf@AVG<(T}Ia`(FUDzH^O zR&eZux>~kGUJvoj)CjmFjW7xY%{fj0TXWo7;>(ElqFAT}{8yy<kn=ab}b?C0k zto?PFRe&x#3Jnd?Wtw1Jwk<@LH4oEe8zOYsf=FF9DN2|90sR`S%RFOsS)+Je_BZ6v z2W>*heGS-@{<>LIzMzlOqxdpdbS7G+PkEJS zlSEr3S`Dmkx8wR)MNb_AU3SA$tumm{RKOk238K}AB{i@O{gj5}t!k*pGW;~KU;UDd z^w@vh%V0ODs$gaQ%$Ooout8o)V!jNv!oLc(pN|Iip})$6V#;9A8Z63TD}9w}Q*tE1 z26>f<`6}27e+_IupBmW8K$RJVCc!rJtAfQWVc`|aRZaBR;h-c~v>@6l(Q0531KT~A znd`AR!AY=)fo67yxSm>+CEAEgy}lSEqvi}eumHL%!o3Nc2Zr)JN?Re(z0Dp+(6Tj5_L=9SGT zR0WIW67w~%=(4#UvyN23CPivsgS={BQEn}k!}f|wve9E5qsw41Akk_>TLZf;T4}4t zCiGCjs_*njLSi0M2CIsxf-R2Gz%GxefyGGe$SPr<#He7+W2<0=SPkr_*c#Y?IHuHN zC2>kv3>S8HToUY`aaCdoYpKUF<2A6j1omXBU@O!K8WEU-SXs1XuvxvTVDI(P zz=rm&ft}r(wW1geEEeBUkG1Wig2kl~ZIx(QYq10tcZ6uG#1f5YnUm;+Rrf1{)#MUYh?cb{uTr!s(Uz&jL?c?}N^X^ClSEr4S`DoApc>J#4wP4lRs}m_P?BiN zL|Y|V4eXaeHL#Y0nH%Mmu$F^Wu<3)7U?&bPgIzng%1y1uP7Kxn{vKQ-TGmk8SEZdeReRZ3i(?}8nHx!l6OfpVhMAn80N0eoRgJeUWt5gvI_Yl$yKnp ze4?!pE$f8+k3*o79#f_y!D8uPvBhAs2WZ56jcAz%l_+7&V^y#dQp;ekr&ft28qwCk zI;N?-FtfBI*k9AiV6o9)zolu!d=0F3I`h_JHW?~doc~EkuvuWyy|+I5FQW?i)#E0M)Hz8=baFMYlXGieam#h9wfbyVF7uQ^y zfMoUAqWqcwJ?1=&1?sVXhbdvi~b{f`@tskKb(_qupoA$vKp1|?fdYf!Qb z){xCCRfXdW7^Mm~U?s4IY(VwruAOyE4;H%$8*hyani*o^zJ7o8Wx+!gU=ZZ18=qc~ zUnGoI1?V`Q0E!vCtUXrmOSIe3625X zv~XS+8sII#cynQ6fVQ>q@xrr!ZiZq%;}?uyCb$Q7t)pAQh(J#*O;8HE0=?^Kknk?h zv9`tW3w#9opny8p86h{Qi!`o*Pmo6)Ef+cl2i4I{VQg?+2a}wH!yF9} zz6N*KMowBUgoFe)5(ho$<)lyLOjsDwMPKCd?!xtu5Gju}2$lLSKVN=P$PD$VZKM4B zWHVu7s5Eg_-+Zq!~C@Mrq~IG!s=R?k|BKMeCvha@XmFSFNDe8 zX{wuWDmjbq5N1Y8S9WUQ zOfTVjblo^-juTq-sGGygb3##%P;HyDS_sEE$`Q)6rTC#`cvO0rL?mycVDr&s4r9;s;^y*=F1-F!NF zrDS9XE8`v1CB+3L#qG1R^3qsPX&KCx<2!@EBhItqh(S_)lzHd2)Cp8bU> zWz4t1h+i)&HipejoYSH7!4oG0v`{o1v0*pW?)YNNOG`yuQ00TkU)E#<_ZEbnEfup> zi{_K_z?JR&j?G#hwQA?@MNdZ9W(sF}h6G&tto)Cf{Ufu$W$eLi(X)F!I1_TfZg^gL zaZzz{URrWtnrm844u02bwQAu~d@soIi*`-UYd0letJ~CR@?%{Sg`T~F6mC76ePC7i zLL~3y?c2F8qP7P(Ht}>!cp?1QOQA4z+%}yCusUgBjH+g9&0-c1bTX_{(Gu!pocr|alY$~5=QR6mP22yno*=+c5fZU*8adyexmjqQ za4e>*!CK?;vxVmc*FJ3&)&N%)7)K$(mp+yX zrT+UD6kxUE#D%DM&w$Mt&Lvqt*q4g|s=j85?#p*BqTy|OHTs3!b>HAkuiQ%tTqo;` z0qVXMiuNuuAK*)SR$(`5uUkp8fCCe4%)8v$VJ&R#Ypw29eEtD7uY7TNTiZuBf~I^P z-EFU~)qsT3qT=*i*TDR|qWqk6X%94tn*J|!_18*QZ@Ft;L}kU*1|#e$9qWP%wUMcv z*L|X&KgrUtr*O2txp1$asbayZb62S;w}BqdW3K)ZRWVEP(7nU9AH{&?{TnOv zZEe<4z?7W1`+m4!7ruXh@$kMawvQGA;`&=DKK+|~h`Nx!|H;FpZA9d%JGo;voLFfq z1_=Ev6$371ms1O7KVSb=a&wdas?77}C#NKwMnFr&{2vl8(}sCdeyK@e`6dX8E0 zE~(8Bv9?j7nc`00)?29goiEs;qxZ5^(|g|iGy1=|mSRA7qOIbXhyPA$zE#B&KaUMw zVbxD#8|@Bm|B(V(^~}%DDUz17RlLUq3XBhad}?v9ckrC+JFRRimsE-^ol0zC^=|Oc zIn2D$E4KVJ;<}_GE{s$9!Kfe6lE#ly*=d)gzpXw|v zd+mx(yS;ro&Ii`g{l5^m{(DvXn?>~fC#99Y5I3NyV%)GhD`^Pn|NUa!#in7%bmvDm z#-?08DvTYVj6S%|VID0-iSF&`i>~Dc?)v81)a|;Nnf9vI9>%WmwP&g{sVlCR#RDT| zfuQqb&6t?#{fkDQ-1(E4@N__PMSuDAOEloV_gh*z?gv6D7o-r zA&o_U!G&3k9Si~lw~1RMx)L&u2pO6oT&{Cq;wTTQuY>9og-& z?w(^k4lJtK`s9ROqEI@hmCEMF|9&K=N866C4^Oub-`QlVPeSwZmEU`-y((t&Y&TQf z>v6mMH$)$b-dl0+>`zNqo)=69HOpwc^V1`aa5e^ z9CnB58;*Fi#piI3@C9YSrz~sbNJ~KC8RU_&(v-tb)3Mbl-9E zF*OyrvWv~t8RMdbkG)>q&nvqqWF++r7*M!l2{jclyJe!e=LS`E_WK<@dt6*3HH9bs zFzNct_{Zk}?aZ>b)|MOcPloRgUhwd0V8CnPOOma6bj#eI>1ncfbJ+E&pGtZhY8(AW z=7RAb_-1003-J<>o+GvQ_wGrjsXgYsxXtn=w}KW=*>W@H@SPyON?b{LVQF$o-C_Ii zS@5qkl^$Q7_}>3o7_|6F(dp~gh6VJJDn+N~<`VHqZQ!MBUmu!mk$M@fYFxZK5#kMdYS(^Y>e-_x>%sNVZh$da~^>y$u*DqHj+R zSB4+nt^Y-6kZdcoNU>HtYV>sjtzHkulE0R891_0N?##bd_Pzl^Op2}gfcd^ZX|Ne1 zI+X_()I?UFJu~&~!t33*{-cw#w9An=%k3#GhtaKv|E}*@5?wLMe*K1|Wka~=9?7}s z@#%Q>l+Y`eH2A#-uP&w`9ABN3b1U?N>TuYag=3Akol6j&r8uZ}YjSQ-s~baR4$a$W z7QM#uU894`;H`a>(Hg|!KQEBlYA?vdbENgAg~DRZuhIL>*7hqcxRSs}*Wc#mJNgOK zgT9F}HPfVb;H1di*V;_V{#~roKG&7Hh)*9@l3rA-y)(S7gl!b79C;$kb~IAWYq$Kv z+vd-&2nSM|D;6eo{g;kTO>j`qq)yo}<=Kj5w{yJb3eQt*)sJtTsietHnp%-{Z2YI_ zB@YjH&uY-GFE_x1{M2l`s7W(&ane~xdtm9eab3&S==dM`_FJF6Sw-`?3VqU30&}v` z^R&Cc?Bm&qblEz#yD-Ar%Oz~xeWyiR#(#K(D#Elh`-ttOw|}8Ac&+*~%_Gt|dU4hC zuNO64-u!Qqv4!~~wHvW%LE#yyq3ZH>Wb4MV$W8Y=QWt%ld`#$=ZYeZQH&U3yuNI$P z|2Ty7@y$z*Uf5-V#}>;M9T3n$ZTB*62aRXf_G_~{tQDg6Ju54Sp=eAdOerd$U z^SAo7IC(f6wOr|yCnjYm;-mA^>h9jrxBASd8t=;;P0S7(s-|oo^I(4E;Ss{8bf?gg z1NUhRV~eg$ntEVV=&lPP#l2ruOq9kDpPrF}*1m7yZ4UE~Q2g81%eJK?&5c+qt^^BP3;pCdse#=BL;HM08#qteO1J{2e}> zGrQ%#l>O8*t#{*C1UM^t9!=Oo&IP@#r^H>fh*`bk>R-#AH#{OJhd3xE>gc{FXULpa zKkOLm(qm;~opDa-8SjO}AuSbaYfSgyS4S-5QBJF8?|l6CJ-U8dUtw@kn2(wR`yL-p z*QMDHUsvDVyE&rz=ANToPxdAV7lt?~j7=t=r)GC_@gFvG`1`OWuTSoq+3RC7!8p@a z;Wx@)KRK^#8^@g6?+ICdSChPD%qI^aDATEjj>FqE&hlBKc2j7p`Q93_qg5}?8VOW+@@zN&sE_HMF#DHZhPCNOpeqI&q{;lI; zVPlq!;?<8!#CI>tUtFBiYkb4z?l};2@oliFa5u|Q@u<3e1wBE|{cHWDW^jj)ah(IU z>c!5CfzwX#9okIM>)KecY4gY9p7~Fn7Bq4A{RQQg+gb?OLzPi`G90Hfjhvkxn%d@S zT6h0-)u$fr@<<(4Zw68M$!T?KX8Jy*jK+Grxl^+n$CauHg&*gh_`xMfxHi;QF>e(f zXjQoDn#PRm9N#BmZSnoBp2nx_gjv}(!r@{)MdOW|#8={uhBpE)>r@0zjY*$;uH`d( zF(5tLOmQ;(Tqk&EII5cfVkF0>52j{gNZ1U^`HErKFSNp`6<=Ary-GWa_eh$%l zHz7he5iz63$EivoA*Y|>u&vnza<;f~yP|V!|By9L8=wC8RNq>dnQPi?FSa8Izyvs5&>vTOn^O78P^ zCQU0dq7GPg@o8C_y-0}8Qz`;dhJGeztgi2lv+)LjM<#E%bo}CA4V=w|6?x%`QG=3? zQNSvdVyMwyZDSUVwHp!d73DlH-!|&~h79q1aB`hGDzZUz=%TDKBin8@+bQjxg!IDU zS*htb&~evk7tC$b^NG~npaoqYw|+MxWdGjtLe#P`8-=0yj*-&AawCV3=GkyzLJ@9oQL?^62tOyr0wg1W#_@p$`s@r^_2oZ6ykM#G?0_h0P( zs>n_j4i+dwT??zk1)JsNX?<>_X^(AdZQl$%w|0Sc4w;4N$=vu~m#R)tM+S$lT3y}j z9<n7!i2-OB%H{M|}*g5Pu-7&`ONw(AN0+qMh84YP8hkG&Z=`6Hw) zcEY*zIyE#p^3B8}LorTHL{$_mi_2FQHtq-Hiud8!(kMDn?U9ZCAyrN|Bp{LzK>#n+p zhwc}n{_*lHy8|j5R2_0VJYFX_7AY0oe_DHt2J^?t>xNT@FA3RWma+3s7aeC|V39)o zx31y1*8bGuOrxh#UwEOB7Sld5;|T?>bT_+PmeDV~+D8)3HJeX94PTWxHvDd@!CkbKvZC|S@<(WA(fUn0 z@!Ib0o>1gB;!O17VLm!5o|LPl=@ijZ%Bz&XA)u-QvcXJW)i)|I779ZM2eM(5rroM`Zt`Km z+G0D!zBk3sX|xZX%o>tC&^>Zf@*5Z32PQj(+r`$3qapE!X*0Q$4qTMdZoB`A_(>60 zjNUyIOiFCj&AqLzQ_VNkUvw_rbcx;*!h}?F|CPP4pPmXmIAK1YvWD zQa!-eQ+)AzePiq26>cE`3uiA4dOayHuMfU>#To}B7iqsdvN&~9{B*qXa9NvPmk-6v z-SwBh^}9)@Wqz{GGH+QMnUl;~)=1V+W+2m($>?uGTrEwEnM__HgJIIQLOQZtugGVw zG--%p!DD!Q6Jo0thWZpH#@dPBg)ALztN%*2J4?2Es_@(JDq+M3XFb$LiLheCDq+}2 zOTm9+>xQpnd!1!_J!N}U)ssht$%TJL#mSn}cZl|(>3Q^GYDks#zd@L(tZb32?7G}k zK29bdx5`o`%o(i|dXIKPBL~7{2NGomva5d_eMr`lhSbJ@8&V^@dZv^Vxzb^wBRdo; z%o@|ljG`P&xG3T17)x`pEeyMMSchU|ht^bo9uq2aq44IWT)3fh$--kyq%j_Gq^TT= zt}GzSd}-Yk5Ybg>mxv$x>dZK55% zc)@B{=4E-9OhJ(j{BnyIdaq}7%#`7BC-OS+%iNUOk>>EdDdE|)U&KCL__>IE{%@>s zb^1kf`g=#2A^s6YE4e}KwwfyJpW)_B|46~Y)WiUr5gRvFZeW63sj+nVrGv^$+q(*z zQ>I~2mxPuxkI-MTTUgbv`u_%t8rTtyW(CMy#Lk-5uVL{&(~~-=9yw>7%#r>UPHBuK zwa{x^Z-|D{m~giQ&Z`uR1f}rDyyi``3#DQ4muax*y1h`NBUmg7GS?ILsH&07LKY}5 zTOcpQ9kFbYwUD;R$xN)LVSVB-y*_EEChS?XStwoH-pca(RpkBE>lXhm(`(lq%W5Os zS!#`6xEnF2hK!DYQX}o{lTL3k3Tgp&B<&O$f`;`URlAB8mOfC@qPW%FCRTC-Iv7gD zJ$WFT26Cw)!jblbi9)+_I5^CyP26?TkT6-?%l^ww$ehK{CS0hM6e{+NKx{-bynAZ3 zYh{#I#R^}##wYv(#<*u=K zWyAppcUMmp#;<8^-CXLw_7o8V>e^ej=DAGxYh5R-a_w(p8Vc*z+1tLt%rj<@*+L^1 z=O$jf+LdU&K2PRFD;s2GVqQB6?aFE=iz+yK>dlna`|yUTLcfh|o0!q4#LI?05RI)g zVdHX{J8jAybr-A!T`+uP6|b7OSF}~Mvx&M?9lzOI=0FQ*sW53=w9JX+XtC!;lOxlH|b51dI@x z;G@MyTUxE}D%MA>?^dnWM}6MbtM=AbZS7SqC|bR>T6=9Rt;PR$t$k+ZB*EVH_xt_- z|KI2H`vtPkUXQ)^+H0@9_TFosnJhiyYvdv#1HYerM)VM#{4-zDzn}Dj9IE|ci0=2j zSoe^&Y;0XJmhS0}rMhFy%UfezR!4GTQIUU)UG<8E zL`yUmoqfl*b4}BJ8XXI0lZb8xlc^a0@D!dg{O-puQHkVrB{w5je))-MM8NZpi`HJq zto*<5v_VGU=SI}KoHP50I$06Jel!XKcjuEttA^434kAY6b&$P)7dzmI+2pxdz<<68 z324$+TW&z|6C+wXF`Y@b0}|QxBf}lN6~B(3`53N=>13w`MwXSx*1>lL$S3oOPRIjx z=4JGse^@r1+%)4XqHI!X5d1%zL?`Jq3eDqxm@=b@{C>Usuom!)50RM$cC&R9kPW0) zv{f9|f?mM~9QYA!BMxgtzVVG@TCfs-`C&b3gbm>j$)(QMxmG|>={(d8&*;cYOTppthS`Bwgd%z;lX11!~WszomnVoTJ`8qG|))l zz&Ik-)!m}^e@0imh5A&t{}Ejc@AN;UD@Uho**%cmW6RzF*)e6pqz62Hv-WRm7V>0` zs2-6Y&yo0r4G;=Yq`F!AS6Mc^D0geFhq>#wq#2 zEKjs3Toj)IPR!(JC>$Cepm34RyCB_&(F!ykpOeuG@k$T7qQ&9j@#Xny7+W4c7Ig#~ zON#Zw<;8{O2nJO($)F0T1OoxTF%^7%JwA=uJ+UuGiLB$0r}Q+mm6?vLCq4sdki4bV zOk|46qsENyv8sGw!nNKMGHO4tts1akr~Xeew}oF0Yu$qU0xSqqRHHlpwn zv$lPP#Wrk!3$D#)H7g26W!CXb*%$DR_joNhAV0lsMll1z!EvNv9n)dWuNfK~CKQS} zaTjz3E5#g4_p$g3QG`Wek6907zE6zgIbUoe<0pcX7e-z5>5nf0JV@E4K~rftYNA7> z)?zS3J>^mFj7z!ouqW)bS{R4!TPGo7S|=kF5xA4%6Xc4rp;ZtVmVg9@9}R|s<6YEv zA~lY1pjkQ?8B@k%OaZZ(xxo=+uB9mKl@yBs8e`XERz>IwuVk!-m7U`v><*tYxaam`8(BO5&v9|ch=Za&| z_EY9;q)`J#KI2}llDqZ=psY3|@wH53M>KgbAx3m^e>}ldw)!x6Tqw7W%e5ncBUziT z2oB$GC6VNe9>aBlIheej3*}K80I@S*bATBbg9z3}=0%6?+2XQNKwu1c9?ZcQsvfy# zJPRh$ODn>L^!^-hHF(2@-F;-F|K-u(j9tv>4F`vI+_o)r#U>5v3fr396(`y5ijB&3 zh0PCLap$XILcS|O*dt6FPH2C50? z;@GtM<2^`tCa{;Oh4@%3fOWM%tkLQ|NE9r6;a=e zDj16y^}{RzFbj60FpEG8TF#q=A7)sounX>>?Pe&`2RHy- z?_|8E!up~-clP694M@J+!ps7#+&W*LwezeCIHP-vIEKv(HnxZ^3;IJh1-KAw)>la-dnK?yz}{Ze0P$&@Cv(AHNcbbrljU z&Mxa}&hX~y8qVa`2KQG|n0HYAg!{1)K>HY`Yr#?EF_j2H>c1Yo6yuW<)Vr;CPUnY|96+m0LG~j~6!U+sKq1)^d9o zXPK(70fw8wV0ZQwWL2}+*I=lyck)=b0*T&X8Je|3EfvLZjK$+1esq#aaNdMX0{pm3 znGySMJ|bhpPs`kf!hy_pkOoZ|^NKZ5qY-;Q6QefRp1g+J6E9X9MuXYHM)_glRh<#zniPC$2g47aIj0wc?K7RDbnWBl2f_)XiHnB~fum^*I=S~(N5 zLOBz&QaKYd?@TaD*qH=8=pG^i*tPR1sk~^$hme9iKIsliZRNd+%ttUj2L>baT{OaG z2aY?qy*rT*;5fX3$s2NXS9a^GD03I{V)%C6&7AizXV@QhTld;I!@3W-5ffb%je2d7 z^*u(rF__=yOeiOW@?c^|yt=boYU+A0cRkkqfLXt6a&cl5T6lnK(4E|2w>xBn-1gWI z45J8Ukpv&)g&ofN40{5cfn5Y!<8W4(%KbA2SSz|I>vq6XShroWdW%8YMp6;PTHQE- z6cbwJ_1tAY;|~Im$?E3)KsEXS!$b!iRYDACZ^GkVaf>FD=>;S9ZGKbFE$T4kSzR#S zGSILwA2(W$|A2c6xji&hXQ3&qr}ttPfujl;dab|D8g^D8bJ$E_6f-{rslJ~n)+1bf=21peSn#BNsxP-5muHM41=f!^A22=E6Ua1V zoSH%vq>=R#!NlgDP)rug z4vnh(zp8xyH?Jb=dCpre2P5W>HxIDd*qefmRg_umAQcIn9fO!BtiSiMp8&jpqF z1s-;Rmj#oq;{vY;&#V6c&o71ZSBmpBJnCcpmz_!0uLTpsaDLJHcSrv9TprqeL*-$F zmDWB7{y!vNX6?712l#2dDNyDuJnGA=gEsALp}iweh4mYLB7S4Ni%f&=?Q>z6CH6B9 ztzbtP&YXk6^PBPaz|c1eR8#MZ@x#?u%a5|Y8h-3xQiM22)2M*>Z&6~L#N4>9DAxtY z%5}ZZb&cU-dS3%STz&QYDC;|lA3KEPmH}Ju;zPPg^@zp%7Yg%<77%<({9^`}FlhaeTOS9xt0s9x zLuD*Kxs)K{HXy7?Zy*eZN%kkO$3H<5@XW;AgU8vB#kK}I{x(&uj z%?Er@Bl*OC!XHwVjEgJd2O)k8rUxQ+0pxE1u?m+GDz5LLt>CQ&Zzc#L7Wlp*JO>LX zbsSO3fSCz_y${Y~xWFFsu!(qwKNCh$YDJJXnA@4viXxFnztT$&WPm5P_2Mrt!j9Io zwd1?yh%KvalS>W?*u6~nw|`1sad_Frs2e*MIY;u??1l_bO*oSlUFm%jF|tYz0c@1& z$zu!T{TzWL@*x5h`6j$%X3EgVJ}BN8CK)RRdopvdVwlw`Ma}>cUY*!8o@%DjiYdIbbuP~)^`W4%|SFxy`Z z*JgJ!*f`Fi_rKH0LCSx@%-~ki-&c!dcvqqP7zl%v&#V?)d_nnq&iyH5s}tRi2B}_6 zCJPZ3HC@MW2Ggn@PvcUaS5^a~6s9~r7J!9aNe;8~Xhw`1ifCj+W<1h*)0)6Qz?ND? zz$OCKFmzZDSUCpx_*$$65}Au~>`PF+K&h}-4#P}x@Usn``}R2chBYOe!CE1DpUf?1 zKEI+s15rM z=CY|Bb@!S zQH~A{!l)hsCBw)9sKb?-dkBck+K5edu9FhikkK9L&?|~?dYgg1;B-}k>%N(s^&yC$ z#+w7|IKCA%`uQ#pH<|tkzs9Wd9xjL1$jv%m{_5GDcQ5lk(w=v2ItBU}BRV^tb(Wcp zG-u&+kk1<-Vr004m?!#w?UxwOO&T+AQp;oGw`f&vd19N5O(Gmr^qwY$_%R{UumtjpQp+*zY<%g30!U=)F@HX zHTLridGawzv(Dta>B%5e;@Ifn_nY1t$h;H^%D z>ae;vQ{*$ZPe&E?6Gk+caJq0yW~LjI`l!*z1Vkh(W<;oGGe6bcL4L+gxJ>l|feBC> zJXV^S^z9)Ojhf|%O_&i+JR>C)))qMnlthZ!ZEhRi1AK+GRn@}BtU;xiYHdT(FdTiZ zD#Ilt* z8lLgbka-z0U{HjTtC<+{0P1aFA0n<_%5Xn zYXH=t!fM#8>R6Q*u2;TH2g`XED7k-LdzcqKvtIARx!I_9^;%ghJ=@!_{{IKa9Q$`Qh%nh#x5QC3(90zKkaZl;d;vK}Sckj?~V; zZ{Mw$_T7pd4)r*~p_qre*n@g%hTN@4QNB6b$z(WI*an_EccV3HK=O7`uN_JC<|3(b zbIc*cc4qT=)l*F#UwItoJyXJ{7o#fYp4UsIm<8xcL4Frl0wbcn#zvC8C5KE+wf{!A z)Ta(89>hgGU_?PXs9jrr*kuPkC;W@Yx&*|abO=5`b;xIT$hY%S5LJhKc85SaUnC#Y zAr{%^>%D!&XTQaxHUqs7H{E1||U*wf?21ThA`BXDeAnH;Bjh1-?E zOe(PJ=1zr+a|ba`xH#9(5SDQS>=DjQqF%&D`JUyQxJxRHdTdXgUmhww5jZBxi^>|p zc&S2G%&^D4xy)P!eAJ8g3TB*(gEwVP@lKg z_N_f%5F-FS9Yw?NfD!Afpj%%<65qqQ6{u}UX|-i250{T`Lz#4=s}QysT*22-!Azkn2HxrfNN`%G2(Ryno>P#OCS>@FgB@hS&A-Dy8?*c8;44fT~ptPyB(nf|yveI-g z4egT~ieDqfV)x~96<8In8b1%^<@K}wl?tjxud4r!f~uVgstMQpk0=Q5%tWm#p)qJ6 z0$aw-AU3I20RgKU6&^J!`!~F_;I*y>2KSS=Sd=(E7CF3uG}J%fnmg|wa1D_24?dJP zxe2~Gv;Bkp!cNXVz?=Mk=O6eMhW*2dFgUy{ayKl5?_R|}IPPBMx>{Z{!Udb{A7rWz zyP&oGV5s09Lb-nC?qT!(0siKH%s*gQuHiwz>4x6|<8{U$?3M_tV=gWS?}zoaLJ6j$e;*aN~#v zm#1f9>bYc+$G-)1<_09^ao7+C2o*Mz3=kzbgk*p~I8<>+hS$j%Xk&uN&o7>t6YA4< zpn5&t0>B@k^aDK4Z$t}v{A8fwdy#E)r{4xzB31dzCDb0t)h-zz5ZqVINd^c+=oLaT zK$PVWcE-M`0tFpctdao&(NBet3=jx!DuiT!K>SW2B%^eQeT4iVd|wW-p8gP$_i+_^ z?4bZr9~ZW>Tr7VH=8CUj52k0(8B@w)-f0|9B z087L1Gr(a%5vI;(2-CU=nrxtbW&^Ge_xbdA0!S&Ik1f~Xy_nIMB3vK#d#YW#J~0?G z4z)o>Da+dW%~B-1exd>;O5Tw)WeGK~yll&hAupQ$TzR8r{JUu2(gomG z0)1{XGC3z^Hlj2A2-mV%*`|p$xUFtHCvjW2;b!sgM1tArH!7^VxD$=7ieTLhD2VO! zJ$S|tW9}CZQQ&J#Z$bBL=6k_(DcqrE!}kG>e-DX0$qQ2O9mmsaTGt!( z#)TLYw1X2ALX$=u6V0@~j~W6vzTA)Jg!y`TygbXr)Ro%N0XS52B_%*gTq1jd5OGrIZSO--sf;_ONP3YWKx|fHJhNbTB&p z5M$Llwfw%&SHDRkcsxyq#`%8iutqdR`ikA0>Z^N(4@h(uHf-24LGlvUSFbJvDSZIy z%{+`&&cmGtTq;DC0+`8W{D<5RobwFO7%N5Pedj*RINb8-+l9KFq0A%9jZ=kPg)r;e z8Btzt*9sqE#vcXW1b7B%hcS&Mj_R$)K#r~b&%EfPz)>#2g!tni$#50nJSM}{EW^c} z)_r|g@eOAAuHhJdPzxp z*o5yjGf%KgPa?5ZU7;>OrFZr%sNFk0xd-+g6Ls?#OS`2?xuv!?mGVS-ybSUb*ST-p zKfvsXKh3<5GWSj$`b}6A2`-7}yxjW@wi$zZfrlUFwfPwom!7#IgcrG<1sJr^Uh7`~ zvHyW56-K-)1IzNu24CTA42JZ_Ao$d64XUoPegYU?ycB*-5#i6CQ#cma_Nx`Nw1Z07 zt_w4m&+>-E`lc!w;cAT|$jIoyGNQkRDfcASzpADpMQEMTKI{2HIiK!+SzvIMIegcQAXg2%aBp9z)H@#@ixEPp_ZQliF*g5aPMFYx_8jG z{~I`b*3XcN`dIgj!Y1n_g`;sQo-mW}YHTq?#ZLuwo_}OLt_Aft)t8^6yxkXmJM9+$ zvGdipzl@AJ@_B6l3m6;qDZeX!5h8}l}$6XIJH{F*wK_tHMhgX#J5Se#MXQ!&wK^fU%%da&@-FAPOM% zCm5lsVbr%XRq?C1tl}xR-bMlI9VGF!7-GceYS11Rcaq>9?8_K9e+Th5T<%>YJzFqg z`%XqNzAopd^&VHu#^1Muo38zvXtQyquJ2%kOol$3zoi5}`(`p zZkMY$fD1K=Lge| zFh70=^xv5ue}JCU{NVCK<_At?JU`%!cz!TLVSao7$T>eg1e}{6JAMx!{t=SgB-w#> zY)o#Z{1=ml&XkWCsb9DpiQ-+cT%@hZ5$V~YQYUG*1PsdF8D>sdq!g_67fSJMwHB&xC zj!W>fuzK|U4It(W7s$;SH7KQh%xTvkbLL(>&LfXG!?il+%wa|kn=_c##J|ot!*$!` zhs+rkBsXWK=-U~*l$U+={u<94%qq+qu0hQkHrc|wk(y=Rd%SaJ?R9E&>{RFkU(3fPMkFH*h$Au zhG6_gR439n_Mu1ZB)S~Wd&eT*noXy=H?a8ByiC~WsMW31+^Rm4ebl1WEqrcX1vrL7 z<54Gc@&}RRM~6#1t@goyF9h%}+OhnS6}SE%etBtZ$L}Th-Hl&nft2E}&Ox3E0OohO**>MF`iS~4=w;HQ?dr$&e9hoe8xP0DB$Wg%Ko_kkXw z@djglsrg(X`bOCYdW3!@`PY#T(Wl@KQL2K|ODdVuh;rGBfidZfk({3>)TNUCS<>%F z`ipYrd2>WX8J~l=_0D>(=b|c3?=U%ChdNPPklUT3`&=en5#Tz1>gBRODCYdTs3%0l zBRCx~lG8~MPCpg-&l2j_C0!~KPOaiz--$k&^hgowFcW;O+N3eiVTd}$exUp5`H@eJ z_S2+Fmg+T;=TGRbNvDRGe=j&qx+}UQX40h^r$ImW;=O zX>={tst_F`_{Rm`C+XuJ<}4MRc%+rDhPZ~mlrsLmMsfN#;T(rPnzTvhwyr{3emVp> zZ4jTfTua&+$Qp@$+>*u~aqH#KHB&WZWetiR&5PfG1 z^PDBUTQ!<>RpjIJgQ};|-{(-jNt*BJSctwVt+dCu{&^zj>(ZA)`UiSBy;{`dDW{di zoL*Jc07W6*ymB)NJ^a26Ewm@H5mu8E?&_1VGn?`G zXv^q)NcOV(O{ABZ*9GyOY588HE6Z*{dX#%B&a`pQiO8Qimh%sdydC+@qPvma6z25T zK~5_LbDj75$iEtU6zL+9`9E}D>CtGL$@M=jt+*wBll#ZusWM+c`sV2ExM%2c{~PjC zg!%ehIyq^m9p7 z?{1(L)Kj7_Lwb_liZrXAj&!$vHqsmPbx7~jHz57K&h4_6Sca`g|NoI;MGVG8duT($ zXy{}|oq`4c=`>@sf|fUoEppL!1o|dTZx~->(3i(B?VA*=n^xqZNBJrP&?95s^?T{d z*n==s7Mxe)r(Yedpq+u1q9VEg`+Y@QRa8vBZ&c7HHEl%^+CN@FTgRk|%BYzq4{AAF zdvVc7x{-rGfX)b9S2T*Md0PQ!t>?O;(bO!^9$Hp&S5X7qiC`x8=(Nc5MdRsA1Qm%c z8gVbyw~5p-2)Y@88PMp)s#l68((eTtpr6&fUUUr2##x_fzo|2^hk00_0lK*EH${`^ zQyUs6`9slET7qK-(E#-q{mOkDJt5FVbgA#JMKkDC1$mG2T}!iQpA9wpN&vl^qm7+H zI9%ZfhW5NCj-Bp0p8PhH9;=0BQ^bbOAL{{BZ9@yo{^XuRQ*EfsJ%#4b5*s4Vm4G^I zs1$ZPhq`U(j$kM>m%eO6PXd}pH`!1o916{+M{Q^~peB0NhUOH7LMPDgZKxH{0`ki) z^dj#EsHK_4*pLp|LYiwsTfAkV6X|ptx)9JJO50FXI2Kw=I}}78cJ{q-gJtxH@zi{Ui_F z5junT(t+#zbVLcAO>y2{11hdG=?k>qhMH?14}F2k5Eo%ubM4PV?X<*(dOh!iHc}Ar z6Q-H9AB0jg{v-ue*8VYc4&9Fc1=C{2-$I+{6M^tPZ_)FvZYo*Av;kUB@->e|O#)ry zy}N1()}a;~dZ=o;Ycri7kEpC|uHv74lOXsw#QjwUyimtUwde`ZmH~iIf1EWS6_Qeznm{Gi=(U^|M{Q)MV2RnyZcTsKuuJ!JO?nk5(xNtp|&@ z)6F*LWX!)E^n!x4pVcu`y-Xz2UJNj_)`s2*n1H?}&_%HMXz>o3zg%&?Wkien=yHMf zjCioRx_BquD3I#yPP$W|^KpiXf!45s%PCqvO%mvUrZPbDjvc0hX?myZ1u5lC?k zP_<2C&H*_W<~RrFM4Sq9b?%}S0-aAM)7Q*h^sa+;K7DM{vY?$$9jglEE}+cr^ilIbyH-Kc`o(mUP2<)trh9GL zU#eCDI_50Z0=IrKvKlQd<@CEFIb9j$w6zQ|EIQxdZ-nY9VN6I)=sy6bPN!q#&GCeS z%=1(gW8N2PC(7oinuDt9JWJ|S{0hURT*Rde@{ZzjeFk@qxf=e4J+X`C#F!dIn!~Gl zI&pG0=zW|JbNFuy|8V@V(r!nD`I+jLQYO8EJa&Ny6zFt3sMz(2HdOj==$B64_OlFk zVAo>MA%|=wVdhUmZ#t>Gi5hfzQ1D7`|7%n31@9mosmNa;X}8FxQs&X^v2*5`s?*uR zsp=Vh6xSBOnCeoq3%l3?hWVWs)w+(IE8~A^mXsLSt(KIyu}{rO_4lcRR`0i-4L64EjF3L*BmJ{SAsIu}!0 zT)ZBv1bzxW-+K0#dB~54pIYfU8y=#Xu7ayhxUPan7$em2g4u(zC3H2?E%Y$bbLl0) zq#%z;DSF=AgVc&#NeNl8Uvu%g-Ai9CeHCf(*k98D*L7pxM4s2zskEwO3es@NJbcdf zVefD0BiHoNAJKcR>l+TyY@yB;>K?kN)YJ~S&JGuA*m0q)`)E;cx^^GES+C*yPFSjk zftjm4jF0au(pJ$krKf2=V@lv`q?gCqQHn7KTn|T5NLj)Iu2i@i_*-LHr0*K%A^q1e zSK?bBIX&QdN;tn)w->D}3f_jA({*=hXGuNJ(UqmwqTRQ!^LUP)^E{$GM{7!-1eMDk za=j6GR(px6#y*d>ipTy!I{*n^1Lns1Yv}-8S&wm{RrP3v&W8NY(QTzA^q%zVBT4Iw zvY?^QG#(9%MEY)QjP8?B?vU174Bok<^k7C1ybi^ttRrg zeyMO?Dwvcpee?@@%0R#LI_<2QH}uN|e}VAyf@-+9&LUS<@L6ehrpP~2d)U?BnyIBn zjCbuet_d8A{9=PKBSuX}`sL_sq}L$btKIEta((2|VId#67K~ox+5`L9;<}C!CA(ZV zqvmhAR%*p#uScFS*P)f$z*7aDJ;qAUJ+3YENW(*}y~h0DRvj8 z^fip8iS*DI4e4DaoIWdQ1lGHk?kuZxf238{O?Mp-&I3kipo9(>#VC8gcp5c>8jQK$ z6Y57o{Ya=EX*Y}-i?Zh<-AjKco9I3yJckUP*N2R+M>suC(px3H2JM0>>2g2k+mY_2 zXRD{VH8;ztxqpJPn!8W%&y>wZ&9%|#uDvupxWHZMS`=J~bV2=TNNIUekV6x8FU}xOU8c0?()CL#|iCe?@v`R5Qcw@8E-$ zVfQymqUKET+Xw8FXUYMc$Niv;d!6x?ah&I6XN4vMzKVb%iGbor+$-fT|-{7g%cr7T^*dJEQ9(RmT$7o#t zcsqZYC+QiZ@g94;)UZ-yUa7OpD@Ep&knMcWWSvh=DSi6r-N^F^t5Tm;awYPAsJss8 zKBQ};>{My7&Um2c4$o|jeRZ?6)hz8cYaCNsVq-Y6)~xX^zRtL*=wslyU$Zrqf0f9; zN+jPRHTT*n%T{OXubJcBEg05egKM|`x~tv0ho+A{2YB{HyLF$@?oGiCOAtS^e4Bw^ zQnwB1{!xA2neNa0$Aagg5hx|~G`XjbzQEh!{)O)nq;o1S@%Ex-jrO4LUkA@0{0*)> z`hqBS(qf-`^m}4g0e^Jq4M=B7x-WV&^3R5+yIR~E;r&|NTP6L;sM)T`DD}MSYH8~% zTT3t0+~?gw^_Ba*2cVO8kbY)h_G#ZkD+jc9#>__kWl4V%=KRrPZvf9PFcT|9hn3pz zpp8oLDwQ_=Ih1`Et^D4o)XpsX9r#}@{TQvhKjN>*FTxIIjr;3Wy6We^}V_lzfYesdWHW{YhF*L~)How)2C@eEriQ_>K4ow$bA>E6-jX_w0=)EWP3 zoEYfUGNX^vFV{HgeY1Ag=&W|L_UwptfuQ7rlD|{i@ps>ZZ2YJ_e*|$F=N(B z`h=wWC8ZL^$0VIE=~_wqCEYJ6g@s4b`I4@cbbxN4J8=Fg*ZMJMzM=o8Ug}!z`kAZ4 zxWKsFc)|F0V~P75_t)G{x<7QA_zIF@v(`M-Oqh3=zcl}1&h(@`KlT{j3Eq|7XT2d` zwXfIrb>DybO8j&DtNmI3PXA^8SNszKsld5`?*%>%%nF_tbdg3xuLoa2dUKf5FBNe* zLDFw|O=1qjiV(xW*EHk2U5qm=pSJP6_r7_>L??}1fb>ga7a?saTZ(kLn=vCiry#8j zpNjOkD#o1TKNIO~4P0uUl)WOr`Nus8q#H^$Al>8Igw%*K{=@n$NdIJVI!)?4^Qa!= zuRDr4k3Nb&Ji~b}&e4bo;j=e7{*4rgtB`uB0g{*CGr@SZ59e+-dQyWF-`s?rlpq>_ zH(2p4B_7~wk$Ul_rWbg8=Q;2(cnB|zM~tBapSHoxe(MuA&=tt9K&sP9L?bl3MO=w|E4+$^b8!{&t05h3 zdXXaP2Z=OVgH)$8(6UBnBGvJoH%B3VHc}n85cSBnNxu{5rA|B1C!PAy1D(DEso~w| z81&**@ObH0;PKJx$oueG>{!VDCvXuL)*sZL z(cjX~bzS1BHf9*}jHOtK-!UxrM01(>1v6`Y(fplR>zU*^#k0oqZO@N9uX*0~jPc&? zUF194*Xeu7cfJ1}|GdCyfinVE1#Sr38hA4BTHr5%n&7;k(a-TD=g-e@x9N5u&JSLV z_!Dy(WZA5j2A`4}(80J{5T6`c_URbo2Di{8FFOrx!$e$bXxXC?592qZ*dkrfJr-L0 z2JjoiZxMb&_$|h734Zyfl-}3*Il_L9w4X8inXsSj_A_NaH`&iF`)S$F0X$#P+T8!H z4Y&_zH@T12UovO9ZgOvOJ>~zRYb5t~_S~6mZIjw2(d>!sSt~tvoej-xZ)CvOmBC)R7A5+OQ*8Qp~xI##>v^#(b3wo zF4LY)ZO*2wZo7O}TQ_Q4Wi7C}v#IW$1&rOv_H1i1 zy)~Jh+acU@GwRVJ4{m*NDud4Uo|4$soX93lO?37oGt7M4q_wDhXfLNtZaX4=>a@?n z&lLQsL}t?ht7~&-k~`FD^`zUAsD4>bXJ=wvCudt0cK388(>BEXK#Ed0zciWMXmy;> zlj`h9ra@S^HQAkAoapZ86p&e(wk4onCg!R_w-{Q24&pg`ZdY5|iK*^HXJ_wZTHVr} zJ$6b#d(hST)P|mPLKF`Df!5X5k<2Diof+0NU|XN8oGEm2vR8DqB9Th3okGp2b}pGn z_X3#B1C?22v3j}ev4wUN*d)wrflnthJ)K!;VJbw#=-|NOd-Ntd9GnCDJ-e69fi6Z!2YIXEw(r?RO;XCBF-G$*&F+LPeOIDw8FHr1WUCc1@zxp^|#ymofsxtn1WNtt_~ ztg;*|D-tY<1JRmIr1P*dkE%~eZoxdrqNe0FyT}4qj%|m%HmX|*uqc^j<*n-7oD=7i zS9H!z5TlYJDoHP%C=Yb*3^K@s{nvZk~y%cH8a& zb+xr*3J|yKgk=V{D0?xwc36B6y4(B_G$WG5&~ zQ{5|IY*xo`5=JcBgQ_}`!)ePBT}Qye%vUFlOj?yXQUTWQ@XBQbhND-fQ^S!9(`hUo z!@9-ISv}b!5b&p*hGSP}lIfNX7;GxrJB-?zVrAwnXZdD0&TgJo$F{X$J)ow|oB1Jd zJC=(?s`~`12N)i*yne+B3J}vyNrIgh4K)J7F%;L;mL9^@l38R~9kime2lfWXnoO@x zv?pl+W;@K>p0i~86B*^qiB>vKI3aCq%gD-@pEi^|!h)eZ3I<;?1zQj)9Uyn4HQC;S z^|lx0ousA7Oa}gE5RPr1XK}%a<*G?zb=@E&c0$W~x@7P((1;+LlUT%(3(w79SrG*0 zlkFtbT!aCwN+*?&cFRiBN(!ETrzE;JBq`C+(FXgpCEqBxbh69ZnjD7i8ir}%wihJY zH>!pTP)qk#Yg3Zg<};fy46Aq|Qw!U*on6@7jNk|J_G1J5aWxbviBR#{7|b}UlNxyoAIox)ZsW5Zm9 zy};!wz+k4cd1wI!wL96lB()y<9=ola6|TZ4bq}IoDmu4)d78Z*pV9+ofJ)#=*QL5K zq_POJ^(2?V4j2Ws4T3XHqVyP6pn9Cke#1#@Nh<5MCzoMY+2C zLXpSX5)CJG9f4V$Q;tBuq?Dbe+Rv!$R@n@%vJ}J(rf?LHZ7THCkzX3AIn7hHwP*8Y zD?NyywsHkVSQZaV0igzmM`b9^F<=E!Qznz_TG!dTDwTDX7&b`@C0ejhCNQ~VlE1=jtjcd?`yD)wsTCUpj6z|u z;zY%}0cn0|;@sReCUxFW)XJV@PqNj4UuN0<3H1#lp3t)%r;`FZ&JtZcT@Igyv#n5N z|Cmi|5KX}Sslm&6RdsN~UMYvLl{?Y46Q-=P)Q9$vS)4rA&hsKCALWz&=bZzlfo#2U zer!0w;WhHi9rkt%yD@H1_9_z5NS!C5C9|v2*acxXK`9Hzq?|IH8sfd3ee|LAm=3(} z5I$M@1mb~IYeAmq0N2S5Hcw##&cf{o0!rikcSeBCat4(w*SI9vy}@n@<9kAH77GA> z#&IzINH{Tgn+^Ukb6N`Zh*DIRYscwCdcjXw?s5pnN|r;}(~3dySbW%BhhrIG^P@7X zSuCFH4;QDf&SHfHncESI#+G)Iv{rz`#s!akiHyQh?COO{+;$$~v(8|QY-c&vmghl> z2$TrOZF0m%YAPIA<=}xf1>Ks!2??4Ugv2~$OCLs4j><7_`P9&9FC9%C9SG87TCAq@ z28EZ+KzlooOOji`$1r!H$$?8a@+@y|*QZLbcJ1nyuUN1;p>{G8JAiG;a8L|&a?oyd zx>Gca5tbMq!`zw^?nq_Y;Uv<%Ic6*?UBV?9h%e8j7Q!vqH7TfT5Ck4pct#l2`KAD? zJrs6Wh*~7n4n=L*IABMxn=JMLylE3y^;P^Bq6Hb{(PW-GCmeQH1^*;ehxdU2@m>y| zi_fvSJ^!FJM!Ki=3&ZhBnS=2;g$>5CDsuxfn9|kO?p)LI9xl1w4vCQpAQoa|AD1D{`n95|Uj(y#+r@F-4X-dQ=2P7`pThZuu{l0T|D z;?54Ta*ju)IY#x!47t%dGPQY7baYso>|E7m$U$-pj&dXpniBPM&|KRvQchXJ2y%An z#;!OQImKa3ZHTF5MM?}zEe;vpt^U+7j$@$ z0?s}%E=hIc9nQ{VB8{%7Gv#7LjFJpWWY~seu^e_oft8q-ar?f4u&U;=v*%{p+SaLi z4786}b($Q$Pc|GX?1!N2Ad&-%RfhxF>_WlA@i>?nAIIz)k=#x)zk|x*^G8EDTj#KY zmIkMr9>nF4vf!ZyaY*22ak3N9NIs|MmNgr*D4DgdXk>VB?7;q??6#pS8zD93@*GN} z7PUO{R4QC&sb!HPtul%dbEPZ}McbBlD3y4tuMtV=XHLeKVvw4F{V{v+Nn#)NO6+7Bf^Z3)#}$-r0kwjfz4kIa(dDqg+=w z^4Pk#X>x07LwB;nVR(w6sV8gkE^%{qb$2%1!}m+WcvdO=iexhVd9;>Hre_GXX~TxJ z#G6z@t(%kW5_!!ZZWW$2;Xvhv(1B7qbc7vpYR%fwL7ZD1?6Mx@&cuo}x7Io@lxeHP zYiN0TL!uk!)C>ar_$HSmn*?ilX=3wc3}Xh@s&-UM1^{bZCTH4e=Q_+i35!EfLwu8v z#Tnsngji#tT4`Iz32x;`lK>~t!a**B>y)W&ZP|_ZPJ8Y(2b3ki4)30!?i`d6&|XFI zN92jTL@4#(q8-*MgVU_8mkF04U8}RWXoio2FPE^UfQI7)#a#La?Gf zJQkjtReDg4D7RkZZb94C@}asWD+zNT5P@it?F88KDcN#9)1k@yQUG^55qpAUmQKSP z2V`w-YvHqIyUODRTICm>3xtZ%gB$xL=Lx~auwn-7&}>0$a={dlCP z4T@)y>A_PRFZjq2cm==OBiP(b;Sv&UEgUH@n0zeFb4X)Y__8t&bN5IK@|e7nEuav7 za_;8`5$q6)z428f`)WDYhFa8A07_juV~VDg;482b5kVv)uj8oqcVsWXZ|5L7C=Z7l zmsL=Z?0OdCWf)OHb9bf{uNUND-nZjYU8;BHb4L^ve{fRduAI*WIi#9o%Ww$~SF<%K znVkD(Br9_jXIK!)$c-Qtu?~S2VPBhjZG$hD@RnE(4=34^h9FRKWfmBc9#{H0C!g1DX8Yx@ZZ(uv}OLrxRSQ<)IdiljUA($dxT1xaL6| zDjK#ty|8OD+Cn59@g{84kjIa28Cm#7>m+igAWcvQUNMZ(4!pNYfz$Bq4k>(2AJmG) z$YI9;?le9dn&+(?jCYi%X+^m%)Yy$uDZH(|fHn%Wf$NL5QV*>|jqTFLI>vdLzzeC0 zT7gYaCw|j-LDvZ_2WGj*+l)H9PztAggTkf{@2&1B)bGurXiZWifgd|%5k_}7VYO6rZsv8HC>bF(w>JBg_580eMt*ACiN zNXxX)%mGu7)53m)V?`m^`Xx za-WI!rfEwH+TMyfS?k;~>oNm=mWeeOqxHaX|6{0QqhOR~)%Z^YJ}&cUa48-c)>98^ znFXG_W_)K-`=%LRIGeO%V!-#>|0ZCZmg3Fp4v}IpEM%7Gd=|=Qz!$?e*PTgvo0Qx% z*y29la*xBek4=N^PKIT#ge*LIxGNCZ@Qp9X9V4=@N58n|-Js)D0fAKiDDc-yUTvMc zrv9?=kYL|eZ)xYeW}S%MrDPmfYixxvhaS1-tUIoa+etx-Im==EHbAV+n9y0jY(H!- z9a2tdOX+PgEQ)H{gxW3jY!FK?SRv82TYuCu;Xlq?cGcZuW~{jRlrl16_;j%gN^>I< z4l@|?ltubq(;_7%qxuiuJp?HaMOx6C5HdpY z;u8)!%GJ2>!G=(cTOa8uDvPWJ! zCnCEv^m4Tp+2uwr@Ru;rVtAL2+ufx>u{t`ZhrB>*I;%$mPYfkcK9Y>2bgrw*8%gGs z5!n(+x*<_0WZ;`arI9XFWlAGSsl5nVazp$`D#RT|T`8165w1Rx8sjOC^hA0ieUbiw zNdJZS@0HqBs)N?QTQ7^5k^aXbyUHTFDt(dOl1N_(*nRjMLu6MS{!0$!ch%Y5tLLT% zra=ih9-`=hX+A~lzaBOb>9K*A{1C$)dElX7mc7Oujk#5mIz+M?^u*9$|88Fi#=QRu z9m&-gKn#m0aDt?hIqiSWuKj9(UbLlRc_O=}g&?kuC;m&3nbKrFsS2G{p!)CS za&x#ttTW^w02Fh5q$kHA%4Cz#!n>MWW~7CuiOz|P?!Y0osuq}2ohOQC|LvUYy z3P)95HcVZIg~8OSeVAgmAQNfv#&lRiNmTRaP%_n`Fb?SnD(kkrM4g;+Fu6=GYqa0Jx@Hu){8}|yf_aKR8NgRJVtUsAhn~PjJZ>ITOdJ`5IXo$0 z!)!3sk%2NFTgXhP*fgVBmV>y}%*E%LAt1z}_et7}yJ!WH%7mwWpfRC?^ZtJv-Wg%90Ych}Eb<>|zwT zq49yrGLJhl9^A}_Hf`phG-3l|Jg^Eb=&Uq6P|wA=2BC?Wk0Kr)Cc&r66Z8=ttOS!( zaYrlCJ4OfcZH=O!>K#{!na^*1|}SFERs@8)gn`JX?7ap6yDx{U1qf z_G92|1zm;*=E6sqPFi(|%!BG8RwF!-Dm%(!6d-6MA$Vkxk_m`WB;dTG8ulYLSz(iT ztm4Il!xw9mMdo8jbknDsdIV;GMdEt?-y7+vfvbZd)I@2nrI)pD|g)#T=S^7kLB(5j8d%E$m#n2;~h z|DJ609QBTodUri1wk@s@+a-7jRLiamb2^5l2B^I`M~LB9u1!1|Ye76|u5ADAT93!} zs{OJ^N0o!&T5}aoLd7zgQHL{$5?91+vGY(8OdTSDcn0=$t6eZ;%!oC-3b2_*b$m|J zi;XmvNZYMEFf!)h`gURWcQw2@hUGEz;>o;siR@y-1W~q0uOK51tB%);*<#Z8%&zHW zNAmzD4|DPuCr={jAK=`xJ`-aku9d+`mkCemfm@yrvAp-rYx`pO75^;nk8Znd_E{f4 z_^zQLP=n8wqWF7QC062hCIi3Y>IG(eK(8 znmG336}4#>9rI3MrHAXQ#F+`Zno&5E;UN_xALKS$feA?HpUCX4Xjr{gadDkP-K;m`qg zu)M^;d4>cWsN_RvO*QYO#6!NqN`U#ue(peI0Dt!p2YJ?3{~sd*11iU}$q#oFQRiP* zoI?23-EkaC-ZPNS1nA|=O5o7Gq|<<`mfS1I`IsAL=Qz&JUJV~^=ATjg9qp_1^3&3Z z&A2Sfzjed!Y;VhG;KMf;<7b*iBPK3exQZ|R@J`ft`@PvYTc=H&gbG5X`M0_4&@W#( zQaQfQPrVW0cy$neeL^F*T!-TiYM_D1_L#Ko`07i?z?rAY;EY^gZSGB{Hf+qsPFvjk)a|h;lcr3bFnP)Z{(~q* zEa2UbzkTzU@Ci?@)zyR7bg>3N)CVs_YpTI64i9To`p$LzZ{PdX_xi7S_wIY%-t(Pz zuDgLL>gR7yUA&jHr7LuRh~g4Gh2NVwqkdT8D1P~?&U-=Ybv-nd8>+liSjc28-EPoPaTcY0Qr_l26pHKE0+uTK5*riXsQ z{j-1G8aF;@Afzq@%B@YYr*ZwGQcfJPeh)7 z9y2~X%=-)V%NWiR&6AYBKbODlb?{F!K>m&qj;x<($8$L%z8;ZS{uv{sR)Na*KN-Y( zol#fjxYyW>N;Sxo1(%BP53gy7@Jzz(fciHTF?={=YR31oYPj3r`1)pPqZd6&07`P@ zpmUun61^PXm$E?aPX^tE;2TxAj$E6c6ZQWG>zagRt5Dae5}nT9OQ8<_OCOW+zl65S z!Ot4wcsJkT@J&LY2mihN_=^Q7f!iqDBIu}V3F_G(wXjw;!!xl4HXv4xI~q(k{7olm zlW)fu&l=}8bNy#XY44wDTaCjC)X5R}9>m(Sj$Zs@<1h)|pTpm2hz+ApI?S`|G)9i6YB4GeLUrVV;TRiX#cNi;Qs-}YUq9d literal 7680 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 E2GORRfdBvi diff --git a/drivers/net5.0/DriverOPCUaClient.pdb b/drivers/net5.0/DriverOPCUaClient.pdb index d1203c47c72653b12b8cb02c396287825bae3751..b523b7b0cc60b8b2df548aec2373328b87b7c234 100644 GIT binary patch literal 25136 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 literal 11048 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 diff --git a/drivers/net5.0/DriverSiemensS7.dll b/drivers/net5.0/DriverSiemensS7.dll index 2311cb708056b3029a7290b19927206f8da46196..ca3eb594f246e1a698dacad70c0ed577018b70c4 100644 GIT binary patch delta 18169 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 diff --git a/drivers/net5.0/DriverSiemensS7.pdb b/drivers/net5.0/DriverSiemensS7.pdb index 9aff9dc85d4117ee122f9995271340ffc1daa0b8..4d16c5a38084db0053b8861cfe7e8e49cc6a9d46 100644 GIT binary patch delta 12289 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 delta 3262 zcmZvf3vd7cLcu9dm6HNk@M1cm7*Cf_lQ3yclD<^QJMcaX0ydHC@mp=OKmUR!u%z7%uupzHS z%a)>wI%M?xWp(p-t*0;d?hlm2bLi4}R`D$7$tj@xYZhaF1iO zxvgn-L(stnVL_lan1QW9ldle3v>mLlPdW~g0mJRW{ehEBG?S#TNTNKqnMp8U_(R+9 zgf@e|q-)9P9Mr*4r`bux-F6T4a%r!XX?fjhcG8iDL!7c)H#=F_V_)+gvm<4XIH#>T z{&6(77Q!8Li;?TQ{=jK#HlK@BspWb}J2&Hid)fj@*e1b^+1_P4H{Ky*OhmD?y9_hN zB;&aI%~G36Z`{-3X3#}2&FX^VyoeK6-nz~0Ccohr{>V0bS@VP-2(>odQe?QBGEliB6+x4G(nbj<3a1O}giA;TSG`L<#3d@cqPn@x_w`rWiounKXK1;DL>a|*?xjLPsXi2a*@@4 z>#n@ZWO-}1@B)n9=k^V&o?&u(@JyVSw4gCL!V55ZpKGW@PZUlU)(Mx8^`9XuszdAJo_RkHGWY z27QC>z>wn<4qpZ@`?Y*MNcW2G)^kuBuluf(OSAFTt$voW(dX9=+bPP$#W2kLJKbY; z8tun^@z*S-;F|AxSxdo9-+f>W@{x8T?8bhVtq@&?@3!kKH3H*&_lzD#7xrB*@5M-z z`tBU>#Yjw}XG}H_^xut1lHXhw+Ne*LPE9U4<`xJTVzpl-V40Fe= zVa~qa9oEu5pl>-o|Mn$(i5-{v)07s&hY61fsTCL3{tY{F~gH}M9!2EQba$Uv{k;(jCgl;|E==pSUE z=OpiwykGK*k`KxTu5bf!7oW%uK9e2%U3PFob^x`7du(Rsh|jfr3r@xeJgX*S6!w$3 z_yt*n6J#0wK~6_H+k6!{%}uLc$^+Dy8kP)g#ZaWfq9fEZb(QF9>RR0-I!e7tw~B6~UZ)R= zPEhaCKee{vPk}B;l1vi%9VQz+ z`E8=xL?=WiL?=ZjMGuG`5Um2TjezMJ5gid-CAyl7FGRIOO%g?Ynhvd^+kBcNAvz)L zyF@2_nrgr30iPy;Ez|onNmz8mCzCs^DltvMs2#)TKpR;SNJx^fO}C`zr04$aU(w#N8bu&|zAduZX=!;k)+e6P1)tTTh3^)m{* zj|vJWWIz79O&d;rP;;oauAuk9ydLfX^X4=zS-oL>%qtJq-{Cj7@Oc9cyXNXg-7Rl! v{K35!R=jm-hyPy$_QQ)thub4#t-Y0AcX(H4df`8{^=f5jX7N?kJ~j9spc8Ca diff --git a/drivers/net5.0/PluginInterface.pdb b/drivers/net5.0/PluginInterface.pdb index 58840f145bff461af3957b3e731b45775d610a94..78af26bd3568174722fa24706d046b41f64c6151 100644 GIT binary patch delta 6587 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 czHuG){a^8K!1=#G$xHu=`}lU({@*OV delta 1681 zcmZuyUrbw79RAL|rO-mUmJP-LrNGQ!8y&DX70?w5W9>vb7$!uQQOaGtv$WVhi)3oM zXy*2`b(dsMMiR3J&6XHR)Q80&@j;FA!Ndm=V|ZAIi-|lCA6#bQcTOqJ#nYVce7}F^ z{LcBEdzzoicV4^Pa{rHwo7ie=Xz^BxPN0g4ilVY7RQP0{SSkl+ETFu%)Yf_9l{Z6|0*{iJ2M5|+p%*I}A{VJLqc`}W?cFC?i5bor~nu|YP z%@2S1%~$=+7jCOku|T!T|*Bp=VD z%tS0Lqw?j&6b$wuTb;57DdjEx3I#nn~)0(kUQ}m4Nk18fVUN2 zQ1}spWh$<~<4$4L8QpIj`KO)U)&vJ_;TQ;Y;x5ahGt9l>w zZR2aYe_L9245N?bF9lA(|F2ZHsdclsrRBRZ#650FVnBaXy73>|2Xg-<*GotvxGk-V z4ob3G0>iSf|ATv#HKwdFO+!DoGQ>h|vUnb%9eapQv@704bmKXN{R)HFl>0xagh_=F zg{Hzch&3n>?f973h_992%S5kp(s%Kp@SzeB_^=b_hz+ zC>LwQHlgvn=Wk({geqz61{%|}SGZVo?#z>uwL=8yimy$CEf`evyE}4!@#|@0nr!&T^ zZ!DY0n6m}~@nqUS(Qb7%9kbqVI$+g%_gE*q-&*^c$DTePiDw^=^1W=N(q=Nj*9T@Y zl8UL6CQ>HSOqHY6-*W7DaV3OP$qe&6H9uzzC9<>I2^eSNRC5-lmom>ADfpt9WU6Ez zG$XM@GMzD_)}5!inntJ3(HmQvMloVE9GHj%;--w0~E&5L%gE?h2G zxg0zvT@{}mJ(KhN?Ci05;Tb9O3gH>iy>PKRY?K@%n%yg^C#z4}+UTOU(bxtDyJq!v zbZItWnH_0s#dqJjb;w=q-g>&_`uipK7n*Ce#?aFGp@+h9b@z&?rBL@5y2D@m@967M JZ+@Y({2!&mKwJO- diff --git a/drivers/net5.0/ref/DriverSiemensS7.dll b/drivers/net5.0/ref/DriverSiemensS7.dll index 019ffbc1dc97de12e939699b32e5733c70783927..4382e3ba855c719c0932cc9ba27a6a3d980e824f 100644 GIT binary patch delta 2393 zcmb7`eN5G56vw~My_d@cdHr!O?<9^3jQ&GmM^PI~y6t1g3?zx}uIp=xKInVF; zZ9n_0u+NH~y@uA+59~SF{g~eGjnLxrFUBhAT@yal^>Ox9n!n*^q5bW4htVed&?JCk zsKRogC$%3yDIT0tod&5Mf|X;DZc^1Fp4C&V8gMtOF;+W~$ZEAwW;P><)yJ$_aX+hI zcNuHPT2eMYL~+4ANa5ghYNiz3NMkjolS)M%#PSTPIJlg9JBJ!p_i$^IsAJ{NCB8yEDnug4@ZCnmfqG_(*?TP#4+xQKx@D`5pOA zkIWo3_qoWwB^v*~77wcLn=NXSVhZ@TO=sC*jwy=Swn&Vc+2S?gqNQQ-AMk#Q?5u|z zwkPn`qj1*H{zJ~VjgrbjCS9i9iz@dEA`q|OBIP)@zU(sp<{Wc`Ty?ufqvhkeLP;~h z*U2vS(7O1nyex~Iql|^A&1RReux*N~^WlAM+Y~vx=JFKf6>vNaN9Lj(Qce!0Qna@^>7e&>7Br>^x6N|H64PuE2I zI^KzCe%lrsd64ocN3M-=_9yR(q6eXc-+Pc_D;l3Lq@H8FKX71XoBk{TLHJwn? ztlNnzg{SG1cF@|pWJxLpkVe0B45+b5QEFaNvRe)5TCF$fS(7CtW*AXEDKR6+$56}! zSuC4Sm!{me1uLYgV>`|^(keZ7S{3Ab+nJ}>ro>7A5L>L|Rcy!EM#f8zo$Zu^6QpM< zLHj7B$6!lEg>EHMQKd_uMr(=FP)D4Ot;FeQAkM%J;tVtqXQG)n6D`D9c$_#3ZN%Bw zMVyVNiF43NoP%eGbFr5=7taxIzzf71&_kSu1H^eY^phySVG;!xA}++M#D#c`cq5Jy zZ^WC#ML0oRgj2+u@DA}Nj1d>(3~@2e5|`iu;u3sFT#8SKOYtdj877I#@ELJAz925g zm&6rFzeu72-;k)p6mccKBd)>^#8vo_xEfc8t8tCE2EP&4;CJF$%o5k)FP-*M=9utY zk4I6D7HoyOBRe!K82#Ai0T?hi_kU>a|FC*6J3?>3S@n3f)kDx1gn@o0?Q(WT#KI4b zLtFfx5CQO> z6N>$$&O|BUv`pzpq=*Fjr~~A_^K(zDs~UX*Bb2rqHGkoCyC_R7ZcG*it-G;PC!qQ6 YT%q?dMS}KvUW6MW5dbag;nTkV0AU@wF#rGn delta 2451 zcma);d2Ccw6vn?hGku*wy3E!V+Uhh2u?z*N)mB9_1iJ4lbOn^qip3OEEV1!TTQ!KF ztq&0i66(?z3x@h=Qca{KfL3B62(c!LDS}H%Kw^kQXrkwy>9mcVG5zD6`F;00=iKGJ zH+kMM;T;nl+f5b88Nc@Ke8w2Lcvf=f@l$2FAN<)7Iy!9Eb*t$Qq5l(dr=liA;-Ud4 zM->uO~2wvs~AYa;a3@;$3`>)ok{2;Yn2c6sMj>9jp6z`fsp~RWdK_Jl32q{ZoZ83l_D#4~c*a0E1HK$NmwR$0{tmK#psFG5xWlPk zvpSYeuNk76$7Y`iQaQkt$E;@i^vWabwK*K>bnhJXtC(|<;+RFAMn}|tPtU*R%QMVz z#LIgTu$xMTzui^hn=!X320REF-yLQ$1Zgy-k7Wiq{@Zzf;K}@U5SLCbx>}x)9`tNv z2j9J^x5>;vTar09W1?uezNgZE5Wc%}z;4!>>`KtPcfcP0Kb{g>XDbdiFRee;8E{49 zByO7iOvsf!%KHd-7s;JiJ8|}mGGl4q^hRl_BYKXU(cfX7Z=6PGh1ykTbhdoXo^>wc zbIPIU&zyYge0%YakH2ZY4pTZ0>G@IZk?}nc=C?$VhyKIxa?EhFfM2zvQaig~PC`3Q z2qkFFIT4|sTkwm}&)<`0(3ZK&^h55JJG7Kkm&n(OQy&hi!P}^%tB$TUdS~iOX3OCG z_mB`iIKM}8dmdB=6Hg!?u7xssIgW6=+igRBn8z*04|2pJ$!j?da&#qe6~_^dp2eKc z5lc9q;~+=Zy`0Z+gri3v_NXQ`9qSEANXG`l5@cW_aRwTRGtoqxi7mug*h-v*X5wtL z5NG2B;vBRQ=io)+Tx=)K#SY>;yhfad4&r?5CeFtm;sWd=F2H``LL4M6RPio}B6O1| z!iU7gI7D2GkBLk032_OI5|^T%xD=lem*E(383u{Vagw+kUl3Q|G;syKCSHXz#H;Wv z@oIcWyc*vVSK>$FO8i7zg_S>(sKR9u)%cyb8l%KDxJF!q>%_IVL0pT!i0g2RxDI2) zYXD;sMT1e_o6#@kuE1vc64-+E^gx;5#VZ#1+eW`yRn}a)2?xf94)Sjdy0zD{;UCOCvrc)CX|}B|OZB)V9}Prh&NeBs(S@ZE-^cCA7{S&$VvjiQ{d} lT4_U?n62+@Xfp`29`WQtW4Or$TBi$CuuH`0nNNKh@h>^U*xUdB diff --git a/iotgateway.db b/iotgateway.db index d0775f58b6c5728373180927e3ff0140c32585ec..d63865c0579f2a5bd35f716a346a534514eb09dd 100644 GIT binary patch delta 2949 zcmcImO>EO<7~(0+jxQ8dgTD)y6-c9XliprFvDu4=v1z8SovKW%2u3d?)J$f?JVZ-+%+~bB96#;Cb03n zJ6NstK{Mujfnzw9VmXQvNfrcIF35{mG_7bSk_oM{voD#>4E55mGQE1~wx{DqhLYMzGTuS1l`mbF-(mva*Y_N=}CQ*rF*o@pf;0fdz?IN zOq&U*XC)6+>qPt#?9%Ns=;12Ah!Q{tKU-n5|~8a&*#Cmc^}{qYHHyc|Bt zk!daU+OibJ*s&F;rk0sD^>Y0(n+|f1p5Zw%sgG~cW>z9KeR^`x7|58g;4-b?YP6Q| zrH7vdTw%yDl5K{zxK*TIjZfv?lMLD+KQbE3Pjqf9^+*1XL_m2)j@#(ebNf@l*`JCh z_2PW}PvY|;YjvN;w#k)~5Ha+OX{1t`Ne^goGja5p!&KhXOgKlyyP666zjxigpSD78 zU_R^5^O(B|2vYvX&IxCErk3`0U2w#MK{h8kys?G`1c}t-+(>N%8jcuZr4Yve3WUW7 zG#sgDII>D{LI{MJFe`IP^wrGdK4YT1uI4H{U;)Pp)~=J-?v^L*2Hs#r9@N1)C~*xT zt`Yb1-tN{s*^MoM?pdPOj@_Z#t75fwV7}FVz2AY2da7NQ5Mti5)$_Cai0hK&U36?M zfJKMq3gp7o?pRBWJ62m8sgKmhK$I1tg2+*V98oC{4J(u+Dg*MxrI2V+2l$k54A`rv+hzAP{I)l2}<{ty4E0?S&&Z93P`~)dWC@`^4J> zuw1tsFMa}UIf(YQs+hwLhU$wcw5@RV2gjS;PEP)H`k2SSFPR&UnUQ&cGCBO^vWduqRLM$c9vK$V} zAyH8T>(EBDVaN_G=ljUJP|K5L*mktElIzh|{9*@+&Dv>*zc{6K+ap|7S|uH?_KlwJ$wN_3kBIUiguL+v6HqW zh@HTaAa(-Ffo(%uA&^v*}w%a3w-lBFLmeD%xx zIr!t(kIp?@ScLvy!)_12KeYReaShYqQt0c&K1ZFU_Tz<`e#}7>o8N8+jhth7QGTAjM+NM)kqO(zC`gR;x z%rb)-bE@SU3w^uHEI%@bS8Kx*-eQIAX<;Z}~yVw5+my zr?K5oP#Yt?1!#{mNHW_N3ekO=eeX zA#*}Uv|cGspoZu?pdaZPC%Z~sSi1_O1-b?b|8rsF!6KXztM8Os6;*u*##3|rNCw)Q zM~(56n9IVK`1m*mfPAK7bRJ(M$H*1x-~!nZ69zmx)-{ah{N8>FJw<0=P932RpdSRT zz@J2}rhl(ET7;A0QXM|a*+!IC{&iw7P2oXkf8PFfJPxt6D zH#$)Mx&!5}4~mf86os_UcW=WyPnO`y0kbEme=x}ba~I~