<component id="75" name="Script Component" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script" localeId="1033" version="11" 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="79" 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.Xml
Imports System.Web.Services.Protocols

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() {"Connection", "SalesforceObject", "KeyField", "ValueField", "UseCache"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const QueryTemplate_3P As String = "select {0} from {1} where {2}"
    Private Const ListDelimiter As String = "," + vbLf


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim valueList() As String

        If m_cache Is Nothing Then
            valueList = GetLookupRow_(Row)
        Else
            ' Cache is enabled.
            Dim cacheKey As String = GetCacheKey_(Row)

            If m_cache.Contains(cacheKey) Then
                valueList = CType(m_cache(cacheKey), String())
            Else
                valueList = GetLookupRow_(Row)
                m_cache(cacheKey) = valueList
            End If
        End If

        If Not valueList Is Nothing Then
            Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)

            ' Lookup row found.
            Dim colsCount As Integer = m_valueIdx.Length
            For colIndex As Integer = 0 To colsCount - 1
                Dim value As String = valueList(colIndex)
                Dim valueIndex As Integer = m_valueIdx(colIndex)

                If String.IsNullOrEmpty(value) Then
                    Call Row.Buffer.SetNull(valueIndex)
                    Continue For
                End If

                Try
                    Select Case m_valueType(colIndex)
                        Case DataType.DT_DBTIMESTAMP
                        Case DataType.DT_DATE
                        Case DataType.DT_FILETIME
                        Case DataType.DT_DBDATE
                            Row.Buffer(valueIndex) = Convert.ToDateTime(value)

                        Case DataType.DT_IMAGE
                            Row.Buffer(valueIndex) = Convert.FromBase64String(value)

                        Case Else
                            Row.Buffer(valueIndex) = value
                    End Select
                Catch ex As Exception
                    Call FireError_(String.Format( _
                        "Failed to process '{0}' for column '{1}'.", _
                        value, _
                        output.OutputColumnCollection(colIndex).Name))
                End Try
            Next
        End If
    End Sub ' Input_ProcessInputRow


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

        ' Setup connection.
        m_connection = CType( _
            Me.Connections.Connection.AcquireConnection(Nothing), _
            ISforceConnection)
        m_service = CType(m_connection.Connect(), SforceService)

        If Me.UseCache Then
            m_cache = New Hashtable()
        End If

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim colsCount As Integer = input.InputColumnCollection.Count

        ' Setup key index and where list.
        m_keyIdx = New Integer(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(colIndex)

            ' Set key index.
            m_keyIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)

            ' Set where list.
            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)

            If Not String.IsNullOrEmpty(m_whereTemplate_P) Then
                m_whereTemplate_P += " AND "
            End If

            m_whereTemplate_P += String.Format( _
                "{0} = {1}", _
                extCol.Name, _
                "{" + colIndex.ToString() + "}")
        Next

        Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
        colsCount = output.OutputColumnCollection.Count

        ' Setup value index and field list.
        m_valueIdx = New Integer(colsCount - 1) {}
        m_valueType = New DataType(colsCount - 1) {}
        Dim fieldList As String = String.Empty
        For colIndex As Integer = 0 To colsCount - 1
            Dim outputCol As IDTSOutputColumn100 = output.OutputColumnCollection(colIndex)

            ' Set value index and type.
            m_valueIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                outputCol.LineageID)
            m_valueType(colIndex) = outputCol.DataType

            ' Set field list.
            If Not String.IsNullOrEmpty(fieldList) Then
                fieldList += ", "
            End If

            fieldList += outputCol.Name
        Next

        ' Setup query template.
        m_queryTemplate_1P = String.Format( _
            QueryTemplate_3P, _
            fieldList, _
            Me.SalesforceObject, _
            "{0}")
    End Sub ' PreExecute


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

        Call m_connection.Close()
    End Sub ' PostExecute


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

        Try
            If String.IsNullOrEmpty(Me.Connection) Then
                Throw New ApplicationException("Select Salesforce connection.")
            End If

            If String.IsNullOrEmpty(Me.SalesforceObject) Then
                Throw New ApplicationException("Select object.")
            End If

            If String.IsNullOrEmpty(Me.KeyField) Then
                Throw New ApplicationException("Specify key field(s).")
            End If

            If String.IsNullOrEmpty(Me.ValueField) Then
                Throw New ApplicationException("Select value field.")
            End If

            Dim keyList() As String = Me.KeyField.Split( _
                New String() {ListDelimiter}, _
                StringSplitOptions.None)

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso input.InputColumnCollection.Count < keyList.Length Then
                Throw New Exception("Map input columns.")
            End If

            Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
            If output.OutputColumnCollection.Count = 0 Then
                ' Setup collection output columns.
                Call SetupOutputColumns_()
            End If

            ' Store connection information in the runtime connection collection, too.
            ' Cannot directly use RuntimeConnectionCollection in the property get/set
            ' because of issues with multi-threading.
            Me.ComponentMetaData.RuntimeConnectionCollection("Connection").ConnectionManagerID = Me.Connection

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

        Validate = result
    End Function    'Validate


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

        If MyBase.ComponentMetaData.InputCollection.Count = 0 Then
            ' At least one input must exist.
            Throw New Exception("No inputs.")
        End If

        If String.IsNullOrEmpty(Me.KeyField) Then
            Throw New Exception("Key field(s) not selected.")
        End If

        ' Get object fields.
        Dim fieldList() As Field = GetFields_()

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

        ' Cleanup.
        input.ExternalMetadataColumnCollection.IsUsed = True
        Call input.InputColumnCollection.RemoveAll()
        Call input.ExternalMetadataColumnCollection.RemoveAll()

        ' Setup field metadata.
        Dim keyList() As String = Me.KeyField.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)
        For Each key As String In keyList
            ' Find field.
            Dim field As Field = FindField_(fieldList, key)

            Dim dtsType As DataType
            Dim fieldLen, prec, scale, codePage As Integer
            Call GetDtsTypeFromField_(field, dtsType, fieldLen, prec, scale, codePage)

            ' Setup external column.
            Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.[New]()
            column.Name = field.name
            column.DataType = dtsType
            column.Length = fieldLen
            column.Precision = prec
            column.Scale = scale
            column.CodePage = codePage
        Next
    End Sub ' ReinitializeMetaData


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of objects in the currently selected Salesforce connection.
    Public Function GetObjectList() As String()
        Dim result As New ArrayList

        Dim connection As ISforceConnection = CType( _
            Me.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
            ISforceConnection)
        Dim service As SforceService = CType(connection.Connect(), SforceService)

        Try
            Dim dgr As DescribeGlobalResult = service.describeGlobal()

            For Each sobject As DescribeGlobalSObjectResult In dgr.sobjects
                If sobject.queryable Then
                    Call result.Add(sobject.name)
                End If
            Next

            Call result.Sort()
        Finally
            Call connection.Close()
        End Try

        GetObjectList = CType(result.ToArray(GetType(String)), String())
    End Function    ' GetObjectList


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of fields in the currently selected object.
    Public Function GetFieldList() As String()
        Dim result As ArrayList = New ArrayList()

        Dim fieldList() As Field = GetFields_()
        For Each field As Field In fieldList
            Call result.Add(field.name)
        Next

        Call result.Sort()

        GetFieldList = CType(result.ToArray(GetType(String)), String())
    End Function    ' GetFieldList


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select Salesforce Connection Manager.")> _
    <Connection("ConnectionType")> _
    Public Property Connection() As String
        Get
            Connection = m_sforceConnection
        End Get
        Set(ByVal value As String)
            m_sforceConnection = value
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select lookup object.")> _
    <List("GetObjectList")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property SalesforceObject() As String
        Get
            SalesforceObject = m_object
        End Get
        Set(ByVal value As String)
            If m_object <> value Then
                m_object = value

                m_fields = Nothing
                Me.KeyField = String.Empty
                Me.ValueField = String.Empty
            End If
        End Set
    End Property    ' SalesforceObject


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more key fields.")> _
    <List("GetFieldList", True, False)> _
    Public Property KeyField() As String
        Get
            KeyField = m_keyField
        End Get
        Set(ByVal value As String)
            If m_keyField <> value Then
                If Not String.IsNullOrEmpty(m_keyField) Then
                    ' Force external columns to be reloaded.
                    If Me.ComponentMetaData.InputCollection.Count > 0 Then
                        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                        Call input.ExternalMetadataColumnCollection.RemoveAll()
                    End If
                End If

                m_keyField = value
            End If
        End Set
    End Property    ' KeyField


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more lookup fields.")> _
    <List("GetFieldList", True, False)> _
    Public Property ValueField() As String
        Get
            ValueField = m_valueField
        End Get
        Set(ByVal value As String)
            If m_valueField <> value Then
                If Not String.IsNullOrEmpty(m_valueField) Then
                    ' Force output columns to be reloaded.
                    If Me.ComponentMetaData.OutputCollection.Count > 0 Then
                        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)
                        Call output.OutputColumnCollection.RemoveAll()
                    End If
                End If

                m_valueField = value
            End If
        End Set
    End Property    ' ValueField


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select whether memory cache is used.")> _
    <DefaultValue(True)> _
    Public Property UseCache() As Boolean
        Get
            UseCache = m_useCache
        End Get
        Set(ByVal value As Boolean)
            m_useCache = value
        End Set
    End Property    ' UseCache
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property ConnectionType() As String()
        Get
            ConnectionType = New String() {"SFORCE"}
        End Get
    End Property    ' ConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean = False
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Salesforce Lookup", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function FindField_( _
        ByVal fieldList() As Field, _
        ByVal name As String) As Field

        Dim result As Field = Nothing

        For Each field As Field In fieldList
            If field.name.Equals(name, StringComparison.OrdinalIgnoreCase) Then
                ' Found.
                result = field
                Exit For
            End If
        Next

        If result Is Nothing Then
            Throw New Exception(String.Format("'{0}' field not found.", name))
        End If

        FindField_ = result
    End Function    ' FindField_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Setups cache key based on specified key attributes.
    Private Function GetCacheKey_(ByVal row As InputBuffer) As String
        Dim result As String = String.Empty

        For Each idx As Integer In m_keyIdx
            Dim key As String = String.Empty
            If Not row.Buffer.IsNull(idx) Then
                key = row.Buffer(idx).ToString() + "_"
            End If

            result += key
        Next

        GetCacheKey_ = result
    End Function    ' GetCacheKey_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Uses SOQL to retrieve required lookup row.
    Private Function GetLookupRow_(ByVal row As InputBuffer) As String()
        Dim result() As String = Nothing

        ' Setup fetch conditions.
        Dim colsCount As Integer = m_keyIdx.Length
        Dim whereList() As Object = New Object(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim keyIndex As Integer = m_keyIdx(colIndex)

            Dim key As String = String.Empty

            If row.Buffer.IsNull(keyIndex) Then
                key = "NULL"
            Else
                Dim keyObj As Object = row.Buffer(keyIndex)
                If TypeOf keyObj Is String Then
                    key = String.Format("'{0}'", keyObj)
                Else
                    key = keyObj.ToString()
                End If
            End If

            whereList(colIndex) = key
        Next

        ' Query data.
        Dim record As sObject = Nothing
        Dim query As String = String.Format( _
            m_queryTemplate_1P, _
            String.Format(m_whereTemplate_P, whereList))
        Try
            Dim qr As QueryResult = m_service.query(query)
            If Not qr.records Is Nothing AndAlso qr.records.Length > 0 Then
                record = qr.records(0)
            End If
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try

        If Not record Is Nothing Then
            Dim fieldsCount As Integer = m_valueIdx.Length
            result = New String(fieldsCount - 1) {}
            For fieldIndex As Integer = 0 To fieldsCount - 1
                Dim fieldNode As XmlElement = record.Any(fieldIndex)
                result(fieldIndex) = fieldNode.InnerText
            Next
        End If

        GetLookupRow_ = result
    End Function    ' GetLookupRow_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetFields_() As Field()
        Dim result() As Field = m_fields

        If result Is Nothing Then
            Dim connection As ISforceConnection = CType( _
                Me.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
                ISforceConnection)
            Dim service As SforceService = CType(connection.Connect(), SforceService)

            Try
                result = service.describeSObject(Me.SalesforceObject).fields
            Finally
                Call connection.Close()
            End Try

            m_fields = result
        End If

        GetFields_ = result
    End Function    ' GetFields_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetupOutputColumns_()
        ' Get entity attributes.
        Dim fieldList() As Field = GetFields_()

        Dim valueList() As String = Me.ValueField.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)

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

        For Each value As String In valueList
            ' Find Salesforce field.
            Dim field As Field = FindField_(fieldList, value)

            Dim dtsType As DataType
            Dim fieldLen, prec, scale, codePage As Integer
            Call GetDtsTypeFromField_(field, dtsType, fieldLen, prec, scale, codePage)

            ' Setup output column.
            Dim column As IDTSOutputColumn100 = output.OutputColumnCollection.[New]()
            column.Name = field.name
            Call column.SetDataTypeProperties( _
                dtsType, _
                fieldLen, _
                prec, _
                scale, _
                codePage)
        Next
    End Sub ' SetupOutputColumns_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub GetDtsTypeFromField_( _
        ByVal field As Field, _
        ByRef DtsType As DataType, _
        ByRef fieldLen As Integer, _
        ByRef Precision As Integer, _
        ByRef Scale As Integer, _
        ByRef CodePage As Integer)

        fieldLen = field.length
        Precision = field.precision
        Scale = field.scale
        CodePage = 0

        Select Case field.soapType
            Case soapType.tnsID
                DtsType = DataType.DT_WSTR
            Case soapType.xsdbase64Binary
                DtsType = DataType.DT_IMAGE
            Case soapType.xsdboolean
                DtsType = DataType.DT_BOOL
            Case soapType.xsddouble
                DtsType = DataType.DT_NUMERIC
            Case soapType.xsdint
                DtsType = DataType.DT_BYREF_I4
            Case soapType.xsddate
                DtsType = DataType.DT_DBDATE
            Case soapType.xsddateTime
                DtsType = DataType.DT_DBTIMESTAMP
            Case soapType.xsdtime
                DtsType = DataType.DT_DBTIME
            Case soapType.xsdanyType
                DtsType = DataType.DT_WSTR

            Case soapType.xsdstring
                DtsType = DataType.DT_WSTR
                If fieldLen >= 4000 Then
                    ' DT_WSTR is limited to 4000.
                    DtsType = DataType.DT_NTEXT
                    fieldLen = 0
                End If

            Case Else
                Throw New Exception("Unhandled soap type.")
        End Select
    End Sub ' GetDtsTypeFromField_
#End Region ' Internals


#Region "Attributes"
    Private m_sforceConnection As String
    Private m_object As String
    Private m_keyField As String
    Private m_valueField As String
    Private m_useCache As Boolean

    Private m_connection As ISforceConnection
    Private m_service As SforceService
    Private m_cache As Hashtable
    Private m_queryTemplate_1P As String
    Private m_whereTemplate_P As String
    Private m_keyIdx() As Integer
    Private m_valueIdx() As Integer
    Private m_fields() As Field
    Private m_valueType() As DataType
#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_7cc118c3a5214cd89c7935519574d29f.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>{F6F0D1F9-DEC6-4F4D-AAAA-EB4652DAE09F}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_22b4f911b2584ff4bfeab0b76184dee6</RootNamespace>
    <AssemblyName>ScriptComponent_22b4f911b2584ff4bfeab0b76184dee6</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </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.2017, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\140\SDK\Assemblies\CozyRoc.SSISPlus.2017.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=14.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=14.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=14.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=14.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS" />
    <Reference Include="CozyRoc.Sforce" />
    <Reference Include="System.Web.Services" />
    <Reference Include="System.Xml" />
  </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_SC110" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC140</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>
  <PropertyGroup>
    <OptionCompare>Binary</OptionCompare>
  </PropertyGroup>
  <PropertyGroup>
    <OptionExplicit>On</OptionExplicit>
  </PropertyGroup>
  <PropertyGroup>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
</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

    Public ReadOnly Property Connection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("Connection").ConnectionManager
        End Get
    End Property

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:CodeName>ScriptComponent_7cc118c3a5214cd89c7935519574d29f</msb:CodeName>
    <msb:Language>msBuild</msb:Language>
    <msb:DisplayName>ScriptComponent_7cc118c3a5214cd89c7935519574d29f</msb:DisplayName>
    <msb:ProjectId>{DB4188D8-71F5-46F2-AC56-3F27AA1F9A86}</msb:ProjectId>
  </msb:PropertyGroup>
  <msb:ItemGroup>
    <msb:Project Include="ScriptComponent_7cc118c3a5214cd89c7935519574d29f.vbproj" />
    <msb:File Include="ComponentWrapper.vb" />
    <msb:File Include="ScriptMain.vb" />
    <msb:File Include="BufferWrapper.vb" />
  </msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="80" 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_22b4f911b2584ff4bfeab0b76184dee6.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
VgwAAAUAeQsAAAEAXwIAAAIAZwUAAAMAVgwAAAQAeQsAAAEAVgwAAAEAihEAAAEAqxAAAAEAqxAA
AAEAaQsAAAEAiAQAAAEAiAQJAFMNAQARAFMNBgAZAFMNCgApAFMNEAAxAFMNFQBBAFMNGwBZAFMN
BgBhAFMNBgBpAFMNBgCBAFMNIQCRAFMNKQChAFMNEACpAFMNBgCxAFMNLgC5AFMNEADBAFMNBgDJ
AFMNKQBZAVMNEABhAVMNEABpAVMNEABxAVMNEACBAVMNNABxAVMNOwCJAVMNKQBJAFMNBgBRAFMN
BgAMAFMNBgAUAFMNBgAcAFMNBgAkAFMNBgAMAHgEXgAUAHgEXgAcAHgEXgAkAHgEXgDhAMkOdADh
ALoJeQDhAMMJgQCZAYQDhwDBAcwKjQDJAboJkwDZAfARmQCRASoMngChAacJAQDhAXoFpAChAcMJ
qwDhAdQIsQDxATkNtwD5AH0KvgD5AboJxAAhAVUFywDZAY8PzwDxAScN1gCZAXoIBgC5ASQLeQDR
AOsP8wDhAFMNBgDBAbgK9wABAroJ/QAJAWMKBAEJArUQCgEJAroJDgGxAaMQFQERAnMMGwEJASoM
CgERAf0BCgEZAgsCIQEJAT4KJwERASECCgEhAmcCLQHZAYgPNAEZAVUFywDRAfMIywDZAYgPOgH5
AbUQCgHZAfgRQQEhAf0BCgEhAcYFRAHZAY8PSQGZAYUIBgDRACwGBgApAlMNEADZAf8PXgEJAckD
aAEBAVMNEADBAZgKbAE5AroJcgFBAj4CEAABAbkEywCxAW8DBgABArUQCgEhAtgDKQAJAmEJBgAh
AmEJBgAhAmwRjgHpAHEFywAZAV4FEAAZAdMFlAEZAfwIAQAZAQQKAQAZAQUFAQAZAawEAQApAVMN
BgCxARQPrgFJAroJtAFRAiQLeQBZAhIJuwFhAlYPwQExASMFaAExAXEFywApAcUDyAEpAeQQBgCJ
AEMFzQEpAdoR1QF5AuUI7wHJAbUQCgH5AWEJBgDBAR0N/wHZAcIOFwLZAY8PHwKhAaAJLwKhAboJ
NAJxAPMIywCJAqUIWALZAY8PXQLZAOoRZAJBAYcNawI5AeIRcgJJAVQRywBZApYPhgKRAnwNjQL5
AWwRpwIhAV4FEAAhAW4OrQLpAAcJCgHpABIKCgHpAA8FCgHpAP8FvQKRAVMNwwKZAoYRaAGZAvMP
aAGxAVMNBgAJAfYBCgFxAFMNBgBBAl0M0gJxAMIOdABxAKAECgGhAmkE4AI8AGIR9wJEAJEIXgBE
AJsIDgNEAFMNBgAOABQAOAMOABgAcwMpAGMAvAUuAAsAYgQuABMAawQuABsAigQuACMAkwRAADsA
3QRAADMA4gRDACsA8QRDADMA4gRJAGMAzQVjACsA8QRjADMA4gRpAGMA4QWAADsA3QSDAEMA3QSD
AEsA3QSDACsA8QSJAGMA7gWgADsA3QSjAGsA3QSjAHMACgWjAHsATAWjAIMA3QSjAIsA6wSpAJMA
AgapAJsAEAapAKMAOwbAADsA3QTDAIsA6wTJAJMAAgbJAJsATwbJAKsAagbJALMA4gTgADsA3QTj
AIsA6wTpAJMAAgbpAJsAfQbpALsAogYJAZMAAgYJAZsAtgYJAbsAogYpAZMAAgYpAZsA3gYpAcMA
CAdDATMA4gRDAVMAWgVjATMA4gRjAVsA6wRgBYsA6wSgBYsA6wTABTMA4gTABTsA3QTgBTMA4gTg
BTsA3QQABjMA4gQABjsA3QQgBjMA4gQgBjsA3QRABjsA3QRgBjsA3QSABjsA3QSABjMA4gSgBjsA
3QTABjsA3QTABjMA4gRjANoAUQF5AZoB3QHrAfYB+gEKAiUCOQJ5ApMCtwLYAusCBAABAAUABQAG
AAsACAANAAsADgAAABQNNgQAADIKOwQAAPIMQAQAAMMNRQQAACsLSgQAAL8PSgQAAB8ESgQAAPYD
SgQAAOkETgQAAPAFUgQAANYOUgQAAO0OUgQAACsLVwQAAHwEXQQCAAQAAwACAAUABQACAAYABwAC
AAcACQACABAACwABABEACwACABIADQABABMADQACABQADwABABUADwACABYAEQABABcAEQACABgA
EwABABkAEwACABoAFQACACMAFwACACQAGQACACwAGwACADUAHQBCAEkAUABXAH4A3QLwAv8CBgME
gAAAAAAAAAAAAAAAAAAAAACmAQAABAAAAAAAAAAAAAAAFAOmAwAAAAAEAAAAAAAAAAAAAAAUA8wJ
AAAAAAoAAAAAAAAAAAAAAB0DrwMAAAAAAQAAAAAAAAAAAAAAJgPXAQAAAAAOAAAAAAAAAAAAAAAv
A78QAAAAAAEAAAAAAAAAAAAAACYDkQQAAAAADgAAAAAAAAAAAAAALwODCwAAAAAOAAAAAAAAAAAA
AAAvA6YLAAAAAAQAAAAAAAAAAAAAABQDrwkAAAAADgAAAAAAAAAAAAAALwMYEQAAAAAOAAAAAAAA
AAAAAAAvA8ICAAAAAAoABAALAAQAAAAQABYA4QIAABAAZQDhAgAAAABnAOECJwHmAicBCQMAAABJ
RFRTQ29tcG9uZW50TWV0YURhdGExMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW4xMDAASURU
U0lucHV0Q29sdW1uMTAwAElEVFNPdXRwdXRDb2x1bW4xMDAASURUU0V4dGVybmFsTWV0YWRhdGFD
b2x1bW5Db2xsZWN0aW9uMTAwAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAASURUU091dHB1
dENvbHVtbkNvbGxlY3Rpb24xMDAASURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABJ
RFRTSW5wdXRDb2xsZWN0aW9uMTAwAElEVFNPdXRwdXRDb2xsZWN0aW9uMTAwAElEVFNSdW50aW1l
Q29ubmVjdGlvbjEwMABJRFRTQ29ubmVjdGlvbk1hbmFnZXIxMDAASURUU0J1ZmZlck1hbmFnZXIx
MDAASURUU0lucHV0MTAwAElEVFNPdXRwdXQxMDAAQ29udGV4dFZhbHVlYDEAVGhyZWFkU2FmZU9i
amVjdFByb3ZpZGVyYDEASW50MzIAU2NyaXB0Q29tcG9uZW50XzIyYjRmOTExYjI1ODRmZjRiZmVh
YjBiNzYxODRkZWU2AENvenlSb2MuU1NJU1BsdXMuMjAxNwA8TW9kdWxlPgBnZXRfSUQAZ2V0X0xp
bmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQAZ2V0X0V4dGVybmFsTWV0YWRhdGFDb2x1bW5J
RABzZXRfQ29ubmVjdGlvbk1hbmFnZXJJRABPYmplY3RJRABJbnB1dElEAEdldE9iamVjdEJ5SUQA
bV9xdWVyeVRlbXBsYXRlXzFQAFF1ZXJ5VGVtcGxhdGVfM1AAbV93aGVyZVRlbXBsYXRlX1AAQ296
eVJvYy5TcWxTZXJ2ZXIuU1NJUwBNaWNyb3NvZnQuU3FsU2VydmVyLk1hbmFnZWREVFMAVABEaXNw
b3NlX19JbnN0YW5jZV9fAENyZWF0ZV9fSW5zdGFuY2VfXwBGaW5kRmllbGRfAEdldER0c1R5cGVG
cm9tRmllbGRfAEZpcmVFcnJvcl8AR2V0RmllbGRzXwBTZXR1cE91dHB1dENvbHVtbnNfAEdldExv
b2t1cFJvd18AR2V0Q2FjaGVLZXlfAFJlaW5pdGlhbGl6ZU1ldGFEYXRhAGdldF9Db21wb25lbnRN
ZXRhRGF0YQBQcm9qZWN0RGF0YQBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMAQWRkAGdl
dF9Jc0F0dGFjaGVkAHNldF9Jc1VzZWQAZ2V0X1ZhbHVlRmllbGQAc2V0X1ZhbHVlRmllbGQAbV92
YWx1ZUZpZWxkAGdldF9LZXlGaWVsZABzZXRfS2V5RmllbGQAbV9rZXlGaWVsZABmaWVsZABDb3p5
Um9jLlNmb3JjZS5TZXJ2aWNlAF9TZm9yY2VTZXJ2aWNlAG1fc2VydmljZQBDcmVhdGVJbnN0YW5j
ZQBnZXRfR2V0SW5zdGFuY2UAaW5zdGFuY2UAQ296eVJvYy5TZm9yY2UAR2V0SGFzaENvZGUAc2V0
X0NvZGVQYWdlAGdldF9NZXNzYWdlAGVyck1lc3NhZ2UAbWVzc2FnZQBnZXRfVXNlQ2FjaGUAc2V0
X1VzZUNhY2hlAG1fdXNlQ2FjaGUAbV9jYWNoZQBzZXRfU2NhbGUAZ2V0X3NjYWxlAEhhc2h0YWJs
ZQBnZXRfcXVlcnlhYmxlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAGdldF9O
YW1lAHNldF9OYW1lAElucHV0TmFtZQBnZXRfbmFtZQBUb0RhdGVUaW1lAE1pY3Jvc29mdC5TcWxT
ZXJ2ZXIuRHRzLlJ1bnRpbWUATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUAZ2V0X0Rh
dGFUeXBlAHNldF9EYXRhVHlwZQBtX3ZhbHVlVHlwZQBnZXRfQ29ubmVjdGlvblR5cGUAZ2V0X3Nv
YXBUeXBlAER0c1R5cGUAR2V0VHlwZQBBcHBsaWNhdGlvbkJhc2UAQ2xvc2UAVmFsaWRhdGUARWRp
dG9yQnJvd3NhYmxlU3RhdGUASGVscEtleXdvcmRBdHRyaWJ1dGUAR2VuZXJhdGVkQ29kZUF0dHJp
YnV0ZQBEZWJ1Z2dhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBDb21WaXNp
YmxlQXR0cmlidXRlAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1lQXR0cmli
dXRlAERlZmF1bHRWYWx1ZUF0dHJpYnV0ZQBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGUARGVidWdn
ZXJIaWRkZW5BdHRyaWJ1dGUATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAQ29ubmVjdGlvbkF0
dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUA
UmVmcmVzaFByb3BlcnRpZXNBdHRyaWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1dGUAQ29sdW1u
TWFwcGluZ3NBdHRyaWJ1dGUAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBDTFNDb21w
bGlhbnRBdHRyaWJ1dGUAU1NJU1NjcmlwdENvbXBvbmVudEVudHJ5UG9pbnRBdHRyaWJ1dGUATGlz
dEF0dHJpYnV0ZQBDYXRlZ29yeUF0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0
ZQBQcmVFeGVjdXRlAFBvc3RFeGVjdXRlAGdldF9WYWx1ZQBzZXRfVmFsdWUAR2V0T2JqZWN0VmFs
dWUAdmFsdWUAU3lzdGVtLlJ1bnRpbWUuVmVyc2lvbmluZwBGcm9tQmFzZTY0U3RyaW5nAENvbXBh
cmVTdHJpbmcAVG9TdHJpbmcAc2V0X0xlbmd0aABnZXRfbGVuZ3RoAGRlc2NyaWJlR2xvYmFsAE1p
Y3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAFN5c3RlbS5Db21wb25lbnRN
b2RlbABSZW1vdmVBbGwAU2NyaXB0Q29tcG9uZW50XzIyYjRmOTExYjI1ODRmZjRiZmVhYjBiNzYx
ODRkZWU2LmRsbABJc051bGwAU2V0TnVsbABTeXN0ZW0uWG1sAGdldF9JdGVtAHNldF9JdGVtAFN5
c3RlbQBmaWVsZExlbgBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAFNjcmlwdE1haW4Ac2V0
X1ByZWNpc2lvbgBnZXRfcHJlY2lzaW9uAGdldF9BcHBsaWNhdGlvbgBNeUFwcGxpY2F0aW9uAGdl
dF9FeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbgBnZXRfSW5wdXRDb2x1bW5Db2xsZWN0
aW9uAGdldF9PdXRwdXRDb2x1bW5Db2xsZWN0aW9uAGdldF9SdW50aW1lQ29ubmVjdGlvbkNvbGxl
Y3Rpb24AZ2V0X0lucHV0Q29sbGVjdGlvbgBnZXRfT3V0cHV0Q29sbGVjdGlvbgBnZXRfQ29ubmVj
dGlvbgBzZXRfQ29ubmVjdGlvbgBJU2ZvcmNlQ29ubmVjdGlvbgBtX3Nmb3JjZUNvbm5lY3Rpb24A
QWNxdWlyZUNvbm5lY3Rpb24AbV9jb25uZWN0aW9uAEFwcGxpY2F0aW9uRXhjZXB0aW9uAFN0cmlu
Z0NvbXBhcmlzb24AbwBPdXRwdXROYW1lTWFwAE91dHB1dE1hcABNaWNyb3NvZnQuU3FsU2VydmVy
LkRUU1J1bnRpbWVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUGlwZWxpbmVXcmFwAG1fQXBw
T2JqZWN0UHJvdmlkZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAbV9Db21wdXRlck9iamVjdFByb3Zp
ZGVyAG1fTXlXZWJTZXJ2aWNlc09iamVjdFByb3ZpZGVyAGdldF9CdWZmZXIAUGlwZWxpbmVCdWZm
ZXIAU2NyaXB0QnVmZmVyAElucHV0QnVmZmVyAGdldF9Db25uZWN0aW9uTWFuYWdlcgBnZXRfQnVm
ZmVyTWFuYWdlcgBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBNaWNyb3NvZnQuU3FsU2VydmVyLkR0
cy5SdW50aW1lLldyYXBwZXIATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBl
cgBnZXRfVXNlcgBMaXN0RGVsaW1pdGVyAGdldF9Db21wdXRlcgBNeUNvbXB1dGVyAEZpcmVFcnJv
cgBDbGVhclByb2plY3RFcnJvcgBTZXRQcm9qZWN0RXJyb3IAQWN0aXZhdG9yAC5jdG9yAC5jY3Rv
cgBTeXN0ZW0uRGlhZ25vc3RpY3MAbV9maWVsZHMAZ2V0X2ZpZWxkcwBnZXRfcmVjb3JkcwBNaWNy
b3NvZnQuVmlzdWFsQmFzaWMuRGV2aWNlcwBnZXRfV2ViU2VydmljZXMATXlXZWJTZXJ2aWNlcwBN
aWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBTeXN0ZW0uUnVudGltZS5J
bnRlcm9wU2VydmljZXMATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2VydmljZXMAU3lz
dGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBEZWJ1Z2dpbmdNb2RlcwBTZXREYXRhVHlwZVBy
b3BlcnRpZXMAUmVmcmVzaFByb3BlcnRpZXMAVmFyaWFibGVzAENvenlSb2MuU3FsU2VydmVyLlNT
SVMuQXR0cmlidXRlcwBFcXVhbHMAQ29udGFpbnMAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBnZXRf
U3RhdGljT3V0cHV0Q29sdW1ucwBTeXN0ZW0uQ29sbGVjdGlvbnMAZ2V0X0Rlc2lnbkNvbm5lY3Rp
b25zAFN0cmluZ1NwbGl0T3B0aW9ucwBSdW50aW1lSGVscGVycwBPcGVyYXRvcnMAZ2V0X3NvYmpl
Y3RzAFNjcmlwdEJ1ZmZlclBsdXMAU2NyaXB0Q29tcG9uZW50UGx1cwBDb25jYXQARm9ybWF0AGRl
c2NyaWJlU09iamVjdABnZXRfU2FsZXNmb3JjZU9iamVjdABzZXRfU2FsZXNmb3JjZU9iamVjdABz
T2JqZWN0AG1fb2JqZWN0AE15UHJvamVjdABDb25uZWN0AEVuZE9mUm93c2V0AFNwbGl0AERlc2Ny
aWJlR2xvYmFsUmVzdWx0AERlc2NyaWJlU09iamVjdFJlc3VsdABEZXNjcmliZUdsb2JhbFNPYmpl
Y3RSZXN1bHQAUXVlcnlSZXN1bHQAWG1sRWxlbWVudABQaXBlbGluZUNvbXBvbmVudABVc2VyQ29t
cG9uZW50AFBhcmVudENvbXBvbmVudABTY3JpcHRDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQA
Z2V0X0NvdW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQAQ29udmVydABTb3J0AEdldEZp
ZWxkTGlzdABmaWVsZExpc3QAR2V0T2JqZWN0TGlzdABBcnJheUxpc3QATWljcm9zb2Z0LlNxbFNl
cnZlci5QaXBlbGluZUhvc3QASXNJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXQAZ2V0X0lubmVyVGV4
dABtX0NvbnRleHQATmV3AElucHV0X1Byb2Nlc3NJbnB1dFJvdwBOZXh0Um93AHJvdwBtX3ZhbHVl
SWR4AG1fa2V5SWR4AFNjcmlwdENvbXBvbmVudF8yMmI0ZjkxMWIyNTg0ZmY0YmZlYWIwYjc2MTg0
ZGVlNi5NeQBUb0FycmF5AGdldF9BbnkAcXVlcnkASXNOdWxsT3JFbXB0eQAAAABTRgBhAGkAbABl
AGQAIAB0AG8AIABwAHIAbwBjAGUAcwBzACAAJwB7ADAAfQAnACAAZgBvAHIAIABjAG8AbAB1AG0A
bgAgACcAewAxAH0AJwAuAAELIABBAE4ARAAgAAATewAwAH0AIAA9ACAAewAxAH0AAAN7AAADfQAA
BSwAIAAAO3MAZQBsAGUAYwB0ACAAewAwAH0AIABmAHIAbwBtACAAewAxAH0AIAB3AGgAZQByAGUA
IAB7ADIAfQAAB3sAMAB9AAA7UwBlAGwAZQBjAHQAIABTAGEAbABlAHMAZgBvAHIAYwBlACAAYwBv
AG4AbgBlAGMAdABpAG8AbgAuAAAdUwBlAGwAZQBjAHQAIABvAGIAagBlAGMAdAAuAAArUwBwAGUA
YwBpAGYAeQAgAGsAZQB5ACAAZgBpAGUAbABkACgAcwApAC4AACdTAGUAbABlAGMAdAAgAHYAYQBs
AHUAZQAgAGYAaQBlAGwAZAAuAAAFLAAKAAAlTQBhAHAAIABpAG4AcAB1AHQAIABjAG8AbAB1AG0A
bgBzAC4AABVDAG8AbgBuAGUAYwB0AGkAbwBuAAAVTgBvACAAaQBuAHAAdQB0AHMALgAANUsAZQB5
ACAAZgBpAGUAbABkACgAcwApACAAbgBvAHQAIABzAGUAbABlAGMAdABlAGQALgAADVMARgBPAFIA
QwBFAAAjUwBhAGwAZQBzAGYAbwByAGMAZQAgAEwAbwBvAGsAdQBwAAAtJwB7ADAAfQAnACAAZgBp
AGUAbABkACAAbgBvAHQAIABmAG8AdQBuAGQALgABA18AAAlOAFUATABMAAALJwB7ADAAfQAnAAEp
VQBuAGgAYQBuAGQAbABlAGQAIABzAG8AYQBwACAAdAB5AHAAZQAuAAALSQBuAHAAdQB0AAAAVB1E
l/9R6ESng7T3KvXd7QAEIAEBCAMgAAEFIAEBEREEIAEBDgUgAgEODgUgAQERHQcgBAEODg4OBCAB
AQIFIAEBHQ4GIAEBEYC9BiADAQ4CAgYVEiwBEgwGFRIsARIIBhUSLAESPQYVEiwBEigEIAATABAH
CR0ODhJ9CAgOCBF5EoCBBCABAhwEIAEcHAIdDgUgAgEcHAUgABKA4QUgABKA5QUgARJ9HAQAAQIO
BSAAEoDRBgABEYD1DgUgAgEIHAUAAR0FDgYAAQESgIEFIAASgP0GIAESgJEcAyAADgYAAw4OHBwD
AAABGAcMEoCFCBJ9DggIEoCJEoCNEA4ICBKAkQMgABwFIAASgQEGIAESgIUcBSAAEoEFAyAACAYg
ARKAiRwFIAASgQkFIAASgQ0FIAIICAgFIAASgREGIAESgI0IBQACDg4OBgADDg4ODgIGDgQgABF5
BwAEDg4cHBwMBwUCAh0OEoCFEoCBCSACHQ4dDhGBGQMgAAIFIAASgR0GIAESgSEcFAcLHRJ1EoCF
HQ4IDhJ1EXkICAgIBSAAEoCNBSABARF5EwcHHQ4SgJUSaRJtHRKAmQgSgJkFIAASgSUGIAESgSkc
BSAAEoExBiAAHRKAmQQgAQgcBwABEkURgTUHIAESgTkSRQ0HBR0OEoCVHRJ1CBJ1AwcBDgYAAwgO
DgIDBwECBAcBHQ4KIAYBCA4ODggQAgwHBRJ1EnUdEnUIEnUHIAICDhGBQQUAAg4OHAkHBg4OHQgI
CA4EIAECCAQgARwIHgcRHQ4dDggdHBKAnQ4ICAgOHBKAoRKAgQgICBKApQQAARwcBgACDg4dHAYg
ARKAoQ4GIAAdEoCdBiAAHRKApQwHBB0SdR0SdRJpEm0GIAESgUkOBSAAHRJ1EwcLHRJ1En0dDggO
EnUReQgICAgFIAASgJEJIAUBEXkICAgIBQcBEYCpBSAAEYCpDiAFARKAzQgCEoDREoDVBSAAEoDd
BAcBHgACHgAFEAEAHgAECgEeAAQHARMABhUSLAETAAcGFRJNARMABhUSTQETAAITAAQKARMABSAB
ARMACLd6XFYZNOCJCLA/X38R1Qo6CBbPSQu4DDTqCImEXc2AgMyROnMAZQBsAGUAYwB0ACAAewAw
AH0AIABmAHIAbwBtACAAewAxAH0AIAB3AGgAZQByAGUAIAB7ADIAfQAELAAKAAcGFRIsARIMBwYV
EiwBEggHBhUSLAESPQcGFRIsARIoAgYCAwYSaQMGEm0DBhJxAwYdCAQGHRJ1BAYdEXkDBhIgAwYS
JAQGEoDNBAAAEgwEAAASCAQAABI9BAAAEigFIAEBEhgFIAECEA4EIAAdDgggAhJ1HRJ1DgUgAQ4S
GAYgAR0OEhgQIAYBEnUQEXkQCBAIEAgQCAsgBAEIDhKA0RKA1QYgAQESgM0EIAASRQcQAQEeAB4A
BzABAQEQHgAECAASDAQIABIIBAgAEj0ECAASKAMoAA4DKAACBCgAHQ4FKAASgN0EKAATAAgBAAgA
AAAAAB4BAAEAVAIWV3JhcE5vbkV4Y2VwdGlvblRocm93cwEIAQACAAAAAABJAQAaLk5FVEZyYW1l
d29yayxWZXJzaW9uPXY0LjUBAFQOFEZyYW1ld29ya0Rpc3BsYXlOYW1lEi5ORVQgRnJhbWV3b3Jr
IDQuNQQBAAAACAEAAQAAAAAABQEAAAAAGAEACk15VGVtcGxhdGUIMTEuMC4wLjAAAEEBAAUAAAAK
Q29ubmVjdGlvbhBTYWxlc2ZvcmNlT2JqZWN0CEtleUZpZWxkClZhbHVlRmllbGQIVXNlQ2FjaGUA
AA0BAAhWYWxpZGF0ZQAAYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRw
Q2xpZW50UHJvdG9jb2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAQ
AQALTXkuQ29tcHV0ZXIAABMBAA5NeS5BcHBsaWNhdGlvbgAADAEAB015LlVzZXIAABMBAA5NeS5X
ZWJTZXJ2aWNlcwAADQEACFNldHRpbmdzAAAqAQAlU2VsZWN0IFNhbGVzZm9yY2UgQ29ubmVjdGlv
biBNYW5hZ2VyLgAAEwEADkNvbm5lY3Rpb25UeXBlAAAaAQAVU2VsZWN0IGxvb2t1cCBvYmplY3Qu
AAASAQANR2V0T2JqZWN0TGlzdAAAJAEAH1NwZWNpZnkgb25lIG9yIG1vcmUga2V5IGZpZWxkcy4A
ABMBAAxHZXRGaWVsZExpc3QBAAAAJwEAIlNwZWNpZnkgb25lIG9yIG1vcmUgbG9va3VwIGZpZWxk
cy4AACkBACRTZWxlY3Qgd2hldGhlciBtZW1vcnkgY2FjaGUgaXMgdXNlZC4AAAUBAAEAAAAAfFoA
AAAAAAAAAAAAlloAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIhaAAAAAAAAAAAAAAAAX0NvckRs
bE1haW4AbXNjb3JlZS5kbGwAAAAAAP8lACAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAA
AAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYYAAA7AIAAAAAAAAAAAAA
7AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAA
AAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkA
bgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAABAFMAdABy
AGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYA
aQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBz
AGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAAigA1AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUA
AABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADIAMgBiADQAZgA5ADEAMQBiADIANQA4
ADQAZgBmADQAYgBmAGUAYQBiADAAYgA3ADYAMQA4ADQAZABlAGUANgAuAGQAbABsAAAAAAAoAAIA
AQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAkgA1AAEATwByAGkAZwBpAG4AYQBs
AEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgAyAGIA
NABmADkAMQAxAGIAMgA1ADgANABmAGYANABiAGYAZQBhAGIAMABiADcANgAxADgANABkAGUAZQA2
AC4AZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4A
MAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAw
AC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAACoOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="81" 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_7cc118c3a5214cd89c7935519574d29f</property><property id="82" 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><property id="90" name="UserComponentTypeName" dataType="System.String">CozyRoc.ScriptComponentHostPlus</property></properties><connections><connection id="91" name="Connection" connectionManagerID="{4b12e58d-880a-431c-8e51-3579b0be4cab}" /></connections><inputs><input id="92" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True" /></input></inputs><outputs><output id="93" name="Output" synchronousInputId="92"><externalMetadataColumns /></output></outputs></component>