<?xml version="1.0"?>
<ScriptProject Name="ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa" VSTAMajorVersion="3" VSTAMinorVersion="0" Language="VisualBasic">
  <ProjectItem Name="ScriptMain.vb" Encoding="UTF8">
<![CDATA[' Microsoft SQL Server Integration Services Script Task
'
' Copyright (c) 2008 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.Collections
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.IO
Imports System.Threading
Imports System.Text
Imports System.Text.RegularExpressions

Imports Microsoft.SqlServer.Dts.Runtime
Imports CozyRoc.SqlServer.SSIS.Attributes


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "Action", "Find", "Replace", "StartIndex", "ResultVariable", _
    "IsSourceVariable", "SourceVariable", "Source", _
    "IsTargetVariable", "TargetVariable", "Target"})> _
<FilterProperties("GetProperties")> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
	Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

	Enum ScriptResults
		Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
		Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
	End Enum

    ' The execution engine calls this method when the task executes.
    ' To access the object model, use the Dts object. Connections, variables, events,
    ' and logging features are available as static members of the Dts class.
    ' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
    ' 
    ' To open Code and Text Editor Help, press F1.
    ' To open Object Browser, press Ctrl+Alt+J.


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Main()
        Dim result As Integer
        Dim sourceStream As Stream = Nothing
        Dim targetStream As Stream = Nothing
        Dim closeTarget As Boolean

        Try
            sourceStream = GetStream_(Me.Source, Me.IsSourceVariable, False)

            Select Case Me.Action
                Case ActionTypes.Find
                    Call ExecuteFind_(sourceStream)

                Case ActionTypes.FindAndReplace
                    targetStream = GetStream_(Me.Target, Me.IsTargetVariable, True, closeTarget)
                    Call ExecuteFindAndReplace_(sourceStream, targetStream)
            End Select

            result = ScriptResults.Success
        Catch ex As Exception
            result = ScriptResults.Failure
            Call Dts.Events.FireError( _
                0, _
                String.Empty, _
                ex.Message, _
                String.Empty, _
                0)
        Finally
            If Not sourceStream Is Nothing Then
                Call sourceStream.Dispose()
            End If

            If Not targetStream Is Nothing AndAlso closeTarget Then
                ' Close target stream only if FileStream.
                Call targetStream.Dispose()
            End If
        End Try

        Dts.TaskResult = result
    End Sub ' Main


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of current properties based on current state.
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        ' Base properties.
        Call result.Add("Action")
        Call result.Add("Find")
        Call result.Add("IsSourceVariable")
        Call result.Add(IIf(Me.IsSourceVariable, "SourceVariable", "Source"))

        Select Case Me.Action
            Case ActionTypes.Find
                Call result.Add("StartIndex")
                Call result.Add("ResultVariable")

            Case ActionTypes.FindAndReplace
                Call result.Add("Replace")
                Call result.Add("IsTargetVariable")
                Call result.Add(IIf(Me.IsTargetVariable, "TargetVariable", "Target"))
        End Select

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Validate(ByRef errMessage As String) As Boolean
        Dim result As Boolean
        Dim props As Object() = Nothing

        Try
            If String.IsNullOrEmpty(Me.Find) Then
                Throw New ApplicationException("Please specify Find.")
            ElseIf String.IsNullOrEmpty(Me.Source) Then
                Throw New ApplicationException("Please specify Source.")
            End If

            Select Case Me.Action
                Case ActionTypes.Find
                    If String.IsNullOrEmpty(Me.ResultVariable) Then
                        Throw New ApplicationException("Please specify ResultVariable.")
                    End If

                Case ActionTypes.FindAndReplace
                    If String.IsNullOrEmpty(Me.Target) Then
                        Throw New ApplicationException("Please specify Target.")
                    End If
            End Select

            result = True
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select task action.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Action() As ActionTypes
        Get
            Action = m_action
        End Get
        Set(ByVal value As ActionTypes)
            m_action = value
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify the string that will be matched.")> _
    Public Property Find() As String
        Get
            Find = m_find
        End Get
        Set(ByVal value As String)
            m_find = value
        End Set
    End Property    ' Find


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify what will be inserted in the place of the matched string.")> _
    Public Property Replace() As String
        Get
            Replace = m_replace
        End Get
        Set(ByVal value As String)
            m_replace = value
        End Set
    End Property    ' Replace


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify offset from where to start the search.")> _
    Public Property StartIndex() As Long
        Get
            StartIndex = m_startIndex
        End Get
        Set(ByVal value As Long)
            m_startIndex = value
        End Set
    End Property    ' StartIndex


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specifies package variable where you would like to store find index.")> _
    <Variable()> _
    Public Property ResultVariable() As String
        Get
            ResultVariable = m_resultVariable
        End Get
        Set(ByVal value As String)
            m_resultVariable = value
        End Set
    End Property    ' ResultVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Source")> _
    <Description("Specifies if Source property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property IsSourceVariable() As Boolean
        Get
            IsSourceVariable = m_isSourceVar
        End Get
        Set(ByVal value As Boolean)
            If m_isSourceVar <> value Then
                m_isSourceVar = value
                m_source = String.Empty
            End If
        End Set
    End Property    ' IsSourceVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Source")> _
    <Description("Specifies variable containing source to search.")> _
    <Variable()> _
    Public Property SourceVariable() As String
        Get
            SourceVariable = m_source
        End Get
        Set(ByVal value As String)
            m_source = value
        End Set
    End Property    ' SourceVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Source")> _
    <Description("Specifies source to search.")> _
    <Connection("FileConnectionType")> _
    Public Property Source() As String
        Get
            Source = m_source
        End Get
        Set(ByVal value As String)
            m_source = value
        End Set
    End Property    ' Source


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Target")> _
    <Description("Specifies if Target property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property IsTargetVariable() As Boolean
        Get
            IsTargetVariable = m_isTargetVar
        End Get
        Set(ByVal value As Boolean)
            If m_isTargetVar <> value Then
                m_isTargetVar = value
                m_target = String.Empty
            End If
        End Set
    End Property    ' IsTargetVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Target")> _
    <Description("Specifies variable containing target to store result.")> _
    <Variable()> _
    Public Property TargetVariable() As String
        Get
            TargetVariable = m_target
        End Get
        Set(ByVal value As String)
            m_target = value
        End Set
    End Property    ' TargetVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Target")> _
    <Description("Specifies target to store result.")> _
    <Connection("FileConnectionType")> _
    Public Property Target() As String
        Get
            Target = m_target
        End Get
        Set(ByVal value As String)
            m_target = value
        End Set
    End Property    ' Target
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Searches stream for match. Returns result in ResultVariable.
    Private Sub ExecuteFind_(ByVal sourceStream As Stream)
        Dim result As Long
        Dim findBytes() As Byte = Encoding.UTF8.GetBytes(Regex.Unescape(Me.Find))
        Dim findLen As Integer = findBytes.Length
        Dim buf() As Byte = New Byte(findLen - 1) {}
        Dim vars As Variables = Nothing
        Dim bytesRead As Integer

        ' Advance to start index.
        result = 0
        Do While result < Me.StartIndex
            If sourceStream.Read(buf, 0, 1) = 0 Then
                Exit Do
            End If

            result += 1
        Loop

        ' Search for match.
        result -= findLen

        Do While Not ArrayEquals_(buf, findBytes)
            Call Array.Copy(buf, 1, buf, 0, findLen - 1)
            bytesRead = sourceStream.Read(buf, findLen - 1, 1)
            If bytesRead = 0 Then
                ' Reached end of stream and still no match.
                result = -1
                Exit Do
            End If

            result += 1
        Loop

        ' Store result index in package variable.
        Call Dts.VariableDispenser.LockOneForWrite(Me.ResultVariable, vars)
        Try
            vars(Me.ResultVariable).Value = result
        Finally
            Call vars.Unlock()
        End Try
    End Sub ' ExecuteFind_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Find and replace, storing result in target stream.
    Private Sub ExecuteFindAndReplace_( _
        ByVal sourceStream As Stream, _
        ByVal targetStream As Stream)

        Dim findBytes() As Byte = Encoding.UTF8.GetBytes(Regex.Unescape(Me.Find))
        Dim findLen As Integer = findBytes.Length
        Dim repBytes() As Byte = Encoding.UTF8.GetBytes(Regex.Unescape(Me.Replace))
        Dim repLen As Integer = repBytes.Length
        Dim buf() As Byte = New Byte(findLen - 1) {}
        Dim bytesRead As Integer

        bytesRead = sourceStream.Read(buf, 0, findLen)

        Do While True
            If ArrayEquals_(buf, findBytes) Then
                ' Found match. Replace with specified combination.
                Call targetStream.Write(repBytes, 0, repLen)
                bytesRead = sourceStream.Read(buf, 0, findLen)
            Else
                Call targetStream.Write(buf, 0, 1)
                Call Array.Copy(buf, 1, buf, 0, findLen - 1)
                bytesRead = findLen - 1 + sourceStream.Read(buf, findLen - 1, 1)
            End If

            If bytesRead <> findLen Then
                ' Reached end of stream.
                Call targetStream.Write(buf, 0, bytesRead)
                Call targetStream.Flush()
                Exit Do
            End If
        Loop
    End Sub ' ExecuteFindAndReplace_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property FileConnectionType() As String()
        Get
            FileConnectionType = New String() {"FILE"}
        End Get
    End Property    ' FileConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get Stream to source.
    Private Function GetStream_( _
        ByVal input As String, _
        ByVal isVar As Boolean, _
        ByVal create As Boolean, _
        Optional ByRef hasToClose As Boolean = False) As Stream

        Dim result As Stream = Nothing
        Dim vars As Variables = Nothing
        Dim inputVar As Variable
        Dim fileName As String = String.Empty
        Dim manager As ConnectionManager

        If isVar Then
            ' User selected variable.
            Call Dts.VariableDispenser.LockOneForRead(input, vars)
            Try
                inputVar = vars(Me.Source)

                If inputVar.DataType = TypeCode.String Then
                    ' Variable references file name.
                    fileName = inputVar.Value.ToString()
                Else
                    ' Variable references a stream ?

                    ' Wait until input Stream is setup, polling every second.
                    Do While inputVar.Value.GetType() Is GetType(Object)
                        Call vars.Unlock()
                        Call Thread.Sleep(1000)
                        Call Dts.VariableDispenser.LockOneForRead(input, vars)
                        inputVar = vars(Me.Source)
                    Loop

                    result = CType(inputVar.Value, Stream)
                End If
            Finally
                Call vars.Unlock()
            End Try
        Else
            ' User selected file connection.
            manager = Dts.Connections(input)
            fileName = manager.AcquireConnection(Nothing).ToString()
        End If

        If Not String.IsNullOrEmpty(fileName) Then
            ' Input is file name.
            If create Then
                result = File.Create(fileName)
                hasToClose = True
            ElseIf File.Exists(fileName) Then
                result = File.OpenRead(fileName)
            End If
        End If

        GetStream_ = result
    End Function    ' GetStream_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Compares 2 arrays, returning true if they match.
    Private Function ArrayEquals_(Of T As IEquatable(Of T))(ByVal a As T(), ByVal b As T()) As Boolean
        Dim result As Boolean
        Dim comparer As EqualityComparer(Of T) = EqualityComparer(Of T).Default
        Dim item As Integer

        If a.Length = b.Length Then
            result = True

            For item = 0 To a.Length - 1
                If Not comparer.Equals(a(item), b(item)) Then
                    ' Doesn't match.
                    result = False
                    Exit For
                End If
            Next
        End If

        ArrayEquals_ = result
    End Function    ' ArrayEquals_
#End Region ' Internals


#Region "Attributes"
    Enum ActionTypes
        Find
        FindAndReplace
    End Enum    ' ActionTypes


    Private m_action As ActionTypes
    Private m_find As String
    Private m_replace As String
    Private m_startIndex As Long
    Private m_resultVariable As String
    Private m_isSourceVar As Boolean
    Private m_source As String
    Private m_isTargetVar As Boolean
    Private m_target As String
#End Region ' Attributes
End Class   ' ScriptMain]]></ProjectItem>
  <ProjectItem Name="ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa.vbproj" Encoding="UTF16LE">
<![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>{1401099C-691C-4E7C-870D-378D044B8210}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa</RootNamespace>
    <AssemblyName>ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </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>
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies\CozyRoc.SSISPlus.2012.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.ScriptTask, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
  </ItemGroup>
  <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" />
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebug92280758-e459-4bba-b7cb-4eb1061a9173/513bf1c5-740a-4432-b105-fc5aa5cfd98f&quot;" />
        <Host Name="ScriptTask" />
        <ProjectClient>
          <HostIdentifier>SSIS_ST110</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
  <PropertyGroup>
    <OptionCompare>Binary</OptionCompare>
  </PropertyGroup>
  <PropertyGroup>
    <OptionExplicit>On</OptionExplicit>
  </PropertyGroup>
  <PropertyGroup>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
</Project>]]></ProjectItem>
  <ProjectItem Name="Project" Encoding="UTF16LE">
<![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:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:ProjectId>{BE1C76C6-371D-4AB4-85BA-DDF7CBE6FFB4}</msb:ProjectId>
		<msb:DisplayName>ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa</msb:DisplayName>
		<msb:CodeName>ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa</msb:CodeName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:Project Include="ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></ProjectItem>
  <BinaryItem Name="ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa.dll">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
AAoTBBEECwcqAAAAARAAAAIAJQCBpgAIAAAAARMwBABCAAAAHgAAEShFAAAKCwOOtwSOtzMwFw0W
A463F9oTBAwrHgcDCKMEAAAbBAijBAAAG29GAAAKLQQWDSsJCBfWDAgRBDHdCQoGKgAAQlNKQgEA
AQAAAAAADAAAAHY0LjAuMzAzMTkAAAAABQBsAAAA+AsAACN+AABkDAAAcA0AACNTdHJpbmdzAAAA
ANQZAADIAQAAI1VTAJwbAAAQAAAAI0dVSUQAAACsGwAAdAcAACNCbG9iAAAAAAAAAAIAAAFXHaIJ
CR4AAAD6JTMAFgAAAQAAADsAAAAJAAAAFAAAAC8AAAAYAAAAUwAAAAUAAABKAAAAHgAAAAMAAAAR
AAAAHAAAAA0AAAABAAAABgAAAAQAAAAEAAAAAwAAAAEAAAAAAD0NAQAAAAAACgAfAfUACgBTATUB
BgBjAVwBCgC7AfUABgA5AlwBCgC7ApECDgAoA/8CBgDLBMEEBgBdBVwBBgBjBlwBEgClBo8GEgC+
Bo8GEgDrBtMGBgAVBwIHCgBUBy0HCgBsBxMAEgChB4QHBgDWB7YHBgD0B1wBBgAYCFwBCgAxCBMA
BgB/CGAIBgCTCFwBCgCdCC0HDgC5CP8CDgDTCP8CBgDyCFwBBgBRCT4JCgBfCRMABgBvCVwBBgCL
CVwBFgDfCb8JBgD1CekJEgAmCgcKBgA+ClwBFgBNCr8JFgCFCr8JBgCXClwBFgCwCr8JBgDRClwB
BgD4CucKFgAFC78JBgAzC8EEBgA4C8EEBgB1C1oLBgCUC1wBDgCqC/8CGgAEDOILGgAgDOILGgA6
DOILGgBSDOILEgBmDI8GEgB7DI8GEgCNDI8GEgCoDI8GGgC6DOILBgDMDLYHBgDsDLYHBgAkDQoN
AAAAAAEAAAAAAAEAAQAAAAAAKQA3AAUAAQABAAAAAABmADcACQABAAIAAAEQAHEANwANAAEAAwAF
AQAAewAAAA0ABQAIAAUBAACJAAAADQAFAA8AAQAAAKQArwAdAAYAEQACAQAA2wAAACkADwAwAAIB
AADpAAAAKQASADAAMQB+ASAAMQCnAS0AMQDJAToAMQDuAUcAIQDKApAAAQBuBf8AAQB3BQMBAQB+
BQMBAQCIBQYBAQCVBQMBAQCmBQkBAQC0BQMBAQC9BQkBAQDLBQMBBgZoBiIBVoBwBiUBVoB4BiUB
BgZoBiIBVoDbBf8AVoCABv8AUCAAAAAABhgvARMAAQBYIAAAAAAGGC8BEwABAGAgAAAAABEYagEX
AAEAjCAAAAAAEwhxARsAAQCkIAAAAAATCJcBKAABALwgAAAAABMIwAE1AAEA1CAAAAAAEwjeAUIA
AQDsIAAAAABGAiQCYwABAAghAAAAAEYCLQJoAAIAHCEAAAAAgwA+AmwAAgA0IQAAAABGAkYCcQAC
AEghAAAAABEATwJ4AAIAZCEAAAAAAQBtAoAAAwCAIQAAAAAGGC8BEwAEAIghAAAAAAMIgQKLAAQA
vCEAAAAABhgvARMABADQIQAAAAAGGC8BEwAEANghAAAAAAYARAMTAAQAuCIAAAAABgBJA6YABACQ
IwAAAAAGAFcDqwAEAEQkAAAAAAYIawOxAAUAXCQAAAAABgh2A7YABQBoJAAAAAAGCIcDcQAGAIAk
AAAAAAYIkAO8AAYAjCQAAAAABgiZA3EABwCkJAAAAAAGCKUDvAAHALAkAAAAAAYIsQPBAAgAyCQA
AAAABgjAA8UACADUJAAAAAAGCM8DcQAJAOwkAAAAAAYI4gO8AAkA+CQAAAAABgj1A8oACgAQJQAA
AAAGCAoEzgAKADAlAAAAAAYIHwRxAAsASCUAAAAABggyBLwACwBUJQAAAAAGCEUEcQAMAGwlAAAA
AAYIUAS8AAwAeCUAAAAABghbBMoADQCQJQAAAAAGCHAEzgANALAlAAAAAAYIhQRxAA4AyCUAAAAA
BgiYBLwADgDUJQAAAAAGCKsEcQAPAOwlAAAAAAYItgS8AA8A+CUAAAAAAQDSBNMAEADYJgAAAAAB
AOwE2QARAJAnAAAAAAEIEAWmABMAsCcAAAAAAQAnBeEAEwDMKAAAAAABAFAF7QAXAAAAAQArAgAA
AQBkAgAAAQBkAgAAAQBgAwAAAQCBAwAAAQCBAwAAAQCBAwAAAQCBAwAAAQCBAwAAAQCBAwAAAQCB
AwAAAQCBAwAAAQCBAwAAAQCBAwAAAQCBAwAAAQDfBAAAAQDfBAAAAgADBQAAAQAyBQAAAgA4BQAA
AwA+BRAQBABFBQAAAQBqBQAAAgBsBQkALwETAFkALwEzAWkALwFCAREALwETAHEALwETADQALwET
ADwALwETAEQALwETAEwALwETADQAgQKLADwAgQKLAEQAgQKLAEwAgQKLAHkALwETAIEALwETAIkA
LwG8AJEA5QfXARkAJAJjABkALQJoACkABgjkARkARgJxAKEAIgj0ARkALwETAKkALwEEAlQAygKQ
AFwATAiLAFwAVgiBAlwALwETALEALwHOADkALwETAMEAqQiWAjkAywicAskA5wihAtkA+QgDAbkA
/whxANEACwmmAsEAFQkXAEEAJwkTAMkALwmvAuEALwETAOEAWwnCAukAawnHAuEAdQnOAtkAfQnh
AvkALwG8AAkB/gn6AhEBLAoAAwkBNQoFA0EAQwoLA/EASAoTA8kAXwoiAyEBdQooAwEBjgoxAykB
Vgg4AwEBnQoTAEEApApKA0EAqgoTACEBwgooAykB2gplAykBTAhrA0kB/wpvAxkAPgJsAMkAEQt0
A1EBjgp6AzkBIQuBA1kBQwuGA1kBSgvhAlkBUQuGA2wAiAumA2wAJAKwA3EBLwHOAHkBLwETAIEB
LwG8AIkBLwG8AJEBLwHwA5kBLwG8AKEBLwG8AKkBLwG8ALEBLwHHBMEBLwETAMkBLwGvAtEBLwET
ANkBLwG8AAgAQAApAQgARAAuAQgATAApAQgAUAAuAQIAWQDrACkAgwCRAS4AiwIDBy4AkwIMBy4A
mwIrB0AAEwA5AUAAKwAuAUMAGwBIAUMAEwA5AUkAgwDDAWMAEwA5AWMAGwBIAWkAgwCiAYAAKwAu
AYMAewAuAYMAGwBIAYMAcwAuAYkAgwCvAaAAKwAuAaMAwwAMAqMAEwA5AcAAKwAuAcMAEwA5AcMA
6wCQAskAewI5AckAawLOBMkAcwLnBOAAKwAuAeMAOwKQAuMAWwL2A+MAUwLdA+MAQwIuAeMASwLP
A+kAawJMBukAcwLnBAABKwAuAQABEwA5AQkBawL1BAkBcwLnBCABKwAuASABEwA5ASkBcwLnBCkB
awI8BUABEwA5AUABKwAuAUkBawK5BkkBgwIuAUkBcwLnBGABKwAuAWABEwA5AWkBawINBmkBewI5
AWkBcwKlBYABKwAuAYkBawJwBYkBcwKlBYkBgwIuAaABKwAuAakBYwJ8BKkBcwKlBakBawLsBcAB
KwAuAcABEwA5AckBewI5AckBawJ6BskBcwK7BOABKwAuAekBgwIuAekBcwK7BOkBawKxBQACKwAu
AQACEwA5AQkCYwJ8BAkCcwK7BAkCawKUBH0BggGHAYwB3AHgAesB8AH/Af8BhwK0AtgC5gLxAvAB
8AH2AvAB3AHwAfAB3AHwAfABPQNSA14DjQO4AwQAAQAGAAUABwAGAAAAUwFPAAAADAJUAAAAuwFZ
AAAAGAJeAAAA1AKYAAAA1AUMAQAA2wURAQAA4AURAQAA6AUVAQAA8wURAQAAAgYZAQAAEwYRAQAA
IgYRAQAAKQYZAQAAOgYRAQAASQYRAQAAUAYdAQIABAADAAIABQAFAAIABgAHAAIABwAJAAIADwAL
AAEAFgANAAIAFQANAAIAFwAPAAEAGAAPAAIAGQARAAEAGgARAAIAGwATAAEAHAATAAIAHQAVAAEA
HgAVAAEAIAAXAAIAHwAXAAIAIQAZAAEAIgAZAAEAJAAbAAIAIwAbAAIAJQAdAAEAJgAdAAIAJwAf
AAEAKAAfAAIAKQAhAAEAKgAhAAIALQAjAHUAdQCIAHUA+ABhAWgBbwF2AW4CdQLVAp4DBIAAAAAA
AAAAAAAAAAAAAAAArwAAAAQAAAAAAAAAAAAAAAEACgAAAAAACgAAAAAAAAAAAAAACgATAAAAAAAL
AAAAAAAAAAAAAACdAOACAAAAAAQAAAAAAAAAAAAAAAEAXAEAAAAACwAAAAAAAAAAAAAAnQCgCQAA
AAABAAAAAAAAAAAAAADGA8wLAAAAAAUABAAGAAQACAAHAAkABwAAABAADABiAgAAEAAZAGICAAAA
ABsAYgIAAAAAXwBiAi0A+gEtAHwCXgAeAwQAFgAAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3Nv
ZnQuVmlzdWFsQmFzaWMATXlBcHBsaWNhdGlvbgBTY3JpcHRUYXNrXzkzODhmM2I1ZWE1MTQ0ODdh
ZmU1MGMxYTJkYzZiNWZhLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2ViU2VydmljZXMAVGhy
ZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEAU2NyaXB0TWFpbgBTY3JpcHRUYXNrXzkzODhmM2I1ZWE1
MTQ0ODdhZmU1MGMxYTJkYzZiNWZhAFNjcmlwdFJlc3VsdHMAQWN0aW9uVHlwZXMATWljcm9zb2Z0
LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMAQXBwbGljYXRpb25CYXNlAC5jdG9yAE1p
Y3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1dGVyAFN5c3RlbQBPYmplY3QALmNjdG9y
AGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJvdmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1f
QXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBnZXRf
V2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAQXBwbGljYXRpb24AV2Vi
U2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlwZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0
ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2VfX0luc3RhbmNlX18AZ2V0X0dldEluc3Rh
bmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAENvbnRleHRWYWx1
ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBNaWNyb3NvZnQuU3FsU2VydmVyLlNjcmlwdFRhc2sA
TWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuVGFza3MuU2NyaXB0VGFzawBWU1RBUlRTY3JpcHRPYmpl
Y3RNb2RlbEJhc2UATWFpbgBHZXRQcm9wZXJ0aWVzAFZhbGlkYXRlAGVyck1lc3NhZ2UAZ2V0X0Fj
dGlvbgBzZXRfQWN0aW9uAHZhbHVlAGdldF9GaW5kAHNldF9GaW5kAGdldF9SZXBsYWNlAHNldF9S
ZXBsYWNlAGdldF9TdGFydEluZGV4AHNldF9TdGFydEluZGV4AGdldF9SZXN1bHRWYXJpYWJsZQBz
ZXRfUmVzdWx0VmFyaWFibGUAZ2V0X0lzU291cmNlVmFyaWFibGUAc2V0X0lzU291cmNlVmFyaWFi
bGUAZ2V0X1NvdXJjZVZhcmlhYmxlAHNldF9Tb3VyY2VWYXJpYWJsZQBnZXRfU291cmNlAHNldF9T
b3VyY2UAZ2V0X0lzVGFyZ2V0VmFyaWFibGUAc2V0X0lzVGFyZ2V0VmFyaWFibGUAZ2V0X1Rhcmdl
dFZhcmlhYmxlAHNldF9UYXJnZXRWYXJpYWJsZQBnZXRfVGFyZ2V0AHNldF9UYXJnZXQAU3lzdGVt
LklPAFN0cmVhbQBFeGVjdXRlRmluZF8Ac291cmNlU3RyZWFtAEV4ZWN1dGVGaW5kQW5kUmVwbGFj
ZV8AdGFyZ2V0U3RyZWFtAGdldF9GaWxlQ29ubmVjdGlvblR5cGUAR2V0U3RyZWFtXwBpbnB1dABp
c1ZhcgBjcmVhdGUAaGFzVG9DbG9zZQBBcnJheUVxdWFsc18ASUVxdWF0YWJsZWAxAGEAYgBtX2Fj
dGlvbgBtX2ZpbmQAbV9yZXBsYWNlAG1fc3RhcnRJbmRleABtX3Jlc3VsdFZhcmlhYmxlAG1faXNT
b3VyY2VWYXIAbV9zb3VyY2UAbV9pc1RhcmdldFZhcgBtX3RhcmdldABBY3Rpb24ARmluZABSZXBs
YWNlAFN0YXJ0SW5kZXgAUmVzdWx0VmFyaWFibGUASXNTb3VyY2VWYXJpYWJsZQBTb3VyY2VWYXJp
YWJsZQBTb3VyY2UASXNUYXJnZXRWYXJpYWJsZQBUYXJnZXRWYXJpYWJsZQBUYXJnZXQARmlsZUNv
bm5lY3Rpb25UeXBlAEVudW0AdmFsdWVfXwBTdWNjZXNzAEZhaWx1cmUARmluZEFuZFJlcGxhY2UA
U3lzdGVtLkNvbXBvbmVudE1vZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93
c2FibGVTdGF0ZQBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRl
AFN5c3RlbS5EaWFnbm9zdGljcwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlz
dWFsQmFzaWMuQ29tcGlsZXJTZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9k
dWxlTmFtZUF0dHJpYnV0ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3Jk
QXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMA
R2V0T2JqZWN0VmFsdWUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZh
dG9yAENyZWF0ZUluc3RhbmNlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRlAGdldF9WYWx1ZQBz
ZXRfVmFsdWUAU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2libGVBdHRyaWJ1
dGUARXhjZXB0aW9uAFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBTY3JpcHRPYmplY3RNb2Rl
bABnZXRfRHRzAEV2ZW50c09iamVjdFdyYXBwZXIAZ2V0X0V2ZW50cwBTdHJpbmcARW1wdHkAZ2V0
X01lc3NhZ2UARmlyZUVycm9yAENsZWFyUHJvamVjdEVycm9yAERpc3Bvc2UAc2V0X1Rhc2tSZXN1
bHQAU3lzdGVtLkNvbGxlY3Rpb25zAEFycmF5TGlzdABBZGQASW50ZXJhY3Rpb24ASUlmAEFycmF5
AFRvQXJyYXkASXNOdWxsT3JFbXB0eQBBcHBsaWNhdGlvbkV4Y2VwdGlvbgBNaWNyb3NvZnQuU3Fs
U2VydmVyLk1hbmFnZWREVFMATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZQBWYXJpYWJs
ZXMAU3lzdGVtLlRleHQARW5jb2RpbmcAZ2V0X1VURjgAU3lzdGVtLlRleHQuUmVndWxhckV4cHJl
c3Npb25zAFJlZ2V4AFVuZXNjYXBlAEdldEJ5dGVzAEJ5dGUAUmVhZABDb3B5AFZhcmlhYmxlRGlz
cGVuc2VyAGdldF9WYXJpYWJsZURpc3BlbnNlcgBMb2NrT25lRm9yV3JpdGUAVmFyaWFibGUAZ2V0
X0l0ZW0ASW50NjQAVW5sb2NrAFdyaXRlAEZsdXNoAENvbm5lY3Rpb25NYW5hZ2VyAExvY2tPbmVG
b3JSZWFkAFR5cGVDb2RlAGdldF9EYXRhVHlwZQBTeXN0ZW0uVGhyZWFkaW5nAFRocmVhZABTbGVl
cABDb25uZWN0aW9ucwBnZXRfQ29ubmVjdGlvbnMAQWNxdWlyZUNvbm5lY3Rpb24ARmlsZQBGaWxl
U3RyZWFtAENyZWF0ZQBFeGlzdHMAT3BlblJlYWQAU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMA
RXF1YWxpdHlDb21wYXJlcmAxAGdldF9EZWZhdWx0AENMU0NvbXBsaWFudEF0dHJpYnV0ZQBTU0lT
U2NyaXB0VGFza0VudHJ5UG9pbnRBdHRyaWJ1dGUAQ296eVJvYy5TU0lTUGx1cy4yMDEyAENvenlS
b2MuU3FsU2VydmVyLlNTSVMuQXR0cmlidXRlcwBWYWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUA
RmlsdGVyUHJvcGVydGllc0F0dHJpYnV0ZQBTb3J0UHJvcGVydGllc0F0dHJpYnV0ZQBDb25uZWN0
aW9uQXR0cmlidXRlAERlc2NyaXB0aW9uQXR0cmlidXRlAENhdGVnb3J5QXR0cmlidXRlAFJlZnJl
c2hQcm9wZXJ0aWVzQXR0cmlidXRlAFJlZnJlc2hQcm9wZXJ0aWVzAFZhcmlhYmxlQXR0cmlidXRl
AENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRy
aWJ1dGUAU3lzdGVtLlJ1bnRpbWUuVmVyc2lvbmluZwBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGUA
U2NyaXB0VGFza185Mzg4ZjNiNWVhNTE0NDg3YWZlNTBjMWEyZGM2YjVmYS5kbGwAAAAAAA1BAGMA
dABpAG8AbgAACUYAaQBuAGQAACFJAHMAUwBvAHUAcgBjAGUAVgBhAHIAaQBhAGIAbABlAAAdUwBv
AHUAcgBjAGUAVgBhAHIAaQBhAGIAbABlAAANUwBvAHUAcgBjAGUAABVTAHQAYQByAHQASQBuAGQA
ZQB4AAAdUgBlAHMAdQBsAHQAVgBhAHIAaQBhAGIAbABlAAAPUgBlAHAAbABhAGMAZQAAIUkAcwBU
AGEAcgBnAGUAdABWAGEAcgBpAGEAYgBsAGUAAB1UAGEAcgBnAGUAdABWAGEAcgBpAGEAYgBsAGUA
AA1UAGEAcgBnAGUAdAAAKVAAbABlAGEAcwBlACAAcwBwAGUAYwBpAGYAeQAgAEYAaQBuAGQALgAA
LVAAbABlAGEAcwBlACAAcwBwAGUAYwBpAGYAeQAgAFMAbwB1AHIAYwBlAC4AAD1QAGwAZQBhAHMA
ZQAgAHMAcABlAGMAaQBmAHkAIABSAGUAcwB1AGwAdABWAGEAcgBpAGEAYgBsAGUALgAALVAAbABl
AGEAcwBlACAAcwBwAGUAYwBpAGYAeQAgAFQAYQByAGcAZQB0AC4AAAlGAEkATABFAAAAaLZiioyr
XUSZ/xRnHVcqZwAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYVEhgBEgwEAAASCAcG
FRIYARIIBAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgAEhEECAASFAQgAQIc
AyAACAQgABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZARMABCgAEwAIiYRd
zYCAzJEEIAAdDgUgAQIQDgQgABEkBSABAREkBCABAQ4DIAAKBCABAQoDIAACBCABAQIFIAEBEiEH
IAIBEiESIQkgBBIhDgICEAIBAAowAQICHR4AHR4ABhUSJQEeAAMGESQCBg4CBgoCBgIEKAARJAMo
AA4DKAAKAygAAgQoAB0OAgYIAwYRIAQAAAAABAEAAAAFIAEBETEIAQABAAAAAAAFIAIBDg4YAQAK
TXlUZW1wbGF0ZQgxMC4wLjAuMAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQHARIMBAcB
EggEBwESEQQHARIUEAEAC015LkNvbXB1dGVyAAAMAQAHTXkuVXNlcgAAEwEADk15LldlYlNlcnZp
Y2VzAAATAQAOTXkuQXBwbGljYXRpb24AAAQAARwcAwcBAgMHAQgGAAESFRFNBAcBEhUDBwEOBRAB
AB4ABAoBHgAEBwEeAAcgBAEODg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNv
YXBIdHRwQ2xpZW50UHJvdG9jb2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNl
X18AAAAGFRIYARMABhUSGQETAAQKARMABSABARMACAcDEwATABMABQEAAAAABQABARJdBCAAEmUE
IAASaQggBQIIDg4OCAQgAQEIDQcHAggSIRIhEl0CESQEIAEIHAYAAxwCHBwGIAESeRIVAh0OCAcD
HQ4ScREkBAABAg4KBwUdHAICEl0RJAQHAREkAwcBCgUAABKAhQQAAQ4OBSABHQUOByADCB0FCAgK
AAUBEnkIEnkICAMKAQUFIAASgJEIIAIBDhASgIEGIAESgJUcBCABARwMBwYdBQgdBQgKEoCBByAD
AR0FCAgLBwYdBQgdBQgdBQgGBwIdDh0OBSAAEYChAyAAHAQAAQEIBSAAEoCpBiABEoCdHAQgARwc
BgABEoCxDhAHBg4SIRKAlRKAnRIhEoCBBxUSgLUBHgAJAAAVEoC1ARMAByACAhMAEwANBwUCFRKA
tQEeAAgCCAgWz0kLuAw06g0BAAhWYWxpZGF0ZQAAEgEADUdldFByb3BlcnRpZXMAAAUgAQEdDoCE
AQALAAAABkFjdGlvbgRGaW5kB1JlcGxhY2UKU3RhcnRJbmRleA5SZXN1bHRWYXJpYWJsZRBJc1Nv
dXJjZVZhcmlhYmxlDlNvdXJjZVZhcmlhYmxlBlNvdXJjZRBJc1RhcmdldFZhcmlhYmxlDlRhcmdl
dFZhcmlhYmxlBlRhcmdldAAAFwEAEkZpbGVDb25uZWN0aW9uVHlwZQAAJgEAIVNwZWNpZmllcyB0
YXJnZXQgdG8gc3RvcmUgcmVzdWx0LgAACwEABlRhcmdldAAABiABARGA3RgBABNTZWxlY3QgdGFz
ayBhY3Rpb24uAAANAQAIU2V0dGluZ3MAAEYBAEFTcGVjaWZ5IHdoYXQgd2lsbCBiZSBpbnNlcnRl
ZCBpbiB0aGUgcGxhY2Ugb2YgdGhlIG1hdGNoZWQgc3RyaW5nLgAAMwEALlNwZWNpZnkgb2Zmc2V0
IGZyb20gd2hlcmUgdG8gc3RhcnQgdGhlIHNlYXJjaC4AADQBAC9TcGVjaWZpZXMgdmFyaWFibGUg
Y29udGFpbmluZyBzb3VyY2UgdG8gc2VhcmNoLgAACwEABlNvdXJjZQAAOgEANVNwZWNpZmllcyB2
YXJpYWJsZSBjb250YWluaW5nIHRhcmdldCB0byBzdG9yZSByZXN1bHQuAAAgAQAbU3BlY2lmaWVz
IHNvdXJjZSB0byBzZWFyY2guAAA+AQA5U3BlY2lmaWVzIGlmIFNvdXJjZSBwcm9wZXJ0eSByZWZl
cmVuY2VzIHBhY2thZ2UgdmFyaWFibGUuAAAtAQAoU3BlY2lmeSB0aGUgc3RyaW5nIHRoYXQgd2ls
bCBiZSBtYXRjaGVkLgAAPgEAOVNwZWNpZmllcyBpZiBUYXJnZXQgcHJvcGVydHkgcmVmZXJlbmNl
cyBwYWNrYWdlIHZhcmlhYmxlLgAASQEARFNwZWNpZmllcyBwYWNrYWdlIHZhcmlhYmxlIHdoZXJl
IHlvdSB3b3VsZCBsaWtlIHRvIHN0b3JlIGZpbmQgaW5kZXguAAAIAQAIAAAAAAAeAQABAFQCFldy
YXBOb25FeGNlcHRpb25UaHJvd3MBRwEAGi5ORVRGcmFtZXdvcmssVmVyc2lvbj12NC4wAQBUDhRG
cmFtZXdvcmtEaXNwbGF5TmFtZRAuTkVUIEZyYW1ld29yayA0AGRMAAAAAAAAAAAAAH5MAAAAIAAA
AAAAAAAAAAAAAAAAAAAAAAAAAABwTAAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxs
AAAAAAD/JQAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACA
AAAAAAAAAAAAAAAAAAABAAEAAAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWGAAANQCAAAA
AAAAAAAAANQCNAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAA
AAAAAAAAAAAAAAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBp
AGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsAQ0AgAA
AQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAAAQAgAAAQAwADAAMAAwADAANABiADAAAAAs
AAIAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAIAAAADAACAABAEYAaQBsAGUA
VgBlAHIAcwBpAG8AbgAAAAAAMAAuADAALgAwAC4AMAAAAIAAMAABAEkAbgB0AGUAcgBuAGEAbABO
AGEAbQBlAAAAUwBjAHIAaQBwAHQAVABhAHMAawBfADkAMwA4ADgAZgAzAGIANQBlAGEANQAxADQA
NAA4ADcAYQBmAGUANQAwAGMAMQBhADIAZABjADYAYgA1AGYAYQAuAGQAbABsAAAAKAACAAEATABl
AGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAIAAAAIgAMAABAE8AcgBpAGcAaQBuAGEAbABGAGkA
bABlAG4AYQBtAGUAAABTAGMAcgBpAHAAdABUAGEAcwBrAF8AOQAzADgAOABmADMAYgA1AGUAYQA1
ADEANAA0ADgANwBhAGYAZQA1ADAAYwAxAGEAMgBkAGMANgBiADUAZgBhAC4AZABsAGwAAAA0AAgA
AQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAwAC4AMAAuADAALgAwAAAAOAAIAAEAQQBz
AHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4AMAAuADAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAMAAAAkDwAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</BinaryItem>
</ScriptProject>