<component id="2" name="OData Source" 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="3" 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-2011 CozyRoc LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

' The following resources were used as a reference:
' http://www.odata.org/developers/protocols/overview
' http://msdn.microsoft.com/en-us/library/ff478141.aspx

Imports System
Imports System.ComponentModel
Imports System.Collections
Imports System.Xml
Imports System.IO

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "Connection", "BatchSize", _
    "Collection", "IsQueryVariable", "Query", "QueryVariable"})> _
<FilterProperties("GetProperties")> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub CreateNewOutputRows()
        Dim colsIdx As Hashtable = GetColumnsIdx_()

        ' Setup query template.
        Dim queryStr As String = Me.Query
        If Me.IsQueryVariable Then
            ' Query is contained in variable.
            queryStr = CStr(GetVariable_(Me.QueryVariable))
        End If

        Dim queryTemplate_1P As String = Me.Collection & "?"
        If Not String.IsNullOrEmpty(queryStr) Then
            queryTemplate_1P &= queryStr & "&"
        End If

        queryTemplate_1P &= String.Format("$top={0}&$skip={1}", Me.BatchSize, "{0}")

        Dim doc As XmlDocument = New XmlDocument()
        Dim conn As Object = Me.Connections.Http.AcquireConnection(Nothing)
        Dim connection As HttpClientConnection = New HttpClientConnection(conn)
        Dim page As Integer = 0
        Dim ns As XmlNamespaceManager

        Try
            While True
                ' Download data.
                connection.ServerURL = String.Format(queryTemplate_1P, page * Me.BatchSize)
                Using odataStream As Stream = New MemoryStream(connection.DownloadData())
                    Call doc.Load(odataStream)
                End Using

                If ns Is Nothing Then
                    ' Initialize namespace manager.
                    ns = New XmlNamespaceManager(doc.NameTable)
                    Call ns.AddNamespace("atom", "http://www.w3.org/2005/Atom")
                End If

                Dim entryList As XmlNodeList = doc.SelectNodes("/atom:feed/atom:entry", ns)
                If entryList.Count = 0 Then
                    ' Reached end of feed.
                    Call OutputBuffer.SetEndOfRowset()
                    Exit While
                End If

                ' Push items.
                For Each entry As XmlElement In entryList
                    With OutputBuffer
                        Call .AddRow()

                        ' Setup atom data.
                        .Buffer(CInt(colsIdx("atom_id"))) = GetText_(entry("id"))
                        .Buffer(CInt(colsIdx("atom_title"))) = GetText_(entry("title"))
                        .Buffer(CInt(colsIdx("atom_updated"))) = DateTime.Parse(GetText_(entry("updated")))
                        .Buffer(CInt(colsIdx("atom_author"))) = GetText_(entry("author"))

                        Dim linkElem As XmlElement = entry("link")
                        If Not linkElem Is Nothing Then
                            Dim link As String = linkElem.GetAttribute("href")
                            If Not link.StartsWith("http://") Then
                                ' Link is relative.
                                link = doc.DocumentElement.GetAttribute("xml:base") & link
                            End If
                            .Buffer(CInt(colsIdx("atom_link"))) = link
                        End If

                        Dim categoryElem As XmlElement = entry("category")
                        If Not categoryElem Is Nothing Then
                            .Buffer(CInt(colsIdx("atom_category"))) = categoryElem.GetAttribute("term")
                        End If

                        ' Setup collection properties.
                        Dim contentElem As XmlElement = entry("content")
                        If Not contentElem Is Nothing Then
                            Dim propsList As XmlNodeList = contentElem("m:properties").ChildNodes
                            For Each propElem As XmlElement In propsList
                                If colsIdx.Contains(propElem.LocalName) Then
                                    Dim value As Object

                                    Select Case propElem.GetAttribute("m:type")
                                        Case "Edm.Binary"
                                            value = Convert.FromBase64String(propElem.InnerText)

                                        Case Else
                                            value = propElem.InnerText
                                    End Select

                                    .Buffer(CInt(colsIdx(propElem.LocalName))) = value
                                End If
                            Next
                        End If
                    End With
                Next

                page += 1
            End While
        Catch ex As Exception
            Call FireError_(ex.Message)
        Finally
            Call Me.Connections.Http.ReleaseConnection(conn)
        End Try
    End Sub ' CreateNewOutputRows


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

        Call result.Add("Connection")
        Call result.Add("BatchSize")
        Call result.Add("Collection")
        Call result.Add("IsQueryVariable")
        Call result.Add(IIf(Me.IsQueryVariable, "QueryVariable", "Query"))

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


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

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

            If String.IsNullOrEmpty(Me.Collection) Then
                Throw New Exception("Specify collection.")
            End If

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

            Me.ComponentMetaData.RuntimeConnectionCollection("Http").ConnectionManagerID = Me.Connection
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    ' Validate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of tables in the currently selected Oracle connection.
    Public Function GetCollections() As String()
        Dim result As ArrayList = New ArrayList()

        ' Download collections.
        Dim doc As XmlDocument = New XmlDocument()
        Dim conn As Object = Me.DesignConnections(Me.Connection).AcquireConnection(Nothing)
        Dim connection As HttpClientConnection = New HttpClientConnection(conn)
        Try
            Using odataStream As Stream = New MemoryStream(connection.DownloadData())
                Call doc.Load(odataStream)
            End Using
        Finally
            Call Me.DesignConnections(Me.Connection).ReleaseConnection(conn)
        End Try

        ' Setup collections list.
        Dim ns As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
        Call ns.AddNamespace("app", "http://www.w3.org/2007/app")
        Dim collections As XmlNodeList = doc.SelectNodes("/app:service/app:workspace/app:collection", ns)
        For Each collection As XmlElement In collections
            Dim href As String = collection.GetAttribute("href")
            If Not href.StartsWith("http://") Then
                ' The collection reference is relative.
                href = Connection.ServerURL & "/" & href
            End If

            Call result.Add(href)
        Next

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


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select HTTP Connection Manager.")> _
    <Category("Settings")> _
    <Connection("HttpConnectionType", True)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Connection() As String
        Get
            Connection = m_connection
        End Get
        Set(ByVal value As String)
            If m_connection <> value Then
                m_connection = value
                Me.Collection = String.Empty
            End If
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies the number of rows to be retrieved as a batch.")> _
    <Category("Settings")> _
    <DefaultValue(100)> _
    Public Property BatchSize() As Integer
        Get
            BatchSize = m_batchSize
        End Get
        Set(ByVal value As Integer)
            m_batchSize = value
        End Set
    End Property    ' BatchSize


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select OData collection.")> _
    <Category("Source")> _
    <List("GetCollections")> _
    Public Property Collection() As String
        Get
            Collection = m_collection
        End Get
        Set(ByVal value As String)
            If m_collection <> value Then
                If Not String.IsNullOrEmpty(m_collection) 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_collection = value
            End If
        End Set
    End Property    ' Collection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Indicates whether the query is stored in a variable.")> _
    <Category("Source")> _
    <RefreshProperties(RefreshProperties.All)> _
    <DefaultValue(False)> _
    Public Property IsQueryVariable() As Boolean
        Get
            IsQueryVariable = m_isQueryVariable
        End Get
        Set(ByVal value As Boolean)
            If m_isQueryVariable <> value Then
                m_isQueryVariable = value
                Me.Query = String.Empty
            End If
        End Set
    End Property    ' IsQueryVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify OData query.")> _
    <Category("Source")> _
    Public Property Query() As String
        Get
            Query = m_query
        End Get
        Set(ByVal value As String)
            m_query = value
        End Set
    End Property    ' Table


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies the variable that contains the query.")> _
    <Category("Source")> _
    <Variable()> _
    Public Property QueryVariable() As String
        Get
            QueryVariable = Me.Query
        End Get
        Set(ByVal value As String)
            Me.Query = value
        End Set
    End Property    ' QueryVariable
#End Region ' Properties


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetupOutputColumns_()
        ' Load collection properties.
        Dim metaService As String = Me.Collection.Substring(0, Me.Collection.LastIndexOf("/") + 1) + "$metadata"
        Dim collectionName As String = Me.Collection.Substring(Me.Collection.LastIndexOf("/") + 1)

        Dim doc As XmlDocument = New XmlDocument()
        Dim conn As Object = Me.DesignConnections(Me.Connection).AcquireConnection(Nothing)
        Dim connection As HttpClientConnection = New HttpClientConnection(conn)
        Dim serverURL As String = connection.ServerURL
        Try
            connection.ServerURL = metaService
            Using odataStream As Stream = New MemoryStream(connection.DownloadData())
                Call doc.Load(odataStream)
            End Using
        Finally
            connection.ServerURL = serverURL
            Call Me.DesignConnections(Me.Connection).ReleaseConnection(conn)
        End Try

        Dim ns As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
        Call ns.AddNamespace("edm", "http://schemas.microsoft.com/ado/2007/05/edm")
        Call ns.AddNamespace("edmx", "http://schemas.microsoft.com/ado/2007/06/edmx")
        Dim props As XmlNodeList = doc.SelectNodes( _
            String.Format("/edmx:Edmx/edmx:DataServices/edm:Schema/edm:EntityType['{0}']/edm:Property", collectionName), _
            ns)

        Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
        Call output.OutputColumnCollection.RemoveAll()
        Dim column As IDTSOutputColumn100

        ' Setup base (Atom) columns.
        column = output.OutputColumnCollection.New()
        column.Name = "atom_id"
        Call column.SetDataTypeProperties(DataType.DT_WSTR, 1000, 0, 0, 0)

        column = output.OutputColumnCollection.New()
        column.Name = "atom_title"
        Call column.SetDataTypeProperties(DataType.DT_WSTR, 250, 0, 0, 0)

        column = output.OutputColumnCollection.New()
        column.Name = "atom_updated"
        Call column.SetDataTypeProperties(DataType.DT_DBTIMESTAMP, 0, 0, 0, 0)

        column = output.OutputColumnCollection.New()
        column.Name = "atom_author"
        Call column.SetDataTypeProperties(DataType.DT_WSTR, 250, 0, 0, 0)

        column = output.OutputColumnCollection.New()
        column.Name = "atom_link"
        Call column.SetDataTypeProperties(DataType.DT_WSTR, 1000, 0, 0, 0)

        column = output.OutputColumnCollection.New()
        column.Name = "atom_category"
        Call column.SetDataTypeProperties(DataType.DT_WSTR, 1000, 0, 0, 0)

        For Each prop As XmlElement In props
            ' Get column info.
            Dim dtsType As Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType
            Dim length As Integer
            Dim precision As Integer
            Dim scale As Integer
            Dim codePage As Integer
            GetTypeFromPropertyType_( _
                prop.GetAttribute("Type"), _
                dtsType, _
                length, _
                precision, _
                scale, _
                codePage)

            ' Setup output column.
            column = output.OutputColumnCollection.New()
            column.Name = prop.GetAttribute("Name")
            Call column.SetDataTypeProperties(dtsType, length, precision, scale, codePage)
        Next
    End Sub ' SetupOutputColumns_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get SSIS type from specified DataRow.
    Private Sub GetTypeFromPropertyType_( _
        ByVal propertyType As String, _
        ByRef dtsType As Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType, _
        ByRef length As Integer, _
        ByRef precision As Integer, _
        ByRef scale As Integer, _
        ByRef codePage As Integer)

        length = 0
        precision = 0
        scale = 0
        codePage = 0

        Select Case propertyType
            Case "Edm.Binary"
                dtsType = DataType.DT_IMAGE

            Case "Edm.Boolean"
                dtsType = DataType.DT_BOOL

            Case "Edm.Byte"
                dtsType = DataType.DT_UI1

            Case "Edm.DateTime", "Edm.DateTimeOffset"
                dtsType = DataType.DT_DBTIMESTAMP

            Case "Edm.Time"
                dtsType = DataType.DT_DBTIME

            Case "Edm.Decimal"
                dtsType = DataType.DT_DECIMAL

            Case "Edm.Double"
                dtsType = DataType.DT_R8

            Case "Edm.Single"
                dtsType = DataType.DT_R4

            Case "Edm.Guid"
                dtsType = DataType.DT_GUID

            Case "Edm.Int16"
                dtsType = DataType.DT_I2

            Case "Edm.Int32"
                dtsType = DataType.DT_I4

            Case "Edm.Int64"
                dtsType = DataType.DT_I8

            Case "Edm.String"
                dtsType = DataType.DT_WSTR
                length = 250

            Case Else
                Throw New Exception("Unhandled property type.")
        End Select
    End Sub ' GetTypeFromPropertyType_


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object

        Dim vars As IDTSVariables100
        Call MyBase.VariableDispenser.LockOneForRead(varName, vars)
        Try
            result = vars(varName).Value
        Finally
            Call vars.Unlock()
        End Try

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Setup column name -> buffer index map.
    Private Function GetColumnsIdx_() As Hashtable
        Dim result As Hashtable = New Hashtable

        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)
        Dim colsCount As Integer = output.OutputColumnCollection.Count
        For colIndex As Integer = 0 To colsCount - 1
            Dim column As IDTSOutputColumn100 = output.OutputColumnCollection(colIndex)

            ' Setup buffer index.
            Call result.Add( _
                column.Name, _
                Me.HostComponent.BufferManager.FindColumnByLineageID( _
                    output.Buffer, _
                    column.LineageID))
        Next

        GetColumnsIdx_ = result
    End Function    ' GetColumnsIdx_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetText_(ByVal element As XmlElement) As String
        Dim result As String

        If Not element Is Nothing Then
            result = element.InnerText
            If result.Length > 4000 Then
                ' Maximum 4000 characters are supported in data flow.
                result = result.Substring(0, 4000)
            End If
        End If

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


#Region "Attributes"
    Private m_connection As String
    Private m_collection As String
    Private m_batchSize As Integer
    Private m_isQueryVariable As Boolean
    Private m_query As String
#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 OutputBuffer
    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 Sub AddRow()
        MyBase.AddRow()
    End Sub

    Public Overloads Sub SetEndOfRowset()
        MyBase.SetEndOfRowset()
    End Sub

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ScriptComponent_0c4f2d277da94cd3bcb7ec6aa65b1a54.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>{21E9DF50-84D7-4664-9D1E-ECC920899290}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_0c4f2d277da94cd3bcb7ec6aa65b1a54</RootNamespace>
    <AssemblyName>ScriptComponent_0c4f2d277da94cd3bcb7ec6aa65b1a54</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.Xml">
      <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 OutputBuffer As OutputBuffer

    Public Overridable Sub FinishOutputs()
    End Sub

    Private Sub MarkOutputsFinished()

        If OutputBuffer IsNot Nothing Then
            OutputBuffer.SetEndOfRowset
            OutputBuffer = Nothing
        End If

    End Sub

    Public Overrides Sub PrimeOutput(ByVal Outputs As Integer, ByVal OutputIDs() As Integer, ByVal Buffers() As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        For I As Integer = 0 To Outputs - 1
            If OutputIDs(I) = GetOutputID(OutputMap, "Output") Then
                OutputBuffer = New OutputBuffer(Me, OutputIDs(I), False, Buffers(I), OutputMap)
            End If
        Next

        CreateNewOutputRows()

        FinishOutputs()
        MarkOutputsFinished()

    End Sub

    Public Overridable Sub CreateNewOutputRows()
    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 Http() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("Http").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:Language>msBuild</msb:Language>
		<msb:CodeName>ScriptComponent_0c4f2d277da94cd3bcb7ec6aa65b1a54</msb:CodeName>
		<msb:DisplayName>ScriptComponent_0c4f2d277da94cd3bcb7ec6aa65b1a54</msb:DisplayName>
		<msb:ProjectId>{5825756A-ADF8-4A1B-AF74-030E4708C3E3}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptComponent_0c4f2d277da94cd3bcb7ec6aa65b1a54.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="4" 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_0c4f2d277da94cd3bcb7ec6aa65b1a54.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
BBlUKz8GcgwGAHAWKEoAAAoWMwYEHxRUKyoGciAGAHAWKEoAAAoWMxAEIIIAAABUBSD6AAAAVCsL
cjYGAHBzVgAACnoqAAAAEzAHAB0AAAAfAAARFgoCKCUAAAoWcmgGAHADfmEAAAoWEgBvagAACioA
AAAbMAMAMgAAACAAABECKGsAAAoDEgJvbAAACggDb20AAApvbgAACigRAAAKC94HCG9vAAAK3Aco
EQAACgoGKgAAARAAAAIADgAUIgAHAAAAABMwBQCGAAAAIQAAEXNwAAAKDQJvJQAACm9XAAAKFowq
AAABb1gAAAoMCG9ZAAAKb1oAAAoKFgYX2hMGEwQrSQhvWQAAChEEjCoAAAFvcQAAChMFCREFb3IA
AAoCb3MAAApvdAAACghvdQAAChEFb3YAAApvdwAACowqAAABb3gAAAoRBBfWEwQRBBEGMbEJCwcq
AAATMAMAKAAAACIAABEDLCEDb0sAAAoLB295AAAKIKAPAAAxDQcWIKAPAABvZQAACgsHCgYqQlNK
QgEAAQAAAAAADAAAAHY0LjAuMzAzMTkAAAAABQBsAAAA8A0AACN+AABcDgAAzBEAACNTdHJpbmdz
AAAAACggAACEBgAAI1VTAKwmAAAQAAAAI0dVSUQAAAC8JgAAEAcAACNCbG9iAAAAAAAAAAIAAAFX
FaIJCQ4AAAD6JTMAFgAAAQAAAE8AAAALAAAADwAAADYAAAAeAAAAiAAAAEMAAAAiAAAABQAAAA8A
AAAVAAAACgAAAAEAAAAKAAAAAgAAAAMAAAACAAAAAACUEQEAAAAAAAoAQAEWAQoAdAFWAQYAhAF9
AQoA3AEWAQYAWgJ9AQoA3AKyAg4ALgMXAxIAfQNcAxYArgNcAxIAvQNcAw4AbwQXAxoAOgUSBRoA
ewYSBQYADQf6Bh4AMQcmByIA+gfkByIAEwjkByIAQAgoCAYAaghXCAoAqQiCCAoAwQgTACIA9gjZ
CAYAKwkLCQYASQl9AQYAbQl9AQoAhgkTAAYA1Am1CQYA6Al9ARIA7wlcAwYA/Al9ASYAawpCCiYA
mgpCCiYA3QpCCioAVAs0Cx4AaQsmBx4AdQsmBx4AiQsmBwYAnwuVCwYApgt9AQYAsAv6BgoAvAuC
CAYA3Qt9AQYAFwyVCwYAKQx9AR4APQwmBx4AZQwmBwYAuwx9AQoAHA2CCAYAQg19AQoAZA2CCAYA
sA36BgoAvg0TAAYAzg19ASYA3A1CCiYA6g1CCiYAFw5CCioA9QA0CyoAfg40CyYArg5CChoABQ8S
BRoAFg8SBRoAVA8SBRYAdA9cAyYAmA9CChIA7g9cAw4ANxAVEA4AUxAVEA4AbRAVECIAhRDkByIA
mxDkByIArRDkBw4AwhAVECIA0BDkByIA6xDkBw4A/RAVEA4AEREVEAYAIxELCQYAQxELCQYAexFh
EQAAAAABAAAAAAABAAEAAAAAACkANwAFAAEAAQAAAAAAawA3AAkAAQACAAABEAB2ADcADQABAAMA
BQEAAIAAAAANAAUACAAFAQAAjgAAAA0ABQAPAAEAAACpALYAHQAGABEAAQAAAOcAtgAtAAYAFwAB
AAAA9QC2AA0ACQAcAAEAAAABAbYADQAKAB4AAQAAAAsBtgAgAAsAHwAxAJ8BIAAxAMgBLQAxAOoB
OgAxAA8CRwAhAOsCkAAGAPUAyQAGAAEBzQAGAKkA0QABAN8E4QABAN8E4QABAE0HKgEBAFoHKgEB
AGcHLQEBAHMHMAEBAIUHKgFQIAAAAAAGGFABEwABAFggAAAAAAYYUAETAAEAYCAAAAAAERiLARcA
AQCMIAAAAAATCJIBGwABAKQgAAAAABMIuAEoAAEAvCAAAAAAEwjhATUAAQDUIAAAAAATCP8BQgAB
AOwgAAAAAEYCRQJjAAEACCEAAAAARgJOAmgAAgAcIQAAAACDAF8CbAACADQhAAAAAEYCZwJxAAIA
SCEAAAAAEQBwAngAAgBkIQAAAAABAI4CgAADAIAhAAAAAAYYUAETAAQAiCEAAAAAAwiiAosABAC8
IQAAAAAGGFABEwAEANAhAAAAAAYYUAGvAAQA4CEAAAAARgr3A7sACQD0IQAAAABGCg4EuwAJAAgi
AAAAAIYAJgQTAAkAECIAAAAAhgAtBBMACQAYIgAAAACGADwEwAAJADAiAAAAAAYYUAETAAkAUCIA
AAAARgODBBMACQBUIgAAAAABAJEEEwAJAHAiAAAAAEYCpQTVAAkAyCIAAAAARgPLBBMADQDMIgAA
AAAGGFAB5QANANwiAAAAAAYIUwXrAA4ACCMAAAAABhhQAeUADgAYIwAAAAAGGFABEwAPACAjAAAA
AEYCywQTAA8AmCcAAAAABgBhBbsADwAUKAAAAAAGAG8F9QAPAMwoAAAAAAYAgwW7ABAAMCoAAAAA
BgiSBXEAEABIKgAAAAAGCKEF+wAQAGwqAAAAAAYItgVoABEAhCoAAAAABgjEBQABEQCQKgAAAAAG
CNIFcQASAKgqAAAAAAYI4QX7ABIAECsAAAAABgjwBcAAEwAoKwAAAAAGCAQGBQETAEgrAAAAAAYI
GAZxABQAYCsAAAAABggiBvsAFABsKwAAAAAGCCwGcQAVAIQrAAAAAAYIPgb7ABUAkCsAAAAAAQhQ
BrsAFgCwKwAAAAABAGcGEwAWAKguAAAAAAEAhAYKARYAGDAAAAAAAQDSBvsAHABEMAAAAAABAOUG
GgEdAJQwAAAAAAEAFwcfAR4AKDEAAAAAAQA8ByQBHgAAAAEATAIAAAEAhQIAAAEAhQIAAAEAywMA
AAIA1QMAAAMA3gMAAAQA5gMAAAUA7QMAAAEAsQQAAAIAuQQAAAMAwwQAAAQA7QMAAAEAywMAAAEA
ywMAAAEAeAUAAAEAsAUAAAEAsAUAAAEAsAUAAAEAsAUAAAEAsAUAAAEAsAUAAAEAnQYAAAIAqgYA
AAMAsgYAAAQAuQYAAAUAwwYAAAYAyQYAAAEA3QYAAAEA8gYAAAEARQcJAFABEwCBAFABPwGRAFAB
TgERAFABEwCZAFABEwAkAFABEwAsAFABEwA0AFABEwA8AFABEwAkAKICiwAsAKICiwA0AKICiwA8
AKICiwChAFABEwCpAFABEwCxAFAB+wC5ADoJ6AEZAEUCYwAZAE4CaAApAFsJ9QEZAGcCcQDJAHcJ
BQIZAFABEwDRAFABFQJEAOsCkABMAKEJiwBMAKsJkgJMAFABEwDZAFABBQE5AFABrwDpACYEEwDp
AC0EEwDpADwEwADxAFABBQFZAFABEwBBABIKrAJBAIQKuAL5AL0KvQIBAfYKwwIJAf8K6wBJAWcC
zwLhAMgL1ALhAM8L2gLhAMgL3wLhAOML5gIZAVABEwBhAOoL7QIRAVAB8gLhAOML9wIRAfwL+wAR
AQoM/QJZAVABAgMZASQMCANhATUMEwAZAUoMDwMhAVABFQMhAVgMTgFxAW0MHAMpAXkMaAApAYMM
JgNBAZEMLAM5AJ0MMANxAPYK7QJJAagMNQNxAfYKOgNJALIMQAN5AcQMRgN5AMoMTQPhANcMUgMZ
AeIMVwNxAfYMXAN5AAUNcQBxABMNYwCBASYNYgN5ADQNcQCJAUoNaQNBAVsNwACRAXANbwM5AYAN
cQCRAYwNFwBhAJ4N8gKZAVABEwCZAboNqQOhAcoNrgOZAdQNtQM5AVAB+wD5AAIOyAO5AfYKzgOx
ATUO1QPBAXkMaAAJAVAO+wBZAGgO5gPJAfYK7APRAeoL7QLRAZ4N8gIRAZAOcQDhAJ4OKgG5AXkM
aADBAaQOEwDhAMIOHgThAM4OIwThAM4OKQTBAdgOLgTZAdwO+wDZAeUONAT5APsOZQRBAC8PcATp
AUUPdgThAfYKfwTxAaEJLAPhAWQPEwBxAFABEwDBAfYKjgTZAWsPcQBZAIYPlQT5Aa0PmwSxAZ0M
aADZAb8PaAABAs0PoQRxALoNpwThAOMPaAAJAlABEwARAlAB+wAZAlAB+wAhAlAB4wQpAlABAAEx
AlAB+wA5AlAB+wBBAlAB+wBJAlAByQVZAlAB0AUpAlABBQFhAlABEwBpAlABAAFxAlABEwB5AlAB
+wApAIMAtgEuADsEpgYuADMEnQYuAEMExQZAABMARQFAACsAbQFDABsAVAFDABMARQFJAIMA1AFj
ABsAVAFjABMARQFpAIMAxwGAACsAbQGDAHMAbQGDABsAVAGDAHsAbQGJAIMAogGgACsAbQGjAMMA
HQKjABMARQHAACsAbQHDAOsAoQLDABMARQHgACsAbQHjABMBoQIAASsAbQEAARMARQEDARMBoQIg
ARMARQEgASsAbQEpARMERQEpAQME7wUpARsE1gUpAfsDPwVAASsAbQFAARMARQFJAfMDNgVJAQME
TQVJAfsDPwVgASsAbQFgARMARQFjAesD6QRjARMBoQJjAdMDbQFjAdsDwgRjAeMD0ARpAQsEiwVp
AQMEqwVpAfsDnwWAASsAbQGJARMERQGJAQMELgaJASMEoQKJAfsDnwWgASsAbQGpAfsDnwWpAQME
FAbAARMARQHAASsAbQHJAfsDnwXJAQMEaAbJASsEbQHgASsAbQEAAhMARQEAAisAbQGAAxMBoQLA
AxMBoQKOAZMBmAGdAe0B8QH8AQECEAIQApgCpwKnAu0BswLKAnYDwAPbA/MDAQLxAQECEQTtAQEC
AQIXBD4EAQLtAYYErQS9BAQAAQAGAAUABwAGAAkACAALAAkAAAB0AU8AAAAtAlQAAADcAVkAAAA5
Al4AAAD1ApgAAABIBMQAAABbBMQAAABcBfAAAACNBzMBAACYBzcBAACiBzMBAACtBzsBAAC9BzMB
AADDBzMBAADRB8QAAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAgATAA8AAgAd
ABEAAgAkABMAAQAlABMAAgAmABUAAQAnABUAAgAoABcAAQApABcAAQArABkAAgAqABkAAQAtABsA
AgAsABsAAgAuAB0AAQAvAB0AAgAwAB8AdQB1AIgAcgF5AYABhwF/AoYCvQMEgAAAAAAAAAAAAAAA
AAAAAAC2AAAABAAAAAAAAAAAAAAAAQAKAAAAAAAKAAAAAAAAAAAAAAAKABMAAAAAAAEAAAAAAAAA
AAAAAJ0AAQMAAAAADAAAAAAAAAAAAAAApgA/AwAAAAAMAAAAAAAAAAAAAACmAI0DAAAAAAwAAAAA
AAAAAAAAAKYA7wQAAAAABAAAAAAAAAAAAAAAAQAmBwAAAAAEAAAAAAAAAAAAAAABAH0BAAAAAAwA
AAAAAAAAAAAAAKYAHgoAAAAADAAAAAAAAAAAAAAApgAVCwAAAAAFAAQABgAEAAAAEAAMAIMCAAAQ
ABkAgwIAAAAAGwCDAi0ACwItAI0CAAAAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQuVmlz
dWFsQmFzaWMATXlBcHBsaWNhdGlvbgBTY3JpcHRDb21wb25lbnRfMGM0ZjJkMjc3ZGE5NGNkM2Jj
YjdlYzZhYTY1YjFhNTQuTXkATXlDb21wdXRlcgBNeVByb2plY3QATXlXZWJTZXJ2aWNlcwBUaHJl
YWRTYWZlT2JqZWN0UHJvdmlkZXJgMQBPdXRwdXRCdWZmZXIAU2NyaXB0Q29tcG9uZW50XzBjNGYy
ZDI3N2RhOTRjZDNiY2I3ZWM2YWE2NWIxYTU0AFVzZXJDb21wb25lbnQAQ29ubmVjdGlvbnMAVmFy
aWFibGVzAFNjcmlwdE1haW4ATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2Vydmlj
ZXMAQXBwbGljYXRpb25CYXNlAC5jdG9yAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENv
bXB1dGVyAFN5c3RlbQBPYmplY3QALmNjdG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0
UHJvdmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNl
cgBtX1VzZXJPYmplY3RQcm92aWRlcgBnZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2Jq
ZWN0UHJvdmlkZXIAQXBwbGljYXRpb24AV2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUA
VHlwZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bv
c2VfX0luc3RhbmNlX18AZ2V0X0dldEluc3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNl
cnZpY2VzLkludGVybmFsAENvbnRleHRWYWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBDb3p5
Um9jLlNTSVNQbHVzLjIwMTQAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVz
AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlw
ZWxpbmUAU2NyaXB0Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBp
cGVsaW5lQnVmZmVyAE91dHB1dE5hbWVNYXAAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQAQnVm
ZmVyAE91dHB1dE1hcABnZXRfU3RhdGljSW5wdXRDb2x1bW5zAGdldF9TdGF0aWNPdXRwdXRDb2x1
bW5zAEFkZFJvdwBTZXRFbmRPZlJvd3NldABFbmRPZlJvd3NldABTdGF0aWNJbnB1dENvbHVtbnMA
U3RhdGljT3V0cHV0Q29sdW1ucwBTY3JpcHRDb21wb25lbnRQbHVzAEZpbmlzaE91dHB1dHMATWFy
a091dHB1dHNGaW5pc2hlZABQcmltZU91dHB1dABPdXRwdXRzAE91dHB1dElEcwBCdWZmZXJzAENy
ZWF0ZU5ld091dHB1dFJvd3MAUGFyZW50Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRT
UnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5XcmFwcGVyAElEVFND
b25uZWN0aW9uTWFuYWdlcjEwMABnZXRfSHR0cABIdHRwAEdldFByb3BlcnRpZXMAVmFsaWRhdGUA
ZXJyTWVzc2FnZQBHZXRDb2xsZWN0aW9ucwBnZXRfQ29ubmVjdGlvbgBzZXRfQ29ubmVjdGlvbgB2
YWx1ZQBnZXRfQmF0Y2hTaXplAHNldF9CYXRjaFNpemUAZ2V0X0NvbGxlY3Rpb24Ac2V0X0NvbGxl
Y3Rpb24AZ2V0X0lzUXVlcnlWYXJpYWJsZQBzZXRfSXNRdWVyeVZhcmlhYmxlAGdldF9RdWVyeQBz
ZXRfUXVlcnkAZ2V0X1F1ZXJ5VmFyaWFibGUAc2V0X1F1ZXJ5VmFyaWFibGUAZ2V0X0h0dHBDb25u
ZWN0aW9uVHlwZQBTZXR1cE91dHB1dENvbHVtbnNfAERhdGFUeXBlAEdldFR5cGVGcm9tUHJvcGVy
dHlUeXBlXwBwcm9wZXJ0eVR5cGUAZHRzVHlwZQBsZW5ndGgAcHJlY2lzaW9uAHNjYWxlAGNvZGVQ
YWdlAEZpcmVFcnJvcl8AbWVzc2FnZQBHZXRWYXJpYWJsZV8AdmFyTmFtZQBTeXN0ZW0uQ29sbGVj
dGlvbnMASGFzaHRhYmxlAEdldENvbHVtbnNJZHhfAFN5c3RlbS5YbWwAWG1sRWxlbWVudABHZXRU
ZXh0XwBlbGVtZW50AG1fY29ubmVjdGlvbgBtX2NvbGxlY3Rpb24AbV9iYXRjaFNpemUAbV9pc1F1
ZXJ5VmFyaWFibGUAbV9xdWVyeQBDb25uZWN0aW9uAEJhdGNoU2l6ZQBDb2xsZWN0aW9uAElzUXVl
cnlWYXJpYWJsZQBRdWVyeQBRdWVyeVZhcmlhYmxlAEh0dHBDb25uZWN0aW9uVHlwZQBTeXN0ZW0u
Q29tcG9uZW50TW9kZWwARWRpdG9yQnJvd3NhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZVN0
YXRlAFN5c3RlbS5Db2RlRG9tLkNvbXBpbGVyAEdlbmVyYXRlZENvZGVBdHRyaWJ1dGUAU3lzdGVt
LkRpYWdub3N0aWNzAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAE1pY3Jvc29mdC5WaXN1YWxCYXNp
Yy5Db21waWxlclNlcnZpY2VzAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1l
QXR0cmlidXRlAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtleXdvcmRBdHRyaWJ1
dGUAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBSdW50aW1lSGVscGVycwBHZXRPYmpl
Y3RWYWx1ZQBSdW50aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBBY3RpdmF0b3IAQ3Jl
YXRlSW5zdGFuY2UATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAZ2V0X1ZhbHVlAHNldF9WYWx1
ZQBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAQ29tVmlzaWJsZUF0dHJpYnV0ZQBTdHJp
bmcAU2NyaXB0QnVmZmVyAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBHZXRPdXRwdXRJRABNaWNyb3Nv
ZnQuU3FsU2VydmVyLkRUU1BpcGVsaW5lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBl
bGluZS5XcmFwcGVyAElEVFNDb21wb25lbnRNZXRhRGF0YTEwMABnZXRfQ29tcG9uZW50TWV0YURh
dGEASURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABnZXRfUnVudGltZUNvbm5lY3Rp
b25Db2xsZWN0aW9uAElEVFNSdW50aW1lQ29ubmVjdGlvbjEwMABnZXRfSXRlbQBnZXRfQ29ubmVj
dGlvbk1hbmFnZXIATWljcm9zb2Z0LlNxbFNlcnZlci5NYW5hZ2VkRFRTAE1pY3Jvc29mdC5TcWxT
ZXJ2ZXIuRHRzLlJ1bnRpbWUASHR0cENsaWVudENvbm5lY3Rpb24AWG1sRG9jdW1lbnQAWG1sTmFt
ZXNwYWNlTWFuYWdlcgBYbWxOb2RlTGlzdABTeXN0ZW0uSU8AU3RyZWFtAEV4Y2VwdGlvbgBJRW51
bWVyYXRvcgBDb252ZXJzaW9ucwBDb25jYXQASXNOdWxsT3JFbXB0eQBJbnQzMgBGb3JtYXQAQWNx
dWlyZUNvbm5lY3Rpb24Ac2V0X1NlcnZlclVSTABEb3dubG9hZERhdGEATWVtb3J5U3RyZWFtAExv
YWQASURpc3Bvc2FibGUARGlzcG9zZQBYbWxOYW1lVGFibGUAZ2V0X05hbWVUYWJsZQBBZGROYW1l
c3BhY2UAWG1sTm9kZQBTZWxlY3ROb2RlcwBnZXRfQ291bnQAR2V0RW51bWVyYXRvcgBnZXRfQ3Vy
cmVudABnZXRfQnVmZmVyAFRvSW50ZWdlcgBzZXRfSXRlbQBEYXRlVGltZQBQYXJzZQBHZXRBdHRy
aWJ1dGUAU3RhcnRzV2l0aABnZXRfRG9jdW1lbnRFbGVtZW50AGdldF9DaGlsZE5vZGVzAGdldF9M
b2NhbE5hbWUAQ29udGFpbnMAT3BlcmF0b3JzAENvbXBhcmVTdHJpbmcAZ2V0X0lubmVyVGV4dABD
b252ZXJ0AEZyb21CYXNlNjRTdHJpbmcATW92ZU5leHQAUHJvamVjdERhdGEAU2V0UHJvamVjdEVy
cm9yAGdldF9NZXNzYWdlAENsZWFyUHJvamVjdEVycm9yAFJlbGVhc2VDb25uZWN0aW9uAEFycmF5
TGlzdABBZGQASW50ZXJhY3Rpb24ASUlmAEFycmF5AFRvQXJyYXkASURUU091dHB1dDEwMABJRFRT
T3V0cHV0Q29sbGVjdGlvbjEwMABnZXRfT3V0cHV0Q29sbGVjdGlvbgBJRFRTT3V0cHV0Q29sdW1u
Q29sbGVjdGlvbjEwMABnZXRfT3V0cHV0Q29sdW1uQ29sbGVjdGlvbgBzZXRfQ29ubmVjdGlvbk1h
bmFnZXJJRABnZXRfRGVzaWduQ29ubmVjdGlvbnMAQ29ubmVjdGlvbk1hbmFnZXIAZ2V0X1NlcnZl
clVSTABFbXB0eQBSZW1vdmVBbGwASURUU091dHB1dENvbHVtbjEwMABMYXN0SW5kZXhPZgBTdWJz
dHJpbmcATmV3AHNldF9OYW1lAFNldERhdGFUeXBlUHJvcGVydGllcwBGaXJlRXJyb3IASURUU1Zh
cmlhYmxlczEwMABJRFRTVmFyaWFibGVEaXNwZW5zZXIxMDAAZ2V0X1ZhcmlhYmxlRGlzcGVuc2Vy
AExvY2tPbmVGb3JSZWFkAElEVFNWYXJpYWJsZTEwMABVbmxvY2sAZ2V0X05hbWUAUGlwZWxpbmVD
b21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQASURUU0J1ZmZlck1hbmFnZXIxMDAAZ2V0X0J1ZmZl
ck1hbmFnZXIAZ2V0X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQAZ2V0X0xlbmd0aABT
U0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5T
U0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0aWVzQXR0cmlidXRlAEZpbHRlclByb3BlcnRp
ZXNBdHRyaWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1dGUARGVmYXVsdFZhbHVlQXR0cmlidXRl
AENhdGVnb3J5QXR0cmlidXRlAERlc2NyaXB0aW9uQXR0cmlidXRlAExpc3RBdHRyaWJ1dGUAUmVm
cmVzaFByb3BlcnRpZXNBdHRyaWJ1dGUAUmVmcmVzaFByb3BlcnRpZXMAQ29ubmVjdGlvbkF0dHJp
YnV0ZQBWYXJpYWJsZUF0dHJpYnV0ZQBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1
bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLlZlcnNpb25pbmcAVGFy
Z2V0RnJhbWV3b3JrQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF8wYzRmMmQyNzdkYTk0Y2QzYmNi
N2VjNmFhNjViMWE1NC5kbGwAAAAAAA1PAHUAdABwAHUAdAAACUgAdAB0AHAAAAM/AAADJgAAJSQA
dABvAHAAPQB7ADAAfQAmACQAcwBrAGkAcAA9AHsAMQB9AAAHewAwAH0AAAlhAHQAbwBtAAA3aAB0
AHQAcAA6AC8ALwB3AHcAdwAuAHcAMwAuAG8AcgBnAC8AMgAwADAANQAvAEEAdABvAG0AACsvAGEA
dABvAG0AOgBmAGUAZQBkAC8AYQB0AG8AbQA6AGUAbgB0AHIAeQAAD2EAdABvAG0AXwBpAGQAAAVp
AGQAABVhAHQAbwBtAF8AdABpAHQAbABlAAALdABpAHQAbABlAAAZYQB0AG8AbQBfAHUAcABkAGEA
dABlAGQAAA91AHAAZABhAHQAZQBkAAAXYQB0AG8AbQBfAGEAdQB0AGgAbwByAAANYQB1AHQAaABv
AHIAAAlsAGkAbgBrAAAJaAByAGUAZgAAD2gAdAB0AHAAOgAvAC8AABF4AG0AbAA6AGIAYQBzAGUA
ABNhAHQAbwBtAF8AbABpAG4AawAAEWMAYQB0AGUAZwBvAHIAeQAAG2EAdABvAG0AXwBjAGEAdABl
AGcAbwByAHkAAAl0AGUAcgBtAAAPYwBvAG4AdABlAG4AdAAAGW0AOgBwAHIAbwBwAGUAcgB0AGkA
ZQBzAAANbQA6AHQAeQBwAGUAABVFAGQAbQAuAEIAaQBuAGEAcgB5AAAVQwBvAG4AbgBlAGMAdABp
AG8AbgAAE0IAYQB0AGMAaABTAGkAegBlAAAVQwBvAGwAbABlAGMAdABpAG8AbgAAH0kAcwBRAHUA
ZQByAHkAVgBhAHIAaQBhAGIAbABlAAAbUQB1AGUAcgB5AFYAYQByAGkAYQBiAGwAZQAAC1EAdQBl
AHIAeQAAJVMAZQBsAGUAYwB0ACAAYwBvAG4AbgBlAGMAdABpAG8AbgAuAAAnUwBwAGUAYwBpAGYA
eQAgAGMAbwBsAGwAZQBjAHQAaQBvAG4ALgAAB2EAcABwAAA1aAB0AHQAcAA6AC8ALwB3AHcAdwAu
AHcAMwAuAG8AcgBnAC8AMgAwADAANwAvAGEAcABwAABTLwBhAHAAcAA6AHMAZQByAHYAaQBjAGUA
LwBhAHAAcAA6AHcAbwByAGsAcwBwAGEAYwBlAC8AYQBwAHAAOgBjAG8AbABsAGUAYwB0AGkAbwBu
AAADLwAACUgAVABUAFAAABMkAG0AZQB0AGEAZABhAHQAYQAAB2UAZABtAABZaAB0AHQAcAA6AC8A
LwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAGEAZABvAC8AMgAw
ADAANwAvADAANQAvAGUAZABtAAAJZQBkAG0AeAAAW2gAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEA
cwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBhAGQAbwAvADIAMAAwADcALwAwADYALwBl
AGQAbQB4AACAlS8AZQBkAG0AeAA6AEUAZABtAHgALwBlAGQAbQB4ADoARABhAHQAYQBTAGUAcgB2
AGkAYwBlAHMALwBlAGQAbQA6AFMAYwBoAGUAbQBhAC8AZQBkAG0AOgBFAG4AdABpAHQAeQBUAHkA
cABlAFsAJwB7ADAAfQAnAF0ALwBlAGQAbQA6AFAAcgBvAHAAZQByAHQAeQABCVQAeQBwAGUAAAlO
AGEAbQBlAAAXRQBkAG0ALgBCAG8AbwBsAGUAYQBuAAARRQBkAG0ALgBCAHkAdABlAAAZRQBkAG0A
LgBEAGEAdABlAFQAaQBtAGUAACVFAGQAbQAuAEQAYQB0AGUAVABpAG0AZQBPAGYAZgBzAGUAdAAA
EUUAZABtAC4AVABpAG0AZQAAF0UAZABtAC4ARABlAGMAaQBtAGEAbAAAFUUAZABtAC4ARABvAHUA
YgBsAGUAABVFAGQAbQAuAFMAaQBuAGcAbABlAAARRQBkAG0ALgBHAHUAaQBkAAATRQBkAG0ALgBJ
AG4AdAAxADYAABNFAGQAbQAuAEkAbgB0ADMAMgAAE0UAZABtAC4ASQBuAHQANgA0AAAVRQBkAG0A
LgBTAHQAcgBpAG4AZwAAMVUAbgBoAGEAbgBkAGwAZQBkACAAcAByAG8AcABlAHIAdAB5ACAAdAB5
AHAAZQAuAAAZTwBEAGEAdABhACAAUwBvAHUAcgBjAGUAAAAANptHfAXawk2vkqBJUrbejQAIt3pc
Vhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYVEhgBEgwEAAASCAcGFRIYARIIBAAAEhEHBhUS
GAESEQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgAEhEECAASFAQgAQIcAyAACAQgABIVAyAADgIe
AAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZARMABCgAEwAIFs9JC7gMNOoIiYRdzYCAzJEL
IAUBEiEIAhIlEikEIAAdDgMgAAIEKAAdDgMGEiQDBhIoAwYSHAsgBAEIHQgdEiUSKQMGEiEFIAEB
EiEEIAASMQQoABIxBSABAhAOBCABAQ4EIAEBCAQgAQECDyAGAQ4QETUQCBAIEAgQCAQgARwOBCAA
EjkFIAEOEj0CBg4CBggCBgIDKAAOAygACAMoAAIFIAEBEUUIAQABAAAAAAAFIAIBDg4YAQAKTXlU
ZW1wbGF0ZQgxMC4wLjAuMAAABAEAAAAGFRIYARIMBhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwE
BwESCAQHARIRBAcBEhQTAQAOTXkuV2ViU2VydmljZXMAABABAAtNeS5Db21wdXRlcgAADAEAB015
LlVzZXIAABMBAA5NeS5BcHBsaWNhdGlvbgAABAABHBwDBwECAwcBCAYAARIVEWEEBwESFQMHAQ4F
EAEAHgAECgEeAAQHAR4AByAEAQ4ODg5hAQA0U3lzdGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMu
U29hcEh0dHBDbGllbnRQcm90b2NvbBJDcmVhdGVfX0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFu
Y2VfXwAAAAYVEhgBEwAGFRIZARMABAoBEwAFIAEBEwAIBwMTABMAEwAFAQAAAAAEBwEdDgYAAggS
KQ4EBwIICAQgABJ9BSAAEoCBBiABEoCFHAQHARIxBAABDhwFAAIODg4EAAECDgYAAw4ODg4GAAMO
DhwcBCABHBwEIAEBHAUAAg4OHAQgAB0FBSABAR0FBiABARKAmQUgABKAtQYgAQESgLUJIAISgJUO
EoCRBSAAEoChAyAAHAQgABIlBAABCBwFIAESPQ4FIAIBCBwGAAERgL0OBCABDg4EIAECDgQgABI9
BSAAEoCVBgADCA4OAgUAAR0FDgYAAQESgJ0yBxcSORwSgIkSgI0SgJEIDg4SgJUSgJkSPRI9Ej0S
PQ4SgJUSPRwSgJ0SgKESHBKAoQ4EIAEIHAYAAxwCHBwHIAESgNUSFQIdDgcHAh0OEoDNBSAAEoDd
BiABEoDZHAUgABKA4QoHBAICEoDZEoCdBSAAEoDlBiABEoDpHB0HCxKAlRwSgIkSgI0dDhKAkRKA
zRKAmRI9DhKAoQUHARKA2QYHAh0OHQ4EIAEIDgUgAg4ICAQgAQ4IBSAAEoDtCSAFARE1CAgICCYH
Eg4SgO0cEoCJEoCNDhKAkRKA2RKAlQ4SgJkIETUICBI9CBKAoQogBgEIDg4OCBACBSAAEoD1CCAC
AQ4QEoDxBiABEoD5HAcHAxwcEoDxBiABEoDtHAUgABKA/QUgABKBAQUgAggICAUgAgEcHA8HBwgS
ORKA2RI5CBKA7QgEBwIODg0BAAhWYWxpZGF0ZQAAEgEADUdldFByb3BlcnRpZXMAAAUgAQEdDkwB
AAYAAAAKQ29ubmVjdGlvbglCYXRjaFNpemUKQ29sbGVjdGlvbg9Jc1F1ZXJ5VmFyaWFibGUFUXVl
cnkNUXVlcnlWYXJpYWJsZQAACAEAZAAAAAAADQEACFNldHRpbmdzAAA9AQA4U3BlY2lmaWVzIHRo
ZSBudW1iZXIgb2Ygcm93cyB0byBiZSByZXRyaWV2ZWQgYXMgYSBiYXRjaC4AABMBAA5HZXRDb2xs
ZWN0aW9ucwAACwEABlNvdXJjZQAAHQEAGFNlbGVjdCBPRGF0YSBjb2xsZWN0aW9uLgAABiABARGB
KQUgAgEOAhgBABJIdHRwQ29ubmVjdGlvblR5cGUBAAAkAQAfU2VsZWN0IEhUVFAgQ29ubmVjdGlv
biBNYW5hZ2VyLgAAGQEAFFNwZWNpZnkgT0RhdGEgcXVlcnkuAAA5AQA0SW5kaWNhdGVzIHdoZXRo
ZXIgdGhlIHF1ZXJ5IGlzIHN0b3JlZCBpbiBhIHZhcmlhYmxlLgAANAEAL1NwZWNpZmllcyB0aGUg
dmFyaWFibGUgdGhhdCBjb250YWlucyB0aGUgcXVlcnkuAAAIAQAIAAAAAAAeAQABAFQCFldyYXBO
b25FeGNlcHRpb25UaHJvd3MBRwEAGi5ORVRGcmFtZXdvcmssVmVyc2lvbj12NC4wAQBUDhRGcmFt
ZXdvcmtEaXNwbGF5TmFtZRAuTkVUIEZyYW1ld29yayA0AAAAUF8AAAAAAAAAAAAAbl8AAAAgAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAGBfAAAAAAAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUu
ZGxsAAAAAAD/JQAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACAAAAAAAAAAAAA
AAAAAAABAAEAAAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWGAAAOwCAAAAAAAAAAAAAOwC
NAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAAAAAAAAAAAAAA
AAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4A
ZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsARMAgAAAQBTAHQAcgBp
AG4AZwBGAGkAbABlAEkAbgBmAG8AAAAoAgAAAQAwADAAMAAwADAANABiADAAAAAsAAIAAQBGAGkA
bABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAIAAAADAACAABAEYAaQBsAGUAVgBlAHIAcwBp
AG8AbgAAAAAAMAAuADAALgAwAC4AMAAAAIwANQABAEkAbgB0AGUAcgBuAGEAbABOAGEAbQBlAAAA
UwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAwAGMANABmADIAZAAyADcANwBkAGEAOQA0
AGMAZAAzAGIAYwBiADcAZQBjADYAYQBhADYANQBiADEAYQA1ADQALgBkAGwAbAAAAAAAKAACAAEA
TABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAIAAAAJQANQABAE8AcgBpAGcAaQBuAGEAbABG
AGkAbABlAG4AYQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADAAYwA0AGYA
MgBkADIANwA3AGQAYQA5ADQAYwBkADMAYgBjAGIANwBlAGMANgBhAGEANgA1AGIAMQBhADUANAAu
AGQAbABsAAAAAAA0AAgAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAwAC4AMAAuADAA
LgAwAAAAOAAIAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4AMAAu
ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAMAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA]]></arrayElement></arrayElements></property><property id="9" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="11" 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_0c4f2d277da94cd3bcb7ec6aa65b1a54</property><property id="12" 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><connections><connection id="14" name="Http" connectionManagerID="{DC19384D-9E76-4D38-AC98-E548A512714D}" /></connections><outputs><output id="15" name="Output" hasSideEffects="true"><externalMetadataColumns /></output></outputs></component>