<component id="107" name="Compression" componentClassID="{2E42D45B-F83C-400F-8D77-61DDE6A7DF29}" description="Executes a custom script" localeId="1033" usesDispositions="false" validateExternalMetadata="True" version="4" pipelineVersion="0" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0">
<properties>
<property id="132" name="SourceCode" dataType="System.String" state="cdata" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="18"><arrayElement dataType="System.String"><![CDATA[\my project\settings.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

    <System.Diagnostics.DebuggerNonUserCode()> _
    Public Shared ReadOnly Property Value() As MySettings
        Get
            If (MySettings.m_Value Is Nothing) Then
                System.Threading.Monitor.Enter(MySettings.m_SyncObject)
                If (MySettings.m_Value Is Nothing) Then
                    Try
                        MySettings.m_Value = New MySettings
                    Finally
                        System.Threading.Monitor.Exit(MySettings.m_SyncObject)
                    End Try
                End If
            End If
            Return MySettings.m_Value
        End Get
    End Property
End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\assemblyinfo.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

' General Information about an assembly is controlled through the following 
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("ScriptComponent_a2e27f266532485fb711ce846582478d.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_a2e27f266532485fb711ce846582478d.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2011")> 
<Assembly: AssemblyTrademark("")> 
<Assembly: CLSCompliant(True)> 

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("20a3d437-c67d-4ef2-a12f-1b3ce7ffc13c")> 

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_a2e27f266532485fb711ce846582478d.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

       Configuration - Specifies whether the default configuration is Release or Debug.
       Platform - Specifies what CPU the output of this project can run on.
       OutputType - Must be "Library" for VSTA.
       NoStandardLibraries - Set to "false" for VSTA.
       RootNamespace - In C#, this specifies the namespace given to new files.
                       In Visual Basic, all objects are wrapped in this namespace at runtime.
       AssemblyName - Name of the output assembly.
  -->
  <PropertyGroup>
    <ProjectTypeGuids>{A860303F-1F3F-4691-B57E-529FC101A107};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_a2e27f266532485fb711ce846582478d.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_a2e27f266532485fb711ce846582478d.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{96BAD172-D0B7-4C63-ABF6-46BBBC34FE73}</ProjectGuid>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Debug" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>true</DebugSymbols>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Release" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section enables pre- and post-build steps. However,
       it is recommended that MSBuild tasks be used instead of these properties.
  -->
  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
    </PostBuildEvent>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <!-- This section defines the user source files that are part of the
       project.

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{A860303F-1F3F-4691-B57E-529FC101A107}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{C1B21C64-9E6F-4923-A89D-9F958503C1CE}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_ScriptComponent</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\componentwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As PipelineBuffer)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?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.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: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" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </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" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2011 CozyRoc LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

Imports System
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.IO
Imports System.IO.Compression
Imports System.Text

Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS.Attributes


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() {"Action", "InputColumn", "ResultColumn"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Try
            Dim inputStream As Stream

            Select Case Me.Action
                Case CompressionMode.Compress
                    ' Get input.
                    inputStream = GetInputStream_(Row)

                    ' Compress.
                    Using compress As DeflateStream = New DeflateStream( _
                        m_outputStream, _
                        CompressionMode.Compress, _
                        True)

                        Call m_outputStream.SetLength(0)
                        Call CopyStream_(inputStream, compress)
                    End Using

                Case CompressionMode.Decompress
                    ' Get input.
                    Dim inputBlob As BlobColumn = CType(Row.Buffer(m_inputIndex), BlobColumn)
                    inputStream = New MemoryStream(inputBlob.GetBlobData(0, CInt(inputBlob.Length)))

                    ' Decompress.
                    Using decompress As DeflateStream = New DeflateStream( _
                        inputStream, _
                        CompressionMode.Decompress)

                        Call m_outputStream.SetLength(0)
                        Call CopyStream_(decompress, m_outputStream)
                    End Using
            End Select

            ' Store in result column.
            Dim resultBlob As BlobColumn = CType(Row.Buffer(m_outputIndex), BlobColumn)
            resultBlob.AddBlobData(m_outputStream.ToArray())
        Catch ex As Exception
            Call FireError_(ex.ToString())
        End Try
    End Sub ' Input_ProcessInputRow


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PreExecute()
        Call MyBase.PreExecute()

        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)

        ' Find input index.
        Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(0)
        m_inputIndex = MyBase.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            inputCol.LineageID)
        m_inputType = inputCol.DataType

        ' Find output index.
        m_outputIndex = MyBase.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            output.OutputColumnCollection(0).LineageID)

        ' Setup output stream used during row processing for efficiency.
        m_outputStream = New MemoryStream()

        ' Setup buffer used for copying streams.
        m_buf = New Byte(4096 - 1) {}
    End Sub ' PreExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Validate(ByRef errMessage As String) As Boolean
        Dim result As Boolean

        Try
            If String.IsNullOrEmpty(Me.InputColumn) Then
                Throw New ApplicationException("Select input column.")
            End If

            If String.IsNullOrEmpty(Me.ResultColumn) Then
                Throw New ApplicationException("Specify result column name.")
            End If

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.InputColumnCollection.Count = 0 Then
                ' Setup new input column.
                Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()
                Dim virtColumn As IDTSVirtualInputColumn100 = virtInput.VirtualInputColumnCollection( _
                    Me.InputColumn)
                Call virtInput.SetUsageType(virtColumn.LineageID, DTSUsageType.UT_READONLY)
            End If

            ' Setup output column.
            Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)
            If output.OutputColumnCollection.Count = 0 Then
                ' Setup new result column.
                Dim newColumn As IDTSOutputColumn100 = output.OutputColumnCollection.[New]()
                newColumn.Name = Me.ResultColumn
                newColumn.SetDataTypeProperties(DataType.DT_IMAGE, 0, 0, 0, 0)
            End If

            Dim outColumn As IDTSOutputColumn100 = output.OutputColumnCollection(0)
            outColumn.Name = Me.ResultColumn

            result = True
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select component action.")> _
    Public Property Action() As CompressionMode
        Get
            Action = m_action
        End Get
        Set(ByVal value As CompressionMode)
            m_action = value
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select input column.")> _
    <InputVirtualColumn()> _
    Public Property InputColumn() As String
        Get
            InputColumn = m_inputColumn
        End Get
        Set(ByVal value As String)
            If m_inputColumn <> value Then
                If Not String.IsNullOrEmpty(m_inputColumn) Then
                    ' Reset input collection.
                    Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                    Call input.InputColumnCollection.RemoveAll()
                End If

                m_inputColumn = value
            End If
        End Set
    End Property    ' InputColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify result column name")> _
    Public Property ResultColumn() As String
        Get
            ResultColumn = m_resultColumn
        End Get
        Set(ByVal value As String)
            m_resultColumn = value
        End Set
    End Property    ' ResultColumn
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Column Compression", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetInputStream_(ByVal row As InputBuffer) As Stream
        Dim result As Stream

        Select Case m_inputType
            Case DataType.DT_BYTES, DataType.DT_IMAGE, DataType.DT_NTEXT, DataType.DT_TEXT
                Dim blob As BlobColumn = CType(row.Buffer(m_inputIndex), BlobColumn)
                result = New MemoryStream(blob.GetBlobData(0, CInt(blob.Length)))

            Case DataType.DT_STR, DataType.DT_WSTR
                Dim str As String = row.Buffer.GetString(m_inputIndex)
                result = New MemoryStream(Encoding.Default.GetBytes(str))

            Case Else
                Throw New Exception("Unsupported input data type.")
        End Select

        GetInputStream_ = result
    End Function    ' GetInputStream_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub CopyStream_(ByVal source As Stream, ByVal dest As Stream)
        Dim bytesRead As Integer = 0
        Do While True
            bytesRead = source.Read(m_buf, 0, m_buf.Length)
            If bytesRead = 0 Then
                ' Reached the end.
                Exit Do
            End If

            Call dest.Write(m_buf, 0, bytesRead)
        Loop
    End Sub ' CopyStream_
#End Region ' Internals


#Region "Attributes"
    Private m_action As CompressionMode = CompressionMode.Compress
    Private m_inputColumn As String
    Private m_resultColumn As String

    Private m_inputIndex As Integer
    Private m_inputType As DataType
    Private m_outputIndex As Integer
    Private m_outputStream As MemoryStream
    Private m_buf() As Byte
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="133" name="BinaryCode" dataType="System.String" state="cdata" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[\bin\scriptcomponent_a2e27f266532485fb711ce846582478d.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
AAAEfhIAAAQqAAAAEzABAAYAAAAbAAARfhMAAAQqAAAeAoATAAAEKkJzFwAACigRAAAKgBUAAAQq
AAAAHgIoYgAACiobMAEAPwAAABwAABF+FAAABC0yfhUAAAQoEQAACihjAAAKfhQAAAQtHHMuAAAG
gBQAAATeEH4VAAAEKBEAAAooZAAACtx+FAAABCoAAQwAAAIAHQAMKQAQAAAAAUJTSkIBAAEAAAAA
AAwAAAB2Mi4wLjUwNzI3AAAAAAUAbAAAAJgMAAAjfgAABA0AAMAQAAAjU3RyaW5ncwAAAADEHQAA
BAEAACNVUwDIHgAAEAAAACNHVUlEAAAA2B4AAKwFAAAjQmxvYgAAAAAAAAACAAABVxWiCQkPAAAA
+gEzABYAAAEAAABLAAAADQAAABUAAAAvAAAAFwAAAG8AAAA/AAAAHAAAAAYAAAANAAAAEQAAAAkA
AAABAAAACAAAAAEAAAACAAAAAwAAAAIAAAAAAIIQAQAAAAAACgCpAX8BCgDdAb8BBgDtAeYBCgBF
An8BBgDDAuYBCgBFAxsDDgCXA4ADEgDmA8UDFgAXBMUDDgCyBIADGgBNBTcFBgDYBc4FHgCJBmEG
BgCsBs4FBgD/Bu4GBgAsBxcHGgCTB34HGgDgB8oHGgD5B8oHGgAmCA4IBgBQCD0ICgCPCGgICgCn
CBMAGgDcCL8IBgARCfEIBgAvCeYBBgBTCeYBCgBsCRMABgCwCZEJBgDECeYBEgDLCcUDBgDYCeYB
IgA7ChIKIgBqChIKIgCVChIKFgCyCsUDGgC9CjcFBgDLCuYBBgDfCuYBCgApC2gIIgBXCxIKIgBq
CxIKBgB4C+YBIgB+CxIKIgCrCxIKFgDiC8UDIgAGDBIKIgBeDBIKIgCXDBIKBgCrDOYBIgCwDBIK
IgDKDBIKBgDsDOYBIgAbDRIKIgBgDRIKCgCpDWgIBgDxDeUNEgAaDsUDDgBjDkEODgB/DkEOGgCX
DsoHDgCsDkEOBgDaDsgOBgABD/AOBgAUDz0IBgB9D/EIBgCdD/EIBgC7D8gOBgDYD5EJBgDmD8gO
BgABEMgOBgAcEMgOBgA1EMgOBgBOEMgOBgBrEMgOAAAAAAEAAAAAAAEAAQAAAAAAKQA3AAUAAQAB
AAAAAAByADcACQABAAIAAAEQAH0ANwANAAEAAwAFAQAAhwAAAA0ABQAIAAUBAACVAAAADQAFAA8A
AQAAALAAvAAdAAYAEQABAAAA9AC8ACkABgAWAAEAAAACAbwADQAIABoAAQAAAA4BvAANAAkAGwAB
AAAAGAG8ACAACgAcAAAAAAAjAS8BDQASACkAAAEQAHQBvABFABQALQAxAAgCIAAxADECLQAxAFMC
OgAxAHgCRwAhAFQDkAAGAAIBxwAGAA4BywABAAgF3AABAAgF3AABAAsGCwEBABQGDwEBACIGDwEB
ADEGEgEBAJIGFQEBAJ4GEgEBALkGGQEBAMgGHQERAA8HKgERADgHLgERAKsHTAERALMHUAEIIQAA
AAAGGLkBEwABABAhAAAAAAYYuQETAAEAGCEAAAAAERj0ARcAAQBEIQAAAAATCPsBGwABAFwhAAAA
ABMIIQIoAAEAdCEAAAAAEwhKAjUAAQCMIQAAAAATCGgCQgABAKQhAAAAAEYCrgJjAAEAwCEAAAAA
RgK3AmgAAgDUIQAAAACDAMgCbAACAOwhAAAAAEYC0AJxAAIAACIAAAAAEQDZAngAAgAcIgAAAAAB
APcCgAADADgiAAAAAAYYuQETAAQAQCIAAAAAAwgLA4sABAB0IgAAAAAGGLkBEwAEAIgiAAAAAAYY
uQGvAAQAmCIAAAAARgpIBLkACACsIgAAAABGCl8EuQAIAMAiAAAAAIYAdwS+AAgA2CIAAAAAhgB/
BL4ACADwIgAAAAAGGLkBEwAIABAjAAAAAEYCxgTPAAgAQCMAAAAARgPbBNYACgBUIwAAAABGA+4E
1gALAFgjAAAAAAYYuQHgAAwAaCMAAAAABhi5AeAADQB4IwAAAAAGGLkBEwAOAIgjAAAAAEYC7gTW
AA4AtCQAAAAARgIYBRMADwCEJQAAAAAGACMF5gAPALQmAAAAAAYIXQXsABAAzCYAAAAABghoBfEA
EADYJgAAAAAGCHkFcQARAPAmAAAAAAYIiQX3ABEARCcAAAAABgiZBXEAEgBcJwAAAAAGCKoF9wAS
AGgnAAAAAAEAuwX3ABMAkCcAAAAAAQDfBfwAFAA8KAAAAAABAPMFAwEVAHgoAAAAAAMYuQETABcA
gCgAAAAAFghEBzIBFwC8KAAAAAAWCFgHNwEXANAoAAAAABYIZAc8ARcA2CgAAAAAERj0ARcAGADs
KAAAAAAGGLkBEwAYAPQoAAAAABYIwAdTARgAAAABALUCAAABAO4CAAABAO4CAAABACYEAAACADAE
AAADADkEAAAEAEEEAAABANMEAAACAEEEAAABAEEEAAABAAQFAAABACYEAAABACYEAAABAAQFAAAB
ACwFAAABAHMFAAABAHMFAAABAHMFAAABAMYFAAABAO8FAAABAP8FAAACAAYGAAABAHAHCQC5ARMA
kQC5AV0BoQC5AWwBEQC5ARMAqQC5ARMAJAC5ARMALAC5ARMANAC5ARMAPAC5ARMAJAALA4sALAAL
A4sANAALA4sAPAALA4sAsQC5ARMAuQC5ARMAwQC5AfcAyQAgCQUCGQCuAmMAGQC3AmgAKQBBCRIC
GQDQAnEA2QBdCSICGQC5ARMA4QC5ATICRABUA5AATADAB4sATACHCa8CTAC5ARMA6QC5AbwCOQC5
Aa8A+QB3BL4A+QB/BL4AAQG5AbwCUQC5ARMAQQBUCswCCQGBCtICEQGiCtgCGQGrCmgAKQG5Ad8C
cQDVCugCOQHrChMAOQDzCu0CSQCiCvICIQH+CvcCIQEJC/sCcQC5AQIDKQG5AQgDcQAVCxADIQEd
CwIDQQE1CxUDMQHQAnEAQQFFCxcAQQAYBRMACQGWCzIDYQGiCjgDGQHICz8DaQGiCkUDUQD0C0wD
cQEbDFIDGQHzCmgASQEtDGgAeQE7DFgDSQFRDF4DUQF8DGMDgQGiCmkDiQEtDGgAcQC5ARMA8QDe
DHwDqQG5AfcAaQEBDWgAGQELDYEDoQE/DYcDsQGiCo0DmQEtDGgAoQFtDZQDgQEBDWgAgQF6DZwD
iQF+DfcAiQGHDaIDMQGdDXEAwQGzDcsDaQHBDRMA8QDLDQ8BCQHRDdgDSQDbDeMDyQH6DegDyQEG
Du4DMQG5AfcAYQAPDgEEYQAUDgkE0QG5ARMA2QG5AfcA4QG5AR8E6QG5AfcA8QG5ARMAKQDjDqYE
eQC5AawEiQC5ARMAAQIJD8kEAQIPD8kECQK5ARMAEQK5AdMEGQK5ARMAIQK5AfcAKQK5AfcAMQK5
AfcAOQK5AfcAQQK5AfcASQK5AfcAUQK5AfcAWQK5AfcAKQCDAL8BLgBrA5oFLgBjA10FLgB7A10F
LgBbAz0FLgA7A+EELgBzA8ECLgBDAwAFLgAzA9gELgBLAw0FLgDrAMECLgBTA8ECLgALATcFQAAr
AIoBQAATAGMBQwATAGMBQwAbAHIBSQCDAN0BYwATAGMBYwAbAHIBaQCDANABgAArAIoBgwAbAHIB
gwB7AIoBgwBzAIoBiQCDAPEBoAArAIoBowDDADoCowATAGMBwAArAIoBwwDrAMECwwATAGMB4AAr
AIoB4wALAcECAAETAGMBAAErAIoBAwELAcECCQHzAk4EIAETAGMBIAErAIoBKQHzAmwEKQH7AooB
QAETAGMBQAErAIoBSQHzAoYEYAErAIoBYAETAGMBYwHbAooBYwHrAiUEYwHjAhEEYwELAcECaQET
AMAEgAErAIoBiQETAMAEoAErAIoBqQErA4oBwAETAGMBwAErAIoB4AErAIoBAAITAGMBAAIrAIoB
QAMLAcECYAMLAcECqwGwAbUBugEKAg4CGQIeAi0CLQK1AscCxwIKAgoCHANwA6wDxgMeAtIDHgIK
AvQDDgK0BLsEzgQEAAEABgAFAAcABgALAAgADAALAA0ADQAAAN0BTwAAAJYCVAAAAEUCWQAAAKIC
XgAAAF4DmAAAAIsEwgAAAJ4EwgAAAM4GIQEAANUGJgEAAOEGJgEAAP8GQgEAAHYHRwEAAHAHWAEC
AAQAAwACAAUABQACAAYABwACAAcACQACAA8ACwACABIADQACABMADwABACEAEQACACAAEQACACIA
EwABACMAEwABACUAFQACACQAFQACACoAFwACACsAGQABACwAGQACAC8AGwB1AHUAiACPAZYBnQGk
AZwCowIEgAAAAQAAAAAAAAAAAAAAAAC8AAAAAgAAAAAAAAAAAAAAAQAKAAAAAAAIAAAAAAAAAAAA
AAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0AagMAAAAACgAAAAAAAAAAAAAApgCoAwAAAAAKAAAAAAAA
AAAAAACmAPYDAAAAAAIAAAAAAAAAAAAAAAEA5gEAAAAACgAAAAAAAAAAAAAApgA+BgAAAAAKAAAA
AAAAAAAAAACmAO4JAAAAAAAAAAABAAAAMQ8AAAUABAAGAAQAAAAQAAwA7AIAABAAGQDsAgAAAAAb
AOwCLQAoAi0AqgIAAAAAADxNb2R1bGU+AG1zY29ybGliAE1pY3Jvc29mdC5WaXN1YWxCYXNpYwBN
eUFwcGxpY2F0aW9uAFNjcmlwdENvbXBvbmVudF9hMmUyN2YyNjY1MzI0ODVmYjcxMWNlODQ2NTgy
NDc4ZC52YnByb2ouTXkATXlDb21wdXRlcgBNeVByb2plY3QATXlXZWJTZXJ2aWNlcwBUaHJlYWRT
YWZlT2JqZWN0UHJvdmlkZXJgMQBJbnB1dEJ1ZmZlcgBTY3JpcHRDb21wb25lbnRfYTJlMjdmMjY2
NTMyNDg1ZmI3MTFjZTg0NjU4MjQ3OGQudmJwcm9qAFVzZXJDb21wb25lbnQAQ29ubmVjdGlvbnMA
VmFyaWFibGVzAFNjcmlwdE1haW4ATXlSZXNvdXJjZXMAU2NyaXB0Q29tcG9uZW50X2EyZTI3ZjI2
NjUzMjQ4NWZiNzExY2U4NDY1ODI0NzhkLnZicHJvai5NeS5SZXNvdXJjZXMATXlTZXR0aW5ncwBN
aWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBBcHBsaWNhdGlvbkJhc2UA
LmN0b3IATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0ZXIAU3lzdGVtAE9iamVj
dAAuY2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92aWRlcgBnZXRfQXBwbGlj
YXRpb24AbV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1fVXNlck9iamVjdFByb3Zp
ZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQcm92aWRlcgBBcHBsaWNh
dGlvbgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBlAEdldFR5cGUAVG9TdHJp
bmcAQ3JlYXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9fSW5zdGFuY2VfXwBnZXRf
R2V0SW5zdGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2VydmljZXMuSW50ZXJuYWwAQ29u
dGV4dFZhbHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2MuU1NJU1BsdXMuMjAwOABD
b3p5Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWljcm9zb2Z0LlNxbFNlcnZl
ci5UeFNjcmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZQBTY3JpcHRDb21wb25l
bnQATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxpbmVCdWZmZXIAQ29tcG9u
ZW50AE9iamVjdElEAElzSW5wdXQAQnVmZmVyAGdldF9TdGF0aWNJbnB1dENvbHVtbnMAZ2V0X1N0
YXRpY091dHB1dENvbHVtbnMATmV4dFJvdwBFbmRPZlJvd3NldABTdGF0aWNJbnB1dENvbHVtbnMA
U3RhdGljT3V0cHV0Q29sdW1ucwBTY3JpcHRDb21wb25lbnRQbHVzAFByb2Nlc3NJbnB1dABJbnB1
dElEAElucHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cAUm93AFBhcmVudENv
bXBvbmVudABQcmVFeGVjdXRlAFZhbGlkYXRlAGVyck1lc3NhZ2UAU3lzdGVtLklPLkNvbXByZXNz
aW9uAENvbXByZXNzaW9uTW9kZQBnZXRfQWN0aW9uAHNldF9BY3Rpb24AdmFsdWUAZ2V0X0lucHV0
Q29sdW1uAHNldF9JbnB1dENvbHVtbgBnZXRfUmVzdWx0Q29sdW1uAHNldF9SZXN1bHRDb2x1bW4A
RmlyZUVycm9yXwBtZXNzYWdlAFN5c3RlbS5JTwBTdHJlYW0AR2V0SW5wdXRTdHJlYW1fAHJvdwBD
b3B5U3RyZWFtXwBzb3VyY2UAZGVzdABtX2FjdGlvbgBtX2lucHV0Q29sdW1uAG1fcmVzdWx0Q29s
dW1uAG1faW5wdXRJbmRleABNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1J1bnRpbWVXcmFwAE1pY3Jv
c29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUuV3JhcHBlcgBEYXRhVHlwZQBtX2lucHV0VHlwZQBt
X291dHB1dEluZGV4AE1lbW9yeVN0cmVhbQBtX291dHB1dFN0cmVhbQBtX2J1ZgBBY3Rpb24ASW5w
dXRDb2x1bW4AUmVzdWx0Q29sdW1uAFN5c3RlbS5SZXNvdXJjZXMAUmVzb3VyY2VNYW5hZ2VyAF9y
ZXNNZ3IAU3lzdGVtLkdsb2JhbGl6YXRpb24AQ3VsdHVyZUluZm8AX3Jlc0N1bHR1cmUAZ2V0X1Jl
c291cmNlTWFuYWdlcgBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQBWYWx1ZQBDdWx0dXJlAFN5c3Rl
bS5Db25maWd1cmF0aW9uAEFwcGxpY2F0aW9uU2V0dGluZ3NCYXNlAG1fVmFsdWUAbV9TeW5jT2Jq
ZWN0AGdldF9WYWx1ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwARWRpdG9yQnJvd3NhYmxlQXR0cmli
dXRlAEVkaXRvckJyb3dzYWJsZVN0YXRlAFN5c3RlbS5Db2RlRG9tLkNvbXBpbGVyAEdlbmVyYXRl
ZENvZGVBdHRyaWJ1dGUAU3lzdGVtLkRpYWdub3N0aWNzAERlYnVnZ2VySGlkZGVuQXR0cmlidXRl
AE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5Db21waWxlclNlcnZpY2VzAFN0YW5kYXJkTW9kdWxlQXR0
cmlidXRlAEhpZGVNb2R1bGVOYW1lQXR0cmlidXRlAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNp
Z24ASGVscEtleXdvcmRBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBS
dW50aW1lSGVscGVycwBHZXRPYmplY3RWYWx1ZQBSdW50aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJv
bUhhbmRsZQBBY3RpdmF0b3IAQ3JlYXRlSW5zdGFuY2UATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1
dGUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0
cmlidXRlAFN0cmluZwBTY3JpcHRCdWZmZXIAQ0xTQ29tcGxpYW50QXR0cmlidXRlAE1pY3Jvc29m
dC5TcWxTZXJ2ZXIuRFRTUGlwZWxpbmVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlBpcGVs
aW5lLldyYXBwZXIASURUU0NvbXBvbmVudE1ldGFEYXRhMTAwAGdldF9Db21wb25lbnRNZXRhRGF0
YQBJRFRTSW5wdXRDb2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbGxlY3Rpb24ASURUU0lucHV0MTAw
AGdldF9JdGVtAGdldF9JRABCbG9iQ29sdW1uAERlZmxhdGVTdHJlYW0ARXhjZXB0aW9uAFNldExl
bmd0aABJRGlzcG9zYWJsZQBEaXNwb3NlAGdldF9CdWZmZXIAZ2V0X0xlbmd0aABHZXRCbG9iRGF0
YQBUb0FycmF5AEFkZEJsb2JEYXRhAFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBDbGVhclBy
b2plY3RFcnJvcgBJRFRTSW5wdXRDb2x1bW4xMDAASURUU091dHB1dDEwMABJbnQzMgBJRFRTT3V0
cHV0Q29sbGVjdGlvbjEwMABnZXRfT3V0cHV0Q29sbGVjdGlvbgBJRFRTSW5wdXRDb2x1bW5Db2xs
ZWN0aW9uMTAwAGdldF9JbnB1dENvbHVtbkNvbGxlY3Rpb24AUGlwZWxpbmVDb21wb25lbnQAZ2V0
X0hvc3RDb21wb25lbnQASURUU0J1ZmZlck1hbmFnZXIxMDAAZ2V0X0J1ZmZlck1hbmFnZXIAZ2V0
X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQAZ2V0X0RhdGFUeXBlAElEVFNPdXRwdXRD
b2x1bW5Db2xsZWN0aW9uMTAwAGdldF9PdXRwdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNPdXRwdXRD
b2x1bW4xMDAAQnl0ZQBJRFRTVmlydHVhbElucHV0Q29sdW1uMTAwAElEVFNWaXJ0dWFsSW5wdXQx
MDAASXNOdWxsT3JFbXB0eQBBcHBsaWNhdGlvbkV4Y2VwdGlvbgBnZXRfQ291bnQAR2V0VmlydHVh
bElucHV0AElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9WaXJ0dWFsSW5w
dXRDb2x1bW5Db2xsZWN0aW9uAERUU1VzYWdlVHlwZQBTZXRVc2FnZVR5cGUATmV3AHNldF9OYW1l
AFNldERhdGFUeXBlUHJvcGVydGllcwBnZXRfTWVzc2FnZQBPcGVyYXRvcnMAQ29tcGFyZVN0cmlu
ZwBSZW1vdmVBbGwARW1wdHkARmlyZUVycm9yAEdldFN0cmluZwBTeXN0ZW0uVGV4dABFbmNvZGlu
ZwBnZXRfRGVmYXVsdABHZXRCeXRlcwBSZWFkAFdyaXRlAFNTSVNTY3JpcHRDb21wb25lbnRFbnRy
eVBvaW50QXR0cmlidXRlAENvenlSb2MuU3FsU2VydmVyLlNTSVMuQXR0cmlidXRlcwBWYWxpZGF0
ZVByb3BlcnRpZXNBdHRyaWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1dGUARGVzY3JpcHRpb25B
dHRyaWJ1dGUASW5wdXRWaXJ0dWFsQ29sdW1uQXR0cmlidXRlAFN5c3RlbS5SZWZsZWN0aW9uAEFz
c2VtYmx5AGdldF9Bc3NlbWJseQBTeXN0ZW0uVGhyZWFkaW5nAE1vbml0b3IARW50ZXIARXhpdABE
ZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF9hMmUyN2YyNjY1MzI0
ODVmYjcxMWNlODQ2NTgyNDc4ZC52YnByb2ouUmVzb3VyY2VzLnJlc291cmNlcwBDb21waWxhdGlv
blJlbGF4YXRpb25zQXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAEFzc2Vt
Ymx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAR3VpZEF0dHJpYnV0ZQBBc3NlbWJseVRyYWRlbWFya0F0
dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJpYnV0ZQBBc3NlbWJseVByb2R1Y3RBdHRyaWJ1
dGUAQXNzZW1ibHlDb21wYW55QXR0cmlidXRlAEFzc2VtYmx5RGVzY3JpcHRpb25BdHRyaWJ1dGUA
QXNzZW1ibHlUaXRsZUF0dHJpYnV0ZQBTY3JpcHRDb21wb25lbnRfYTJlMjdmMjY2NTMyNDg1ZmI3
MTFjZTg0NjU4MjQ3OGQudmJwcm9qLmRsbAAAAAALSQBuAHAAdQB0AAApUwBlAGwAZQBjAHQAIABp
AG4AcAB1AHQAIABjAG8AbAB1AG0AbgAuAAA3UwBwAGUAYwBpAGYAeQAgAHIAZQBzAHUAbAB0ACAA
YwBvAGwAdQBtAG4AIABuAGEAbQBlAC4AACVDAG8AbAB1AG0AbgAgAEMAbwBtAHAAcgBlAHMAcwBp
AG8AbgAAOVUAbgBzAHUAcABwAG8AcgB0AGUAZAAgAGkAbgBwAHUAdAAgAGQAYQB0AGEAIAB0AHkA
cABlAC4AADFNAHkALgBSAGUAcwBvAHUAcgBjAGUAcwAuAE0AeQBSAGUAcwBvAHUAcgBjAGUAcwAA
AAAAijtvvDrP3UKoMa0N2fMt+AAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYVEhgB
EgwEAAASCAcGFRIYARIIBAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgAEhEE
CAASFAQgAQIcAyAACAQgABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZARMA
BCgAEwAIFs9JC7gMNOoIiYRdzYCAzJEJIAQBEiEIAhIlBCAAHQ4DIAACBCgAHQ4DBhIkAwYSKAYg
AgEIEiUFIAEBEhwDBhIhBSABARIhBSABAhAOBCAAES0FIAEBES0EIAEBDgYgARIxEhwHIAIBEjES
MQMGES0CBg4CBggDBhE1AwYSOQMGHQUEKAARLQMoAA4DBhI9AwYSQQQAABI9BAAAEkEFAAEBEkEE
CAASPQQIABJBAwYSNAIGHAQAABI0BAgAEjQFIAEBEU0IAQABAAAAAAAFIAIBDg4XAQAKTXlUZW1w
bGF0ZQc4LjAuMC4wAAAEAQAAAAYVEhgBEgwGFRIYARIIBhUSGAESEQYVEhgBEhQEBwESDAQHARII
BAcBEhEEBwESFBABAAtNeS5Db21wdXRlcgAADAEAB015LlVzZXIAABMBAA5NeS5BcHBsaWNhdGlv
bgAAEwEADk15LldlYlNlcnZpY2VzAAAEAAEcHAMHAQIDBwEIBgABEhURaQQHARIVAwcBDgUQAQAe
AAQKAR4ABAcBHgAHIAQBDg4ODmEBADRTeXN0ZW0uV2ViLlNlcnZpY2VzLlByb3RvY29scy5Tb2Fw
SHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNwb3NlX19JbnN0YW5jZV9f
AAAABhUSGAETAAYVEhkBEwAECgETAAUgAQETAAYHAhMAEwAEIAEBAgUBAAAAAAQHAR0OBSAAEoCF
BSAAEoCJBiABEoCNHAggAwESMREtAgQgAQEKBCAAEiUEIAEcCAMgAAkGIAIdBQgIBSABAR0FByAC
ARIxES0EIAAdBQYAAQESgJkVBwcSMRKAkRKAlRKAkRKAlRKAmREtBSAAEoCxBiABEoCpHAUgABKA
tQYgARKApRwFIAASgLkFIAASgL0FIAIICAgEIAARNQUgABKAwQYgARKAxRwLBwMSgI0SgKUSgKkE
AAECDgUgABKA0QUgABKA2QYgARKAzRwHIAIICBGA3QUgABKAxQkgBQERNQgICAgZBwkCAhKAjRKA
xRKAqRKAzRKA0RKAxRKAmQQHAREtBgADCA4OAgUHARKAjQogBgEIDg4OCBACBCABDggFAAASgOUF
IAEdBQ4MBwUSMRIxEoCRDhE1ByADCB0FCAgHIAMBHQUICA0BAAhWYWxpZGF0ZQAABSABAR0OKAEA
AwAAAAZBY3Rpb24LSW5wdXRDb2x1bW4MUmVzdWx0Q29sdW1uAAAdAQAYU2VsZWN0IGNvbXBvbmVu
dCBhY3Rpb24uAAAZAQAUU2VsZWN0IGlucHV0IGNvbHVtbi4AAB8BABpTcGVjaWZ5IHJlc3VsdCBj
b2x1bW4gbmFtZQAABSAAEoD9ByACAQ4SgP0GBwISPRI9BAcBEkEIAQACAAAAAAAEAAEBHAQHARI0
BCABAQgIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBDAEABzEuMC4wLjAA
ACkBACQyMGEzZDQzNy1jNjdkLTRlZjItYTEyZi0xYjNjZTdmZmMxM2MAAAUBAAEAAB8BABpDb3B5
cmlnaHQgQCBNaWNyb3NvZnQgMjAxMQAAPAEAN1NjcmlwdENvbXBvbmVudF9hMmUyN2YyNjY1MzI0
ODVmYjcxMWNlODQ2NTgyNDc4ZC52YnByb2oAAA4BAAlNaWNyb3NvZnQAAAAAAPxNAAAAAAAAAAAA
AB5OAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQTgAAAAAAAAAAAAAAAAAAAAAAAAAAX0NvckRs
bE1haW4AbXNjb3JlZS5kbGwAAAAAAP8lACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAACgAAIAO
AAAASAAAgBAAAABgAACAAAAAAAAAAAAAAAAAAAACAAIAAAB4AACAAwAAAJAAAIAAAAAAAAAAAAAA
AAAAAAEAAH8AAKgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAAMAAAIAAAAAAAAAAAAAAAAAAAAEAAAAA
ANgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAPgAAAAAAAAA
AAAAAAAAAAAAAAEAAAAAAAgBAACAZQAA6AIAAAAAAAAAAAAAaGgAACgBAAAAAAAAAAAAAJBpAAAi
AAAAAAAAAAAAAAAYYQAAaAQAAAAAAAAAAAAAaAQ0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkA
TgBGAE8AAAAAAL0E7/4AAAEAAAABAAAAAAAAAAEAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAA
AAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEA
dABpAG8AbgAAAAAAAACwBMgDAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAKQDAAAB
ADAAMAAwADAAMAA0AGIAMAAAADQACgABAEMAbwBtAHAAYQBuAHkATgBhAG0AZQAAAAAATQBpAGMA
cgBvAHMAbwBmAHQAAACYADgAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUwBj
AHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwBhADIAZQAyADcAZgAyADYANgA1ADMAMgA0ADgA
NQBmAGIANwAxADEAYwBlADgANAA2ADUAOAAyADQANwA4AGQALgB2AGIAcAByAG8AagAAADAACAAB
AEYAaQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgAwAC4AMAAAAJgAPAABAEkAbgB0AGUA
cgBuAGEAbABOAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwBhADIAZQAy
ADcAZgAyADYANgA1ADMAMgA0ADgANQBmAGIANwAxADEAYwBlADgANAA2ADUAOAAyADQANwA4AGQA
LgB2AGIAcAByAG8AagAuAGQAbABsAAAAXAAbAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0
AAAAQwBvAHAAeQByAGkAZwBoAHQAIABAACAATQBpAGMAcgBvAHMAbwBmAHQAIAAyADAAMQAxAAAA
AACgADwAAQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBv
AG0AcABvAG4AZQBuAHQAXwBhADIAZQAyADcAZgAyADYANgA1ADMAMgA0ADgANQBmAGIANwAxADEA
YwBlADgANAA2ADUAOAAyADQANwA4AGQALgB2AGIAcAByAG8AagAuAGQAbABsAAAAkAA4AAEAUABy
AG8AZAB1AGMAdABOAGEAbQBlAAAAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGEA
MgBlADIANwBmADIANgA2ADUAMwAyADQAOAA1AGYAYgA3ADEAMQBjAGUAOAA0ADYANQA4ADIANAA3
ADgAZAAuAHYAYgBwAHIAbwBqAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAA
MQAuADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAx
AC4AMAAuADAALgAwAAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8A
AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAHd3d3d3d3d3d3d3d3d3cARERERERERERERERERERHAE////////////////
//RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////
///////////0cAT/////////////////9HAE//////////////////RwBP/////////////////0
cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////////
////////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE
//////////////////RwBP/////////////////0cAT/////////////////9HAEiIiIiIiIiIiI
iIiIiIRwBEREREREREREREREREREcARMTExMTExMTExOzs5JdHAEzMzMzMzMzMzMzMzMzMQAAERE
RERERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAP/////////////////////AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGA
AAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAPAAAAH////////////////KAAAABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A
//8AAP///wAAAAAAAAAAAAd3d3d3d3d3REREREREREdP///////4R0////////hHT///////+EdP
///////4R0////////hHT///////+EdP///////4R0////////hHSIiIiIiIiEdMzMzMzMzMR8RE
RERERETAAAAAAAAAAAAAAAAAAAAAAP//AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAQAA//8AAP//AAAAAAEAAgAgIBAAAQAEAOgCAAACABAQEAABAAQA
KAEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAwAAAAwPgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property>
<property id="136" name="UserComponentTypeName" dataType="System.String" state="default" isArray="false" description="" typeConverter="" UITypeEditor="" containsID="false" expressionType="None">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property>
<property id="1691" name="VSTAProjectName" dataType="System.String" state="default" isArray="false" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None">ScriptComponent_a2e27f266532485fb711ce846582478d</property>
<property id="1692" name="ScriptLanguage" dataType="System.String" state="default" isArray="false" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" UITypeEditor="" containsID="false" expressionType="None">VisualBasic</property></properties>
<inputs>
<input id="138" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
<outputs>
<output id="185" name="Output" description="" exclusionGroup="0" synchronousInputId="138" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>