From 7eea391c7ab5a472739266e51bdc31b0b9eafca6 Mon Sep 17 00:00:00 2001 From: jmulhall00 Date: Wed, 16 Sep 2026 16:18:34 -0400 Subject: [PATCH] postgresql stuff fixed, still have to work on fail for row count --- SpravatoETL/SpravatoAuditImport.dtsx | 1325 +++++++++++++++++--------- SpravatoETL/SpravatoETL.dtproj | 6 +- 2 files changed, 881 insertions(+), 450 deletions(-) diff --git a/SpravatoETL/SpravatoAuditImport.dtsx b/SpravatoETL/SpravatoAuditImport.dtsx index 1dac16c..4384ea5 100644 --- a/SpravatoETL/SpravatoAuditImport.dtsx +++ b/SpravatoETL/SpravatoAuditImport.dtsx @@ -12,8 +12,8 @@ DTS:LocaleID="1033" DTS:ObjectName="SpravatoAuditImport" DTS:PackageType="5" - DTS:VersionBuild="87" - DTS:VersionGUID="{49DDC2F4-D6BC-46C0-909D-A5B0280868CB}"> + DTS:VersionBuild="109" + DTS:VersionGUID="{5F87FC6D-9C4C-4820-8498-EE6381757922}"> 8 @@ -40,7 +40,7 @@ AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3sg5/WnZgE6AXM2AQAN7vwAAAAAIAAAARABUAFMAAAAQZgAAAAEAACAAAAAxyy0b1eA+OVyJWQd0iHtXcngSIsEnhtXn9lH+lr2TqQAAAAAOgAAAAAIAACAAAADUNU1/9VNrAzqjAeDdks4NnFweCw2VoUmRnhXPUb1Xd0AAAAA01lK1tqkT7WzdmW0X3BxyVpWIHdBqB6hGF4GSDl/YZhGz/ZO1SpVbXsKeWs1FUESZjfNOBIrTfmjkEIxkI0nQQAAAABhrp5gVSRXQMG6j95VGLYgG1JZulQoW69P/50jKZTgbxNG+5kPHkRzuPuMuuYbZiv2Mg4oSbYFtudQHfcpiJZk + Encrypted="1">AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3sg5/WnZgE6AXM2AQAN7vwAAAAAIAAAARABUAFMAAAAQZgAAAAEAACAAAAB1dbVU8vLemeWfrjjWEe1eqVdWGpvrW1wCn1SnHf9NIwAAAAAOgAAAAAIAACAAAADFuGffLMThqULClBz6q32PSrZcoQPIioWQtY0Qp70lrkAAAACb4UCu7KG5gz3SC8n7mTylQuNWOJaS0H/zlsfBB7vqR6QvwEipEdG9yPXTH38c6GaMP+CdA2eRA/e2fUE67zROQAAAANtfSOYuYe/uEw8HZwxLPRGxyj8x7oGRx0WOSXWnHcb1nSx75wjjh47/k3j0lBmGNmb7+0vohQKzU2Ncw6P98LM @@ -364,7 +364,7 @@ + FileSpec="Admin Vs Dispensed SMC*.xls*" /> + + + + + + + + + + + @@ -420,6 +462,34 @@ + + + + + + + + + - @@ -586,6 +626,35 @@ using System.Runtime.CompilerServices; System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ]]> + +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_26e779e5f0794098bd25498a1ddbf8d9.Properties.Settings.get_Default():ST_26e779e5f0794098bd25498a1ddbf8d9.Properties.Sett" + + "ings")] + +namespace ST_26e779e5f0794098bd25498a1ddbf8d9.Properties { + + + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + private static Settings defaultInstance = new Settings(); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +}]]> ]]> -// This code was generated by a tool. + Name="Properties\AssemblyInfo.cs" + Encoding="UTF8"> -//------------------------------------------------------------------------------ +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("ST_26e779e5f0794098bd25498a1ddbf8d9")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ST_26e779e5f0794098bd25498a1ddbf8d9")] +[assembly: AssemblyCopyright("Copyright @ 2026")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: -[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_26e779e5f0794098bd25498a1ddbf8d9.Properties.Settings.get_Default():ST_26e779e5f0794098bd25498a1ddbf8d9.Properties.Sett" + - "ings")] - -namespace ST_26e779e5f0794098bd25498a1ddbf8d9.Properties { - - - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - private static Settings defaultInstance = new Settings(); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -}]]> +[assembly: AssemblyVersion("1.0.*")]]]> @@ -1047,7 +1117,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA DTS:CreationName="Microsoft.Pipeline" DTS:DelayValidation="True" DTS:Description="Data Flow Task" - DTS:Disabled="True" DTS:DTSID="{271F92CF-EE5A-4581-90A9-71FBD46B6C26}" DTS:ExecutableType="Microsoft.Pipeline" DTS:LocaleID="-1" @@ -1187,7 +1256,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA spravato_audit_id, file_load_id, source_file_name, + source_file_path, source_row_number, + location, comments, acct_num, @@ -1203,15 +1274,19 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA schedule, disp_unit, admin_unit, + total_dispensed, admin_dose, + label, dose, clinical_indication, prn_reason, + start_date, discontinue_date, total_charges, + dea, drug_class, usage_type, @@ -1220,6 +1295,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA order_user, provider, priority, + quantity, row_hash_sha256, created_at @@ -1649,6 +1725,16 @@ WHERE file_load_id = ?; name="created_at" scale="3" truncationRowDisposition="FailComponent" /> + @@ -1846,6 +1932,11 @@ WHERE file_load_id = ?; dataType="dbTimeStamp2" name="created_at" scale="3" /> + length="260" lineageId="Package\ForEach Spravato File\Load PostgresQL Repository\Read Finished Spravato File.Outputs[OLE DB Source Error Output].Columns[source_file_name]" name="source_file_name" /> + dataType="System.String" description="The SQL command to be executed." name="SqlCommand" - UITypeEditor="Microsoft.DataTransformationServices.Controls.ModalMultilineStringEditor">SELECT * -FROM [Spravato Audit$A3:AG1048576] + UITypeEditor="Microsoft.DataTransformationServices.Controls.ModalMultilineStringEditor">SELECT * FROM [Spravato Audit$A3:AG65536] ignored * 2025 -> processed * 2026 -> processed * 2027 -> processed automatically * 2028 -> processed automatically - * ------------------------------------------------------------ + * ======================================================== */ if (auditYear < minimumSourceYear) @@ -4989,10 +5149,12 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 minimumSourceYear.ToString() + "."; - Dts.Variables["User::SkipCurrentFile"].Value = true; + Dts.Variables["User::SkipCurrentFile"].Value = + true; - Dts.Variables["User::CurrentFileSkipReason"].Value = - reason; + Dts.Variables[ + "User::CurrentFileSkipReason" + ].Value = reason; bool fireAgainOldYear = false; @@ -5016,13 +5178,16 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 /* - * ------------------------------------------------------------ + * ======================================================== * FILE IS AN ELIGIBLE SPRAVATO SOURCE FILE * - * Increment FilesFound only after it passes the directory/year - * filters. Therefore a 2024 workbook does not inflate the - * Spravato FilesFound count. - * ------------------------------------------------------------ + * Increment FilesFound only after it passes: + * + * - extension check + * - folder structure check + * - year consistency check + * - minimum year check + * ======================================================== */ int filesFound = @@ -5033,28 +5198,29 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 /* - * ------------------------------------------------------------ - * MAKE SURE THE FILE STILL EXISTS - * ------------------------------------------------------------ + * ======================================================== + * MAKE SURE FILE STILL EXISTS + * ======================================================== */ if (!fileInfo.Exists) { - Dts.Variables["User::SkipCurrentFile"].Value = true; + Dts.Variables["User::SkipCurrentFile"].Value = + true; - Dts.Variables["User::CurrentFileSkipReason"].Value = + Dts.Variables[ + "User::CurrentFileSkipReason" + ].Value = "File disappeared before processing."; - /* - * Treat this as deferred/unavailable so the warning email - * is generated. - */ int unavailableFiles = (int)Dts.Variables[ "User::LockedFilesSkipped" ].Value; - Dts.Variables["User::LockedFilesSkipped"].Value = + Dts.Variables[ + "User::LockedFilesSkipped" + ].Value = unavailableFiles + 1; Dts.Events.FireWarning( @@ -5074,18 +5240,19 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 /* - * ------------------------------------------------------------ + * ======================================================== * FILE LOCK / AVAILABILITY CHECK * - * Try several times to obtain a read handle. + * Try three times to get a read handle. * - * FileShare.Read is intentional. We do not want to read a - * workbook while another process has it open for writing. - * ------------------------------------------------------------ + * FileShare.Read is intentional. + * + * We do not want to read a workbook while another + * process has it open for writing. + * ======================================================== */ System.IO.FileStream stream = null; - System.IO.IOException lastIOException = null; const int maxAttempts = 3; const int waitMilliseconds = 2000; @@ -5108,10 +5275,8 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 break; } - catch (System.IO.IOException ex) + catch (System.IO.IOException) { - lastIOException = ex; - if (attempt < maxAttempts) { System.Threading.Thread.Sleep( @@ -5123,11 +5288,11 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 /* - * ------------------------------------------------------------ - * FILE IS STILL UNAVAILABLE AFTER RETRIES + * ======================================================== + * STILL LOCKED AFTER RETRIES * - * Defer it rather than failing the entire ETL package. - * ------------------------------------------------------------ + * Defer instead of failing the whole package. + * ======================================================== */ if (stream == null) @@ -5142,7 +5307,8 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 Dts.Variables[ "User::CurrentFileSkipReason" - ].Value = reason; + ].Value = + reason; int lockedFiles = (int)Dts.Variables[ @@ -5151,7 +5317,8 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 Dts.Variables[ "User::LockedFilesSkipped" - ].Value = lockedFiles + 1; + ].Value = + lockedFiles + 1; Dts.Events.FireWarning( 0, @@ -5171,21 +5338,31 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 /* - * ------------------------------------------------------------ - * FILE IS AVAILABLE - COLLECT METADATA AND HASH - * ------------------------------------------------------------ + * ======================================================== + * FILE IS AVAILABLE + * + * Capture: + * + * - size + * - modified date/time + * - modified date text + * - SHA-256 hash + * ======================================================== */ using (stream) { fileInfo.Refresh(); - Dts.Variables["User::CurrentFileSize"].Value = + Dts.Variables[ + "User::CurrentFileSize" + ].Value = fileInfo.Length; Dts.Variables[ "User::CurrentFileModified" - ].Value = fileInfo.LastWriteTime; + ].Value = + fileInfo.LastWriteTime; Dts.Variables[ "User::CurrentFileDateText" @@ -5194,6 +5371,7 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 "yyyy-MM-dd" ); + using ( System.Security.Cryptography.SHA256 sha256 = System.Security.Cryptography.SHA256.Create() @@ -5210,15 +5388,16 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 Dts.Variables[ "User::CurrentFileHash" - ].Value = hash; + ].Value = + hash; } } /* - * ------------------------------------------------------------ + * ======================================================== * LOG SUCCESSFUL FILE DISCOVERY - * ------------------------------------------------------------ + * ======================================================== */ bool fireAgain = false; @@ -5228,6 +5407,8 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 "Prepare Current File", "Found: " + fileInfo.Name + + " | Extension: " + + extension + " | Source Year: " + auditYear.ToString() + " | Bytes: " + @@ -5250,7 +5431,7 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 /* * Unexpected errors still fail the task. * - * Only known filtering / file availability conditions are + * Only known filtering / file-lock conditions are * intentionally skipped or deferred. */ @@ -5376,7 +5557,7 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458 ST_e1ef9c54be554a589a679829e6fb5458 msBuild ST_e1ef9c54be554a589a679829e6fb5458 - {D052E0D5-0F13-4AAC-B9D5-14758386F25F} + {6E4E6492-840B-4BB3-9701-F7841170C928} @@ -5498,176 +5679,176 @@ namespace ST_e1ef9c54be554a589a679829e6fb5458.Properties { TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v -ZGUuDQ0KJAAAAAAAAABQRQAATAEDAKSIqWoAAAAAAAAAAOAAIiALATAAACIAAAAIAAAAAAAAXkAA +ZGUuDQ0KJAAAAAAAAABQRQAATAEDADyWqmoAAAAAAAAAAOAAIiALATAAACIAAAAIAAAAAAAA4kEA AAAgAAAAYAAAAAAAEAAgAAAAAgAABAAAAAAAAAAGAAAAAAAAAACgAAAAAgAAAAAAAAMAYIUAABAA -ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAAxAAABPAAAAAGAAAHgEAAAAAAAAAAAAAAAAAAAA +ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAJBBAABPAAAAAGAAAHgEAAAAAAAAAAAAAAAAAAAA AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAZCAAAAAgAAAAIgAAAAIA +AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAA6CEAAAAgAAAAIgAAAAIA AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAHgEAAAAYAAAAAYAAAAkAAAAAAAAAAAAAAAAAABAAABA -LnJlbG9jAAAMAAAAAIAAAAACAAAAKgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABA -QAAAAAAAAEgAAAACAAUAOCgAABwXAAABAAAAAAAAAFQ/AAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAABswCAAQBwAAAQAAEQIoEAAACm8RAAAKcgEAAHBvEgAACm8T +LnJlbG9jAAAMAAAAAIAAAAACAAAAKgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAADE +QQAAAAAAAEgAAAACAAUABCkAANQXAAABAAAAAAAAANhAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAABswCADbBwAAAQAAEQIoEAAACm8RAAAKcgEAAHBvEgAACm8T AAAKbxQAAAoKAigQAAAKbxEAAApyLQAAcG8SAAAKbxMAAAqlIgAAAQsCKBAAAApvEQAACnJlAABw bxIAAAoWjCMAAAFvFQAACgIoEAAACm8RAAAKcpEAAHBvEgAACnLJAABwbxUAAAoCKBAAAApvEQAA CnLLAABwbxIAAAoWjCIAAAFvFQAACgZzFgAACgwCKBAAAApvEQAACnL7AABwbxIAAAoIbxcAAApv -FQAACgZyJwEAcBcoGAAACg0JbxkAAAo6hwAAAHK8AQBwEwkCKBAAAApvEQAACnJlAABwbxIAAAoX -jCMAAAFvFQAACgIoEAAACm8RAAAKcpEAAHBvEgAAChEJbxUAAAoWEwoCKBAAAApvGgAAChZybwIA -cHKZAgBwBnK5AgBwEQkoGwAACnLJAABwFhIKbxwAAAoCKBAAAAoWbx0AAArdqgUAAAlvHgAACnLR -AgBwbx8AAApvIAAACighAAAKEwQJbx4AAApy6QIAcG8fAAAKbyAAAAooIQAAChMFEQQRBTu0AAAA -G40pAAABJRZy/QIAcKIlFxIEKCIAAAqiJRhyKQMAcKIlGRIFKCIAAAqiJRpyhQMAcKIoIwAAChML -AigQAAAKbxEAAApyZQAAcG8SAAAKF4wjAAABbxUAAAoCKBAAAApvEQAACnKRAABwbxIAAAoRC28V -AAAKAigQAAAKbxoAAAoWcm8CAHByiwMAcAZy+QMAcBELKBsAAApyyQAAcBZvJAAACgIoEAAAChZv -HQAACt21BAAAAigQAAAKbxEAAApyywAAcG8SAAAKEQWMIgAAAW8VAAAKEQUHPLkAAAAbjSkAAAEl -FnIBBABwoiUXEgUoIgAACqIlGHIbBABwoiUZEgEoIgAACqIlGnJjBABwoigjAAAKEwwCKBAAAApv -EQAACnJlAABwbxIAAAoXjCMAAAFvFQAACgIoEAAACm8RAAAKcpEAAHBvEgAAChEMbxUAAAoWEw0C -KBAAAApvGgAAChZybwIAcHJnBABwBnL5AwBwEQwoGwAACnLJAABwFhINbxwAAAoCKBAAAAoWbx0A -AArd0wMAAAIoEAAACm8RAAAKcp0EAHBvEgAACm8TAAAKpSIAAAETBgIoEAAACm8RAAAKcp0EAHBv -EgAAChEGF1iMIgAAAW8VAAAKCG8lAAAKOrsAAAACKBAAAApvEQAACnJlAABwbxIAAAoXjCMAAAFv -FQAACgIoEAAACm8RAAAKcpEAAHBvEgAACnK/BABwbxUAAAoCKBAAAApvEQAACnIHBQBwbxIAAApv -EwAACqUiAAABEw4CKBAAAApvEQAACnIHBQBwbxIAAAoRDhdYjCIAAAFvFQAACgIoEAAACm8aAAAK -FnJvAgBwcjkFAHAGKCYAAApyyQAAcBZvJAAACgIoEAAAChZvHQAACt3JAgAAFBMHFxMPKyYABhkX -F3MnAAAKEwfeHSYRDxkvCiDQBwAAKCgAAAreABEPF1gTDxEPGTHVEQc61QAAAAIoEAAACm8RAAAK -cmUAAHBvEgAACheMIwAAAW8VAAAKcpEFAHAZExISEigiAAAKcssFAHAoKQAAChMQAigQAAAKbxEA -AApykQAAcG8SAAAKERBvFQAACgIoEAAACm8RAAAKcgcFAHBvEgAACm8TAAAKpSIAAAETEQIoEAAA -Cm8RAAAKcgcFAHBvEgAAChERF1iMIgAAAW8VAAAKAigQAAAKbxoAAAoWcm8CAHAREHIxBgBwBigp -AAAKcskAAHAWbyQAAAoCKBAAAAoWbx0AAArdugEAABEHExMIbyoAAAoCKBAAAApvEQAACnJBBgBw -bxIAAAoIbysAAAqMMQAAAW8VAAAKAigQAAAKbxEAAApybQYAcG8SAAAKCG8sAAAKjBIAAAFvFQAA -CgIoEAAACm8RAAAKcqEGAHBvEgAACghvLAAAChMUEhRy1QYAcCgtAAAKbxUAAAooLgAAChMVERUR -B28vAAAKKDAAAApy6wYAcHLJAABwbzEAAApvMgAAChMWAigQAAAKbxEAAApy7wYAcG8SAAAKERZv -FQAACt4MERUsBxEVbzMAAArc3gwREywHERNvMwAACtwWEwgCKBAAAApvGgAAChZybwIAcB6NKQAA -ASUWchsHAHCiJRcIbxcAAAqiJRhyKwcAcKIlGRIFKCIAAAqiJRpyTQcAcKIlGwhvKwAAChMXEhco -NAAACqIlHHJjBwBwoiUdAigQAAAKbxEAAApy7wYAcG8SAAAKbxMAAApvFAAACqIoIwAACnLJAABw -FhIIbxwAAAoCKBAAAAoWbx0AAAreNBMYAigQAAAKbxoAAAoWcm8CAHARGG8UAAAKcskAAHAWbzUA -AAomAigQAAAKF28dAAAK3gAqQWQAAAAAAABPBAAADQAAAFwEAAASAAAAFQAAAQIAAADeBQAAQgAA -ACAGAAAMAAAAAAAAAAIAAABZBQAA1QAAAC4GAAAMAAAAAAAAAAAAAACfAAAAPAYAANsGAAA0AAAA -FAAAAR4CKDYAAAoqHgIoNwAACiqufgEAAAQtHnJ7BwBw0AMAAAIoOAAACm85AAAKczoAAAqAAQAA -BH4BAAAEKhp+AgAABCoeAoACAAAEKhp+AwAABCoeAig7AAAKKi5zCAAABoADAAAEKgAAQlNKQgEA -AQAAAAAADAAAAHY0LjAuMzAzMTkAAAAABQBsAAAAIAUAACN+AACMBQAAbAcAACNTdHJpbmdzAAAA -APgMAADwBwAAI1VTAOgUAAAQAAAAI0dVSUQAAAD4FAAAJAIAACNCbG9iAAAAAAAAAAIAAAFXHaIB -CQMAAAD6ATMAFgAAAQAAADgAAAAFAAAABgAAAAkAAAABAAAAOwAAAAIAAAAQAAAAAQAAAAIAAAAD -AAAABAAAAAEAAAAEAAAAAQAAAAEAAAAAAEkEAQAAAAAABgCtArUFBgA8A7UFBgD5AaIFDwApBgAA -BgAmAvgEBgCQAvgEBgBxAvgEBgAjA/gEBgDNAvgEBgDmAvgEBgA9AvgEBgBYAoUDCgABA/gDCgBp -AfgDBgAmBUMADgC0A34GBgBxBEMABgDnAIUEBgAPAEAHBgAcBYUEBgAaBUMABgCaBIUEBgDcAaIF -BgD/BoUEBgBaBdUFBgAvBeMEDgCsATMEDgANAjMEDgCFAc4EBgDBAbUFCgAhBPgDEgBrBgIBEgCl -AAIBBgADAIUEBgCrBIUEBgA7BUMADgA6B34GDgCdBn4GDgBQBX4GCgBqBfgDBgCtA4UEDgAKBX4G -DgBhAX4GBgAyB4UEBgCcAEMABgC1BkMABgAnAUMABgB9AHQDBgAJAIUEBgCMBEAHBgB1BEMABgB+ -BYUEBgCuAIUEBgAiAYUEBgC6AIUEBgBhB/gEAAAAADoAAAAAAAEAAQABABAAswQWADkAAQABAAAA -EADcBTgGYQABAAMAAAEQAHUGOAZ1AAMABwADAQAA1AYAAFkABAAKABEAnwQoAREAUQEsAREAjAAw -AQYGbAA0AVaAxAY3AVaAMQE3AVAgAAAAAIYAuQQGAAEA0CcAAAAAhhiVBQYAAQDYJwAAAACDGJUF -BgABAOAnAAAAAJMIVgU7AQEADCgAAAAAkwg5AUABAQATKAAAAACTCEUBRQEBABsoAAAAAJYIBgdL -AQIAIigAAAAAhhiVBQYAAgAqKAAAAACRGJsFUAECAAAAAQBuAwkAlQUBABEAlQUGABkAlQUKACkA -lQUQADEAlQUQADkAlQUQAEEAlQUQAEkAlQUQAFEAlQUQAFkAlQUQAGEAlQUQAGkAlQUGALkAlQUG -AOEAlQUVAPEAlQUGAHEAzAY+APkAZwZDAAEBfARJAAkBWgNQAMEAqwNUAAkBZANYAHkAlQUQACEB -3gBUACkBtANdADkBwAZnAPkA4gZrAEkB+AZxAEEBvgR5APkAEgcBAIEAqgaEAFEBfASKAFkBWgNU -AGEBAQCRABEBqwNUAEkB+AaWAEEBnwOcACEB7QZnAEkB+AalAIkAlQWrAIEBSgW5AEkB+Aa+ACEB -xgMGAHkAzgPFACEB8ADJAJEAqwPOAJkApQHTAJEBugPYAKEBqwPgAEkBhADmAEkBIQdUAKkBnQEG -AIkBqwNUAEEBiwXsAHEAlQUGAMEAlQUGALEBzAD1ALEBXQf+AMkAlQUEAekAlQUGAAgAFAAeAQgA -GAAjASkAcwCLAS4ACwBjAS4AEwBsAS4AGwCLAS4AIwCUAS4AKwC9AS4AMwC9AS4AOwC9AS4AQwCU -AS4ASwDDAS4AUwC9AS4AWwDaAUMAYwAjAUkAcwCLAWEAewAjAWMAawAjARsAAwABAAQAAwAAAFoF -VAEAAFkBWQEAAAoHXgECAAQAAwACAAUABQABAAYABQACAAcABwAEgAAAAQAAABom8mIAAAAAAAAW -AAAABAAAAAAAAAAAAAAADAF0AAAAAAARAAAAAAAAAAAAAAAVAdkDAAAAAAQAAAAAAAAAAAAAAAwB -hQQAAAAAEQAAAAAAAAAAAAAAFQFNAAAAAAAAAAAAAQAAAOYFAAAFAAIAAAAAAABUb0ludDMyAElu -dDY0AFNIQTI1NgBTVF9lMWVmOWM1NGJlNTU0YTU4OWE2Nzk4MjllNmZiNTQ1OAA8TW9kdWxlPgBT -eXN0ZW0uSU8ATWljcm9zb2Z0LlNxbFNlcnZlci5NYW5hZ2VkRFRTAHZhbHVlX18AbXNjb3JsaWIA -VGhyZWFkAFJlcGxhY2UAZGVmYXVsdEluc3RhbmNlAEZpbGVNb2RlAFZhcmlhYmxlAElEaXNwb3Nh -YmxlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAGdldF9OYW1lAERhdGVUaW1l -AGdldF9MYXN0V3JpdGVUaW1lAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUAVHlwZQBG -aWxlU2hhcmUARmFpbHVyZQBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQByZXNvdXJjZUN1bHR1cmUA -Q2FwdHVyZQBWU1RBUlRTY3JpcHRPYmplY3RNb2RlbEJhc2UAQXBwbGljYXRpb25TZXR0aW5nc0Jh -c2UARGlzcG9zZQBDcmVhdGUARWRpdG9yQnJvd3NhYmxlU3RhdGUAQ29tcGlsZXJHZW5lcmF0ZWRB -dHRyaWJ1dGUARGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZQBEZWJ1Z2dhYmxlQXR0cmlidXRl -AEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAEFzc2VtYmx5 -VHJhZGVtYXJrQXR0cmlidXRlAFRhcmdldEZyYW1ld29ya0F0dHJpYnV0ZQBBc3NlbWJseUNvbmZp -Z3VyYXRpb25BdHRyaWJ1dGUAQXNzZW1ibHlEZXNjcmlwdGlvbkF0dHJpYnV0ZQBDb21waWxhdGlv -blJlbGF4YXRpb25zQXR0cmlidXRlAEFzc2VtYmx5UHJvZHVjdEF0dHJpYnV0ZQBBc3NlbWJseUNv -cHlyaWdodEF0dHJpYnV0ZQBTU0lTU2NyaXB0VGFza0VudHJ5UG9pbnRBdHRyaWJ1dGUAQXNzZW1i -bHlDb21wYW55QXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAGdldF9WYWx1 -ZQBzZXRfVmFsdWUAdmFsdWUAU3lzdGVtLlRocmVhZGluZwBTeXN0ZW0uUnVudGltZS5WZXJzaW9u -aW5nAEZpcmVXYXJuaW5nAFRvU3RyaW5nAE1hdGNoAENvbXB1dGVIYXNoAFJlZnJlc2gAZ2V0X0xl -bmd0aABNaWNyb3NvZnQuU3FsU2VydmVyLlNjcmlwdFRhc2sATWljcm9zb2Z0LlNxbFNlcnZlci5E -dHMuVGFza3MuU2NyaXB0VGFzawBTY3JpcHRPYmplY3RNb2RlbABTeXN0ZW0uQ29tcG9uZW50TW9k -ZWwAU1RfZTFlZjljNTRiZTU1NGE1ODlhNjc5ODI5ZTZmYjU0NTguZGxsAEZpbGVTdHJlYW0AZ2V0 -X0l0ZW0AU3lzdGVtAEhhc2hBbGdvcml0aG0ARW51bQByZXNvdXJjZU1hbgBCb29sZWFuAFNjcmlw -dE1haW4ARmlyZUluZm9ybWF0aW9uAFN5c3RlbS5Db25maWd1cmF0aW9uAFN5c3RlbS5HbG9iYWxp -emF0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAEdyb3VwQ29sbGVjdGlvbgBJT0V4Y2VwdGlvbgBGaWxl -SW5mbwBDdWx0dXJlSW5mbwBGaWxlU3lzdGVtSW5mbwBTbGVlcABHcm91cABnZXRfUmVzb3VyY2VN -YW5hZ2VyAEV2ZW50c09iamVjdFdyYXBwZXIAQml0Q29udmVydGVyAEZpcmVFcnJvcgAuY3RvcgAu -Y2N0b3IAU3lzdGVtLkRpYWdub3N0aWNzAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMA -U3lzdGVtLlJlc291cmNlcwBTVF9lMWVmOWM1NGJlNTU0YTU4OWE2Nzk4MjllNmZiNTQ1OC5Qcm9w -ZXJ0aWVzLlJlc291cmNlcy5yZXNvdXJjZXMARGVidWdnaW5nTW9kZXMAU1RfZTFlZjljNTRiZTU1 -NGE1ODlhNjc5ODI5ZTZmYjU0NTguUHJvcGVydGllcwBnZXRfVmFyaWFibGVzAFNldHRpbmdzAFN5 -c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucwBSZWdleE9wdGlvbnMAZ2V0X0dyb3VwcwBGaWxl -QWNjZXNzAGdldF9TdWNjZXNzAGdldF9EdHMAU2NyaXB0UmVzdWx0cwBnZXRfRXZlbnRzAGdldF9F -eGlzdHMAQ29uY2F0AE9iamVjdABnZXRfRGVmYXVsdABzZXRfVGFza1Jlc3VsdABUb1VwcGVySW52 -YXJpYW50AENvbnZlcnQAUmVnZXgAU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeQBnZXRfQXNz -ZW1ibHkAAAAAK1UAcwBlAHIAOgA6AEMAdQByAHIAZQBuAHQARgBpAGwAZQBQAGEAdABoAAA3JABQ -AHIAbwBqAGUAYwB0ADoAOgBNAGkAbgBpAG0AdQBtAFMAbwB1AHIAYwBlAFkAZQBhAHIAACtVAHMA -ZQByADoAOgBTAGsAaQBwAEMAdQByAHIAZQBuAHQARgBpAGwAZQAAN1UAcwBlAHIAOgA6AEMAdQBy -AHIAZQBuAHQARgBpAGwAZQBTAGsAaQBwAFIAZQBhAHMAbwBuAAABAC9VAHMAZQByADoAOgBDAHUA -cgByAGUAbgB0AFMAbwB1AHIAYwBlAFkAZQBhAHIAACtVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0 -AEYAaQBsAGUATgBhAG0AZQAAgJNcAFwAKAA/ADwAbQBlAHQAcgBpAGMAcwBZAGUAYQByAD4AMgAw -AFwAZAB7ADIAfQApACAATQBlAHQAcgBpAGMAcwBcAFwAKAA/ADwAYQB1AGQAaQB0AFkAZQBhAHIA -PgAyADAAXABkAHsAMgB9ACkAIABTAHAAcgBhAHYAYQB0AG8AIABBAHUAZABpAHQAXABcAACAsUYA -aQBsAGUAIABpAHMAIABuAG8AdAAgAGwAbwBjAGEAdABlAGQAIABpAG4AIAB0AGgAZQAgAGUAeABw -AGUAYwB0AGUAZAAgACcAWQBZAFkAWQAgAE0AZQB0AHIAaQBjAHMAXABZAFkAWQBZACAAUwBwAHIA -YQB2AGEAdABvACAAQQB1AGQAaQB0ACcAIABmAG8AbABkAGUAcgAgAHMAdAByAHUAYwB0AHUAcgBl -AC4AASlQAHIAZQBwAGEAcgBlACAAQwB1AHIAcgBlAG4AdAAgAEYAaQBsAGUAAB9JAGcAbgBvAHIA -aQBuAGcAIABmAGkAbABlADoAIAAAFyAAfAAgAFIAZQBhAHMAbwBuADoAIAAAF20AZQB0AHIAaQBj -AHMAWQBlAGEAcgAAE2EAdQBkAGkAdABZAGUAYQByAAArTQBlAHQAcgBpAGMAcwAgAGYAbwBsAGQA -ZQByACAAeQBlAGEAcgAgACgAAFspACAAZABvAGUAcwAgAG4AbwB0ACAAbQBhAHQAYwBoACAAUwBw -AHIAYQB2AGEAdABvACAAQQB1AGQAaQB0ACAAZgBvAGwAZABlAHIAIAB5AGUAYQByACAAKAAABSkA -LgAAbVMAawBpAHAAcABpAG4AZwAgAGYAaQBsAGUAIABkAHUAZQAgAHQAbwAgAGkAbgBjAG8AbgBz -AGkAcwB0AGUAbgB0ACAAZgBvAGwAZABlAHIAIAB5AGUAYQByAHMALgAgAEYAaQBsAGUAOgAgAAAH -IAB8ACAAABlTAG8AdQByAGMAZQAgAHkAZQBhAHIAIAAARyAAaQBzACAAZQBhAHIAbABpAGUAcgAg -AHQAaABhAG4AIABNAGkAbgBpAG0AdQBtAFMAbwB1AHIAYwBlAFkAZQBhAHIAIAAAAy4AADVJAGcA -bgBvAHIAaQBuAGcAIABoAGkAcwB0AG8AcgBpAGMAYQBsACAAZgBpAGwAZQA6ACAAACFVAHMAZQBy -ADoAOgBGAGkAbABlAHMARgBvAHUAbgBkAABHRgBpAGwAZQAgAGQAaQBzAGEAcABwAGUAYQByAGUA -ZAAgAGIAZQBmAG8AcgBlACAAcAByAG8AYwBlAHMAcwBpAG4AZwAuAAAxVQBzAGUAcgA6ADoATABv -AGMAawBlAGQARgBpAGwAZQBzAFMAawBpAHAAcABlAGQAAFdTAGsAaQBwAHAAaQBuAGcAIABmAGkA -bABlACAAYgBlAGMAYQB1AHMAZQAgAGkAdAAgAG4AbwAgAGwAbwBuAGcAZQByACAAZQB4AGkAcwB0 -AHMAOgAgAAA5RgBpAGwAZQAgAGkAcwAgAGwAbwBjAGsAZQBkAC8AaQBuACAAdQBzAGUAIABhAGYA -dABlAHIAIAAAZSAAYQB0AHQAZQBtAHAAdABzAC4AIABJAHQAIAB3AGkAbABsACAAYgBlACAAcgBl -AHQAcgBpAGUAZAAgAG8AbgAgAHQAaABlACAAbgBlAHgAdAAgAEUAVABMACAAcgB1AG4ALgAADyAA -RgBpAGwAZQA6ACAAACtVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUAUwBpAHoAZQAA -M1UAcwBlAHIAOgA6AEMAdQByAHIAZQBuAHQARgBpAGwAZQBNAG8AZABpAGYAaQBlAGQAADNVAHMA -ZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUARABhAHQAZQBUAGUAeAB0AAAVeQB5AHkAeQAt -AE0ATQAtAGQAZAABAy0AAStVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUASABhAHMA -aAAAD0YAbwB1AG4AZAA6ACAAACEgAHwAIABTAG8AdQByAGMAZQAgAFkAZQBhAHIAOgAgAAAVIAB8 -ACAAQgB5AHQAZQBzADoAIAAAFyAAfAAgAFMASABBADIANQA2ADoAIAAAcVMAVABfAGUAMQBlAGYA -OQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5AGUANgBmAGIANQA0ADUAOAAu -AFAAcgBvAHAAZQByAHQAaQBlAHMALgBSAGUAcwBvAHUAcgBjAGUAcwAAAAAAlqIqI/RUBkykWESp -VPaIDQAEIAEBCAMgAAEFIAEBEREEIAEBDgUgAQERbSIHGQ4IEj0SQQgICBJFAg4CDg4CCAgOCAgS -RRFJEk0OChJRBCAAEn0FIAASgIEGIAESgIUcAyAAHAMgAA4EIAEBHAkAAxJBDg4RgJkDIAACBSAA -EoChBwAEDg4ODg4KIAYBCA4ODggQAgUgABKAqQYgARKAnQ4EAAEIDgUAAQ4dDgggBQEIDg4OCAUA -Ag4ODg0gBAEOEYC1EYC5EYC9BAABAQgGAAMODg4OAyAACgQgABFJBCABDg4EAAASTQcgAR0FEoDN -BQABDh0FBSACDg4OCCAFAggODg4ICAABEoDZEYDdBSAAEoDhByACAQ4SgOEIt3pcVhk04IkIiYRd -zYCAzJEEAAAAAAQBAAAAAwYSZQMGEmkDBhIQAgYIAwYRFAQAABJlBAAAEmkFAAEBEmkEAAASEAMA -AAEECAASZQQIABJpBAgAEhAIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MB -CAEAAgAAAAAAKAEAI1NUX2UxZWY5YzU0YmU1NTRhNTg5YTY3OTgyOWU2ZmI1NDU4AAAFAQAAAAAW -AQARQ29weXJpZ2h0IEAgIDIwMjYAAEkBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuNwEAVA4U -RnJhbWV3b3JrRGlzcGxheU5hbWUSLk5FVCBGcmFtZXdvcmsgNC43tAAAAM7K774BAAAAkQAAAGxT -eXN0ZW0uUmVzb3VyY2VzLlJlc291cmNlUmVhZGVyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4w -LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkjU3lzdGVt -LlJlc291cmNlcy5SdW50aW1lUmVzb3VyY2VTZXQCAAAAAAAAAAAAAABQQURQQURQtAAAADRAAAAA -AAAAAAAAAE5AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAAF9Db3JEbGxN -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 +BgDNAgYFBgDmAgYFBgA9AgYFBgBYAoUDCgABA/gDCgBpAfgDBgA0BUMADgC0A4wGBgBxBEMABgDn +AIUEBgAPAF8HBgAqBYUEBgAoBUMABgCaBIUEBgDcAbAFBgANB4UEBgBoBeMFBgA9BfEEDgCsATME +DgANAjMEDgCFAdwEBgDBAcMFCgAhBPgDEgB5BgIBEgClAAIBBgADAIUEBgCrBIUEBgBJBUMABgCt +A4UECgB4BfgDDgBZB4wGDgCrBowGDgBeBYwGDgAYBYwGDgBhAYwGBgBRB4UEBgCcAEMABgDDBkMA +BgAnAUMABgB9AHQDBgAJAIUEBgCMBF8HBgB1BEMABgCMBYUEBgCuAIUEBgAiAYUEBgC6AIUEBgCA +BwYFAAAAADoAAAAAAAEAAQABABAAswQWADkAAQABAAAAEADqBUYGYQABAAMAAAEQAIMGRgZ1AAMA +BwADAQAA4gYAAFkABAAKABEAnwQxAREAUQE1AREAjAA5AQYGbAA9AVaA0gZAAVaAMQFAAVAgAAAA +AIYAuQQGAAEAnCgAAAAAhhijBQYAAQCkKAAAAACDGKMFBgABAKwoAAAAAJMIZAVEAQEA2CgAAAAA +kwg5AUkBAQDfKAAAAACTCEUBTgEBAOcoAAAAAJYIFAdUAQIA7igAAAAAhhijBQYAAgD2KAAAAACR +GKkFWQECAAAAAQBuAwkAowUBABEAowUGABkAowUKACkAowUQADEAowUQADkAowUQAEEAowUQAEkA +owUQAFEAowUQAFkAowUQAGEAowUQAGkAowUGALkAowUGAOEAowUVAPEAowUGAHEA2gZBAPkAdQZG +AAEBfARMAAkBWgNTAMEAqwNXAAkBZANbAHkAowUQACEB3gBXACEBvgRXACkBQAdXACkBiQdgACkB +BgdmAPkA8AZsACkBBgdyADEBzAR6APkAIAcBADkBtAOFAEkBzgaPAIEAuAaTAFEBfASZAFkBWgNX +AGEBAQCgABEBqwNXACkBBgelADEBnwOrACEB+waPAIkAowW0AIEBWAXCACkBBgfHACEBxgMGAHkA +zgPOACEB8ADSAJEAqwPXAJkApQHcAJEBugPhAKEBqwPpACkBhADvACkBLwdXAKkBnQEGAIkBqwNX +ADEBmQX1AHEAowUGAMEAowUGALEBzAD+ALEBfAcHAckAowUNAekAowUGAAgAFAAnAQgAGAAsASkA +cwCUAS4ACwBsAS4AEwB1AS4AGwCUAS4AIwCdAS4AKwDGAS4AMwDGAS4AOwDGAS4AQwCdAS4ASwDM +AS4AUwDGAS4AWwDjAUMAYwAsAUkAcwCUAWEAewAsAWMAawAsARsAAwABAAQAAwAAAGgFXQEAAFkB +YgEAABgHZwECAAQAAwACAAUABQABAAYABQACAAcABwAEgAAAAQAAABsm/kAAAAAAAAAWAAAABAAA +AAAAAAAAAAAAFQF0AAAAAAARAAAAAAAAAAAAAAAeAdkDAAAAAAQAAAAAAAAAAAAAABUBhQQAAAAA +EQAAAAAAAAAAAAAAHgFNAAAAAAAAAAAAAQAAAPQFAAAFAAIAAAAAVG9JbnQzMgBJbnQ2NABTSEEy +NTYAU1RfZTFlZjljNTRiZTU1NGE1ODlhNjc5ODI5ZTZmYjU0NTgAPE1vZHVsZT4AU3lzdGVtLklP +AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuTWFuYWdlZERUUwB2YWx1ZV9fAG1zY29ybGliAFRocmVhZABS +ZXBsYWNlAGRlZmF1bHRJbnN0YW5jZQBGaWxlTW9kZQBWYXJpYWJsZQBJRGlzcG9zYWJsZQBSdW50 +aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBnZXRfTmFtZQBEYXRlVGltZQBnZXRfTGFz +dFdyaXRlVGltZQBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lAFR5cGUARmlsZVNoYXJl +AEZhaWx1cmUAZ2V0X0N1bHR1cmUAc2V0X0N1bHR1cmUAcmVzb3VyY2VDdWx0dXJlAENhcHR1cmUA +VlNUQVJUU2NyaXB0T2JqZWN0TW9kZWxCYXNlAEFwcGxpY2F0aW9uU2V0dGluZ3NCYXNlAERpc3Bv +c2UAQ3JlYXRlAEVkaXRvckJyb3dzYWJsZVN0YXRlAENvbXBpbGVyR2VuZXJhdGVkQXR0cmlidXRl +AERlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUARGVidWdnYWJsZUF0dHJpYnV0ZQBFZGl0b3JC +cm93c2FibGVBdHRyaWJ1dGUAQXNzZW1ibHlUaXRsZUF0dHJpYnV0ZQBBc3NlbWJseVRyYWRlbWFy +a0F0dHJpYnV0ZQBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGUAQXNzZW1ibHlDb25maWd1cmF0aW9u +QXR0cmlidXRlAEFzc2VtYmx5RGVzY3JpcHRpb25BdHRyaWJ1dGUAQ29tcGlsYXRpb25SZWxheGF0 +aW9uc0F0dHJpYnV0ZQBBc3NlbWJseVByb2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb3B5cmlnaHRB +dHRyaWJ1dGUAU1NJU1NjcmlwdFRhc2tFbnRyeVBvaW50QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFu +eUF0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBnZXRfVmFsdWUAc2V0X1Zh +bHVlAHZhbHVlAFN5c3RlbS5UaHJlYWRpbmcAU3lzdGVtLlJ1bnRpbWUuVmVyc2lvbmluZwBGaXJl +V2FybmluZwBUb1N0cmluZwBNYXRjaABDb21wdXRlSGFzaABSZWZyZXNoAGdldF9MZW5ndGgATWlj +cm9zb2Z0LlNxbFNlcnZlci5TY3JpcHRUYXNrAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlRhc2tz +LlNjcmlwdFRhc2sAU2NyaXB0T2JqZWN0TW9kZWwAU3lzdGVtLkNvbXBvbmVudE1vZGVsAFNUX2Ux +ZWY5YzU0YmU1NTRhNTg5YTY3OTgyOWU2ZmI1NDU4LmRsbABGaWxlU3RyZWFtAGdldF9JdGVtAFN5 +c3RlbQBIYXNoQWxnb3JpdGhtAEVudW0AcmVzb3VyY2VNYW4AQm9vbGVhbgBTY3JpcHRNYWluAGdl +dF9FeHRlbnNpb24ARmlyZUluZm9ybWF0aW9uAFN5c3RlbS5Db25maWd1cmF0aW9uAFN5c3RlbS5H +bG9iYWxpemF0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAEdyb3VwQ29sbGVjdGlvbgBJT0V4Y2VwdGlv +bgBGaWxlSW5mbwBDdWx0dXJlSW5mbwBGaWxlU3lzdGVtSW5mbwBTbGVlcABHcm91cABnZXRfUmVz +b3VyY2VNYW5hZ2VyAEV2ZW50c09iamVjdFdyYXBwZXIAQml0Q29udmVydGVyAEZpcmVFcnJvcgAu +Y3RvcgAuY2N0b3IAU3lzdGVtLkRpYWdub3N0aWNzAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2Vy +dmljZXMAU3lzdGVtLlJlc291cmNlcwBTVF9lMWVmOWM1NGJlNTU0YTU4OWE2Nzk4MjllNmZiNTQ1 +OC5Qcm9wZXJ0aWVzLlJlc291cmNlcy5yZXNvdXJjZXMARGVidWdnaW5nTW9kZXMAU1RfZTFlZjlj +NTRiZTU1NGE1ODlhNjc5ODI5ZTZmYjU0NTguUHJvcGVydGllcwBnZXRfVmFyaWFibGVzAFNldHRp +bmdzAFN5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucwBSZWdleE9wdGlvbnMAZ2V0X0dyb3Vw +cwBGaWxlQWNjZXNzAGdldF9TdWNjZXNzAGdldF9EdHMAU2NyaXB0UmVzdWx0cwBnZXRfRXZlbnRz +AGdldF9FeGlzdHMAQ29uY2F0AE9iamVjdABnZXRfRGVmYXVsdABzZXRfVGFza1Jlc3VsdABUb1Vw +cGVySW52YXJpYW50AFRvTG93ZXJJbnZhcmlhbnQAQ29udmVydABSZWdleABTeXN0ZW0uU2VjdXJp +dHkuQ3J5cHRvZ3JhcGh5AGdldF9Bc3NlbWJseQBvcF9JbmVxdWFsaXR5AAAAK1UAcwBlAHIAOgA6 +AEMAdQByAHIAZQBuAHQARgBpAGwAZQBQAGEAdABoAAA3JABQAHIAbwBqAGUAYwB0ADoAOgBNAGkA +bgBpAG0AdQBtAFMAbwB1AHIAYwBlAFkAZQBhAHIAACtVAHMAZQByADoAOgBTAGsAaQBwAEMAdQBy +AHIAZQBuAHQARgBpAGwAZQAAN1UAcwBlAHIAOgA6AEMAdQByAHIAZQBuAHQARgBpAGwAZQBTAGsA +aQBwAFIAZQBhAHMAbwBuAAABAC9VAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AFMAbwB1AHIAYwBl +AFkAZQBhAHIAACtVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUATgBhAG0AZQAACS4A +eABsAHMAAAsuAHgAbABzAHgAADtVAG4AcwB1AHAAcABvAHIAdABlAGQAIABFAHgAYwBlAGwAIABl +AHgAdABlAG4AcwBpAG8AbgA6ACAAAClQAHIAZQBwAGEAcgBlACAAQwB1AHIAcgBlAG4AdAAgAEYA +aQBsAGUAAB9JAGcAbgBvAHIAaQBuAGcAIABmAGkAbABlADoAIAAAFyAAfAAgAFIAZQBhAHMAbwBu +ADoAIAAAgJNcAFwAKAA/ADwAbQBlAHQAcgBpAGMAcwBZAGUAYQByAD4AMgAwAFwAZAB7ADIAfQAp +ACAATQBlAHQAcgBpAGMAcwBcAFwAKAA/ADwAYQB1AGQAaQB0AFkAZQBhAHIAPgAyADAAXABkAHsA +MgB9ACkAIABTAHAAcgBhAHYAYQB0AG8AIABBAHUAZABpAHQAXABcAACAsUYAaQBsAGUAIABpAHMA +IABuAG8AdAAgAGwAbwBjAGEAdABlAGQAIABpAG4AIAB0AGgAZQAgAGUAeABwAGUAYwB0AGUAZAAg +ACcAWQBZAFkAWQAgAE0AZQB0AHIAaQBjAHMAXABZAFkAWQBZACAAUwBwAHIAYQB2AGEAdABvACAA +QQB1AGQAaQB0ACcAIABmAG8AbABkAGUAcgAgAHMAdAByAHUAYwB0AHUAcgBlAC4AARdtAGUAdABy +AGkAYwBzAFkAZQBhAHIAABNhAHUAZABpAHQAWQBlAGEAcgAAK00AZQB0AHIAaQBjAHMAIABmAG8A +bABkAGUAcgAgAHkAZQBhAHIAIAAoAABbKQAgAGQAbwBlAHMAIABuAG8AdAAgAG0AYQB0AGMAaAAg +AFMAcAByAGEAdgBhAHQAbwAgAEEAdQBkAGkAdAAgAGYAbwBsAGQAZQByACAAeQBlAGEAcgAgACgA +AAUpAC4AAG1TAGsAaQBwAHAAaQBuAGcAIABmAGkAbABlACAAZAB1AGUAIAB0AG8AIABpAG4AYwBv +AG4AcwBpAHMAdABlAG4AdAAgAGYAbwBsAGQAZQByACAAeQBlAGEAcgBzAC4AIABGAGkAbABlADoA +IAAAByAAfAAgAAAZUwBvAHUAcgBjAGUAIAB5AGUAYQByACAAAEcgAGkAcwAgAGUAYQByAGwAaQBl +AHIAIAB0AGgAYQBuACAATQBpAG4AaQBtAHUAbQBTAG8AdQByAGMAZQBZAGUAYQByACAAAAMuAAA1 +SQBnAG4AbwByAGkAbgBnACAAaABpAHMAdABvAHIAaQBjAGEAbAAgAGYAaQBsAGUAOgAgAAAhVQBz +AGUAcgA6ADoARgBpAGwAZQBzAEYAbwB1AG4AZAAAR0YAaQBsAGUAIABkAGkAcwBhAHAAcABlAGEA +cgBlAGQAIABiAGUAZgBvAHIAZQAgAHAAcgBvAGMAZQBzAHMAaQBuAGcALgAAMVUAcwBlAHIAOgA6 +AEwAbwBjAGsAZQBkAEYAaQBsAGUAcwBTAGsAaQBwAHAAZQBkAABXUwBrAGkAcABwAGkAbgBnACAA +ZgBpAGwAZQAgAGIAZQBjAGEAdQBzAGUAIABpAHQAIABuAG8AIABsAG8AbgBnAGUAcgAgAGUAeABp +AHMAdABzADoAIAAAOUYAaQBsAGUAIABpAHMAIABsAG8AYwBrAGUAZAAvAGkAbgAgAHUAcwBlACAA +YQBmAHQAZQByACAAAGUgAGEAdAB0AGUAbQBwAHQAcwAuACAASQB0ACAAdwBpAGwAbAAgAGIAZQAg +AHIAZQB0AHIAaQBlAGQAIABvAG4AIAB0AGgAZQAgAG4AZQB4AHQAIABFAFQATAAgAHIAdQBuAC4A +AA8gAEYAaQBsAGUAOgAgAAArVQBzAGUAcgA6ADoAQwB1AHIAcgBlAG4AdABGAGkAbABlAFMAaQB6 +AGUAADNVAHMAZQByADoAOgBDAHUAcgByAGUAbgB0AEYAaQBsAGUATQBvAGQAaQBmAGkAZQBkAAAz +VQBzAGUAcgA6ADoAQwB1AHIAcgBlAG4AdABGAGkAbABlAEQAYQB0AGUAVABlAHgAdAAAFXkAeQB5 +AHkALQBNAE0ALQBkAGQAAQMtAAErVQBzAGUAcgA6ADoAQwB1AHIAcgBlAG4AdABGAGkAbABlAEgA +YQBzAGgAAA9GAG8AdQBuAGQAOgAgAAAdIAB8ACAARQB4AHQAZQBuAHMAaQBvAG4AOgAgAAAhIAB8 +ACAAUwBvAHUAcgBjAGUAIABZAGUAYQByADoAIAAAFSAAfAAgAEIAeQB0AGUAcwA6ACAAABcgAHwA +IABTAEgAQQAyADUANgA6ACAAAHFTAFQAXwBlADEAZQBmADkAYwA1ADQAYgBlADUANQA0AGEANQA4 +ADkAYQA2ADcAOQA4ADIAOQBlADYAZgBiADUANAA1ADgALgBQAHIAbwBwAGUAcgB0AGkAZQBzAC4A +UgBlAHMAbwB1AHIAYwBlAHMAAAAAAAujDo//sQJGr5iIXjb8kGYABCABAQgDIAABBSABARERBCAB +AQ4FIAEBEW0lBxwOCBI9DhJBCAgIEkUCDgIOAg4OAggIDggIEkURSRJNDgoSUQQgABJ9BSAAEoCB +BiABEoCFHAMgABwDIAAOBCABARwFAAICDg4FAAIODg4FIAASgJkHAAQODg4ODgogBgEIDg4OCBAC +CQADEkEODhGAoQMgAAIFIAASgKkGIAESgKUOBAABCA4FAAEOHQ4IIAUBCA4ODggNIAQBDhGAtRGA +uRGAvQQAAQEIBgADDg4ODgMgAAoEIAARSQQgAQ4OBAAAEk0HIAEdBRKAzQUAAQ4dBQUgAg4ODggg +BQIIDg4OCAgAARKA2RGA3QUgABKA4QcgAgEOEoDhCLd6XFYZNOCJCImEXc2AgMyRBAAAAAAEAQAA +AAMGEmUDBhJpAwYSEAIGCAMGERQEAAASZQQAABJpBQABARJpBAAAEhADAAABBAgAEmUECAASaQQI +ABIQCAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhjZXB0aW9uVGhyb3dzAQgBAAIAAAAAACgBACNT +VF9lMWVmOWM1NGJlNTU0YTU4OWE2Nzk4MjllNmZiNTQ1OAAABQEAAAAAFgEAEUNvcHlyaWdodCBA +ICAyMDI2AABJAQAaLk5FVEZyYW1ld29yayxWZXJzaW9uPXY0LjcBAFQOFEZyYW1ld29ya0Rpc3Bs +YXlOYW1lEi5ORVQgRnJhbWV3b3JrIDQuNwAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291 +cmNlcy5SZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1u +ZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMu +UnVudGltZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAC4QQAAAAAAAAAAAADSQQAA +ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxEEAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVl +LmRsbAAAAAAA/yUAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAA AAAYAACAAAAAAAAAAAAAAAAAAAABAAEAAAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWGAA ABoEAAAAAAAAAAAAABoENAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+ -AAABAAAAAQDyYhomAAABAPJiGiY/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBh +AAABAAAAAQD+QBsmAAABAP5AGyY/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBh AHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAA sAR6AwAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAABWAwAAAQAwADAAMAAwADAANABi ADAAAAAaAAEAAQBDAG8AbQBtAGUAbgB0AHMAAAAAAAAAIgABAAEAQwBvAG0AcABhAG4AeQBOAGEA bQBlAAAAAAAAAAAAcAAkAAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAVABf AGUAMQBlAGYAOQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5AGUANgBmAGIA -NQA0ADUAOAAAAD4ADwABAEYAaQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgA5ADcANQA0 -AC4AMgA1ADMAMwAwAAAAAABwACgAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAAAFMAVABfAGUA +NQA0ADUAOAAAAD4ADwABAEYAaQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgA5ADcANQA1 +AC4AMQA2ADYAMwA4AAAAAABwACgAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAAAFMAVABfAGUA MQBlAGYAOQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5AGUANgBmAGIANQA0 ADUAOAAuAGQAbABsAAAASAASAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAQwBvAHAA eQByAGkAZwBoAHQAIABAACAAIAAyADAAMgA2AAAAKgABAAEATABlAGcAYQBsAFQAcgBhAGQAZQBt @@ -5676,15 +5857,15 @@ UwBUAF8AZQAxAGUAZgA5AGMANQA0AGIAZQA1ADUANABhADUAOAA5AGEANgA3ADkAOAAyADkAZQA2 AGYAYgA1ADQANQA4AC4AZABsAGwAAABoACQAAQBQAHIAbwBkAHUAYwB0AE4AYQBtAGUAAAAAAFMA VABfAGUAMQBlAGYAOQBjADUANABiAGUANQA1ADQAYQA1ADgAOQBhADYANwA5ADgAMgA5AGUANgBm AGIANQA0ADUAOAAAAEIADwABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4A -OQA3ADUANAAuADIANQAzADMAMAAAAAAARgAPAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBp -AG8AbgAAADEALgAwAC4AOQA3ADUANAAuADIANQAzADMAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +OQA3ADUANQAuADEANgA2ADMAOAAAAAAARgAPAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBp +AG8AbgAAADEALgAwAC4AOQA3ADUANQAuADEANgA2ADMAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAwAAABgMAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAwAAADkMQAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -5697,6 +5878,31 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + + + + + + + + + + + + + + SQLTask:SqlStatementSource="THROW 51099, 'Intentional failure test for Spravato ETL.', 1;" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" /> + + + + + + + + + DTS:LogicalAnd="True" DTS:ObjectName="Constraint 1" DTS:To="Package\ForEach Spravato File\Register File Load" /> + + + DTS:To="Package\ForEach Spravato File\Get SQL Server Row Count" /> + + + @@ -6227,36 +6534,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Language="CSharp" ReadOnlyVariables="System::ErrorDescription,System::SourceName" ReadWriteVariables="User::ErrorMessage,User::ErrorTaskName"> - @@ -6376,6 +6653,35 @@ using System.Runtime.CompilerServices; System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ]]> + +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_ccde3fbc55984542be29e65dd03de37b.Properties.Settings.get_Default():ST_ccde3fbc55984542be29e65dd03de37b.Properties.Sett" + + "ings")] + +namespace ST_ccde3fbc55984542be29e65dd03de37b.Properties { + + + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + private static Settings defaultInstance = new Settings(); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +}]]> ]]> -// This code was generated by a tool. + Name="Properties\AssemblyInfo.cs" + Encoding="UTF8"> -//------------------------------------------------------------------------------ +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("ST_ccde3fbc55984542be29e65dd03de37b")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ST_ccde3fbc55984542be29e65dd03de37b")] +[assembly: AssemblyCopyright("Copyright @ 2026")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: -[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_ccde3fbc55984542be29e65dd03de37b.Properties.Settings.get_Default():ST_ccde3fbc55984542be29e65dd03de37b.Properties.Sett" + - "ings")] - -namespace ST_ccde3fbc55984542be29e65dd03de37b.Properties { - - - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - private static Settings defaultInstance = new Settings(); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -}]]> +[assembly: AssemblyVersion("1.0.*")]]]> @@ -6865,31 +7172,35 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= design-time-name="Package"> + Capacity="64" xmlns="clr-namespace:Microsoft.SqlServer.IntegrationServices.Designer.Model.Serialization;assembly=Microsoft.SqlServer.IntegrationServices.Graph" xmlns:mssgle="clr-namespace:Microsoft.SqlServer.Graph.LayoutEngine;assembly=Microsoft.SqlServer.Graph" xmlns:assembly="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mssgm="clr-namespace:Microsoft.SqlServer.Graph.Model;assembly=Microsoft.SqlServer.Graph"> - + + + TopLeft="350.333333333334,971.166666666667" /> + TopLeft="60.6666666666667,710.333333333333" /> Size="173,42" Id="Package\ForEach Spravato File\Prepare Current File" TopLeft="72,28" /> + + Size="174,42" Id="Package\ForEach Spravato File\TEST - Force Failure" TopLeft="284.666666666667,265.666666666667" /> + @@ -6958,6 +7281,50 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= RelativePosition="Any" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7026,18 +7393,18 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + TopLeft="160.875,530.25"> + End="0,24.0000000000005"> + End="0,24.0000000000005" /> @@ -7048,18 +7415,18 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + TopLeft="166.458333333333,676.25"> + End="0,26.583333333333"> + End="0,26.583333333333" /> @@ -7068,17 +7435,93 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TopLeft="180.555555555556,168.777777777778" /> + + + End="10.611111111111,50.2777777777781"> @@ -7110,13 +7553,13 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Point2="0,28.888888888889" Point3="4,28.888888888889" /> + End="6.61111111111097,28.888888888889" /> + Point1="6.61111111111097,28.888888888889" + Point2="10.611111111111,28.888888888889" + Point3="10.611111111111,32.888888888889" /> + End="10.611111111111,50.2777777777781" /> @@ -7127,30 +7570,30 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + TopLeft="759.555555555556,540.444444444445"> + End="78.75,67.8333333333334"> + End="30.574420276829,0" /> + Point1="30.574420276829,0" + Point2="34.574420276829,0" + Point3="34.574420276829,4" /> + End="34.574420276829,63.8333333333334" /> + Point1="34.574420276829,63.8333333333334" + Point2="34.574420276829,67.8333333333334" + Point3="38.574420276829,67.8333333333334" /> + End="78.75,67.8333333333334" /> @@ -7219,6 +7662,42 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= RelativePosition="Any" /> + + + + + + + + + + + + + + + + + + @@ -7241,46 +7720,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - - - - - - - - - - - - - - - - - - - @@ -7322,7 +7761,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= design-time-name="Package\ForEach Spravato File\Load PostgresQL Repository"> + Capacity="4" xmlns="clr-namespace:Microsoft.SqlServer.IntegrationServices.Designer.Model.Serialization;assembly=Microsoft.SqlServer.IntegrationServices.Graph" xmlns:mssgle="clr-namespace:Microsoft.SqlServer.Graph.LayoutEngine;assembly=Microsoft.SqlServer.Graph" xmlns:assembly="http://schemas.microsoft.com/winfx/2006/xaml"> - + @@ -7383,7 +7820,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= design-time-name="Package\ForEach Spravato File\Load Spravato Stage"> + Capacity="8" xmlns="clr-namespace:Microsoft.SqlServer.IntegrationServices.Designer.Model.Serialization;assembly=Microsoft.SqlServer.IntegrationServices.Graph" xmlns:mssgle="clr-namespace:Microsoft.SqlServer.Graph.LayoutEngine;assembly=Microsoft.SqlServer.Graph" xmlns:assembly="http://schemas.microsoft.com/winfx/2006/xaml"> - + - + - + diff --git a/SpravatoETL/SpravatoETL.dtproj b/SpravatoETL/SpravatoETL.dtproj index 361c371..643b439 100644 --- a/SpravatoETL/SpravatoETL.dtproj +++ b/SpravatoETL/SpravatoETL.dtproj @@ -26,7 +26,7 @@ NB7014 - AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3sg5/WnZgE6AXM2AQAN7vwAAAAACAAAAAAAQZgAAAAEAACAAAAD2n8v162jS4usYQHHgTQpKiRrTte/8ME/zYYKLxZUsEwAAAAAOgAAAAAIAACAAAAAm/Yj5ab39arKSQVVLwUSWXzP1QJjuIi7+HwxO6ZU7fJAAAACMTeNcKPb6Gi/JogRDslqyaCkD66WFeN1Cq9E6QSeooteLQt2PJDDg1zmnVU/wkZCf1a/bqq4uyweFvmuSpRW8JpcqJDcFSG0BiKUNmY8zmp70tOczxLG/16T2tOgDglvdrwJLTJDXxXWCLcTi+q/7FtrMkzmRjs/6xUboH6CztpldpvXBqhvjnDHU4PC8PWZAAAAAgXV+v+NkuKyQDpDve2Kxhqu6jWbSNJ2JJZcGQ/MKekU4Iycgra4AFLzBzrrkqFSH2ylNtd4u2fbTGYcBhJ/wsg== + AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3sg5/WnZgE6AXM2AQAN7vwAAAAACAAAAAAAQZgAAAAEAACAAAABCqDAh6TJLVzp+cQKnelqKVFrnNI9YB+nV7YyI2B21KQAAAAAOgAAAAAIAACAAAADmOzCCOoiLXv6JklvQ2iWPQ5Yew650bEGC0OJJKI/nXJAAAACRbUgZQT00qwEyEOpdkXW7Te5D0LGa4gsUNAf1U73CY2fmOR6b0Muj7Dz9dz5zK2vymopCgIIVYkwPEldLPS+QEL89gQSoTs3+MmhOG41BiRHYCyEsn6UhKLTiNUnzcVzHG1jeTvcQz/+35r8lmuefALSi1PWRqPT64l3pUMDna1YqPVZb/KR4FPDYFVcqrbtAAAAAfrfuBlITh5jl6dDV5YrFTd2P8QSAj9Z/4YMt7DXZDBayiHq0+cAI5GiC3HpAiFKxGRr6beCqM2WCF8CwzCIuYQ== 1 @@ -42,10 +42,10 @@ SpravatoAuditImport 1 0 - 82 + 95 - {14915F2A-D0D6-419E-A990-87951680C062} + {4D7F7092-C860-48FE-9531-53B753D32794} 8