<component id="17" name="Column Encryption" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script." localeId="1033" version="9" 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="18" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="15"><arrayElement dataType="System.String"><![CDATA[ScriptMain.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' COZYROC SQL Server Integration Services user script component
'
' Copyright (c) 2006-2013 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.Collections
Imports System.Drawing.Design
Imports System.Windows.Forms.Design
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Imports System.Text
Imports System.IO

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() { _
    "InputColumns", "Action", "EncryptionType", _
    "IsCertificateFileVariable", "CertificateFile", "CertificateFileVariable", _
    "IsPasswordVariable", "Password", "PasswordVariable"})> _
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const ColumnSeparator As String = "," + vbLf
    Private Const Salt As String = "7ADC83D055D6459c8C1793C8D41A36FE"


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim colsCount As Integer = m_inputIdx.Length

        For colIndex As Integer = 0 To colsCount - 1
            Dim bufIndex As Integer = m_inputIdx(colIndex)

            If Row.Buffer.IsNull(bufIndex) Then
                Continue For
            End If

            Dim blob As BlobColumn = CType(Row.Buffer(bufIndex), BlobColumn)
            Dim data() As Byte = blob.GetBlobData(0, CInt(blob.Length))

            Select Case Me.EncryptionType
                Case EncryptionTypes.AES, EncryptionTypes.TripleDES, _
                    EncryptionTypes.DES, EncryptionTypes.RC2

                    ' Setup crypto stream.
                    Dim cs As CryptoStream
                    Dim ms As New MemoryStream
                    Dim sAlg As SymmetricAlgorithm = CType(m_encryptor, SymmetricAlgorithm)
                    If Me.Action = ActionTypes.Encryption Then
                        cs = New CryptoStream(ms, sAlg.CreateEncryptor(), CryptoStreamMode.Write)
                    Else
                        cs = New CryptoStream(ms, sAlg.CreateDecryptor(), CryptoStreamMode.Read)
                    End If

                    Try
                        Call cs.Write(data, 0, data.Length)
                    Finally
                        Call cs.Dispose()
                    End Try

                    data = ms.ToArray()

                Case EncryptionTypes.RSA
                    Dim rsaCer As X509Certificate2 = CType(m_encryptor, X509Certificate2)

                    Dim rsaCsp As RSACryptoServiceProvider
                    If Me.Action = ActionTypes.Encryption Then
                        rsaCsp = CType(rsaCer.PublicKey.Key, RSACryptoServiceProvider)
                        data = rsaCsp.Encrypt(data, True)
                    Else
                        rsaCsp = CType(rsaCer.PrivateKey, RSACryptoServiceProvider)
                        data = rsaCsp.Decrypt(data, True)
                    End If

                    ' RSACryptoServiceProvider reverses the order of encrypted bytes.
                    ' Reverse back to make the data compatible with CAPI.
                    Call Array.Reverse(data)
            End Select

            ' Set new column data.
            Call blob.ResetBlobData()
            Call blob.AddBlobData(data)
        Next
    End Sub ' Input_ProcessInputRow


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

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

        ' Setup dynamic input columns indexes.
        Dim colsCount As Integer = input.InputColumnCollection.Count
        m_inputIdx = New Integer(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            m_inputIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                input.InputColumnCollection(colIndex).LineageID)
        Next

        m_encryptor = CreateEncryptor_()
    End Sub ' PreExecute


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

        Try
            If Me.EncryptionType <> EncryptionTypes.RSA AndAlso _
                String.IsNullOrEmpty(Me.Password) Then
                Throw New Exception("Specify password.")
            End If

            If Me.EncryptionType = EncryptionTypes.RSA AndAlso _
                String.IsNullOrEmpty(Me.CertificateFile) Then

                Throw New Exception("Specify certificate file.")
            End If

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

            ' Setup input columns based on selection.
            Dim selectedCols() As String = CStr(Me.InputColumns).Split( _
                New String() {ColumnSeparator}, _
                StringSplitOptions.None)
            Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

            Call input.InputColumnCollection.RemoveAll()

            For Each col As String In selectedCols
                If Not String.IsNullOrEmpty(col) Then
                    Dim virtColumn As IDTSVirtualInputColumn100 = virtInput.VirtualInputColumnCollection(col)
                    Call virtInput.SetUsageType(virtColumn.LineageID, DTSUsageType.UT_READWRITE)
                End If
            Next

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

        Validate = result
    End Function    'Validate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of current properties based on current state.
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        ' Setup static.
        Call result.Add("InputColumns")
        Call result.Add("Action")
        Call result.Add("EncryptionType")
        Call result.Add("IsPasswordVariable")

        ' Setup dynamic.
        Call result.Add(IIf(Me.IsPasswordVariable, "PasswordVariable", "Password"))

        If Me.EncryptionType = EncryptionTypes.RSA Then
            Call result.Add("IsCertificateFileVariable")
            Call result.Add(IIf( _
                Me.IsCertificateFileVariable, _
                "CertificateFileVariable", _
                "CertificateFile"))
        End If

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns only columns with type DT_IMAGE.
    Public Function GetInputColumns() As Object()
        Dim result As New ArrayList

        Dim virtInput As IDTSVirtualInput100 = MyBase.ComponentMetaData.InputCollection(0).GetVirtualInput()
        For Each virtColumn As IDTSVirtualInputColumn100 In virtInput.VirtualInputColumnCollection
            If virtColumn.DataType = DataType.DT_IMAGE Then
                Call result.Add(virtColumn.Name)
            End If
        Next

        Call result.Sort()

        GetInputColumns = result.ToArray()
    End Function    ' GetInputColumns


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select input columns you want to process.")> _
    <List("GetInputColumns", True, False)> _
    Public Property InputColumns() As String
        Get
            InputColumns = m_inputCols
        End Get
        Set(ByVal value As String)
            Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
            If Not input.IsAttached Then
                ' Reset when no input is attached.
                value = String.Empty
            End If

            m_inputCols = value
        End Set
    End Property    ' InputColumns


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select action.")> _
    Public Property Action() As ActionTypes
        Get
            Action = m_action
        End Get
        Set(ByVal value As ActionTypes)
            m_action = value
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select encryption type.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property EncryptionType() As EncryptionTypes
        Get
            EncryptionType = m_type
        End Get
        Set(ByVal value As EncryptionTypes)
            m_type = value
        End Set
    End Property    ' EncryptionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies if Password property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsPasswordVariable() As Boolean
        Get
            IsPasswordVariable = m_isPasswordVar
        End Get
        Set(ByVal value As Boolean)
            If m_isPasswordVar <> value Then
                m_isPasswordVar = value
                m_password = String.Empty
            End If
        End Set
    End Property    ' IsPasswordVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify password.")> _
    <PasswordPropertyText(True)> _
    Public Property Password() As String
        Get
            Password = m_password
        End Get
        Set(ByVal value As String)
            m_password = value
        End Set
    End Property    ' Password


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies variable containing password.")> _
    <Variable()> _
    Public Property PasswordVariable() As String
        Get
            PasswordVariable = m_password
        End Get
        Set(ByVal value As String)
            m_password = value
        End Set
    End Property    ' PasswordVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies if CertificateFile property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsCertificateFileVariable() As Boolean
        Get
            IsCertificateFileVariable = m_isCertificateVar
        End Get
        Set(ByVal value As Boolean)
            If m_isCertificateVar <> value Then
                m_isCertificateVar = value
                m_certificate = String.Empty
            End If
        End Set
    End Property    ' IsCertificateFileVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select certificate file (.cer|.pem)")> _
    <Editor(GetType(FileNameEditor), GetType(UITypeEditor))> _
    Public Property CertificateFile() As String
        Get
            CertificateFile = m_certificate
        End Get
        Set(ByVal value As String)
            m_certificate = value
        End Set
    End Property    ' CertificateFile


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies variable containing certificate file.")> _
    <Variable()> _
    Public Property CertificateFileVariable() As String
        Get
            CertificateFileVariable = m_certificate
        End Get
        Set(ByVal value As String)
            m_certificate = value
        End Set
    End Property    ' CertificateFileVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object
        Dim vars As IDTSVariables100 = Nothing

        Call Me.VariableDispenser.LockOneForRead(varName, vars)
        Try
            result = vars(varName).Value
        Finally
            Call vars.Unlock()
        End Try

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function CreateEncryptor_() As Object
        Dim result As Object

        ' Get password.
        Dim password As String = Me.Password
        If Me.IsPasswordVariable AndAlso _
            Not String.IsNullOrEmpty(Me.PasswordVariable) Then

            password = GetVariable_(Me.PasswordVariable).ToString()
        End If

        If password = "" Then
            password = Nothing
        End If

        ' Setup key derivation from password.
        Dim der As New Rfc2898DeriveBytes( _
            Me.Password, _
            Encoding.ASCII.GetBytes(Salt))

        Select Case Me.EncryptionType
            Case EncryptionTypes.AES
                Dim aes As Rijndael = Rijndael.Create()
                aes.Key = der.GetBytes(32)
                aes.IV = der.GetBytes(16)
                result = aes

            Case EncryptionTypes.RSA
                ' Get certificate file.
                Dim cerFile As String = Me.CertificateFile
                If Me.IsCertificateFileVariable AndAlso _
                    Not String.IsNullOrEmpty(Me.CertificateFileVariable) Then

                    cerFile = GetVariable_(Me.CertificateFileVariable).ToString()
                End If

                Dim cer As X509Certificate2 = New X509Certificate2(cerFile, password)
                If Me.Action = ActionTypes.Decryption AndAlso cer.PrivateKey Is Nothing Then
                    Throw New Exception("Private key not found.")
                End If

                result = cer

            Case EncryptionTypes.TripleDES
                Dim tripleDes As TripleDES = TripleDESCryptoServiceProvider.Create()
                tripleDes.Key = der.GetBytes(24)
                tripleDes.IV = der.GetBytes(8)
                result = tripleDes

            Case EncryptionTypes.DES
                Dim des As DES = des.Create()
                des.Key = der.GetBytes(8)
                des.IV = der.GetBytes(8)
                result = des

            Case EncryptionTypes.RC2
                Dim rc2 As RC2 = rc2.Create()
                rc2.Key = der.GetBytes(16)
                rc2.IV = der.GetBytes(8)
                result = rc2

            Case Else
                Throw New Exception("Unhandled encryption type.")
        End Select

        CreateEncryptor_ = result
    End Function    ' CreateEncryptor_
#End Region ' Internals


#Region "Attributes"
    Public Enum ActionTypes
        Encryption
        Decryption
    End Enum    ' ActionTypes

    Public Enum EncryptionTypes
        AES
        RSA
        TripleDES
        DES
        RC2
    End Enum    ' EncryptionTypes

    Private m_inputCols As String = String.Empty
    Private m_action As ActionTypes = ActionTypes.Encryption
    Private m_type As EncryptionTypes = EncryptionTypes.AES
    Private m_isPasswordVar As Boolean
    Private m_password As String
    Private m_isCertificateVar As Boolean
    Private m_certificate As String

    Private m_inputIdx() As Integer
    Private m_encryptor As Object
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    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_fbafc79217dc4580a2e147cada70a786.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{2DA083C7-5AB8-4B54-A0DF-3CA8C20C8EB0}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_fbafc79217dc4580a2e147cada70a786</RootNamespace>
    <AssemblyName>ScriptComponent_fbafc79217dc4580a2e147cada70a786</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <OptionCompare>Binary</OptionCompare>
    <OptionExplicit>On</OptionExplicit>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\CozyRoc.SSISPlus.2014.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Data">
      <Private>False</Private>
    </Reference>
    <Reference Include="Microsoft.SqlServer.ManagedDTS">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Design">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Drawing">
      <Private>False</Private>
    </Reference>
  </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>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </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="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_SC120" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC120</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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 InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        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[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:CodeName>ScriptComponent_fbafc79217dc4580a2e147cada70a786</msb:CodeName>
		<msb:DisplayName>ScriptComponent_fbafc79217dc4580a2e147cada70a786</msb:DisplayName>
		<msb:ProjectId>{AF315F8D-9D1A-41E3-B95C-264B8F9A91DC}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptComponent_fbafc79217dc4580a2e147cada70a786.vbproj"/>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="19" name="BinaryCode" state="cdata" dataType="System.String" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_fbafc79217dc4580a2e147cada70a786.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
tgkTAAYABArlCQYAGAqYARIAHwp3AwYALAqYAR4AjwpmCh4AvgpmCh4A6QpmChYADAt3AwYANAsX
CwYASwtBCwYAWAsXCxoAmQtrCwYAqgsXCwYA7AsXCwYADQxBCwYAFAwXCxoASwxrCwYAYwwXCwYA
ngyYAQYAxgyYAR4AzAxmChYADQ13Ax4AMQ1mCh4AWA1mCh4Ajw1mCh4Aow1mCgYAvQ2YAQYA1Q2Y
AR4ACA5mCh4ATQ5mCgoAZw6yCAYAtA6hDgoAwg4TAAYA0g6hDiIAQw8bDwYAaw+YASIAiw8bDyIA
nA8bDyIA2g8bDwYA8Q8XCwYABBAXCwYAAggXCwYADAgXCwYAEAgXCwoADRCyCAYAMRAlEBIAYxB3
Aw4ArBCKEA4AxhCKEA4A4hCKEBoA+hAUCA4ADxGKEBoAIREUCBoAXBEUCBoAbBEUCBoAhxEUCA4A
mRGKEA4ApxGKEAYAvRE7CQYA3RE7CQYAFRL7EQAAAAABAAAAAAABAAEAAAAAACkANwAFAAEAAQAA
AAAAawA3AAkAAQACAAABEAB2ADcADQABAAMABQEAAIAAAAANAAUACAAFAQAAjgAAAA0ABQAPAAEA
AACpALUAHQAGABEAAQAAAOYAtQAtAAYAFgABAAAA9AC1AA0ACAAaAAEAAAAAAbUADQAJABsAAQAA
AAoBtQAgAAoAHAACAQAAFQEAADEAFQA2AAIBAAAhAQAAMQAYADYAMQC6ASAAMQDjAS0AMQAFAjoA
MQAqAkcAIQAGA5AABgD0AMkABgAAAc0AAQDcBOEAAQDcBOEAUYDsBOsAUYD8BOsAAQDWBusAAQDi
BmgBAQDrBmwBAQDyBnABAQACB+sAAQANB3ABAQAgB+sAAQAuB3MBAQA5B3cBBgbcB4wBVoDkB2gB
VoDvB2gBBgbcB4wBVoD6B2wBVoD+B2wBVoACCGwBVoAMCGwBVoAQCGwBUCAAAAAABhhrARMAAQBY
IAAAAAAGGGsBEwABAGAgAAAAABEYpgEXAAEAjCAAAAAAEwitARsAAQCkIAAAAAATCNMBKAABALwg
AAAAABMI/AE1AAEA1CAAAAAAEwgaAkIAAQDsIAAAAABGAmACYwABAAghAAAAAEYCaQJoAAIAHCEA
AAAAgwB6AmwAAgA0IQAAAABGAoICcQACAEghAAAAABEAiwJ4AAIAZCEAAAAAAQCpAoAAAwCAIQAA
AAAGGGsBEwAEAIghAAAAAAMIvQKLAAQAvCEAAAAABhhrARMABADQIQAAAAAGGGsBrwAEAOAhAAAA
AEYKEgS7AAkA9CEAAAAARgopBLsACQAIIgAAAACGAEEEwAAJACAiAAAAAIYASQTAAAkAOCIAAAAA
BhhrARMACQBYIgAAAABGApAE0QAJAIgiAAAAAEYDrwTbAA0AnCIAAAAARgPCBNsADgCgIgAAAAAG
GGsB5QAPALAiAAAAAAYYawHlABAAwCIAAAAABhhrARMAEQDkIgAAAABGAsIE2wARAFAkAAAAAEYC
AQUTABIA7CQAAAAABgAMBTQBEgD8JQAAAAAGACAFuwATAKwmAAAAAAYALgU6ARMAUCcAAAAABgg+
BXEAEwBoJwAAAAAGCE8FPwETAKQnAAAAAAYIZgVEARQAvCcAAAAABghxBUkBFADIJwAAAAAGCHwF
TwEVAOAnAAAAAAYIjwVUARUA7CcAAAAABgiiBcAAFgAEKAAAAAAGCLkFWgEWACQoAAAAAAYI0AVx
ABcAPCgAAAAABgjdBT8BFwBIKAAAAAAGCOoFcQAYAGAoAAAAAAYI/wU/ARgAbCgAAAAABggUBsAA
GQCEKAAAAAAGCDIGWgEZAKQoAAAAAAYIUAZxABoAvCgAAAAABghkBj8BGgDIKAAAAAAGCHgGcQAb
AOAoAAAAAAYIlAY/ARsA7CgAAAAAAQCwBl8BHAA8KQAAAAABAMUGZAEdAAAAAQBnAgAAAQCgAgAA
AQCgAgAAAQDmAwAAAgDwAwAAAwD5AwAABAABBAAABQAIBAAAAQCdBAAAAgClBAAAAwABBAAABAAI
BAAAAQABBAAAAQDYBAAAAQDmAwAAAQDmAwAAAQDYBAAAAQAVBQAAAQBgBQAAAQBgBQAAAQBgBQAA
AQBgBQAAAQBgBQAAAQBgBQAAAQBgBQAAAQBgBQAAAQBgBQAAAQC9BgkAawETAGkAawGoAXkAawG3
AREAawETAIEAawETACQAawETACwAawETADQAawETADwAawETACQAvQKLACwAvQKLADQAvQKLADwA
vQKLAIkAawETAJEAawETAJkAawE/AaEAaglMAhkAYAJjABkAaQJoACkAiwlZAhkAggJxALEApwlp
AhkAawETALkAawF5AkQABgOQAEwA0QmLAEwA2wn2AkwAawETAMEAawFaATkAawGvANEAQQTAANEA
SQTAANkAawFaAVkAawETAEEAqAoQA+EA1QoVA+kA9goaA/EA/wpoAMkABgvrADkAwwsgA0kAzgsl
A0kA9goqA/kA1QsvA/kA4AszAwkBawETABEB/Qs6AwEBawFAAxEBJQw6AwEBNQxNAzEBOwwTAAkB
QwxVAxkBVQxaA0EBdwxgAyEBfwxmAxkBhwxgAyEBlgxmA1EBpAxuA/kArAwTAPkAugx1A0EAAQUT
APEA6QyXA2EBAw1oAFkAHw2dA2kBRg2jA/EAwwtoAGEB9gqpA3kBaw1oAHEBeQ2wA8kAxw2+A5EB
awE/AckA6A3DA/EA7g3NA2EB/g0TAIEBLA7TA6EB9grZA4kBaw1oAIEBWg7gA7EBcw7oA5EBgw5x
ALEBjw4XALkBawETALkBvg4HBMEBzg4MBLkBQwwTBKEB3g4mBMkB7A5kAYkBTA8sBIkBWQ9xAMkB
Yg/AANkBOwwTALkBdw8TALkBQww6AfEAfA/AAEEAtQ9SBOkByw9YBOEB9gphBPEB0QlkAeEB6g8T
ACECFxBwBCkCOhB3BCkCRBB9BPkBawGDBAECTRCKBPkBRBCQBBEBVBB1AxEBXBB1AxkBawG3AQkC
TRCWBAkCVBB1AxECTRCcBBECVBB1AxkCTRCiBDECawETADkCawE/AUECawE/AUkCawHkBFECawE/
AVkCawETAGECawFaAWkCawHkBXECawEOB4ECawEyB4kCawETAJECawE9CJkCawETAKECawE/AQ4A
KADuAA4ALADzAAgAWACPAQgAXACUAQgAZACPAQgAaACUAQgAbACZAQgAcACeAQgAdACjASkAgwAG
Ai4A4wNCCC4A6wNLCC4A8wNqCEAAEwCuAUAAKwCUAUMAGwC9AUMAEwCuAUkAgwAkAmMAEwCuAWMA
GwC9AWkAgwAXAoAAKwCUAYMAewCUAYMAGwC9AYMAcwCUAYkAgwA4AqAAKwCUAaMAEwCuAaMAwwCB
AsAAKwCUAcMAEwCuAcMA6wAFA+AAKwCUAeMACwEFAwABKwCUAQABEwCuAQMBCwEFAwkB0wM5BwkB
qwNQByABEwCuASABKwCUASkBqwOGBUABKwCUAUABEwCuAUkBywOuAUkBqwMVB2ABEwCuAWABKwCU
AWMBmwPWBGMBkwPDBGMBowPqBGMBCwEFA2MBiwOUAWkBywOuAWkBqwO0B2kB2wOUAYABKwCUAYkB
uwPHBYkBqwPNBaABKwCUAakBswOUAakBqwOaBcABEwCuAcABKwCUAckBywOuAckB2wOUAckBqwP1
B+ABKwCUAekBwwPsBekBqwPlBgACEwCuAQACKwCUAQkCswOUAQkCqwN/B0ADCwEFA2ADCwEFA/IB
9wH8AQECUQJVAmACZQJ0AnQC/AILAwsDUQJRAnsDtgPvAx4EMgRlAkMESARNBFECZQJlAlECZQJl
AmgEqAQEAAEABgAFAAcABgALAAgAAACPAU8AAABIAlQAAAD3AVkAAABUAl4AAAAQA5gAAABVBMQA
AABoBMQAAABFB3oBAABSB34BAABZB4MBAABoB4gBAAB7B3oBAACEB3oBAACVB4gBAACvB3oBAAC/
B3oBAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAgATAA8AAQAjABEAAgAiABEA
AgAkABMAAQAlABMAAQAnABUAAgAmABUAAQApABcAAgAoABcAAgAqABkAAQArABkAAQAtABsAAgAs
ABsAAgAuAB0AAQAvAB0AAgAwAB8AAQAxAB8AAgAyACEAAQAzACEAdQB1AIgA1gHdAeQB6wHjAuoC
GwQEgAAAAAAAAAAAAAAAAAAAAAC1AAAABAAAAAAAAAAAAAAAAQAKAAAAAAAKAAAAAAAAAAAAAAAK
ABMAAAAAAAEAAAAAAAAAAAAAAJ0AHAMAAAAADAAAAAAAAAAAAAAApgBaAwAAAAAMAAAAAAAAAAAA
AACmAKgDAAAAAAQAAAAAAAAAAAAAAAEAmAEAAAAADAAAAAAAAAAAAAAApgBCCgAAAAAMAAAAAAAA
AAAAAACmAPgOAAAAAAQAAAAAAAAAAAAAAAoAPxEAAAAABAAAAAAAAAAAAAAACgBNEQAAAAAFAAQA
BgAEAAwACwANAAsAAAAQAAwAngIAABAAGQCeAgAAAAAbAJ4CLQBvAi0A8QIAAAAAADxNb2R1bGU+
AG1zY29ybGliAE1pY3Jvc29mdC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0aW9uAFNjcmlwdENvbXBv
bmVudF9mYmFmYzc5MjE3ZGM0NTgwYTJlMTQ3Y2FkYTcwYTc4Ni5NeQBNeUNvbXB1dGVyAE15UHJv
amVjdABNeVdlYlNlcnZpY2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVy
AFNjcmlwdENvbXBvbmVudF9mYmFmYzc5MjE3ZGM0NTgwYTJlMTQ3Y2FkYTcwYTc4NgBVc2VyQ29t
cG9uZW50AENvbm5lY3Rpb25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAEFjdGlvblR5cGVzAEVuY3J5
cHRpb25UeXBlcwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBBcHBs
aWNhdGlvbkJhc2UALmN0b3IATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0ZXIA
U3lzdGVtAE9iamVjdAAuY2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92aWRl
cgBnZXRfQXBwbGljYXRpb24AbV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1fVXNl
ck9iamVjdFByb3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQcm92
aWRlcgBBcHBsaWNhdGlvbgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBlAEdl
dFR5cGUAVG9TdHJpbmcAQ3JlYXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9fSW5z
dGFuY2VfXwBnZXRfR2V0SW5zdGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2VydmljZXMu
SW50ZXJuYWwAQ29udGV4dFZhbHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2MuU1NJ
U1BsdXMuMjAxNABDb3p5Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWljcm9z
b2Z0LlNxbFNlcnZlci5UeFNjcmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZQBT
Y3JpcHRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxpbmVC
dWZmZXIAT3V0cHV0TmFtZU1hcABDb21wb25lbnQAT2JqZWN0SUQASXNJbnB1dABCdWZmZXIAT3V0
cHV0TWFwAGdldF9TdGF0aWNJbnB1dENvbHVtbnMAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMATmV4
dFJvdwBFbmRPZlJvd3NldABTdGF0aWNJbnB1dENvbHVtbnMAU3RhdGljT3V0cHV0Q29sdW1ucwBT
Y3JpcHRDb21wb25lbnRQbHVzAFByb2Nlc3NJbnB1dABJbnB1dElEAElucHV0TmFtZQBJbnB1dF9Q
cm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0Um93AFJvdwBQYXJlbnRDb21wb25lbnQAQ29s
dW1uU2VwYXJhdG9yAFNhbHQAUHJlRXhlY3V0ZQBWYWxpZGF0ZQBlcnJNZXNzYWdlAEdldFByb3Bl
cnRpZXMAR2V0SW5wdXRDb2x1bW5zAGdldF9JbnB1dENvbHVtbnMAc2V0X0lucHV0Q29sdW1ucwB2
YWx1ZQBnZXRfQWN0aW9uAHNldF9BY3Rpb24AZ2V0X0VuY3J5cHRpb25UeXBlAHNldF9FbmNyeXB0
aW9uVHlwZQBnZXRfSXNQYXNzd29yZFZhcmlhYmxlAHNldF9Jc1Bhc3N3b3JkVmFyaWFibGUAZ2V0
X1Bhc3N3b3JkAHNldF9QYXNzd29yZABnZXRfUGFzc3dvcmRWYXJpYWJsZQBzZXRfUGFzc3dvcmRW
YXJpYWJsZQBnZXRfSXNDZXJ0aWZpY2F0ZUZpbGVWYXJpYWJsZQBzZXRfSXNDZXJ0aWZpY2F0ZUZp
bGVWYXJpYWJsZQBnZXRfQ2VydGlmaWNhdGVGaWxlAHNldF9DZXJ0aWZpY2F0ZUZpbGUAZ2V0X0Nl
cnRpZmljYXRlRmlsZVZhcmlhYmxlAHNldF9DZXJ0aWZpY2F0ZUZpbGVWYXJpYWJsZQBHZXRWYXJp
YWJsZV8AdmFyTmFtZQBDcmVhdGVFbmNyeXB0b3JfAG1faW5wdXRDb2xzAG1fYWN0aW9uAG1fdHlw
ZQBtX2lzUGFzc3dvcmRWYXIAbV9wYXNzd29yZABtX2lzQ2VydGlmaWNhdGVWYXIAbV9jZXJ0aWZp
Y2F0ZQBtX2lucHV0SWR4AG1fZW5jcnlwdG9yAElucHV0Q29sdW1ucwBBY3Rpb24ARW5jcnlwdGlv
blR5cGUASXNQYXNzd29yZFZhcmlhYmxlAFBhc3N3b3JkAFBhc3N3b3JkVmFyaWFibGUASXNDZXJ0
aWZpY2F0ZUZpbGVWYXJpYWJsZQBDZXJ0aWZpY2F0ZUZpbGUAQ2VydGlmaWNhdGVGaWxlVmFyaWFi
bGUARW51bQB2YWx1ZV9fAEVuY3J5cHRpb24ARGVjcnlwdGlvbgBBRVMAUlNBAFRyaXBsZURFUwBE
RVMAUkMyAFN5c3RlbS5Db21wb25lbnRNb2RlbABFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRp
dG9yQnJvd3NhYmxlU3RhdGUAU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0
dHJpYnV0ZQBTeXN0ZW0uRGlhZ25vc3RpY3MARGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9z
b2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2VydmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUA
SGlkZU1vZHVsZU5hbWVBdHRyaWJ1dGUAU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxw
S2V5d29yZEF0dHJpYnV0ZQBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVI
ZWxwZXJzAEdldE9iamVjdFZhbHVlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxl
AEFjdGl2YXRvcgBDcmVhdGVJbnN0YW5jZQBNeUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBnZXRf
VmFsdWUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxl
QXR0cmlidXRlAFN0cmluZwBTY3JpcHRCdWZmZXIAQ0xTQ29tcGxpYW50QXR0cmlidXRlAE1pY3Jv
c29mdC5TcWxTZXJ2ZXIuRFRTUGlwZWxpbmVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlBp
cGVsaW5lLldyYXBwZXIASURUU0NvbXBvbmVudE1ldGFEYXRhMTAwAGdldF9Db21wb25lbnRNZXRh
RGF0YQBJRFRTSW5wdXRDb2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbGxlY3Rpb24ASURUU0lucHV0
MTAwAGdldF9JdGVtAGdldF9JRABFbXB0eQBCbG9iQ29sdW1uAFN5c3RlbS5TZWN1cml0eS5Dcnlw
dG9ncmFwaHkAQ3J5cHRvU3RyZWFtAFN5c3RlbS5JTwBNZW1vcnlTdHJlYW0AU3ltbWV0cmljQWxn
b3JpdGhtAFN5c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHkuWDUwOUNlcnRpZmljYXRlcwBYNTA5
Q2VydGlmaWNhdGUyAFJTQUNyeXB0b1NlcnZpY2VQcm92aWRlcgBnZXRfQnVmZmVyAElzTnVsbABn
ZXRfTGVuZ3RoAEdldEJsb2JEYXRhAElDcnlwdG9UcmFuc2Zvcm0AQ3JlYXRlRW5jcnlwdG9yAFN0
cmVhbQBDcnlwdG9TdHJlYW1Nb2RlAENyZWF0ZURlY3J5cHRvcgBXcml0ZQBEaXNwb3NlAFRvQXJy
YXkAUHVibGljS2V5AGdldF9QdWJsaWNLZXkAQXN5bW1ldHJpY0FsZ29yaXRobQBnZXRfS2V5AEVu
Y3J5cHQAZ2V0X1ByaXZhdGVLZXkARGVjcnlwdABBcnJheQBSZXZlcnNlAFJlc2V0QmxvYkRhdGEA
QWRkQmxvYkRhdGEASW50MzIASURUU0lucHV0Q29sdW1uQ29sbGVjdGlvbjEwMABnZXRfSW5wdXRD
b2x1bW5Db2xsZWN0aW9uAGdldF9Db3VudABQaXBlbGluZUNvbXBvbmVudABnZXRfSG9zdENvbXBv
bmVudABJRFRTQnVmZmVyTWFuYWdlcjEwMABnZXRfQnVmZmVyTWFuYWdlcgBJRFRTSW5wdXRDb2x1
bW4xMDAAZ2V0X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQASURUU1ZpcnR1YWxJbnB1
dDEwMABJRFRTVmlydHVhbElucHV0Q29sdW1uMTAwAEV4Y2VwdGlvbgBJc051bGxPckVtcHR5AFN0
cmluZ1NwbGl0T3B0aW9ucwBTcGxpdABHZXRWaXJ0dWFsSW5wdXQAUmVtb3ZlQWxsAElEVFNWaXJ0
dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9WaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0
aW9uAERUU1VzYWdlVHlwZQBTZXRVc2FnZVR5cGUAUHJvamVjdERhdGEAU2V0UHJvamVjdEVycm9y
AGdldF9NZXNzYWdlAENsZWFyUHJvamVjdEVycm9yAFN5c3RlbS5Db2xsZWN0aW9ucwBBcnJheUxp
c3QAQWRkAEludGVyYWN0aW9uAElJZgBJRW51bWVyYXRvcgBHZXRFbnVtZXJhdG9yAGdldF9DdXJy
ZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZl
ci5EdHMuUnVudGltZS5XcmFwcGVyAERhdGFUeXBlAGdldF9EYXRhVHlwZQBnZXRfTmFtZQBNb3Zl
TmV4dABJRGlzcG9zYWJsZQBTb3J0AGdldF9Jc0F0dGFjaGVkAElEVFNWYXJpYWJsZXMxMDAASURU
U1ZhcmlhYmxlRGlzcGVuc2VyMTAwAGdldF9WYXJpYWJsZURpc3BlbnNlcgBMb2NrT25lRm9yUmVh
ZABJRFRTVmFyaWFibGUxMDAAVW5sb2NrAFJmYzI4OThEZXJpdmVCeXRlcwBSaWpuZGFlbABPcGVy
YXRvcnMAQ29tcGFyZVN0cmluZwBTeXN0ZW0uVGV4dABFbmNvZGluZwBnZXRfQVNDSUkAR2V0Qnl0
ZXMAQ3JlYXRlAHNldF9LZXkAc2V0X0lWAFNTSVNTY3JpcHRDb21wb25lbnRFbnRyeVBvaW50QXR0
cmlidXRlAENvenlSb2MuU3FsU2VydmVyLlNTSVMuQXR0cmlidXRlcwBGaWx0ZXJQcm9wZXJ0aWVz
QXR0cmlidXRlAFZhbGlkYXRlUHJvcGVydGllc0F0dHJpYnV0ZQBTb3J0UHJvcGVydGllc0F0dHJp
YnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBWYXJpYWJsZUF0dHJpYnV0ZQBQYXNzd29yZFByb3Bl
cnR5VGV4dEF0dHJpYnV0ZQBTeXN0ZW0uRGVzaWduAFN5c3RlbS5EcmF3aW5nAEVkaXRvckF0dHJp
YnV0ZQBSZWZyZXNoUHJvcGVydGllc0F0dHJpYnV0ZQBSZWZyZXNoUHJvcGVydGllcwBMaXN0QXR0
cmlidXRlAE5vbkVzc2VudGlhbEF0dHJpYnV0ZQBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmli
dXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLlZlcnNpb25p
bmcAVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF9mYmFmYzc5MjE3ZGM0
NTgwYTJlMTQ3Y2FkYTcwYTc4Ni5kbGwAAAALSQBuAHAAdQB0AAAjUwBwAGUAYwBpAGYAeQAgAHAA
YQBzAHMAdwBvAHIAZAAuAAAzUwBwAGUAYwBpAGYAeQAgAGMAZQByAHQAaQBmAGkAYwBhAHQAZQAg
AGYAaQBsAGUALgAABSwACgAAGUkAbgBwAHUAdABDAG8AbAB1AG0AbgBzAAANQQBjAHQAaQBvAG4A
AB1FAG4AYwByAHkAcAB0AGkAbwBuAFQAeQBwAGUAACVJAHMAUABhAHMAcwB3AG8AcgBkAFYAYQBy
AGkAYQBiAGwAZQAAIVAAYQBzAHMAdwBvAHIAZABWAGEAcgBpAGEAYgBsAGUAABFQAGEAcwBzAHcA
bwByAGQAADNJAHMAQwBlAHIAdABpAGYAaQBjAGEAdABlAEYAaQBsAGUAVgBhAHIAaQBhAGIAbABl
AAAvQwBlAHIAdABpAGYAaQBjAGEAdABlAEYAaQBsAGUAVgBhAHIAaQBhAGIAbABlAAAfQwBlAHIA
dABpAGYAaQBjAGEAdABlAEYAaQBsAGUAAAEAQTcAQQBEAEMAOAAzAEQAMAA1ADUARAA2ADQANQA5
AGMAOABDADEANwA5ADMAQwA4AEQANAAxAEEAMwA2AEYARQAALVAAcgBpAHYAYQB0AGUAIABrAGUA
eQAgAG4AbwB0ACAAZgBvAHUAbgBkAC4AADVVAG4AaABhAG4AZABsAGUAZAAgAGUAbgBjAHIAeQBw
AHQAaQBvAG4AIAB0AHkAcABlAC4AAABEz+6cBFUkRZmmiI1/hPi8AAi3elxWGTTgiQiwP19/EdUK
OgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABIIBwYVEhgBEggEAAASEQcGFRIYARIRBAAAEhQHBhUS
GAESFAQIABIMBAgAEggECAASEQQIABIUBCABAhwDIAAIBCAAEhUDIAAOAh4ABxABAR4AHgAHMAEB
ARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgWz0kLuAw06giJhF3NgIDMkQsgBQESIQgCEiUSKQQg
AB0OAyAAAgQoAB0OAwYSJAMGEigJIAQBCA4SJRIpBSABARIcAwYSIQUgAQESIQIGDgQsAAoAQDcA
QQBEAEMAOAAzAEQAMAA1ADUARAA2ADQANQA5AGMAOABDADEANwA5ADMAQwA4AEQANAAxAEEAMwA2
AEYARQAFIAECEA4EIAAdHAQgAQEOBCAAETAFIAEBETAEIAARNAUgAQERNAQgAQECBCABHA4DIAAc
AwYRMAMGETQCBgIDBh0IAgYcAygADgQoABEwBCgAETQDKAACAgYIBAAAAAAEAQAAAAQCAAAABAMA
AAAEBAAAAAUgAQEROQgBAAEAAAAAAAUgAgEODhgBAApNeVRlbXBsYXRlCDEwLjAuMC4wAAAGFRIY
ARIMBhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQQAQALTXkuQ29tcHV0
ZXIAAAwBAAdNeS5Vc2VyAAATAQAOTXkuQXBwbGljYXRpb24AABMBAA5NeS5XZWJTZXJ2aWNlcwAA
BAABHBwDBwECAwcBCAYAARIVEVUEBwESFQMHAQ4FEAEAHgAECgEeAAQHAR4AByAEAQ4ODg5hAQA0
U3lzdGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBDbGllbnRQcm90b2NvbBJDcmVh
dGVfX0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZARMABAoBEwAF
IAEBEwAIBwMTABMAEwAFAQAAAAAEBwEdDgQgABJxBCAAEnUFIAESeRwEIAASJQQgAQIIBCABHAgD
IAAJBiACHQUICAUgABKAlQwgAwESgJkSgJURgJ0HIAMBHQUICAQgAB0FBSAAEoChBSAAEoClByAC
HQUdBQIGAAEBEoCpBSABAR0FGwcMCBJ9CAgdBRKAgRKAhRKAiRKAjRKAkQgRNAUgABKAsQUgABKA
tQUgABKAuQYgARKAvRwFIAIICAgHBwQIEnkICAQAAQIOCSACHQ4dDhGAzQUgABKAwQUgABKA0QYg
ARKAxRwHIAIICBGA1QYAAQESgMkXBwsCAhJ5HQ4SgMEOEoDFEoDJHQ4IHQ4EIAEIHAYAAxwCHBwH
IAESgKkSFQIdDgcHAh0OEoDdBSAAEoDlBSAAEYDpEAcFHRwSgN0SgMESgMUSgOUEBwESeQQHAREw
BAcBETQFIAASgPUIIAIBDhASgPEGIAESgPkcBwcDHBwSgPEGAAMIDg4CBQAAEoEVBSABHQUOBiAC
AQ4dBQUAABKBAQUgAR0FCAUAABKBBQUAABKBCQUAABKBDRoHCxwSgP0OHBKBARKAjQ4SgQUSgQkS
gQ0RNBIBAA1HZXRQcm9wZXJ0aWVzAAANAQAIVmFsaWRhdGUAAAUgAQEdDoCaAQAJAAAADElucHV0
Q29sdW1ucwZBY3Rpb24ORW5jcnlwdGlvblR5cGUZSXNDZXJ0aWZpY2F0ZUZpbGVWYXJpYWJsZQ9D
ZXJ0aWZpY2F0ZUZpbGUXQ2VydGlmaWNhdGVGaWxlVmFyaWFibGUSSXNQYXNzd29yZFZhcmlhYmxl
CFBhc3N3b3JkEFBhc3N3b3JkVmFyaWFibGUAABMBAA5TZWxlY3QgYWN0aW9uLgAALAEAJ1NwZWNp
ZmllcyB2YXJpYWJsZSBjb250YWluaW5nIHBhc3N3b3JkLgAABQEAAQAAFgEAEVNwZWNpZnkgcGFz
c3dvcmQuAAAHIAIBEhUSFYD3AQB8U3lzdGVtLldpbmRvd3MuRm9ybXMuRGVzaWduLkZpbGVOYW1l
RWRpdG9yLCBTeXN0ZW0uRGVzaWduLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwg
UHVibGljS2V5VG9rZW49YjAzZjVmN2YxMWQ1MGEzYXVTeXN0ZW0uRHJhd2luZy5EZXNpZ24uVUlU
eXBlRWRpdG9yLCBTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRy
YWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EAACgBACNTZWxlY3QgY2VydGlmaWNh
dGUgZmlsZSAoLmNlcnwucGVtKQAABiABARGBPRwBABdTZWxlY3QgZW5jcnlwdGlvbiB0eXBlLgAA
BiADAQ4CAhYBAA9HZXRJbnB1dENvbHVtbnMBAAAALgEAKVNlbGVjdCBpbnB1dCBjb2x1bW5zIHlv
dSB3YW50IHRvIHByb2Nlc3MuAAA0AQAvU3BlY2lmaWVzIHZhcmlhYmxlIGNvbnRhaW5pbmcgY2Vy
dGlmaWNhdGUgZmlsZS4AAEABADtTcGVjaWZpZXMgaWYgUGFzc3dvcmQgcHJvcGVydHkgcmVmZXJl
bmNlcyBwYWNrYWdlIHZhcmlhYmxlLgAARwEAQlNwZWNpZmllcyBpZiBDZXJ0aWZpY2F0ZUZpbGUg
cHJvcGVydHkgcmVmZXJlbmNlcyBwYWNrYWdlIHZhcmlhYmxlLgAABCABAQgIAQAIAAAAAAAeAQAB
AFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBRwEAGi5ORVRGcmFtZXdvcmssVmVyc2lvbj12NC4w
AQBUDhRGcmFtZXdvcmtEaXNwbGF5TmFtZRAuTkVUIEZyYW1ld29yayA0AABUVwAAAAAAAAAAAABu
VwAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYFcAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2Nv
cmVlLmRsbAAAAAAA/yUAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAQAAAAGAAAgAAAAAAA
AAAAAAAAAAAAAQABAAAAMAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAASAAAAFhgAADsAgAAAAAAAAAA
AADsAjQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYATwAAAAAAvQTv/gAAAQAAAAAAAAAA
AAAAAAAAAAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAEQAAAABAFYAYQByAEYAaQBsAGUA
SQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAAAAAAALAETAIAAAEAUwB0
AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAAKAIAAAEAMAAwADAAMAAwADQAYgAwAAAALAACAAEA
RgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAACAAAAAwAAgAAQBGAGkAbABlAFYAZQBy
AHMAaQBvAG4AAAAAADAALgAwAC4AMAAuADAAAACMADUAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0A
ZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AZgBiAGEAZgBjADcAOQAyADEANwBk
AGMANAA1ADgAMABhADIAZQAxADQANwBjAGEAZABhADcAMABhADcAOAA2AC4AZABsAGwAAAAAACgA
AgABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAACAAAACUADUAAQBPAHIAaQBnAGkAbgBh
AGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwBmAGIA
YQBmAGMANwA5ADIAMQA3AGQAYwA0ADUAOAAwAGEAMgBlADEANAA3AGMAYQBkAGEANwAwAGEANwA4
ADYALgBkAGwAbAAAAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMAAuADAA
LgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAwAC4AMAAu
ADAALgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADAAAAIA3AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property><property id="24" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="26" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_fbafc79217dc4580a2e147cada70a786</property><property id="27" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><inputs><input id="29" name="Input" hasSideEffects="true"></input></inputs><outputs><output id="31" name="Output" synchronousInputId="29"><externalMetadataColumns /></output></outputs></component>