From dea3deb2afefa3dcbfdfeadd8649b48ab9ab0676 Mon Sep 17 00:00:00 2001 From: Adam Driscoll Date: Thu, 18 Jul 2024 08:36:20 -0700 Subject: [PATCH] Fixed an issue with refactoring unsaved files (#76) * Fixed an issue with refactoring unsaved files * Fixed a startup issue --- HostInjection/Models.cs | 12 +- .../Refactoring/ConvertToDollarUnder.cs | 1 + .../Refactoring/ConvertToMultilineCommand.cs | 1 + HostInjection/Refactoring/ConvertToPsItem.cs | 3 +- HostInjection/Refactoring/ConvertToSplat.cs | 4 +- .../Refactoring/ExportModuleMember.cs | 2 + HostInjection/Refactoring/ExtractFile.cs | 1 + HostInjection/Refactoring/ExtractFunction.cs | 1 + HostInjection/Refactoring/ExtractVariable.cs | 1 + .../Refactoring/GenerateFunctionFromUsage.cs | 1 + .../Refactoring/GenerateProxyFunction.cs | 1 + HostInjection/Refactoring/IntroduceUsing.cs | 1 + HostInjection/Refactoring/Reorder.cs | 3 +- HostInjection/Refactoring/SplitPipe.cs | 1 + HostInjection/Variable.cs | 2 +- .../PowerShellProTools.psd1 | 4 +- .../PowerShellProTools.psm1 | 244 +++++++++--------- vscode/powershellprotools/package-lock.json | 16 +- vscode/powershellprotools/package.json | 2 +- .../src/commands/refactoring.ts | 4 +- vscode/powershellprotools/src/types.ts | 2 + 21 files changed, 166 insertions(+), 141 deletions(-) diff --git a/HostInjection/Models.cs b/HostInjection/Models.cs index 4275028..20ac68d 100644 --- a/HostInjection/Models.cs +++ b/HostInjection/Models.cs @@ -12,7 +12,8 @@ public class TextEdit public string Content { get; set; } public string FileName { get; set; } public TextEditType Type { get; set; } - + public string Uri { get; set; } + public static TextEdit None { @@ -30,7 +31,8 @@ public override bool Equals(object obj) EqualityComparer.Default.Equals(Cursor, edit.Cursor) && Content == edit.Content && FileName == edit.FileName && - Type == edit.Type; + Type == edit.Type && + Uri == edit.Uri; } public override int GetHashCode() @@ -41,6 +43,7 @@ public override int GetHashCode() hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Cursor); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Content); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(FileName); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Uri); hashCode = hashCode * -1521134295 + Type.GetHashCode(); return hashCode; } @@ -62,12 +65,14 @@ public class TextEditorState public TextPosition SelectionEnd { get; set; } public TextPosition DocumentEnd { get; set; } public IPoshToolsServer Server { get; set; } + public string Uri { get; set; } public override bool Equals(object obj) { return obj is TextEditorState state && Content == state.Content && FileName == state.FileName && + Uri == state.Uri && EqualityComparer.Default.Equals(SelectionStart, state.SelectionStart) && EqualityComparer.Default.Equals(SelectionEnd, state.SelectionEnd) && EqualityComparer.Default.Equals(DocumentEnd, state.DocumentEnd) && @@ -82,6 +87,7 @@ public override int GetHashCode() hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(SelectionStart); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(SelectionEnd); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(DocumentEnd); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Uri); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Server); return hashCode; } @@ -156,7 +162,7 @@ public RefactorInfo() { } public RefactorInfo(string name, RefactorType type) { Name = name; - Type = type; + Type = type; } public string Name { get; set; } diff --git a/HostInjection/Refactoring/ConvertToDollarUnder.cs b/HostInjection/Refactoring/ConvertToDollarUnder.cs index 329c2a9..edf9eef 100644 --- a/HostInjection/Refactoring/ConvertToDollarUnder.cs +++ b/HostInjection/Refactoring/ConvertToDollarUnder.cs @@ -27,6 +27,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = "$_", FileName = state.FileName, Type = TextEditType.Replace, diff --git a/HostInjection/Refactoring/ConvertToMultilineCommand.cs b/HostInjection/Refactoring/ConvertToMultilineCommand.cs index e43626b..ad234c5 100644 --- a/HostInjection/Refactoring/ConvertToMultilineCommand.cs +++ b/HostInjection/Refactoring/ConvertToMultilineCommand.cs @@ -70,6 +70,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = stringBuilder.ToString().Trim().TrimEnd('`'), Type = TextEditType.Replace, Start = new TextPosition diff --git a/HostInjection/Refactoring/ConvertToPsItem.cs b/HostInjection/Refactoring/ConvertToPsItem.cs index 5a2bb43..2443f8b 100644 --- a/HostInjection/Refactoring/ConvertToPsItem.cs +++ b/HostInjection/Refactoring/ConvertToPsItem.cs @@ -23,9 +23,10 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl { yield break; } - + yield return new TextEdit { + Uri = state.Uri, Content = "$PSItem", FileName = state.FileName, Type = TextEditType.Replace, diff --git a/HostInjection/Refactoring/ConvertToSplat.cs b/HostInjection/Refactoring/ConvertToSplat.cs index adc3a71..5c52349 100644 --- a/HostInjection/Refactoring/ConvertToSplat.cs +++ b/HostInjection/Refactoring/ConvertToSplat.cs @@ -93,6 +93,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = stringBuilder.ToString(), Type = TextEditType.Insert, Start = new TextPosition @@ -103,9 +104,10 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl }, FileName = state.FileName }; - + yield return new TextEdit { + Uri = state.Uri, Content = $"{commandName} @Parameters", Type = TextEditType.Replace, Start = new TextPosition diff --git a/HostInjection/Refactoring/ExportModuleMember.cs b/HostInjection/Refactoring/ExportModuleMember.cs index e8458f1..6731991 100644 --- a/HostInjection/Refactoring/ExportModuleMember.cs +++ b/HostInjection/Refactoring/ExportModuleMember.cs @@ -37,6 +37,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl { yield return new TextEdit { + Uri = state.Uri, Type = TextEditType.Insert, Content = $"{Environment.NewLine}Export-ModuleMember -Variable '{variableExpression.VariablePath.UserPath}'", Start = new TextPosition @@ -51,6 +52,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl { yield return new TextEdit { + Uri = state.Uri, Type = TextEditType.Insert, Content = $"{Environment.NewLine}Export-ModuleMember -Function '{functionDef.Name}'", Start = new TextPosition diff --git a/HostInjection/Refactoring/ExtractFile.cs b/HostInjection/Refactoring/ExtractFile.cs index 708928e..7ece8ac 100644 --- a/HostInjection/Refactoring/ExtractFile.cs +++ b/HostInjection/Refactoring/ExtractFile.cs @@ -43,6 +43,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = $"& \"$PSScriptRoot\\{fileName}\"", Start = new TextPosition { diff --git a/HostInjection/Refactoring/ExtractFunction.cs b/HostInjection/Refactoring/ExtractFunction.cs index 9d13754..a6fbc7a 100644 --- a/HostInjection/Refactoring/ExtractFunction.cs +++ b/HostInjection/Refactoring/ExtractFunction.cs @@ -75,6 +75,7 @@ m is AssignmentStatementAst assignment && yield return new TextEdit { + Uri = state.Uri, Content = stringBuilder.ToString(), Start = new TextPosition { diff --git a/HostInjection/Refactoring/ExtractVariable.cs b/HostInjection/Refactoring/ExtractVariable.cs index ba4aa35..e6a042c 100644 --- a/HostInjection/Refactoring/ExtractVariable.cs +++ b/HostInjection/Refactoring/ExtractVariable.cs @@ -75,6 +75,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = stringBuilder.ToString(), Start = new TextPosition { diff --git a/HostInjection/Refactoring/GenerateFunctionFromUsage.cs b/HostInjection/Refactoring/GenerateFunctionFromUsage.cs index 99abeef..19e54da 100644 --- a/HostInjection/Refactoring/GenerateFunctionFromUsage.cs +++ b/HostInjection/Refactoring/GenerateFunctionFromUsage.cs @@ -121,6 +121,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = stringBuilder.ToString(), Type = TextEditType.Insert, Start = new TextPosition diff --git a/HostInjection/Refactoring/GenerateProxyFunction.cs b/HostInjection/Refactoring/GenerateProxyFunction.cs index 594d3af..1474bb3 100644 --- a/HostInjection/Refactoring/GenerateProxyFunction.cs +++ b/HostInjection/Refactoring/GenerateProxyFunction.cs @@ -41,6 +41,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerab edits.Add(new TextEdit { + Uri = state.Uri, Content = stringBuilder.ToString(), Type = TextEditType.Insert, Start = new TextPosition diff --git a/HostInjection/Refactoring/IntroduceUsing.cs b/HostInjection/Refactoring/IntroduceUsing.cs index 97c4b0a..230da0f 100644 --- a/HostInjection/Refactoring/IntroduceUsing.cs +++ b/HostInjection/Refactoring/IntroduceUsing.cs @@ -51,6 +51,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = $"using namespace {namespaceName}{Environment.NewLine}", FileName = state.FileName, Type = TextEditType.Insert, diff --git a/HostInjection/Refactoring/Reorder.cs b/HostInjection/Refactoring/Reorder.cs index 15990e8..369a957 100644 --- a/HostInjection/Refactoring/Reorder.cs +++ b/HostInjection/Refactoring/Reorder.cs @@ -82,7 +82,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl } if (direction == "Right") - { + { if (targetParameterIndex + 1 == currentParameterIndex) { yield break; @@ -143,6 +143,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = stringBuilder.ToString(), Type = TextEditType.Replace, Start = new TextPosition diff --git a/HostInjection/Refactoring/SplitPipe.cs b/HostInjection/Refactoring/SplitPipe.cs index f4d1b59..8d33926 100644 --- a/HostInjection/Refactoring/SplitPipe.cs +++ b/HostInjection/Refactoring/SplitPipe.cs @@ -47,6 +47,7 @@ public IEnumerable Refactor(TextEditorState state, Ast ast, IEnumerabl yield return new TextEdit { + Uri = state.Uri, Content = stringBuilder.ToString(), Type = TextEditType.Replace, Start = new TextPosition diff --git a/HostInjection/Variable.cs b/HostInjection/Variable.cs index 362e8a7..e8825a8 100644 --- a/HostInjection/Variable.cs +++ b/HostInjection/Variable.cs @@ -234,7 +234,7 @@ public IEnumerable GetChildren() yield break; } - if (_propertyInfo.Value == null) yield break; + if (_propertyInfo?.Value == null) yield break; foreach (var item in ProcessObject(_propertyInfo.Value)) { diff --git a/PowerShellToolsPro.Cmdlets/PowerShellProTools.psd1 b/PowerShellToolsPro.Cmdlets/PowerShellProTools.psd1 index 1408a3f..7198d69 100644 --- a/PowerShellToolsPro.Cmdlets/PowerShellProTools.psd1 +++ b/PowerShellToolsPro.Cmdlets/PowerShellProTools.psd1 @@ -3,7 +3,7 @@ # # Generated by: Ironman Software, LLC # -# Generated on: 7/10/2024 +# Generated on: 7/18/2024 # @{ @@ -18,7 +18,7 @@ ModuleVersion = '2024.7.0' # CompatiblePSEditions = @() # ID used to uniquely identify this module -GUID = '67c5dc55-fa45-4f33-856f-fbab0a85e9eb' +GUID = 'c9ea3714-d2c0-4a2d-9e85-e275d09854cd' # Author of this module Author = 'Ironman Software, LLC' diff --git a/PowerShellToolsPro.Cmdlets/PowerShellProTools.psm1 b/PowerShellToolsPro.Cmdlets/PowerShellProTools.psm1 index 8b71b75..3bd0778 100644 --- a/PowerShellToolsPro.Cmdlets/PowerShellProTools.psm1 +++ b/PowerShellToolsPro.Cmdlets/PowerShellProTools.psm1 @@ -52,7 +52,7 @@ function Expand-Object { } # SIG # Begin signature block -# MIIo2QYJKoZIhvcNAQcCoIIoyjCCKMYCAQMxDTALBglghkgBZQMEAgEwewYKKwYB +# MIIo2gYJKoZIhvcNAQcCoIIoyzCCKMcCAQMxDTALBglghkgBZQMEAgEwewYKKwYB # BAGCNwIBBKBtBGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAYHe0V71QM+EvM # YkGubPgWGiXnp7h+1iduu7+KNbvDzKCCDkYwggbmMIIEzqADAgECAhB3vQ4DobcI @@ -131,7 +131,7 @@ function Expand-Object { # Hk7NR1OHrPR2mO8uPIzHwE54UIc1YOBs49SInHsTkDzoFAFa4cP5Mk7OdclJfbN7 # h/h58+um8CqNPbRAJXvNdWPHotRYuHUz7aKGMEYjgOk03S2ZTTUrVN9tSTdhgfjN # qavYppaJrKKm5VhrEER2K2HAwW7GoW9mh25AzkmsQ4aoeedgLsnvVV8OGfYrT2bO -# 01Djyr6LsTSIjXMufvzonovfy6b2oqfeHJtJCnataBAxghnpMIIZ5QIBATBpMFkx +# 01Djyr6LsTSIjXMufvzonovfy6b2oqfeHJtJCnataBAxghnqMIIZ5gIBATBpMFkx # CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQD # EyZHbG9iYWxTaWduIEdDQyBSNDUgQ29kZVNpZ25pbmcgQ0EgMjAyMAIMD8vFb5IC # fmzAlZMIMAsGCWCGSAFlAwQCAaB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 @@ -148,126 +148,126 @@ function Expand-Object { # 5wt42E1GzpzBKtixmjcbDjWPhJ0WCLy9KhJ00B4dCxJVUhHU7k+c22nXE7bl65y0 # clFG5sofHpXy5cf09GSKuJAaDai1OKOt8IIaaidamwajv5ZN8tu+qmAeDxc5En4M # iWMVDn2CG5Dr0mhKFZxGGMNKxgCpyt6OGMU48lkCrwVawQQtMFgO4wNcnysM+Khq -# 8GehghbXMIIW0wYKKwYBBAGCNwMDATGCFsMwgha/BgkqhkiG9w0BBwKgghawMIIW -# rAIBAzENMAsGCWCGSAFlAwQCATCB8gYLKoZIhvcNAQkQAQSggeIEgd8wgdwCAQEG +# 8GehghbYMIIW1AYKKwYBBAGCNwMDATGCFsQwghbABgkqhkiG9w0BBwKgghaxMIIW +# rQIBAzENMAsGCWCGSAFlAwQCATCB8wYLKoZIhvcNAQkQAQSggeMEgeAwgd0CAQEG # CysGAQQBoDICAwECMDEwDQYJYIZIAWUDBAIBBQAEICkx1mva4klxbeW4WP91UJmg -# DWt4BcXyh6cRKmeE4SEcAhQj25b7LtOSdaOkshEfP7o54Kn8cBgPMjAyNDA3MTEw -# MTUwMzhaMAMCAQECCESvKWVa/9HuoGGkXzBdMQswCQYDVQQGEwJCRTEZMBcGA1UE -# CgwQR2xvYmFsU2lnbiBudi1zYTEzMDEGA1UEAwwqR2xvYmFsc2lnbiBUU0EgZm9y -# IENvZGVTaWduMSAtIFI2IC0gMjAyMzExoIISVDCCBYMwggNroAMCAQICDkXmuwOD -# M8OFZUjm/0VRMA0GCSqGSIb3DQEBDAUAMEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24g -# Um9vdCBDQSAtIFI2MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9i -# YWxTaWduMB4XDTE0MTIxMDAwMDAwMFoXDTM0MTIxMDAwMDAwMFowTDEgMB4GA1UE -# CxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24x -# EzARBgNVBAMTCkdsb2JhbFNpZ24wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -# AoICAQCVB+hzymb57BTKezz3DQjxtEULLIK0SMbrWzyug7hBkjMUpG9/6SrMxrCI -# a8W2idHGsv8UzlEUIexK3RtaxtaH7k06FQbtZGYLkoDKRN5zlE7zp4l/T3hjCMgS -# UG1CZi9NuXkoTVIaihqAtxmBDn7EirxkTCEcQ2jXPTyKxbJm1ZCatzEGxb7ibTIG -# ph75ueuqo7i/voJjUNDwGInf5A959eqiHyrScC5757yTu21T4kh8jBAHOP9msndh -# fuDqjDyqtKT285VKEgdt/Yyyic/QoGF3yFh0sNQjOvddOsqi250J3l1ELZDxgc1X -# kvp+vFAEYzTfa5MYvms2sjnkrCQ2t/DvthwTV5O23rL44oW3c6K4NapF8uCdNqFv -# VIrxclZuLojFUUJEFZTuo8U4lptOTloLR/MGNkl3MLxxN+Wm7CEIdfzmYRY/d9XZ -# kZeECmzUAk10wBTt/Tn7g/JeFKEEsAvp/u6P4W4LsgizYWYJarEGOmWWWcDwNf3J -# 2iiNGhGHcIEKqJp1HZ46hgUAntuA1iX53AWeJ1lMdjlb6vmlodiDD9H/3zAR+YXP -# M0j1ym1kFCx6WE/TSwhJxZVkGmMOeT31s4zKWK2cQkV5bg6HGVxUsWW2v4yb3BPp -# DW+4LtxnbsmLEbWEFIoAGXCDeZGXkdQaJ783HjIH2BRjPChMrwIDAQABo2MwYTAO -# BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUrmwFo5MT -# 4qLn4tcc1sfwf8hnU6AwHwYDVR0jBBgwFoAUrmwFo5MT4qLn4tcc1sfwf8hnU6Aw -# DQYJKoZIhvcNAQEMBQADggIBAIMl7ejR/ZVSzZ7ABKCRaeZc0ITe3K2iT+hHeNZl -# mKlbqDyHfAKK0W63FnPmX8BUmNV0vsHN4hGRrSMYPd3hckSWtJVewHuOmXgWQxNW -# V7Oiszu1d9xAcqyj65s1PrEIIaHnxEM3eTK+teecLEy8QymZjjDTrCHg4x362Acz -# dlQAIiq5TSAucGja5VP8g1zTnfL/RAxEZvLS471GABptArolXY2hMVHdVEYcTduZ -# lu8aHARcphXveOB5/l3bPqpMVf2aFalv4ab733Aw6cPuQkbtwpMFifp9Y3s/0HGB -# fADomK4OeDTDJfuvCp8ga907E48SjOJBGkh6c6B3ace2XH+CyB7+WBsoK6hsrV5t -# wAXSe7frgP4lN/4Cm2isQl3D7vXM3PBQddI2aZzmewTfbgZptt4KCUhZh+t7FGB6 -# ZKppQ++Rx0zsGN1s71MtjJnhXvJyPs9UyL1n7KQPTEX/07kwIwdMjxC/hpbZmVq0 -# mVccpMy7FYlTuiwFD+TEnhmxGDTVTJ267fcfrySVBHioA7vugeXaX3yLSqGQdCWn -# sz5LyCxWvcfI7zjiXJLwefechLp0LWEBIH5+0fJPB1lfiy1DUutGDJTh9WZHeXfV -# VFsfrSQ3y0VaTqBESMjYsJnFFYQJ9tZJScBluOYacW6gqPGC6EU+bNYC1wpngwVa -# yaQQMIIGWTCCBEGgAwIBAgINAewckkDe/S5AXXxHdDANBgkqhkiG9w0BAQwFADBM -# MSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xv -# YmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0xODA2MjAwMDAwMDBaFw0z -# NDEyMTAwMDAwMDBaMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu +# DWt4BcXyh6cRKmeE4SEcAhRbAFWhxsbzCALkfpxNZF79igakvhgPMjAyNDA3MTgx +# NTI1NDNaMAMCAQECCQDok6cHYJe4xKBhpF8wXTELMAkGA1UEBhMCQkUxGTAXBgNV +# BAoMEEdsb2JhbFNpZ24gbnYtc2ExMzAxBgNVBAMMKkdsb2JhbHNpZ24gVFNBIGZv +# ciBDb2RlU2lnbjEgLSBSNiAtIDIwMjMxMaCCElQwggWDMIIDa6ADAgECAg5F5rsD +# gzPDhWVI5v9FUTANBgkqhkiG9w0BAQwFADBMMSAwHgYDVQQLExdHbG9iYWxTaWdu +# IFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xv +# YmFsU2lnbjAeFw0xNDEyMTAwMDAwMDBaFw0zNDEyMTAwMDAwMDBaMEwxIDAeBgNV +# BAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFI2MRMwEQYDVQQKEwpHbG9iYWxTaWdu +# MRMwEQYDVQQDEwpHbG9iYWxTaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +# CgKCAgEAlQfoc8pm+ewUyns89w0I8bRFCyyCtEjG61s8roO4QZIzFKRvf+kqzMaw +# iGvFtonRxrL/FM5RFCHsSt0bWsbWh+5NOhUG7WRmC5KAykTec5RO86eJf094YwjI +# ElBtQmYvTbl5KE1SGooagLcZgQ5+xIq8ZEwhHENo1z08isWyZtWQmrcxBsW+4m0y +# BqYe+bnrqqO4v76CY1DQ8BiJ3+QPefXqoh8q0nAue+e8k7ttU+JIfIwQBzj/ZrJ3 +# YX7g6ow8qrSk9vOVShIHbf2MsonP0KBhd8hYdLDUIzr3XTrKotudCd5dRC2Q8YHN +# V5L6frxQBGM032uTGL5rNrI55KwkNrfw77YcE1eTtt6y+OKFt3OiuDWqRfLgnTah +# b1SK8XJWbi6IxVFCRBWU7qPFOJabTk5aC0fzBjZJdzC8cTflpuwhCHX85mEWP3fV +# 2ZGXhAps1AJNdMAU7f05+4PyXhShBLAL6f7uj+FuC7IIs2FmCWqxBjplllnA8DX9 +# ydoojRoRh3CBCqiadR2eOoYFAJ7bgNYl+dwFnidZTHY5W+r5paHYgw/R/98wEfmF +# zzNI9cptZBQselhP00sIScWVZBpjDnk99bOMylitnEJFeW4OhxlcVLFltr+Mm9wT +# 6Q1vuC7cZ27JixG1hBSKABlwg3mRl5HUGie/Nx4yB9gUYzwoTK8CAwEAAaNjMGEw +# DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFK5sBaOT +# E+Ki5+LXHNbH8H/IZ1OgMB8GA1UdIwQYMBaAFK5sBaOTE+Ki5+LXHNbH8H/IZ1Og +# MA0GCSqGSIb3DQEBDAUAA4ICAQCDJe3o0f2VUs2ewASgkWnmXNCE3tytok/oR3jW +# ZZipW6g8h3wCitFutxZz5l/AVJjVdL7BzeIRka0jGD3d4XJElrSVXsB7jpl4FkMT +# VlezorM7tXfcQHKso+ubNT6xCCGh58RDN3kyvrXnnCxMvEMpmY4w06wh4OMd+tgH +# M3ZUACIquU0gLnBo2uVT/INc053y/0QMRGby0uO9RgAabQK6JV2NoTFR3VRGHE3b +# mZbvGhwEXKYV73jgef5d2z6qTFX9mhWpb+Gm+99wMOnD7kJG7cKTBYn6fWN7P9Bx +# gXwA6JiuDng0wyX7rwqfIGvdOxOPEoziQRpIenOgd2nHtlx/gsge/lgbKCuobK1e +# bcAF0nu364D+JTf+AptorEJdw+71zNzwUHXSNmmc5nsE324GabbeCglIWYfrexRg +# emSqaUPvkcdM7BjdbO9TLYyZ4V7ycj7PVMi9Z+ykD0xF/9O5MCMHTI8Qv4aW2Zla +# tJlXHKTMuxWJU7osBQ/kxJ4ZsRg01Uyduu33H68klQR4qAO77oHl2l98i0qhkHQl +# p7M+S8gsVr3HyO844lyS8Hn3nIS6dC1hASB+ftHyTwdZX4stQ1LrRgyU4fVmR3l3 +# 1VRbH60kN8tFWk6gREjI2LCZxRWECfbWSUnAZbjmGnFuoKjxguhFPmzWAtcKZ4MF +# WsmkEDCCBlkwggRBoAMCAQICDQHsHJJA3v0uQF18R3QwDQYJKoZIhvcNAQEMBQAw +# TDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkds +# b2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTgwNjIwMDAwMDAwWhcN +# MzQxMjEwMDAwMDAwWjBbMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2ln +# biBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcgQ0EgLSBT +# SEEzODQgLSBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPAC4jAj +# +uAb4Zp0s691g1+pR1LHYTpjfDkjeW10/DHkdBIZlvrOJ2JbrgeKJ+5Xo8Q17bM0 +# x6zDDOuAZm3RKErBLLu5cPJyroz3mVpddq6/RKh8QSSOj7rFT/82QaunLf14TkOI +# /pMZF9nuMc+8ijtuasSI8O6X9tzzGKBLmRwOh6cm4YjJoOWZ4p70nEw/XVvstu/S +# Zc9FC1Q9sVRTB4uZbrhUmYqoMZI78np9/A5Y34Fq4bBsHmWCKtQhx5T+QpY78Qux +# f39GmA6HPXpl69FWqS69+1g9tYX6U5lNW3TtckuiDYI3GQzQq+pawe8P1Zm5P/RP +# NfGcD9M3E1LZJTTtlu/4Z+oIvo9Jev+QsdT3KRXX+Q1d1odDHnTEcCi0gHu9Kpu7 +# hOEOrG8NubX2bVb+ih0JPiQOZybH/LINoJSwspTMe+Zn/qZYstTYQRLBVf1ukcW7 +# sUwIS57UQgZvGxjVNupkrs799QXm4mbQDgUhrLERBiMZ5PsFNETqCK6dSWcRi4Ll +# rVqGp2b9MwMB3pkl+XFu6ZxdAkxgPM8CjwH9cu6S8acS3kISTeypJuV3AqwOVwwJ +# 0WGeJoj8yLJN22TwRZ+6wT9Uo9h2ApVsao3KIlz2DATjKfpLsBzTN3SE2R1mqzRz +# jx59fF6W1j0ZsJfqjFCRba9Xhn4QNx1rGhTfAgMBAAGjggEpMIIBJTAOBgNVHQ8B +# Af8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU6hbGaefjy1dF +# OTOk8EC+0MO9ZZYwHwYDVR0jBBgwFoAUrmwFo5MT4qLn4tcc1sfwf8hnU6AwPgYI +# KwYBBQUHAQEEMjAwMC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcDIuZ2xvYmFsc2ln +# bi5jb20vcm9vdHI2MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs +# c2lnbi5jb20vcm9vdC1yNi5jcmwwRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYB +# BQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMA0G +# CSqGSIb3DQEBDAUAA4ICAQB/4ojZV2crQl+BpwkLusS7KBhW1ky/2xsHcMb7Cwmt +# ADpgMx85xhZrGUBJJQge5Jv31qQNjx6W8oaiF95Bv0/hvKvN7sAjjMaF/ksVJPkY +# ROwfwqSs0LLP7MJWZR29f/begsi3n2HTtUZImJcCZ3oWlUrbYsbQswLMNEhFVd3s +# 6UqfXhTtchBxdnDSD5bz6jdXlJEYr9yNmTgZWMKpoX6ibhUm6rT5fyrn50hkaS/S +# mqFy9vckS3RafXKGNbMCVx+LnPy7rEze+t5TTIP9ErG2SVVPdZ2sb0rILmq5yojD +# EjBOsghzn16h1pnO6X1LlizMFmsYzeRZN4YJLOJF1rLNboJ1pdqNHrdbL4guPX3x +# 8pEwBZzOe3ygxayvUQbwEccdMMVRVmDofJU9IuPVCiRTJ5eA+kiJJyx54jzlmx7j +# qoSCiT7ASvUh/mIQ7R0w/PbM6kgnfIt1Qn9ry/Ola5UfBFg0ContglDk0Xuoyea+ +# SKorVdmNtyUgDhtRoNRjqoPqbHJhSsn6Q8TGV8Wdtjywi7C5HDHvve8U2BRAbCAd +# wi3oC8aNbYy2ce1SIf4+9p+fORqurNIveiCx9KyqHeItFJ36lmodxjzK89kcv1NN +# pEdZfJXEQ0H5JeIsEH6B+Q2Up33ytQn12GByQFCVINRDRL76oJXnIFm2eMakaqoi +# mzCCBmwwggRUoAMCAQICEAGb6t7ITWuP92w6ny4BJBYwDQYJKoZIhvcNAQELBQAw +# WzELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExMTAvBgNV +# BAMTKEdsb2JhbFNpZ24gVGltZXN0YW1waW5nIENBIC0gU0hBMzg0IC0gRzQwHhcN +# MjMxMTA3MTcxMzQwWhcNMzQxMjA5MTcxMzQwWjBdMQswCQYDVQQGEwJCRTEZMBcG +# A1UECgwQR2xvYmFsU2lnbiBudi1zYTEzMDEGA1UEAwwqR2xvYmFsc2lnbiBUU0Eg +# Zm9yIENvZGVTaWduMSAtIFI2IC0gMjAyMzExMIIBojANBgkqhkiG9w0BAQEFAAOC +# AY8AMIIBigKCAYEA6oQ3UGg8lYW1SFRxl/OEcsmdgNMI3Fm7v8tNkGlHieUs2PGo +# an5gN0lzm7iYsxTg74yTcCC19SvXZgV1P3qEUKlSD+DW52/UHDUu4C8pJKOOdyUn +# 4LjzfWR1DJpC5cad4tiHc4vvoI2XfhagxLJGz2DGzw+BUIDdT+nkRqI0pz4Yx2u0 +# tvu+2qlWfn+cXTY9YzQhS8jSoxMaPi9RaHX5f/xwhBFlMxKzRmUohKAzwJKd7bgf +# iWPQHnssW7AE9L1yY86wMSEBAmpysiIs7+sqOxDV8Zr0JqIs/FMBBHkjaVHTXb5z +# hMubg4htINIgzoGraiJLeZBC5oJCrwPr1NDag3rDLUjxzUWRtxFB3RfvQPwSorLA +# WapUl05tw3rdhobUOzdHOOgDPDG/TDN7Q+zw0P9lpp+YPdLGulkibBBYEcUEzOii +# mLAdM9DzlR347XG0C0HVZHmivGAuw3rJ3nA3EhY+Ao9dOBGwBIlni6UtINu41vWc +# 9Q+8iL8nLMP5IKLBAgMBAAGjggGoMIIBpDAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0l +# AQH/BAwwCgYIKwYBBQUHAwgwHQYDVR0OBBYEFPlOq764+Fv/wscD9EHunPjWdH0/ +# MFYGA1UdIARPME0wCAYGZ4EMAQQCMEEGCSsGAQQBoDIBHjA0MDIGCCsGAQUFBwIB +# FiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAMBgNVHRMB +# Af8EAjAAMIGQBggrBgEFBQcBAQSBgzCBgDA5BggrBgEFBQcwAYYtaHR0cDovL29j +# c3AuZ2xvYmFsc2lnbi5jb20vY2EvZ3N0c2FjYXNoYTM4NGc0MEMGCCsGAQUFBzAC +# hjdodHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc3RzYWNhc2hh +# Mzg0ZzQuY3J0MB8GA1UdIwQYMBaAFOoWxmnn48tXRTkzpPBAvtDDvWWWMEEGA1Ud +# HwQ6MDgwNqA0oDKGMGh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vY2EvZ3N0c2Fj +# YXNoYTM4NGc0LmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlfRnz5OaQ5KDF3bWIFW8 +# if/kX7LlFRq3lxFALgBBvsU/JKAbRwczBEy0tGL/xu7TDMI0oJRcN5jrRPhf+CcK +# Ar4e0SQdI8svHKsnerOpxS8M5OWQ8BUkHqMVGfjvg+hPu2ieI299PQ1xcGEyfEZu +# 8o/RnOhDTfqD4f/E4D7+3lffBmvzagaBaKsMfCr3j0L/wHNp2xynFk8mGVhz7ZRe +# 5BqiEIIHMjvKnr/dOXXUvItUP35QlTSfkjkkUxiDUNRbL2a0e/5bKesexQX9oz37 +# obDzK3kPsUusw6PZo9wsnCsjlvZ6KrutxVe2hLZjs2CYEezG1mZvIoMcilgD9I/s +# nE7Q3+7OYSHTtZVUSTshUT2hI4WSwlvyepSEmAqPJFYiigT6tJqJSDX4b+uBhhFT +# wJN7OrTUNMxi1jVhjqZQ+4h0HtcxNSEeEb+ro2RTjlTic2ak+2Zj4TfJxGv7KzOL +# EcN0kIGDyE+Gyt1Kl9t+kFAloWHshps2UgfLPmJV7DOm5bga+t0kLgz5MokxajWV +# /vbR/xeKriMJKyGuYu737jfnsMmzFe12mrf95/7haN5EwQp04ZXIV/sU6x5a35Z1 +# xWUZ9/TVjSGvY7br9OIXRp+31wduap0r/unScU7Svk9i00nWYF9A43aZIETYSlyz +# XRrZ4qq/TVkAF55gZzpHEqAxggNJMIIDRQIBATBvMFsxCzAJBgNVBAYTAkJFMRkw +# FwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIFRp +# bWVzdGFtcGluZyBDQSAtIFNIQTM4NCAtIEc0AhABm+reyE1rj/dsOp8uASQWMAsG +# CWCGSAFlAwQCAaCCAS0wGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMCsGCSqG +# SIb3DQEJNDEeMBwwCwYJYIZIAWUDBAIBoQ0GCSqGSIb3DQEBCwUAMC8GCSqGSIb3 +# DQEJBDEiBCBGCuN/ODiAQxKiwddeK4E1eICjIveNKKof3s4M/9gSEjCBsAYLKoZI +# hvcNAQkQAi8xgaAwgZ0wgZowgZcEIDqIepUbXrkqXuFPbLt2gjelRdAQW/BFEb3i +# X4KpFtHoMHMwX6RdMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu # IG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIFRpbWVzdGFtcGluZyBDQSAtIFNI -# QTM4NCAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8ALiMCP6 -# 4BvhmnSzr3WDX6lHUsdhOmN8OSN5bXT8MeR0EhmW+s4nYluuB4on7lejxDXtszTH -# rMMM64BmbdEoSsEsu7lw8nKujPeZWl12rr9EqHxBJI6PusVP/zZBq6ct/XhOQ4j+ -# kxkX2e4xz7yKO25qxIjw7pf23PMYoEuZHA6HpybhiMmg5ZninvScTD9dW+y279Jl -# z0ULVD2xVFMHi5luuFSZiqgxkjvyen38DljfgWrhsGweZYIq1CHHlP5CljvxC7F/ -# f0aYDoc9emXr0VapLr37WD21hfpTmU1bdO1yS6INgjcZDNCr6lrB7w/Vmbk/9E81 -# 8ZwP0zcTUtklNO2W7/hn6gi+j0l6/5Cx1PcpFdf5DV3Wh0MedMRwKLSAe70qm7uE -# 4Q6sbw25tfZtVv6KHQk+JA5nJsf8sg2glLCylMx75mf+pliy1NhBEsFV/W6Rxbux -# TAhLntRCBm8bGNU26mSuzv31BebiZtAOBSGssREGIxnk+wU0ROoIrp1JZxGLguWt -# WoanZv0zAwHemSX5cW7pnF0CTGA8zwKPAf1y7pLxpxLeQhJN7Kkm5XcCrA5XDAnR -# YZ4miPzIsk3bZPBFn7rBP1Sj2HYClWxqjcoiXPYMBOMp+kuwHNM3dITZHWarNHOP -# Hn18XpbWPRmwl+qMUJFtr1eGfhA3HWsaFN8CAwEAAaOCASkwggElMA4GA1UdDwEB -# /wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTqFsZp5+PLV0U5 -# M6TwQL7Qw71lljAfBgNVHSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDA+Bggr -# BgEFBQcBAQQyMDAwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwMi5nbG9iYWxzaWdu -# LmNvbS9yb290cjYwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxz -# aWduLmNvbS9yb290LXI2LmNybDBHBgNVHSAEQDA+MDwGBFUdIAAwNDAyBggrBgEF -# BQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wDQYJ -# KoZIhvcNAQEMBQADggIBAH/iiNlXZytCX4GnCQu6xLsoGFbWTL/bGwdwxvsLCa0A -# OmAzHznGFmsZQEklCB7km/fWpA2PHpbyhqIX3kG/T+G8q83uwCOMxoX+SxUk+RhE -# 7B/CpKzQss/swlZlHb1/9t6CyLefYdO1RkiYlwJnehaVSttixtCzAsw0SEVV3ezp -# Sp9eFO1yEHF2cNIPlvPqN1eUkRiv3I2ZOBlYwqmhfqJuFSbqtPl/KufnSGRpL9Ka -# oXL29yRLdFp9coY1swJXH4uc/LusTN763lNMg/0SsbZJVU91naxvSsguarnKiMMS -# ME6yCHOfXqHWmc7pfUuWLMwWaxjN5Fk3hgks4kXWss1ugnWl2o0et1sviC49ffHy -# kTAFnM57fKDFrK9RBvARxx0wxVFWYOh8lT0i49UKJFMnl4D6SIknLHniPOWbHuOq -# hIKJPsBK9SH+YhDtHTD89szqSCd8i3VCf2vL86VrlR8EWDQKie2CUOTRe6jJ5r5I -# qitV2Y23JSAOG1Gg1GOqg+pscmFKyfpDxMZXxZ22PLCLsLkcMe+97xTYFEBsIB3C -# LegLxo1tjLZx7VIh/j72n585Gq6s0i96ILH0rKod4i0UnfqWah3GPMrz2Ry/U02k -# R1l8lcRDQfkl4iwQfoH5DZSnffK1CfXYYHJAUJUg1ENEvvqglecgWbZ4xqRqqiKb -# MIIGbDCCBFSgAwIBAgIQAZvq3shNa4/3bDqfLgEkFjANBgkqhkiG9w0BAQsFADBb -# MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTExMC8GA1UE -# AxMoR2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcgQ0EgLSBTSEEzODQgLSBHNDAeFw0y -# MzExMDcxNzEzNDBaFw0zNDEyMDkxNzEzNDBaMF0xCzAJBgNVBAYTAkJFMRkwFwYD -# VQQKDBBHbG9iYWxTaWduIG52LXNhMTMwMQYDVQQDDCpHbG9iYWxzaWduIFRTQSBm -# b3IgQ29kZVNpZ24xIC0gUjYgLSAyMDIzMTEwggGiMA0GCSqGSIb3DQEBAQUAA4IB -# jwAwggGKAoIBgQDqhDdQaDyVhbVIVHGX84RyyZ2A0wjcWbu/y02QaUeJ5SzY8ahq -# fmA3SXObuJizFODvjJNwILX1K9dmBXU/eoRQqVIP4Nbnb9QcNS7gLykko453JSfg -# uPN9ZHUMmkLlxp3i2Idzi++gjZd+FqDEskbPYMbPD4FQgN1P6eRGojSnPhjHa7S2 -# +77aqVZ+f5xdNj1jNCFLyNKjExo+L1Fodfl//HCEEWUzErNGZSiEoDPAkp3tuB+J -# Y9AeeyxbsAT0vXJjzrAxIQECanKyIizv6yo7ENXxmvQmoiz8UwEEeSNpUdNdvnOE -# y5uDiG0g0iDOgatqIkt5kELmgkKvA+vU0NqDesMtSPHNRZG3EUHdF+9A/BKissBZ -# qlSXTm3Det2GhtQ7N0c46AM8Mb9MM3tD7PDQ/2Wmn5g90sa6WSJsEFgRxQTM6KKY -# sB0z0POVHfjtcbQLQdVkeaK8YC7DesnecDcSFj4Cj104EbAEiWeLpS0g27jW9Zz1 -# D7yIvycsw/kgosECAwEAAaOCAagwggGkMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUB -# Af8EDDAKBggrBgEFBQcDCDAdBgNVHQ4EFgQU+U6rvrj4W//CxwP0Qe6c+NZ0fT8w -# VgYDVR0gBE8wTTAIBgZngQwBBAIwQQYJKwYBBAGgMgEeMDQwMgYIKwYBBQUHAgEW -# Jmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAwGA1UdEwEB -# /wQCMAAwgZAGCCsGAQUFBwEBBIGDMIGAMDkGCCsGAQUFBzABhi1odHRwOi8vb2Nz -# cC5nbG9iYWxzaWduLmNvbS9jYS9nc3RzYWNhc2hhMzg0ZzQwQwYIKwYBBQUHMAKG -# N2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzdHNhY2FzaGEz -# ODRnNC5jcnQwHwYDVR0jBBgwFoAU6hbGaefjy1dFOTOk8EC+0MO9ZZYwQQYDVR0f -# BDowODA2oDSgMoYwaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9jYS9nc3RzYWNh -# c2hhMzg0ZzQuY3JsMA0GCSqGSIb3DQEBCwUAA4ICAQCV9GfPk5pDkoMXdtYgVbyJ -# /+RfsuUVGreXEUAuAEG+xT8koBtHBzMETLS0Yv/G7tMMwjSglFw3mOtE+F/4JwoC -# vh7RJB0jyy8cqyd6s6nFLwzk5ZDwFSQeoxUZ+O+D6E+7aJ4jb309DXFwYTJ8Rm7y -# j9Gc6ENN+oPh/8TgPv7eV98Ga/NqBoFoqwx8KvePQv/Ac2nbHKcWTyYZWHPtlF7k -# GqIQggcyO8qev905ddS8i1Q/flCVNJ+SOSRTGINQ1FsvZrR7/lsp6x7FBf2jPfuh -# sPMreQ+xS6zDo9mj3CycKyOW9noqu63FV7aEtmOzYJgR7MbWZm8igxyKWAP0j+yc -# TtDf7s5hIdO1lVRJOyFRPaEjhZLCW/J6lISYCo8kViKKBPq0molINfhv64GGEVPA -# k3s6tNQ0zGLWNWGOplD7iHQe1zE1IR4Rv6ujZFOOVOJzZqT7ZmPhN8nEa/srM4sR -# w3SQgYPIT4bK3UqX236QUCWhYeyGmzZSB8s+YlXsM6bluBr63SQuDPkyiTFqNZX+ -# 9tH/F4quIwkrIa5i7vfuN+ewybMV7Xaat/3n/uFo3kTBCnThlchX+xTrHlrflnXF -# ZRn39NWNIa9jtuv04hdGn7fXB25qnSv+6dJxTtK+T2LTSdZgX0DjdpkgRNhKXLNd -# Gtniqr9NWQAXnmBnOkcSoDGCA0kwggNFAgEBMG8wWzELMAkGA1UEBhMCQkUxGTAX -# BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExMTAvBgNVBAMTKEdsb2JhbFNpZ24gVGlt -# ZXN0YW1waW5nIENBIC0gU0hBMzg0IC0gRzQCEAGb6t7ITWuP92w6ny4BJBYwCwYJ -# YIZIAWUDBAIBoIIBLTAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwKwYJKoZI -# hvcNAQk0MR4wHDALBglghkgBZQMEAgGhDQYJKoZIhvcNAQELBQAwLwYJKoZIhvcN -# AQkEMSIEIIV8TJ3exfSLWeeHCPoOpmQRM2VCzeB0xo9v/T/kb267MIGwBgsqhkiG -# 9w0BCRACLzGBoDCBnTCBmjCBlwQgOoh6lRteuSpe4U9su3aCN6VF0BBb8EURveJf -# gqkW0egwczBfpF0wWzELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24g -# bnYtc2ExMTAvBgNVBAMTKEdsb2JhbFNpZ24gVGltZXN0YW1waW5nIENBIC0gU0hB -# Mzg0IC0gRzQCEAGb6t7ITWuP92w6ny4BJBYwDQYJKoZIhvcNAQELBQAEggGACIxx -# gMeTIkSKXNazLnSgXOm61xX9CbAT5B78Euyt+fgAiSS68ssfTroqnp7FZwyFpCp3 -# d6uPlpteMeb6smbTWjZjjsVx5cZqV61840k0nX5+l4npSRFg7DY93Yn8r7v2N3hH -# QALvTD15poDorEJOUVh38usV0XvKoojILIXGAetvLPKQ/OWXA5UKf3BiJ3BEQ77m -# B3Vt0a8gmK188JSBn3DZOWU9cx28E7CId5xiNnCh+7YkNQvJsSaVwT/QrD7HtOBK -# v0XpRiY+UulCCz7vOgPnKdsamkSwiUJ7UHcjfNsDUZRtdr1mbOIiyelMNh9o4ZL1 -# eSvZpesj3qgRq5gIL7X3WgLdlg5CQZCJmBFYbIJONVWJjDg9zvFuIqBp8SZWHegC -# csK1kp247lZegV8EZek5kb0uImzG2XufSkyQehQ+7IQfOO7jMfNPtf8GkR2mm/74 -# u8AAjOKKogfgYjMTZ6SI7UfgLbtawk5+g+m9JbSS+bHkdm/L34P1Zq1KrBBx +# QTM4NCAtIEc0AhABm+reyE1rj/dsOp8uASQWMA0GCSqGSIb3DQEBCwUABIIBgF7q +# r9OyqTqLF7zIne/7E/Kdz8gWopoBUV1jGRc1e2V74oluv54iHwWwNq9saj9z7Kf0 +# DmA9BbsoEDElNTsvemH0RFDFDDRnPwz7JWeDNKHUD3khkHvTEnKY+pfD5TIyfgAh +# UYXOivTUd4XlzPJb91oQtR7dBnX3inMk5lVUhfnMhzWdMAab7wXDSrh2QG/oebf2 +# k4ZIQUyPqsIdr3pi+qpU86GnR0HZRJkbrJ3lt0R+s+yuYKAQj50o7bJd9D3t3dOk +# ij3VcHR1x0ixHd3clFF0xIKlccAAScTbgWiWiWGPI0lP2xYVm5GlXp1na/VkSHyW +# 1nxv3DOlR1JRtC+0vBU4DZV9KjkHyFsnZISlajKB+X5sF1fHSlJlxeAZ8fBz+Ec6 +# j9i+MYLx44hEzUBtpNoSTWQYItIwqFRjC5+zOFprkbcxlc6sUynfCSe6NGeewdAH +# MiqIFNfac8C6W222tAP2Us0NDByNSCNsXsOCcdTxn/YKgXjA00QSjVqzEbliNQ== # SIG # End signature block diff --git a/vscode/powershellprotools/package-lock.json b/vscode/powershellprotools/package-lock.json index 4f8e7e3..887b760 100644 --- a/vscode/powershellprotools/package-lock.json +++ b/vscode/powershellprotools/package-lock.json @@ -1,12 +1,12 @@ { "name": "powershellprotools", - "version": "2024.7.3", + "version": "2024.7.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "powershellprotools", - "version": "2024.7.3", + "version": "2024.7.5", "dependencies": { "cheerio": "^1.0.0-rc.2", "extract-zip": "^2.0.1", @@ -793,9 +793,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -1770,9 +1770,9 @@ "dev": true }, "is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "requires": { "hasown": "^2.0.2" diff --git a/vscode/powershellprotools/package.json b/vscode/powershellprotools/package.json index cc61739..db63c70 100644 --- a/vscode/powershellprotools/package.json +++ b/vscode/powershellprotools/package.json @@ -2,7 +2,7 @@ "name": "powershellprotools", "displayName": "PowerShell Pro Tools", "description": "Powerful extensions for PowerShell development.", - "version": "2024.7.4", + "version": "2024.7.5", "publisher": "ironmansoftware", "repository": { "type": "git", diff --git a/vscode/powershellprotools/src/commands/refactoring.ts b/vscode/powershellprotools/src/commands/refactoring.ts index 2cd97a7..ccffe4b 100644 --- a/vscode/powershellprotools/src/commands/refactoring.ts +++ b/vscode/powershellprotools/src/commands/refactoring.ts @@ -117,6 +117,7 @@ export class RefactoringCommands implements ICommand, vscode.CodeActionProvider request.editorState = new TextEditorState(); request.editorState.content = document.getText() request.editorState.fileName = document.fileName + request.editorState.uri = document.uri.toString() request.editorState.documentEnd = { Character: document.lineAt(document.lineCount - 1).range.end.character, Line: document.lineCount - 1 @@ -205,7 +206,8 @@ export class RefactoringCommands implements ICommand, vscode.CodeActionProvider let we = new vscode.WorkspaceEdit(); for (var edit of result) { - let uri = vscode.Uri.file(edit.FileName); + + let uri = edit.Uri ? vscode.Uri.parse(edit.Uri) : vscode.Uri.file(edit.Uri); switch (edit.Type) { case TextEditType.replace: diff --git a/vscode/powershellprotools/src/types.ts b/vscode/powershellprotools/src/types.ts index a0ff85d..d04e07a 100644 --- a/vscode/powershellprotools/src/types.ts +++ b/vscode/powershellprotools/src/types.ts @@ -5,6 +5,7 @@ export class RefactorTextEdit { Content: string; FileName: string; Type: TextEditType; + Uri: string; } export class RefactorInfo { @@ -22,6 +23,7 @@ export enum TextEditType { export class TextEditorState { content: string; fileName: string; + uri: string; selectionStart: TextPosition; selectionEnd: TextPosition; documentEnd: TextPosition;