From 88d93d23415fc78668685bd0f373451a99e0447c Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 02:12:50 +0200 Subject: [PATCH 01/27] add Gtk & Gtk-FPF I --- build/Environment.props | 4 ++++ src/OpenSource.Impl.projitems | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/build/Environment.props b/build/Environment.props index 660e624..2dffdec 100644 --- a/build/Environment.props +++ b/build/Environment.props @@ -18,6 +18,10 @@ true false + + true + false + diff --git a/src/OpenSource.Impl.projitems b/src/OpenSource.Impl.projitems index aa6304f..18c1eb2 100644 --- a/src/OpenSource.Impl.projitems +++ b/src/OpenSource.Impl.projitems @@ -28,6 +28,33 @@ + + + FPF + $(ReferencesVSEditorCopyToOutput) + + + FPF + $(ReferencesVSEditorCopyToOutput) + + + FPF + $(ReferencesVSEditorCopyToOutput) + + + FPF + $(ReferencesVSEditorCopyToOutput) + + + FPF + $(ReferencesVSEditorCopyToOutput) + + + FPF + $(ReferencesVSEditorCopyToOutput) + + + $(ReferencesVSEditorCopyToOutput) From 4be571e74fdab256679fc72a8b629b5ddc8d5e88 Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 02:13:23 +0200 Subject: [PATCH 02/27] add Gtk & adjust FPF-Path --- VSEditorCore.sln | 85 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 8 deletions(-) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index c22021b..f26a83a 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -29,17 +29,17 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoa", "src\Editor\T EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPF", "FPF", "{01986EB1-3128-5838-B09A-7754A44C22CE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsBase", "src\FPF\WindowsBase\WindowsBase.csproj", "{522016EE-7098-5C37-844E-297AEDDEE1B4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsBase", "src\Editor\FPF\WindowsBase\WindowsBase.csproj", "{522016EE-7098-5C37-844E-297AEDDEE1B4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationProvider", "src\FPF\UIAutomationProvider\UIAutomationProvider.csproj", "{A1D6A6EC-B9A2-518C-8358-298CD775D2B5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationProvider", "src\Editor\FPF\UIAutomationProvider\UIAutomationProvider.csproj", "{A1D6A6EC-B9A2-518C-8358-298CD775D2B5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationTypes", "src\FPF\UIAutomationTypes\UIAutomationTypes.csproj", "{AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationTypes", "src\Editor\FPF\UIAutomationTypes\UIAutomationTypes.csproj", "{AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationCore", "src\FPF\PresentationCore\PresentationCore.csproj", "{0E73055E-9DCB-554A-935B-60C223D82B83}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationCore", "src\Editor\FPF\PresentationCore\PresentationCore.csproj", "{0E73055E-9DCB-554A-935B-60C223D82B83}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationFramework", "src\FPF\PresentationFramework\PresentationFramework.csproj", "{1C53C421-EAB4-5104-BEA1-164D09E40C54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationFramework", "src\Editor\FPF\PresentationFramework\PresentationFramework.csproj", "{1C53C421-EAB4-5104-BEA1-164D09E40C54}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationClient", "src\FPF\UIAutomationClient\UIAutomationClient.csproj", "{F26AC124-3EB5-5DA2-AE13-51904AFBFB70}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationClient", "src\Editor\FPF\UIAutomationClient\UIAutomationClient.csproj", "{F26AC124-3EB5-5DA2-AE13-51904AFBFB70}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextDataUtil", "src\Editor\Text\Util\TextDataUtil\TextDataUtil.csproj", "{2A67004F-832D-5D47-AA7D-26D1548EBB88}" EndProject @@ -91,6 +91,7 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU Windows|Any CPU = Windows|Any CPU + Gtk|Any CPU = Gtk|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -100,6 +101,8 @@ Global {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.macOS|Any CPU.Build.0 = Debug|Any CPU {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Windows|Any CPU.Build.0 = Debug|Any CPU + {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Gtk|Any CPU.Build.0 = Debug|Any CPU {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.macOS|Any CPU.Build.0 = Debug|Any CPU {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU @@ -108,14 +111,20 @@ Global {58999311-75E2-5099-856C-CAEE5CD13240}.macOS|Any CPU.Build.0 = Debug|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.Windows|Any CPU.Build.0 = Debug|Any CPU + {58999311-75E2-5099-856C-CAEE5CD13240}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {58999311-75E2-5099-856C-CAEE5CD13240}.Gtk|Any CPU.Build.0 = Debug|Any CPU {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.macOS|Any CPU.Build.0 = Debug|Any CPU {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Windows|Any CPU.Build.0 = Debug|Any CPU + {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Gtk|Any CPU.Build.0 = Debug|Any CPU {4A320450-5D4A-552B-9D33-4BB1FF841D95}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {4A320450-5D4A-552B-9D33-4BB1FF841D95}.macOS|Any CPU.Build.0 = Debug|Any CPU {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Windows|Any CPU.Build.0 = Debug|Any CPU + {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Gtk|Any CPU.Build.0 = Debug|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.macOS|Any CPU.Build.0 = Debug|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Windows|Any CPU.ActiveCfg = Debug|Any CPU @@ -124,14 +133,20 @@ Global {F837FA63-028D-5780-8459-B9B92894B9EA}.macOS|Any CPU.Build.0 = Debug|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.Windows|Any CPU.Build.0 = Debug|Any CPU + {F837FA63-028D-5780-8459-B9B92894B9EA}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {F837FA63-028D-5780-8459-B9B92894B9EA}.Gtk|Any CPU.Build.0 = Debug|Any CPU {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.macOS|Any CPU.Build.0 = Debug|Any CPU {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Windows|Any CPU.Build.0 = Debug|Any CPU + {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Gtk|Any CPU.Build.0 = Debug|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.macOS|Any CPU.Build.0 = Debug|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Windows|Any CPU.Build.0 = Debug|Any CPU + {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Gtk|Any CPU.Build.0 = Debug|Any CPU {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.macOS|Any CPU.Build.0 = Debug|Any CPU {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Windows|Any CPU.ActiveCfg = Debug|Any CPU @@ -140,112 +155,166 @@ Global {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.macOS|Any CPU.Build.0 = Debug|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Windows|Any CPU.Build.0 = Debug|Any CPU + {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Gtk|Any CPU.Build.0 = Debug|Any CPU {E75466D3-CC61-5625-99AC-278C0049BFFD}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {E75466D3-CC61-5625-99AC-278C0049BFFD}.macOS|Any CPU.Build.0 = Debug|Any CPU {522016EE-7098-5C37-844E-297AEDDEE1B4}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {522016EE-7098-5C37-844E-297AEDDEE1B4}.macOS|Any CPU.Build.0 = Debug|Any CPU + {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gtk|Any CPU.Build.0 = Debug|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.macOS|Any CPU.Build.0 = Debug|Any CPU + {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.Gtk|Any CPU.Build.0 = Debug|Any CPU {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.macOS|Any CPU.Build.0 = Debug|Any CPU - {0E73055E-9DCB-554A-935B-60C223D82B83}.macOS|Any CPU.ActiveCfg = Debug|Any CPU - {0E73055E-9DCB-554A-935B-60C223D82B83}.macOS|Any CPU.Build.0 = Debug|Any CPU + {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.Gtk|Any CPU.Build.0 = Debug|Any CPU {1C53C421-EAB4-5104-BEA1-164D09E40C54}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {1C53C421-EAB4-5104-BEA1-164D09E40C54}.macOS|Any CPU.Build.0 = Debug|Any CPU {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.macOS|Any CPU.Build.0 = Debug|Any CPU + {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.Gtk|Any CPU.Build.0 = Debug|Any CPU {2A67004F-832D-5D47-AA7D-26D1548EBB88}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {2A67004F-832D-5D47-AA7D-26D1548EBB88}.macOS|Any CPU.Build.0 = Debug|Any CPU {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Windows|Any CPU.Build.0 = Debug|Any CPU + {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Gtk|Any CPU.Build.0 = Debug|Any CPU {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.macOS|Any CPU.Build.0 = Debug|Any CPU {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Windows|Any CPU.Build.0 = Debug|Any CPU + {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Gtk|Any CPU.Build.0 = Debug|Any CPU {34D4D478-647E-509E-9B2F-7E11FAE15C73}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {34D4D478-647E-509E-9B2F-7E11FAE15C73}.macOS|Any CPU.Build.0 = Debug|Any CPU {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Windows|Any CPU.Build.0 = Debug|Any CPU + {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Gtk|Any CPU.Build.0 = Debug|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.macOS|Any CPU.Build.0 = Debug|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.Windows|Any CPU.Build.0 = Debug|Any CPU + {4F556838-7D8A-542A-A886-3AF972665C3A}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {4F556838-7D8A-542A-A886-3AF972665C3A}.Gtk|Any CPU.Build.0 = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.macOS|Any CPU.Build.0 = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.Windows|Any CPU.Build.0 = Debug|Any CPU + {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gtk|Any CPU.Build.0 = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.macOS|Any CPU.Build.0 = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.Windows|Any CPU.Build.0 = Debug|Any CPU + {D559AC50-50B5-5C97-8F18-CA5581B16266}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {D559AC50-50B5-5C97-8F18-CA5581B16266}.Gtk|Any CPU.Build.0 = Debug|Any CPU {B1374407-B888-5E5C-8413-79E4F3440D61}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {B1374407-B888-5E5C-8413-79E4F3440D61}.macOS|Any CPU.Build.0 = Debug|Any CPU {B1374407-B888-5E5C-8413-79E4F3440D61}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {B1374407-B888-5E5C-8413-79E4F3440D61}.Windows|Any CPU.Build.0 = Debug|Any CPU + {B1374407-B888-5E5C-8413-79E4F3440D61}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {B1374407-B888-5E5C-8413-79E4F3440D61}.Gtk|Any CPU.Build.0 = Debug|Any CPU {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.macOS|Any CPU.Build.0 = Debug|Any CPU {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Windows|Any CPU.Build.0 = Debug|Any CPU + {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Gtk|Any CPU.Build.0 = Debug|Any CPU {47D4821C-121E-5886-8127-A13580FE508C}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {47D4821C-121E-5886-8127-A13580FE508C}.macOS|Any CPU.Build.0 = Debug|Any CPU {47D4821C-121E-5886-8127-A13580FE508C}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {47D4821C-121E-5886-8127-A13580FE508C}.Windows|Any CPU.Build.0 = Debug|Any CPU + {47D4821C-121E-5886-8127-A13580FE508C}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {47D4821C-121E-5886-8127-A13580FE508C}.Gtk|Any CPU.Build.0 = Debug|Any CPU {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.macOS|Any CPU.Build.0 = Debug|Any CPU {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Windows|Any CPU.Build.0 = Debug|Any CPU + {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Gtk|Any CPU.Build.0 = Debug|Any CPU {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.macOS|Any CPU.Build.0 = Debug|Any CPU {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Windows|Any CPU.Build.0 = Debug|Any CPU + {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Gtk|Any CPU.Build.0 = Debug|Any CPU {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.macOS|Any CPU.Build.0 = Debug|Any CPU {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Windows|Any CPU.Build.0 = Debug|Any CPU + {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Gtk|Any CPU.Build.0 = Debug|Any CPU {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.macOS|Any CPU.Build.0 = Debug|Any CPU {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Windows|Any CPU.Build.0 = Debug|Any CPU + {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Gtk|Any CPU.Build.0 = Debug|Any CPU {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.macOS|Any CPU.Build.0 = Debug|Any CPU {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Windows|Any CPU.Build.0 = Debug|Any CPU + {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Gtk|Any CPU.Build.0 = Debug|Any CPU {8C34FEFB-06D8-5559-BFA3-514171281325}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {8C34FEFB-06D8-5559-BFA3-514171281325}.macOS|Any CPU.Build.0 = Debug|Any CPU {8C34FEFB-06D8-5559-BFA3-514171281325}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {8C34FEFB-06D8-5559-BFA3-514171281325}.Windows|Any CPU.Build.0 = Debug|Any CPU + {8C34FEFB-06D8-5559-BFA3-514171281325}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {8C34FEFB-06D8-5559-BFA3-514171281325}.Gtk|Any CPU.Build.0 = Debug|Any CPU {C9A833EC-107D-5F96-906A-DEE43518FB18}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {C9A833EC-107D-5F96-906A-DEE43518FB18}.macOS|Any CPU.Build.0 = Debug|Any CPU {C9A833EC-107D-5F96-906A-DEE43518FB18}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {C9A833EC-107D-5F96-906A-DEE43518FB18}.Windows|Any CPU.Build.0 = Debug|Any CPU + {C9A833EC-107D-5F96-906A-DEE43518FB18}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {C9A833EC-107D-5F96-906A-DEE43518FB18}.Gtk|Any CPU.Build.0 = Debug|Any CPU {1E9081AB-DA57-5A98-82C6-7704040940AF}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {1E9081AB-DA57-5A98-82C6-7704040940AF}.macOS|Any CPU.Build.0 = Debug|Any CPU {1E9081AB-DA57-5A98-82C6-7704040940AF}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {1E9081AB-DA57-5A98-82C6-7704040940AF}.Windows|Any CPU.Build.0 = Debug|Any CPU + {1E9081AB-DA57-5A98-82C6-7704040940AF}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {1E9081AB-DA57-5A98-82C6-7704040940AF}.Gtk|Any CPU.Build.0 = Debug|Any CPU {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.macOS|Any CPU.Build.0 = Debug|Any CPU {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Windows|Any CPU.Build.0 = Debug|Any CPU + {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Gtk|Any CPU.Build.0 = Debug|Any CPU {E56636D5-1E6E-52B3-BEB5-11207293AE22}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {E56636D5-1E6E-52B3-BEB5-11207293AE22}.macOS|Any CPU.Build.0 = Debug|Any CPU {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Windows|Any CPU.Build.0 = Debug|Any CPU + {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Gtk|Any CPU.Build.0 = Debug|Any CPU {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.macOS|Any CPU.Build.0 = Debug|Any CPU {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Windows|Any CPU.Build.0 = Debug|Any CPU + {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Gtk|Any CPU.Build.0 = Debug|Any CPU {ED3EA28C-3C37-5233-A975-721A152A109D}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {ED3EA28C-3C37-5233-A975-721A152A109D}.macOS|Any CPU.Build.0 = Debug|Any CPU {ED3EA28C-3C37-5233-A975-721A152A109D}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {ED3EA28C-3C37-5233-A975-721A152A109D}.Windows|Any CPU.Build.0 = Debug|Any CPU + {ED3EA28C-3C37-5233-A975-721A152A109D}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {ED3EA28C-3C37-5233-A975-721A152A109D}.Gtk|Any CPU.Build.0 = Debug|Any CPU {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.macOS|Any CPU.Build.0 = Debug|Any CPU {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Windows|Any CPU.Build.0 = Debug|Any CPU + {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Gtk|Any CPU.Build.0 = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.macOS|Any CPU.Build.0 = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Windows|Any CPU.Build.0 = Debug|Any CPU + {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gtk|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {522016EE-7098-5C37-844E-297AEDDEE1B4} = {01986EB1-3128-5838-B09A-7754A44C22CE} From 076bee694dc9940b2176aed07005da72b7311aef Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 02:14:02 +0200 Subject: [PATCH 03/27] adjust Sdk --- .../Text/Impl/BraceCompletion/BraceCompletionImpl.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj index d8eb0fc..679ed06 100644 --- a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj +++ b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj @@ -1,9 +1,9 @@  - - - + + + Microsoft.VisualStudio.Text.BraceCompletion.Implementation $(AssemblyName) From e8181e7a4e74651e41a9ca691d5412bbf07e0a8a Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 02:14:29 +0200 Subject: [PATCH 04/27] add PresentationCoreGtk.csproj --- .../FPF/PresentationCore/PresentationCoreGtk.csproj | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj diff --git a/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj b/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj new file mode 100644 index 0000000..621e07f --- /dev/null +++ b/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj @@ -0,0 +1,9 @@ + + + $(TargetFramework) + + + + + + From 7b9bd5bd3c291dedd5e251086297d86a3c00e525 Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 02:21:35 +0200 Subject: [PATCH 05/27] add PresentationCoreGtk.csproj --- VSEditorCore.sln | 2 ++ 1 file changed, 2 insertions(+) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index f26a83a..11da2bf 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -315,6 +315,8 @@ Global {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Windows|Any CPU.Build.0 = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {0E73055E-9DCB-554A-935B-60C223D82B83}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {0E73055E-9DCB-554A-935B-60C223D82B83}.Gtk|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {522016EE-7098-5C37-844E-297AEDDEE1B4} = {01986EB1-3128-5838-B09A-7754A44C22CE} From b8384596b4fb8e01d877c0b6f7a5db8f547be7d8 Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 02:28:17 +0200 Subject: [PATCH 06/27] add WindowswBaseGtk.csproj --- src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj diff --git a/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj b/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj new file mode 100644 index 0000000..dcd2c2d --- /dev/null +++ b/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj @@ -0,0 +1,14 @@ + + + 1699,67,618 + true + TRACE;NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM;MULTIPLEX_OS + false + false + $(TargetFramework) + + + + + + \ No newline at end of file From 5b96f8213de3cadb74949deefc553bd60de5501c Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 15:28:49 +0200 Subject: [PATCH 07/27] FPF over Xwt: refactored to compile --- VSEditorCore.sln | 41 +++- libs/Xwt/Xwt.deps.json | 47 +++++ libs/Xwt/Xwt.dll | Bin 0 -> 484864 bytes .../PresentationCoreGtk.csproj | 10 + .../System.Windows.ClipboardGtk.cs | 69 +++++++ ...oard.cs => System.Windows.ClipboardMac.cs} | 0 .../System.Windows.UIElementGtk.cs | 27 +++ ...ment.cs => System.Windows.UIElementMac.cs} | 0 .../PresentationFramework.csproj | 8 +- .../PresentationFrameworkGtk.csproj | 11 ++ .../DispatcherOperationGtk.cs | 179 ++++++++++++++++++ ...Operation.cs => DispatcherOperationMac.cs} | 0 .../FPF/WindowsBase/WindowsBaseGtk.csproj | 13 +- 13 files changed, 392 insertions(+), 13 deletions(-) create mode 100644 libs/Xwt/Xwt.deps.json create mode 100644 libs/Xwt/Xwt.dll create mode 100644 src/Editor/FPF/PresentationCore/System.Windows.ClipboardGtk.cs rename src/Editor/FPF/PresentationCore/{System.Windows.Clipboard.cs => System.Windows.ClipboardMac.cs} (100%) create mode 100644 src/Editor/FPF/PresentationCore/System.Windows.UIElementGtk.cs rename src/Editor/FPF/PresentationCore/{System.Windows.UIElement.cs => System.Windows.UIElementMac.cs} (100%) create mode 100644 src/Editor/FPF/PresentationFramework/PresentationFrameworkGtk.csproj create mode 100644 src/Editor/FPF/WindowsBase/System.Windows.Threading/DispatcherOperationGtk.cs rename src/Editor/FPF/WindowsBase/System.Windows.Threading/{DispatcherOperation.cs => DispatcherOperationMac.cs} (100%) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index 11da2bf..dbc8643 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -27,7 +27,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardClassification", "s EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoa", "src\Editor\Text\Def\TextUICocoa\TextUICocoa.csproj", "{E75466D3-CC61-5625-99AC-278C0049BFFD}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPF", "FPF", "{01986EB1-3128-5838-B09A-7754A44C22CE}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPF_Mac", "FPF_Mac", "{01986EB1-3128-5838-B09A-7754A44C22CE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsBase", "src\Editor\FPF\WindowsBase\WindowsBase.csproj", "{522016EE-7098-5C37-844E-297AEDDEE1B4}" EndProject @@ -87,6 +87,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Outlining", "src\Editor\Tex EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PatternMatchingImpl", "src\Editor\Text\Impl\PatternMatching\PatternMatchingImpl.csproj", "{E3E20ABF-9920-59BD-AA5B-96DC69D5382F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationCoreGtk", "src\Editor\FPF\PresentationCore\PresentationCoreGtk.csproj", "{92E649D2-BE16-4688-ACA5-61ACC5556CFF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPF_Gtk", "FPF_Gtk", "{F2475C0D-E5DD-470D-8521-6796F503C021}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPF_Shared", "FPF_Shared", "{552D852C-5C72-44F8-9BA7-AE2A6D6EE586}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsBaseGtk", "src\Editor\FPF\WindowsBase\WindowsBaseGtk.csproj", "{48C412AD-19A4-4F88-9458-96A41102C133}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationFrameworkGtk", "src\Editor\FPF\PresentationFramework\PresentationFrameworkGtk.csproj", "{ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU @@ -162,7 +172,6 @@ Global {522016EE-7098-5C37-844E-297AEDDEE1B4}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {522016EE-7098-5C37-844E-297AEDDEE1B4}.macOS|Any CPU.Build.0 = Debug|Any CPU {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gtk|Any CPU.Build.0 = Debug|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.macOS|Any CPU.Build.0 = Debug|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU @@ -316,14 +325,34 @@ Global {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gtk|Any CPU.Build.0 = Debug|Any CPU {0E73055E-9DCB-554A-935B-60C223D82B83}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {0E73055E-9DCB-554A-935B-60C223D82B83}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.macOS|Any CPU.ActiveCfg = Debug|Any CPU + {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.macOS|Any CPU.Build.0 = Debug|Any CPU + {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Windows|Any CPU.ActiveCfg = Debug|Any CPU + {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Windows|Any CPU.Build.0 = Debug|Any CPU + {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {48C412AD-19A4-4F88-9458-96A41102C133}.macOS|Any CPU.ActiveCfg = Debug|Any CPU + {48C412AD-19A4-4F88-9458-96A41102C133}.macOS|Any CPU.Build.0 = Debug|Any CPU + {48C412AD-19A4-4F88-9458-96A41102C133}.Windows|Any CPU.ActiveCfg = Debug|Any CPU + {48C412AD-19A4-4F88-9458-96A41102C133}.Windows|Any CPU.Build.0 = Debug|Any CPU + {48C412AD-19A4-4F88-9458-96A41102C133}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {48C412AD-19A4-4F88-9458-96A41102C133}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.macOS|Any CPU.ActiveCfg = Debug|Any CPU + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.macOS|Any CPU.Build.0 = Debug|Any CPU + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Windows|Any CPU.ActiveCfg = Debug|Any CPU + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Windows|Any CPU.Build.0 = Debug|Any CPU + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gtk|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {522016EE-7098-5C37-844E-297AEDDEE1B4} = {01986EB1-3128-5838-B09A-7754A44C22CE} - {A1D6A6EC-B9A2-518C-8358-298CD775D2B5} = {01986EB1-3128-5838-B09A-7754A44C22CE} - {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67} = {01986EB1-3128-5838-B09A-7754A44C22CE} {0E73055E-9DCB-554A-935B-60C223D82B83} = {01986EB1-3128-5838-B09A-7754A44C22CE} {1C53C421-EAB4-5104-BEA1-164D09E40C54} = {01986EB1-3128-5838-B09A-7754A44C22CE} - {F26AC124-3EB5-5DA2-AE13-51904AFBFB70} = {01986EB1-3128-5838-B09A-7754A44C22CE} + {92E649D2-BE16-4688-ACA5-61ACC5556CFF} = {F2475C0D-E5DD-470D-8521-6796F503C021} + {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67} = {552D852C-5C72-44F8-9BA7-AE2A6D6EE586} + {A1D6A6EC-B9A2-518C-8358-298CD775D2B5} = {552D852C-5C72-44F8-9BA7-AE2A6D6EE586} + {F26AC124-3EB5-5DA2-AE13-51904AFBFB70} = {552D852C-5C72-44F8-9BA7-AE2A6D6EE586} + {48C412AD-19A4-4F88-9458-96A41102C133} = {F2475C0D-E5DD-470D-8521-6796F503C021} + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6} = {F2475C0D-E5DD-470D-8521-6796F503C021} EndGlobalSection EndGlobal diff --git a/libs/Xwt/Xwt.deps.json b/libs/Xwt/Xwt.deps.json new file mode 100644 index 0000000..7e4d392 --- /dev/null +++ b/libs/Xwt/Xwt.deps.json @@ -0,0 +1,47 @@ +{ + "runtimeTarget": { + "name": ".NETStandard,Version=v2.0/", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETStandard,Version=v2.0": {}, + ".NETStandard,Version=v2.0/": { + "Xwt/1.0.0": { + "dependencies": { + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "Xwt.dll": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.0": {}, + "NETStandard.Library/2.0.3": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + } + } + }, + "libraries": { + "Xwt/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "path": "microsoft.netcore.platforms/1.1.0", + "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" + }, + "NETStandard.Library/2.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "path": "netstandard.library/2.0.3", + "hashPath": "netstandard.library.2.0.3.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/libs/Xwt/Xwt.dll b/libs/Xwt/Xwt.dll new file mode 100644 index 0000000000000000000000000000000000000000..c6bec8c9f8117c33f998a2bbf2544ddb4094d1af GIT binary patch literal 484864 zcmd3P37lL-wf>!Zdz+rgBt0|f&O%56Ot?&E*q4w12>}8GWnYpYOTr>Sq;NVQ()1A7 z6by@~sHlJ_sG#EZ6mbD$Q$)q*hRZ_)5qEKU?uP&Ool|vh-R_wX(BJ$0qfA$wI$NDO zb!xeF>%M%|wLugFK@R^t|9lYKg7gW$ws5EK-8@r6jwL3%xYgJ6oJL)DuA>M#H9MLFPa{y-7+ zI{7l9^8e|t%_?@VBlsT1H26M1L$v?9xft{Uc6hTG9Nk{Fsr;NED0$^2k7U7e{+K1(mas zr5>3iPo-V)kGh3HK3K9_6kK~iF6b6$`sc9=ioyCcJ7H>I$1X80pCN>>9NOawaA0CW-P!g_HqMz#=*^7f+jEazPSuj7v}FB?*jb!bHxVc@hL%Jq+dYi z{ub7UQK}oe>Rr`(SFNWwe~MOO3bcrK1({Y#NQX8Se+c5nZU7tT3@cF{vew384%Qr) zKgwce__)Xm zTUV$c{#b^-Am#l=6c!r0!!oTancP_TgyY>4!*dJL`Ww3@bJKkduQLQL0=$b7Ky+>lsClv;qnePg+-ltnpE>>M4pn zQQc3|^!tG-G(SeWwk`uo(bj}IXxu^Is0593iZ&dHufdj#nU%3g@ZvI9hVlO3vktv( zX75D=mWnYl^>U%O%aiJ#}& z6(ilnJgr?MvEO9!Xnc;1$Z#(3DtM#oLce&|Zd7AA4RK&s5DLn7!>v({f76z<5Sepf zyc3WRgA{vR7zSbE5RkN{vNURe9s7aSyQ1|bp>Vq~2qVic2zKmAlJ%}gxtlx5J)!Sc zda@RJ#+DtS%s>hsdow&`Xrwl8>{=u?7QRSFdKnZNTF;UgLsi|<=7S;7X6^Xqq$h?^ zwQ(ruW>jN{U}T}+y%0@qT$&Nkq7P|%NheF?FD+T&}O|w`CaIg1V!VR)Wc4 zjJb3fH6O8dsL6OdB|^#JC^3hSQN1t8znuAiCW0-tPKl)MWoNQFji*N9P&B|w`wr?w zlc<4_5|aj46=NWjZnFCq%n^{zPRV$<2Kr8OzAoch>g&~>`i_>UXpW@H7!(VURHHvB zIEvhAlj^gAVr>P+3=v|E26SVNs*ilWI;kFXW3pq5juG*?>zURyptS1HxQN-^P9>2b;(TnGxK zN;eScbE$9K(wzX!DR7EPulXz%LIZvMeepSXgcqh1KV=@L#aQi?dn9D(!66UmX~5HXFEMV6ZZ{DVu5Gz|_iMVzXMM z23`9rQxlu@_g7ORDI$#5593id-K;V-R+|lgQHRYOP;FM-q|KB)Z8ohk4SG}(Jyr}< zg317FHc%N*n@z7wSDUFnmb%ps*{^cJuVF@v8EzbaH!%Prt3Oh59>a9$=VW2Ol^re;Jbb*#gYt@(5%2o=B4ypc= zv^T~}aHE%T9^k~J^ZM8pl7!fh0OagKQf zyQ9oybe)7E#v6(ko@Zm4p~_gQXHzP-wgOYqP&uoIt^vR#S$7l~CqU8#77ILyZ8a%G z=0vN8%saRyW*uDpF})2@l`2$On>)TWkCaHA(83}rCvyUgL8wy9#Ntr0wUvS! zHc4AsaaK$&!D7#G8qdBmZmc!3>{He7t zS?3Sd5XmZZ_`92fg|%uC(+^JFuu{eR>CZ2UDyLMS#uOCPFIJ{f!N$6Wp=BCzBw%p0B56`Z47bgg1BVUvI3Zj4f86<;uuGTf-M`oHv@u*nv-zMKy*U)4UPa7^IgjbZ%&<)uc5UVK#| z@guMAZKF1&NfOyu9q2#Qg$2IM|C9~UVc3?m^0;!<&k>8z6xxLUnYKd*q+Iqbk$WW@ zOnMpvAA~V&%9)mO?SvRXT6V~kmN{o2rcF-=Z3Wf@ThNLOQvilA*vCR5QzQ{=Ej~ef z^$EoerY_)&oP>3jt$+J#eJ*kmS*%xZ~q582+OQAZ2S1MqjoD`G~vafoDBi}_(t zxRPaHu`Vgm&XQsDAQ=tM3*$8u7T{q>6MHkc;jLg@NdSO-B?U+VfSnvb5&+;SfnrDk zwg|Z{XWydjPG$SVr{izq(Y&=Fh_EPBB1r&%<)Q*4ab8f}a46&KlqAkhM%=J*_S4CZ z-qDcv)CnIEtGSod%y*0F8j&!jcrX(sz^ zOGspotNQkXHf& zn;r>ZSmEo0$&Z z)|S@7#J7p*`!@6H+gg(Pw(yiD%`i%QTlap4M-eiTgc`kFmNhlWW5&z%H6mNElkzwn z^(`mQZ!SEWeekYRV)v&<2BcOoULS&3nFv|&tT=wT8exU<=Q>{!G z>Kg1qm|Oc5M4;gJqD*`_G*?5U5Y2>tBDV5B@UgmZ>eN`)0~9Kq_|b3|LouFWOpWDny0q0Krx!Z)RZb9KY)3Sp)j@iZxu&h0w5ns&R@TKm zZ9ea1n~BLp&DGG=IvMMq>^XLrbxT;!*(nOX177lP_M8pB;E)2xwNv+VIi%dfL2&kx z_Ofe|vN`NZ?ZtO^#cfaGhXqW&f8-B}6%E_eY9T?x z9y!pk8#A-a?DL2_L03z0jGaI7_2)*_0uyH>Yu=-S%ZI<@YZ)f@_ePs`A z?{nda>x!X$lm|HJ=nvRFr9ZIToP#!7ceLxnm_1-CMrRL_0APOykOX5hDrIA07{3Sg z2%Gx>z{3sttZg3Wlmx-3^xtiOzo*D-9ssC)7#%h)h2||nLV-)CBR>6cq2NdHyTKoA z@lp8^7Z!g+G+9L{OGqu?oOu-Nf?x~|w#WfDh-Sby3_`hOVT0G?(f@o=?Id-?X` zl*5T>KcU~@15D z{zQlQVNfZWt~ri7e)wtTtxtvRrrz zn}_(an6a`j)1BF3US(;C$Vy6_tTtxtvgRc9dYLba8DAFjDoaaJS$CJ6#qC$O3db;6FWWUH@TiA}&(=@y#TCZE_tvkhd7=w5&>KsXarI{FC%DW27i)`g zaoJi4t~8y)-3Oa$jMZ4I$j%!Mr(g|I#<&%=UJm%M)@hr>22qYHs4^zzELNu2`)0=c z&7Ls}<>{QpxhTe1xhZt9S%&}lnTFclasnJ+9&e zW~v*Wy}ie2?L}|mBtf?&&kkkNt#t$qR%;!}AA2Nb_@fh-VdV*f$`<4|sfgIrAH%a428-+&k`37gc??2B;-t0VJMGa>wbWiNZ6I3OXPPl z(va(9Xm<&lR3MSTj4y+Em7yi64CYnY3?r3++2^sOd065M8Bmuw*2ap5+D;+=* z>9TQ|TR_4Uo)ItbAx{eg?UC`J-vQd`L(e(fi1XB7AN8T10;;|}6&;?ruz3`8iF?rZ zd+G!}1z=Ss%HoW=%oLePJoA06HyC}Eeuk|T_*v8?pOsN4_4atgoK&B;e~|aWFfo_RbOG9qWlw}OQ2niez#hzKbp0Kbw3XAbcu3g&mA6u78xE}WyQAf%`e1N?~ zN0D_N)-juqMZ|Gs2_IjU$B6pS$1w*^Z2S5|Th>X}@|XnM@^;%2Th^i0hB=qJlEh1Io$40uQ;?YX=CzQPF_E-yxx)WVuOR%4=3Oy{*dwtxi6!B8*ZS_xgXHrZ+2Qyd~UE_g67+2ZvCfABjFu>z#={A$0klHeL3yeJD!x z$jSR5FC&i)5JUT1g&XMe8z6e}h>d?p>?#FFH zB6CCF;`>;-2wK+py1|aYGy4==4Qn7=Vr|7+)PUlvFx)>;c1@-vArxKx8xT8 z$FL{=u);yRpgqU7$>H^m{ZWV3Y1Aof@@H$s+HZ+XELdXZ;+R1Lp{CF}m3U45wWS9w zF=t_jhkZQYk|pNs4j?ek=l}xq%oJEPa!6TuRrLh3W@>sS*=6K(w?o5J%gM)U84FOI z#x*dEIYHox6`w{a`m6=;0BaNa;l4!v6&`4z>%@zZF~3I!Z5r>*%sSKmx|3ZuLl0*|>GEudl9KK4q`%v-W#DH>0*wU@S&NiWPQ;B*UPwnwIn2N&$a-E6FV z2F;v}wJ;>xKaI6(oDVl4VJ}WL`~E-QY3u;^pLEZch+kL#7fo zt_5A|btGxLnMrIWfLfzy<5)fhZd{I*?g<+PW^28Q#ZCUTZT;k8a~2Bl0@fJI&q~S> zug(NS?IW-QNy_E*}I2@1++4n_qw45_6K|tL8Wl9z3_$ ztd{&hZ|iJWr_x)i3I(Wd1YN z7e)oG{!!yszt~+V{(n~ebN*A+7e+;`{@QHyJ^wFtS4z|W&;0*Mvl$NX8nM8Pf8YOw zQAsUuZq@>>`*-7L{{LsyAN@~NUl?_3^;_dtzl^t9{y(dJ<3Ck>VN}-YUy-dof;LBx zp@B&)?7HMClMn+m*uK;e#racDcctgw3@FD_Gdt>I_&CrTCfI!r)?uQrbuKmU!!S{s z{t}157dLioR^P>APXurD-IqL|hE3toqYd|#Y{P|3*1Bqr)m0@kW)Gy>kj-{nP=!sI z)HT_}<~q#mECg>|c{!D*5WImV^PfUVf5U>VEOlyz>D&nzJN@aLOt>=eOJ#JGp%?Ju z6a2Mowy?=DX*@WC^>}cGFu<|@ZRJ`%?AznP>Gb2lX;Z-QtToGr7RU!6raMn z3}cPN^(yyJb?>Ih33AoE1r{~mhO_FrWF~MH0p}>LOHflHnYRL`T%Up^)!UH5qYLvL z5a4)Ud_D3b&pv^djW$-XYMkkgNYmq&=fZCK33E1`+`21!F{@0@L6$wa2k z=7yrw6Aj4wg|G(1o8pbHfu^2sJW4fHr-FGqL}NP7cVBGXX5sf3(x@N3&p93U4cFQ`SxLJBhYcZjnE;3Q*8Nrx z=K!(2pcn#pVhGO=!V6yu#KKt`6VMHhkGH{+v_)tbV~YV+iPxrWl@HJ~!EvdMIPI2S za4}#yCG>fVL#6;c;Grj`fZou_#nkoqqSXQOxZ_J+S~ZNT&?+A3Pz}2io`!tKZ({xE z@2PY&867*UJVp(3`_%Y8)$}r zxbQL;0?QNSnL<`PVUsOp-k{>F)QoYshj9>O%RlQw()eQ9r2SW|Jxl$`y3hnD;!g5h z3USc#thMO0>IYU;)=62Ti9Oa5s+2YBXh)=#K8i#wMcHC}l&Z+neij9tdPsaz4pR~i zXfjU^33ZCnKLHAT!q#SRd=y`gFhFc_u}oL<(lBRB!)QoPD`i?9SeED+Z!oW$u$Wde zO)ch%*KhyyoQ935)Ib91_1u4EF6r9VMXbY|NQO4n)ld)JgOQ=GYHmQlFh^iO%*Nyu zj0NcZ91qRA7*r%C<4C8(V{{J^gN66ZP4_qPu-M-l zFxo@l6a~dX5K%=GgFh%C5^@ZK0gC*LI3pEC`$H@mEbT70Aq)95x?epB6I+ z=$DCxy06JPsh@-wUWDTKVZ3&<)~3J0bo?6B(8|m4IgI{O6z#eO{L{Sb_74X$5#w>#JUCu$v0f^R zhs%3DOtlpK-Zge>7>ULSsC!RXX7^)tut8!4nwki$yz8;aJXkS+z=TpF2rF(UYmDdqW5LS4iI95%!uhVYI@gf+Z_$ z>dD0`ytdvnqAi``^qI0m?G>3-ls;_dSHrT@r0qM&|TPUf!K+(VcP7kwMM* zJYF8badTl+RaUMuP~Kq>X8Th79zkkS9Qyep#{r^`f#>?7kIUpcM8hr|d!GUCSBTH1 z-OO^K8$rfYztaHQ?@2LxqK6K5=|I;W)z1CiHA^<)>K@*>m!Y_M&5{WOI0{VdIw({| z6B9m$7QXJnZj?~Lqrs0E&x;d~J>yz@od;$Q>L7ZHl{MSbI)FKVYtcHk$Z%f!gb zDX@+hxs+obbIt{zQ(HVmIP`Ftn;7@f3@&pHw>^dhyJlk;^EQU@{kali*ooo~G2fBu z?Z-tWn3vl&p0;Eq-l%p3d>FKLiR2%1pAgA=rBAc<|}aUgCq#jDn$5E#vKY{H#+9ZEHPKaCNXvTh`~~F*u;4=0x{|Eg*IfUgl=5ptw1Nci^-%8Z=izoA@ojv@t8{WKx|Sp%tHt~{jNF5D#>!c!tHyQ_qF#z~Q9|m@MFEF(xo5y(!KeqPlErMW54M}sK9T?c+mZ^9 z1OS-oDnJqdVBMeqNdWM62ap5+*cVg`Nz8Lc+Id(7Az8Xje6w`|+6CJf!RhJ)HzjrD zQFP|Q=CxqQRVmJ=zdVfJs~D)<9%#5vBF8Hc2%XCNo$H*`!7(wy$rX;coD3VXbQg1r z7>!%qd7&CG5CkgcLL;%*{CVc%@exmbMq;kbbuG2+ZpnfXnjbi zzMP($Cv1Xq^BBk8gzCU=!}x9_OaooEaUW8x8$c!P;E!X!&WvMK$X%=Lla7&RqLWK& zren;Rsv9}lu}*t_KH>?RQ)1(A=`{HuwacWI#)Gob*(@rjR9Jr zbwCxNeD8);jLf+bmVlQXqkrq_wls{t#qDtVF7~N%!`p{Z6hA0-8r~V{T>OA$4&{k_ zEeP}RR|(`>1_z@fkUD;t5M18*6)8c_eGl33q?;rFz?h=|NdSOBMFElk;ARJqgy`H0 z-M3P^KLpO!rcv+{jNAM-x@!(6X)%HqBqc{@8dP&V;#zKWVN%MJSBegt8$Bo~Wy&jk zA4?BUN}2LX-_O!xlTxO<(py=&CMjjgE4_`S=Om>}d8Hp<>G?@1Q(ox@S$cU=%9L07 zA(md3lrrU&-p{R*>NCfP@r#l5t) zMqg!iuO#~@vxg?xuOZ73)^_fxF?<@vP9c$n!2EFNvUGDv3^Nocw#FO`qrqA1zmKiO zfFQ4>NFSc(xDW3WPSZP=o@C?*5P_yeu}$v-Zl^(j%U|xTMFub+QQEIahQRX-e{s!T zbpy^1hL7!vs3hV>C-ce-eVc>>lme{``@;t^wRU1^_! zK=WEZ<`NQ_^Zl6Hj{mw&{0laPkL&K!n6CUUY{x&_(+3yqx8skc_?da*x6sNu;$Ys$ z4E6+8OG7^d)9Eyprqse@8cR%n8q2&+W3^-%Sm@nh!n2c+o5sSPA@AviiH?Kt{enE zswUrP=)!^r_bmr|E(!AR@vac*B?rn?9>I*U@6je(hU?`Q^^AgTfqepW9D5u^oF>`t zHUQq$dl7-&&c>5EcN>Q$G44b(Ly#kLg2DCQMoPqKBdh4aj`#8PeXH$gKY1suc{pC< zF*j%4OVT}pa|GvaY?v`JZy>ni85cjTAa%qfUS&(^{L0vOkr$paht>(_YgNj6mI;E& zdoSdTy&LcD$j1%dg~Z0fpV9Lg7$V9;>si9@bkyUi_@h;m`n@Mh@)wd|+yDtnVs!QT zdTdzm3eTkfzQ(Hu%WM_odCHln!zj!9?E@6#x5j_+uQMU{IS27yVH5KSh{d$IXg-NV zZ+}oS_+UsOJ{EuQir@?YN1o0++$hMM>u>-#5Z{KHyV5-?2zl3eAbR5SB76*mAMSg{ z|AHi^Fa2sq;5DFct4sE^6wHNag@JVBPNB&;AxyfcC;i1|pYtA^OH8o}34T2BB` zo=v9X20X~N6zAS>M1EI>>pPN~|3WR+;c22j=JW#RwSvSs4)z*_x$<~c~Xz)5*Xzzd9C2al}DCwSDDEH<` ztimFJWq73Z6aF;G3oF&;Q}{()^eUh}n63b=&E*`=SSkAOa_Bu(>QrkH9U85IMp#D8 z!IGEkH24?s$k)ms_ge20Q>(pCz!X)LSyk#E@gqR$yQN@%3^8<}W<+Eo}c!=Y+)i`kwkD%9G=YEUqj`g0GAF~Nnfp}MTM zR{+Q7UID!tqhJj&n_n-=ykp-^Cj;R`bl1a^o&_`f{9J#2!5=rDjattjJN${w!NP^u zKYcOCKO^$jH;Z##I75KYyr9mahKym16WW$d0&ScKd522S5+7}{f;#NuJrHJk>RX3` z4JbB`FykYs`7(x+o_a}cd698}zA^+pIpL$03Y))7*iA;SVlFflwt5m<7Jz07~XPl!dXQf-l zacUwuEdPEDUR;I$hQHkHkp#At)^IrDwvu1~@EHgAEm7It+rVcoqK$AlC3cag>Mfm( z8E~xlE@CHFbv`3|jcn8Pz;8q{Mn$b#I5_b&?;MAk&w?bLhTtI%1zg%<9)7Ja=VC1S zxn)ZQ)QIQ?%!D~}s0~!483E1frR|~^8v}B`#OE`loKslRf;r5OaR-C;;w)`0{=y3o zCn{;rY*Pv2oZb(6iSTV;`vEG&_mC-u!+Y`DQ?KFy?R`k$W-1{ssak-33DA+B;0SQn z#wup;=@DQ%&eejg7wQ?{rEIR>i9K4+;b$0iVLR3FYx@{W?Tjf1b{Pnp#7h7=RLe-x zcCLVQ(g)@_8DQRqLslt{Re>{v6$Goo3uyxZtQHEM5!w;>(4i8Hj$%D+X&wMg{2=~Vk|ZBL1fbBKmpDw4khWO= zd&n5REr}hu_&|;^*ls>Vexvwc`JEQOoWBe^eUI~0FnTp=m3%c04IX9 zStYS7@rWpXmE+p&P$U7GvIE$JjzAj2bWD5$>W`1s0M8o};q9Dz5{fZ#`gn8Cb~@Oy zylx`8tHZ{jSk$(#>*&uor!YG!ZixCYtc!iNttwQ?#fL3Xp3^qO%{WjNha0Lz82@Y< z9}PlmFMhsJaVat3f!NW( z;^RU|ywx@Qn*?9aiY%ueoaff?^W5IF*l`BxD6uh&FQ&1sk@c4U5fhwckfO+3%Lzns z>xudX+{?Cu(!UuvqF_pPoloZc3BJQQCoafw_0j#2dErOQiR4M%rTDZB%=V zbbt8?dp+e4k*Zf=?**T^5CXaP6MHxt3)iAbjW44W8@D0VnoUV?maCBAINBnu__wzG z25tNF9%;Okp!+wN)x+Ya-rpZ`)VCU8C1*imuH$ph2g@DadQU z5+4^r-n^ZLwz|ws`4e}fgzpUDw~lA~q%iMrz5+b@1@W)a_ILQSM1ud$aq!i5MHlkl z#>c-QgYV5l@Z}}oL3bQ3p(c@e7uBv8VM}tb`u8SvZ_Xt?;~wUoYC)h92-GA-T3xmp z50^k6_iC*tn=z(0@Ye%?i_|nhho~WN&A?$Q7>)8_z|rO)J`0XO`|OpHmNu|Efyk4 zF+oPEroQM{VD~h^NqyAbvu^hQ@#!{y53tarzSurK1AB^+k2av=t2)`;E3CqrliQ)C`4Flne!|^8LLzfJYwY?0#}6O>)=vD}Hidt4C;ofe@wKms zbaRWthg|wSAXV^sedKLHwJAqbjw<*Y5v^6t?hcReC zzE3^7&+L)r^b`x=dIrLbuqbTsd`@e7s?g+LAym|(+EAsuX5>9HMaCHSD11ZTrT#4s z`d~aEm)f)!dG!s}xlm^G1c+=LfOKmI(TIONjc`GjuRMeiq59H<2`y^yNK%6nL<#q{ zcuW(b{BD*%itcFkr^Pg;J`Vqr7@jjI?uo)D0r*%nI?K%+6S01 z?}k-+uzYLojGXR>aelv_vkN}Qg@TF4Hp@|lH(?){_kg7i=Hy8`>)gVQ&!pg7VHf;j zY!xE&Hqf~7jPi#d-;Re?f=m~zgzFOtWa45O=L>dRr_RZ^J`ZqT_9WXwz6(cB6nKkM z0D(tbKQiBAM*wr`kNrZY&#vTM;2m@ig2vn-;RdmPcdEiY21x+l#kaRw^ZlMJ@G9TsF^f;L4VpLGS|@z>c`w;xnAT%vAz3_AxH^$_Z@TI`<<*r z9jh|h+NZVecW#2V+H$mfu7)u;c)Ql`erTh!pGjfkGCYKCQA-%O@g~F*$v{cd2_Kd((=X6{wCG zHfc}CL=J9Xk6f`>qE@vKc_GnovL&x1;-QvRmF^PXhd&8~9^9fk;&ezA)sz~2lXbx( zMP~4YBP=ekaTekx(VXr5YZ9J z4qzzb1Z8(brvUC3e~C)TeB&ZC`D2GA^NqJN++4`VuoK>E*Vi%Mc!#!adj6@EI5@c6^N+vFP)OPW(@%_?h{^9%!Rv ze!$E)^8=bRY_c$!A28$3517~aftIB61LocQz+;q|ADr1XKX_4dg3n}!RXZnGK(S5! z^+w>1Ie}npEc_ZxmYoK$;NPDH>?um{uct)kG=K;%bs8WdHWq%F)L{H+!2ht^p9Y}c zg~7iw4@hd&G1hx#?D=lN3&y2wfVP}rPST@QS%)I#rPax@I0I`WT z2D4oI#^kWcOl1BEY#rsv#Erq;SSvCxR*C1iu~r2A%?aXI%i;;g+PzSyW9`#uHuEXz zx-Ra#(;HXE(y-J%uI^19ZqJlY5;Q(UEf#2Pv}({*tM*q`P3J8fpB2Bk&qRD!FfN~s zj*pJ9H)O|Wh5!}J@tHYqd}hV{@!8SZ@p%)p)s~~>`1}FrujgJGe}XnGRuD#Kler-f z_Qe3m0)=bKhE1Bs;m9_C#Ub2?i7b^4k`ZQ0vK^pM!$yvOf>y(Li1+ay&1AMoqtY?%y{moPTc0|Z^S^g1 z&hO}%|K*P}ghb}k={S=a_XPhlo%na9_?dBOF|3u0OU#TjE?o@m@C8h^jC+lY8Gl@2 zUdJUZNyjDT-MHj2O2(y`J9Y>7C`9lc)HjSj-h&ogLK0na?kmY-aQdsYG)?X=$-iPd zzO_t}yq2?dpd|krlcLtalKd8v%hTi`Y4T-h^5v4mInHwHP$u1-+VRJrOFR=>G74|9 z)O=UwT+^=F9y6aIe8-!NZW+P_Ph@jTV-_{tk8GNvZhNg}FLo(Ahl7C`S%4jnwsnw*x zq0XdZ2LU+HT^%Ubhw$QE`JDq;QqtwjKj3_oo(*G|bekWcdO@X(8(hnka-|zzb^R7T z#|NyMUi_*V%Ny_6%Pp}P;1%|&%nT5itJ&!GQr@|!lf0J_|BC@fQL*z7LKB@->3wn1 zhvI(-PS|8$ivOkr;*lE*Q9^Kmx}umB=U3X{(ziAi@(H|3e7P_fXWFr`Q5bDHrR4TC zd!wE@OU+=ow&*?fZqhf5gAO;O0zP`Ly~y)zR0=5k(WC;8WPDOpLZD*G$)VkjGlz7& zk5q20jV>rb%NE^}SxCZI7i2MFENZ8Ns4gL&PH_G_Zl+Lt>?TS8wVFeP+6A;+5 z01JLBlz)tLFH{peh7TP4Wg057LzT?KpwO;bGGCE2`_|01VB*T8izZRT+zkSI0My(9 zNsKreO{Obnh8HiQ%#w(r%lCyRF`%Hb$vr(-&Dx6~ctDV%s^)A~&F0J}GVQZP@WBUk zoy;+pb1@xr#j44i?pDBW5?lS7?FLOJZZ{cuv^no$6FdoHz|!oo=1f$fAm?{51KI+0 zA+%sdSu>Z>YPxxHy6>(I%K5QWh*M&^Y&s>D`7H5o*7=6)BfUPIj)?Da59hsV1GoQk zF;LR^C3D{Vl3wV~FCDF&Uv7f7+H$mOW^Z#9qwCOPm*8nl{1X^tJ)^PKG2&VD04{^~ zZ3y-HPP`?Y1f68p&XUrhjrl|cGKZ>ST+@y}ZB8l#krA&LF$6EX~{wt#?);u}+ zPWk)9E@?}t4?_Mz*jhU}M_aEg?dU!S%9zifv3tUzjnGBq%@6{+>wQaheIOl&o{;e0 z1#>d?MD=v>677d(E;xG;#MfH)fmVaRTt8NjPA#Y&M| zhI>8-15^s5pTy`S&lN@vMeZ|6ZWVH$OLA+FyC;*oKa+ddB;r_z%*50O0}FkpG)8B9yd8><(l)6%G9evcBg zPvL01nO6_^1lNu0uj-n8rH<=-Hl9NxeUNP#nLmKUYd%=YYv9>CcnZ>|q=_E}PPXx7 zD_F|zKpAe){Uf+G+4|GtKdAsVzmmUE$TM|MjAA15zrgQxCg`p&?C(|+aJHJSl+A;% z!b_hlL)$=$wUCnrcJvhzy_eId&PTQiJEIq2lyR4QoCX2<5FUK#BY z6}n+B%$~{vxqPvbGk;-{_9|k=xZ-Ff?}fHOZJ>9-p_rgl^u5GM#TYEWy*gy` z`zz<{u?Wv#w0OmuvAq}F>vGg@(U-||ks_ZsJnK?X^191De6n!=?2R`czG$u^Ab8O= zj+I=%=u!Gbvoot{9^N6`L&HlF5)k&AD~k9m^A#z1KSmm-bF zktr9jxk4cJ78X1SXs(8iz7<@6p`IPIG>DRih%bXuQ3oWzKB3rQytTzgXkPcKO z9jJhPDX}pF*a5=Gn%y@K*7dU+`vEl6ZI)0C08YsD=MuEuO0S|F*nmG^pvoC69t3YU z8Rv$=Ts5A85yO5+jvL zZuUvr_u%h{eHoxC@iVLsatgvtMJj;%2RV(or-&to3^ZgpkdKOmqK3XBI40^#!_>T42cJ4$66ad43iwB;vu;e9<)B`7 ziCgrf=cP_}r)hEUYa0e5JPO?cww6n0^xIut$(~Yjc?V5SX+WzOx=M{Ij-9Yh^1)Wo?o=*d$q-`)I_rv(RiWYs;fDwqy=|G=VKynzbb%i7l0^&6Yxw zv8B>jTTV=qv8B>jTTV=qv8B>jTRNI?Y$+PjL&6IsskW4)+ES8Y%X`PMCHEU*&yPRf z>BnCXKgLZigSOYuMr;GD?s>KxBXRoN?PS0uhAP}WaMN6Jwwxph0>Tr|mJ=4+v*p_5 z1hNaNw(eO31aptC{v-OK&DJZ(DRu#%u_b~_JcRhrI-Uh#lRtJd5FunCT?0>0;(0cN z9PRsx=U12*X`OIhD{3*PtjshB;HE&EpAaMUEd-AX330w9S|p_7(k4EZ(yEVb25sVN zDXse2X3!=+m(r@wjYI3%XJy7d%x&5}#K_u*kj=A?&}QtTw3}leq0QJwX*b6{LYuLV z(r(f|+LxMiO9|QHKjNfn(95_HKP;Uo<9qCfwm;Ej&GclHq_63>kvq!O=7VMiof2Qo zxetAX1EcmL5g2KqoD1;!EMMuS^`V}^oPKO}bSdzqY6rHJkFc%w#^Gb&!35@vc z;DShuHkA3rg(6e?I_D`L*EqQ=$0eDkyur;=6o>Xzxy>^nP-Ib`bo`52EWmZUq7~C4 z#j(5c*rLVrODz)aJS}eun4_8p{h)V!IJy|~P`n``7d6OU)+jFVKPUbd3?H8@*5|w` zA1s9~{D+6PfVR$}*alV`<<_f3gXaY|OrM?-L!SAu+&=1i6_PgAv2K{$Gu{)^)=kHO zPb!>*0w0Cc*>K6Bs0Am=4dq%N#!oEI=5SywjI=bTrFkt4y5Kt0JtupKpCZrPxm)8# z6&*uX1i5w0^@LHeNw#qpDezesh>gsi*f*VLGpb^-NvUQ#X-vh!CoqAm0fRt+}&fc3-<(wSbr~BmQ&p_z3 zShTE}L#z;W!?rHAABi;$*K4fcSCJxs?XBcDO_j~p6WQCa@s(O)Aves2$D~?$uRxWs z3PWH2-M+X$MBFMVnpBPO(2SWQJKcEJHS!bB7f#VOr{dbD+&dJ*+c&O(cdtJiB^IBt zL*~knph`UJbFh4E`zTlM(jtVFgXx&Oc5-U`0ro$c;3skALj>XVj63+t-ft*|hjAqV zz&Q>e3Gm4|K5}E_hlM9zA;w;fa(Im+kOYvNV2JsILmG8Rl7Q|U|FKRAK21C5RYphh zo~$q6B}1v@?cPhOUnCo_`;z?T;|JuoFBd-~{7(#{d|$3FAAgQnBHk--)Mkg!R!Q2ap5+J3D|R0NBL=Bmn^4jaMF$(7L4Sv$@I0!#XnVeMZ{adl%)6F7BNd z)HYm+%wr9xt#7;B$#B$u`V?>2B++#~`&}46f-2%YP?=j=dvXjEKhaY25DLYXe8xt>S7idrndX<+<~yCD^KC6HOc{I?%lJsomdUm}?=J00-6 z&g$@$cAf3~S@0j}#Q$nL{#_pbM;(4z$FC9JuOsd9S&!!HoiyJVkLGTV=CMwiZ)RyC z`F@R^yYCKTC1;VC!C9mtV?<=0gjq)VBJ&h}2jdce2vi7XQ&C1(9P*)DWPXY?dhbK9 z8^<(t6r7$1v*hd&GxqG#3~c$gnAfvQTCxnmU|mu&4kJCggo#2DA)cmKMut7ei;+PR z04#6-Nni?Ai+|#f_jF~F0P;cykc2Pb=RzaoKa*ry!>iC0aJCMlNe!8?HN^R)nJwnE zhFT&uOiEl0Jx2C)mg|e3(>6`#Aa8PgQTs7{<@1X38)#>~?b==ZJCZxztbel{Uk0QX zMB0!%&%p7vfbH-?qZ>^d|B6)%>iAqz2K;LQ>seP^kI%#D7};wZsQ6>&CBfjUX)ri3 zj34!gX7}r>PQy1Q@Gu^c&=AGnAfhr)@NEA~NiGi(Fv%OSWy zE{Th5Qtw*|xUR#EpJ|$bOd#yQz);oT&568o+I9Q}cFHEfW>7Tm`?7?ZL~QLPq1 z@KXNhw-o-x%7((i^w3V4wkVgOv~fRX_y!gzqk;I%g?|F*v5-wngn+hhE>MI%Ax`JV zcHXczimbjb@XZBcYHO~6V$9*7)gb01nQtz1z)#akb-?X67koI5lz87Qb9?J zO#hn;gnHjxcwEA$U_nniRmz zDncUj43)z)EW!Vx`l8@pJlT3vihl_}6XIXmiGP`oPk+2e{cf>qUu-KxE#_1soLxoQ zd|%Y!IE`aO!M&*aoMUKD-kmL?T9iNLO8bW%UDaxF%-P1u9&iZroHb| zUShu=IeP=n_{{Pxyz>8X<*9w2kcy}IAGhV7lswL>Nc))|WV1hP!~TinAv+2N64_Bs zt`3U(X->P(u6O--x?!jWtrjQrJEyuwIrFqbn3qgO_>BwJ+y;y9iFh~sX`IAi7dEgv zoXm`WIGK4J{%!lEio+b$1m@TV!ze1?L2p8H@+L zjC0A{MB_NlW1%onof)e-3^%jIysEAxqIy!|ROf(T89CL(H_{kB?8WdfI2`)YKf_qB zp}^9S4~%Y*%l_3NC9v**kwxzaK;gO_F&GsL#wCnWvNVjYUdxX#jXZ$fwv>vx`NEg9 zP18Fnu61M2JSQ^oZR;OfvJ;(%X14Aj{z2Oxq`X)T|M(W9%f~Nn-3{guTy*x>E6s0U zi8&dpY)nx0WeIiOr_p|Oe@bIkI|}wAk!K`a4ySnu^Il%Ute2PJ!OKf{ z_VV&6A1^Oq*UPU>>y+vDV!LNu&%sC#8r%>W0;6_;U16t`_I?KmxXkH-$1;3BKQ3N zd%4hIuy1O-ht(l7hG?(*xpQ=mf8&(@!j-2T^OrJaaDbDp@+--rZjA3-vp;}-j>D7) zVcwlwg9szIlZ#N?$+Z9qb=(KrPAAcMv+0(NE054k%S-8ec`r;vb!sYSs|p$yFkX>BDADbw$u5hjMvh?%hHX;hR07>o_r zx(ptkh<8+5Q7{!{Zy91>$LF<#Axb@#$ffh%DA;e4e8=JH)btG(DM#8KV^G%i{i+uI zHnBW2S<9o9@qf^g#}WAbveuQBQ#)J34Uio^_t;a1S2QhGwVrVGt%o~ZSN0U$+X5rs zQ2t?nO&_Nt-Bi`;8GR2I*f>fBMR3$)DiSShh|X z8y7K0;d=lvk@d^BCKl6eEr^#Gg_f)?kw)6H>-|XgP zw6FTH&UNGCz|s8452b|QNNE~775@?CDfoZx#Q#e>zFi9ner7GG{3luq3VvoSsQBJm zFccsAs`|&vr2V)DQH6Dd`f@BA8~5`SQ5ND9KK{CMRT)}b?1{F|(7qv|Wg%Xe^Jq0L zJgRcpG)Y|G+SKknEKlLuXYHDT@JN<`P?aBmlWIlD(!Z*6e8Y!xk=YfOI_gIke@(k0 z`jOuDkIwe{YiE1>&2JBH?R<#SPu9-NsVZTUY4emUxt)*LIlEZ(Urq+<+P1cS6+C7W zYirflu5E?aZ!)~J+?VxRSI(hb3}t>N^-1&3wdH>=c@F&|;c2NylKrVGFf-wL zmxYNw%=qhF=2agp5q)I6%Y1gdONiA6d*{cIk~{B`0APg!Na9%cs4%pjjXjFR*kZo~ zt%wL5#aA#fjE6>9NEmNGK~6U!5t!Kr*l%#56Zblg0UO)jwI6D~#xXt=gz-h7RkL8b zh#3T<*W;&ZP8QEf`E8~AaO8M=ek^z~{PcNG^Vo^_v0!3;TXg7W_k3x#q`q6j4tBhl zsG>E;$l1-tJzPAT^5J;r?8btL^_u3`CGBAOt(u4*3nu0_tApRywH=P1h#w0k<~O~A z-#3)sD<bHCEybxwPG~rUoCpej!z$w3Ie1L;jas+? z8t-SsHDHzNvkPV#68IcXWY)ud@mn+}f|I$JIs9VkR37<$<}*C*zJ)14eG!gI;~&R| z#rXXuWkiijL0iTcjAOzxilrMS6%4ytcl>rTl#Txq=A@+}UZ{Q&o1@dIFkafyw{ge| zlcwOmJ9tg?c(t*4rh|>>G#PxprS(=R$(ezO--LH}xTQYcGrD7++Zqd-G!;5IX4YH5 z_L9wc*0CTp91M^54^X zuYok3U-n^uZp^}i%obs&GJj-Fit)-_5!`qJ+*_-uB6u*4^7-E5s$06p`p)cJo@3Pa zRUS!2)$6UQ_K`t93zG z8H6zSkUb$qE>@qO;>dT=hb~8?l0!uM0|^zJ79Yg~p8g-lUw*XqV<19F7%#F*zeA+t z@{W>REG6KI_3s3pkg@ zTe3eAhW^MO6`Zy0?#{M6e{dtTdkk^b9!A1zH|{VJ^yE0TC4M<>Cw)480OrtFeM<0& zN9hXm3D@Q0y{u1sX~L3+q+}EUTfUzZOCFg=@Ps7(Zz)V-#ZSam+UL(f|CEj_5kd9i z_^0y<*BiBvb*`XH=ce)f;A(b4$F`(Wx7i7;R0>8cG`5DZF_9*IWOmj_KwgYVcAk4C z3@dDCAHb4xQ!K!-RQz@4rpTsX7TJJ8d`vbnI_-k8_6yF5_kz0Zn(D@SstvTByP@bs z)pPfWdF|nNG4!cb7AUsH^LE*LcH%Ge@oC3x)c?;&?HC1!E%rT#_O`&$W7^gE9i}Qf zsU|q4i~{dKu;L}dgB}RpQKSzuemy3xg=EzxA(OTq!tYb6(`n$S<6Ey=Z4neU`PX)1 z@lDpl#+%boWc?uu5D{Hlu%op5ls9_WEfK~CvjdgHe3q<+@iq2s=!F=k^kbtx5WT5u zX5IQqAZz?Uq+lkqj;0y3e`{f~ZY8F_j%Hrhty;1S!-IZ*R(ML+%P{iR(P6r-=a<(J zgVY1}VtqIv)4>E&_94`Wkd~pi(~-)>^9aL{R4SA+w@WRZ?>{Z=5yc#5@upzBZHkMl zWz`_G2c8uMZMeBO?m%vn!ugzj@9n3Q1GTrK9K23whLON@l}Z&=kX<4CG_yho<2r>5 z>m02+n6sVE(PoUD!wTZtweq_#h@XbCVf-^ud3)4*F#fru_pwEh&135(%8i{2>&L$o zgryE4X8{AaZ)~OWue@AA2cypoN20+xMC^?g9~zl5Pp|#Kw+qjaJC~+l%Ea$_npym_ zn12qzTMKwx={`X?_FnkxEpZLddBcguzxFi#ZJWlL_cVU4U1J5%XJ3TQS8qb+gEvR# zKUh7(NDcX?HoZ0P>HX(+y%lgV+alj?wgaI;{P%W>zY1Vk(t3G|vMgyn2cazv+}!rN z(X&M#`p5XKB{6|#!!`a7M)5zPjt&0YyW`%Ul&K%0*FB#g@Vy5=rsEs%&}YOghRDH>xq4M?KY`LLDmh*$958&0FOhbiTWAO zJ1LGBtb=o2eY`JkInzGr{9zEb$t4Ukb+_&WkH|ZOfgL@aoNcL7!C_FRa_`0&r zH{KGQ`7ik#b#PnqaA0aI#>NM=VcB>KatRyTGrc9#+$(wwrzU*RAPE3Q9Y7KQG#o$@ z0IYKWNdR!J14sgZ^Bh1D0KC=#Bmuzr4j>5tUgrRkz#DGyEU1WsnCNJQp}g6h3Y#5d zf`xYET#f7UXYE{#$OdaNOxWgNRfj}R(d zxPsPxgs2|fP2rl1tIc|!SByIiAUSr&();-wYLT+@CG3@z!1$qS z=yn<3-3%G3l1vaZY*6T8Cv<-%P_10N#DTP?cr`5_@7tz`(?jE3vjw|JT^U1ngAMFl zg*Grd!?UKz!}Lk2Le1<#pVUmGx}Z0a3EPxB()mPO2M?T|)=0}T^kL=CwNe=iQt7bu z64s-Vay;e&@0ZdR%`vb}_K29l$EM>8@OFW$MdxAC*&>wZC&Iv^yU3?whIFsX&=J}} zx8A2?hIHp==m_ngd%aJ`4C$H~Izl_>F81k|>7*kRLCe1AczLo1o{NuV+v3&474nNO zfby69>tN!Yfl;deXj1IK_Bp1b33`dwL&ZE$3gNMBjZ#cM=| ze0-|>M)51<7i0N}Oi-!o9IYe(c#8u_0)V$VfFuBTn*&Hf+St=^H8_XyDfpYw@p?xj ziSzJ2&U?AZcTKX%hePsildt1_n(adj8oR>DTW=>D?YHT^>|(cfDE*mx`M*+orSDhW z1Yve^L7#*@gI}jO>nI>)lV~1_o@QSNGPqbukI%902LtaW(qj*PyQG>#!Lb?4Sf(J7Q0anMN+s*F?WVkN zHTWt99unY;`h(%rc%4;C?9TZ)bYQF|xkwh}xJRc}5QZ90bRYD$9{zri)`q`76;S-l z9@9He?_`gOnamy&TV35NY_c%fV`9eNV`5(Sn6xC_V`AQ&ji8@eM!Ls@ci>>dGCVie zdKVF+);q}w^>=Z6D{Y?}0G2A9&5+1k*d%H=%8yAId`khY{&GQfBXxlU=`>j44 zTtuRB!4hXrVS$~jF*{82lL2Mku#f;25g@un^1a}^$iY%#JxSzZ|FRkr2M$Rc<~FRw zbVEO$E*}|SIXnX!dSr&%q4&a%d&bH+(C@Sz@vVU}d>encId(~gKj*gGILqPlKYs%Lx%jen0kN%4n3d2`sf^SuZO)0cm9$Fme$gnnA38jj*0FIpB;&Lx z8LMfQ!^hu1b>R4m0mXHQ_=@5Zr1Uct<*?hUG>Y~`(a4W*`D3`TdNr-BQ|X|7Vqy`w zP4%EQ#sm5KG+Y2r&I5RZhwV{ungcFue+;&`6+XijuRw`@I75I=%3A~CBV}5E^rgYj zhcrFUeI^w*f<*Dvd<9rPPIN1S^;?r*9ZpVy_1}}Tlu_$_^lj}o>vlj$tu@|>NYHwJ z8+e+6Zv_~RN&in{`2iiV{P$}2G?u^5kL5al`-9*#DaiJn44je@IO7!lW1PB@aq2)n z?hq20gVMO8&n*Agh95Rr)%jDxxP@R-#*J~yuv)A4rTP7lKVGIoT%+y|nLDREHjg}7 zl_&7gtLKB6BmVaR_zBkZ~V}p&+krxrh@HdmEEhjkx)A@QTb0QsZ}% z#lgZNir7U*d8Gebjd(x-K;kky>Niz>+}pBh#PcOFo`z zz(cG7UZSjrho>IbvohkBQNX#Y&b^zru_7BeN5+W8&s%2R$vr2I1Toe#rC>U$U>nHgukLxX8y;&;UK z{f>F{J1t55PIy|s^B8&0)H3>f#Mg(J4t=zh!X^t7eVFm}VP5sol2jk&wL@hXdHVQc z#`2D~#oHiB%#gM{(6uc_I6eB`KJWS{MA|VT4A!H~Y|JBEZI9Op!X~qBA@B(}frTVf zdz0g=hOSIZEd@D(VM=ZT^0?%YlH1h;R$Ctf8`&L`1OOj*07;~C&O4>f%{x&n^;k+J zn8QPA8`2U#)$#8_mZtZ);mDCd+zX*QZJDaZ73JU5YAdJeuVGwv@)+r8qIo zpE$bmM0iSL?^0A6#0+aG+5yk>x&nTSgY)R5-S$M=Gmg;QW);Sc9$bSv8=C-%V-`Wi zK(W6V{~d{yVSG36(tIzF=Z=Gn&-i4JC6DorVr4uj#k+v4TmDwfr!WW&Sa(Pz%7u@q zKxS8j@u#6c2^Zy3$CayA4CLDtl^Y>bGG;+`7s$FnMr}!kRXD3$yXsl^KEJFauA4aO zEw!s|fmw#Cm3*aOrCI96!I-?r2Z_!>;{8N3dGSjfYx2QCFzH{~?TnYS@NuFpPupHh zbpIc3ZvrP*QMHZV+}qRLGd(lOou2e$gM^S7F6o&72}=?X!WMQEM4e&B1x3Ju>BNOg z4{_hX1zaG4NLW-r1VuqqKtbFU++bM>o^z`1)-wUW?|c9G!St=FQ|FvI zb?Vfqol;eyy3lw5f}%?y7#fduLLuhPiT1+}roH#~@VyVdZOu)HROijHvAcq<{F@Ho z7l_+jt>DF`>luk>+=)eIwx7-r@yx)1t$8vjb*UtLo1s8Lu0jWi=Aj;5+ezv?!22ky z>1bC{>}n3D#mb9;6k04JfH14hiI@*TaipEg2O>V~BIJYmT@pX?ZnD@u+IUE?&25tyYd}L3Pei1v*`#?oh+34 zgG~rkY-6yQ$Y9*m87pBY;-G&a+Tf#as$YxzJ|g`vNUeROWpdrn3=R( z7sncmgh}Vv8bW1}{1%=-{;0#t|fXTW#Y7zVvLalp~*SBA;)fkWc5!q&#UpN_x#e znvrxfrBOMcEGmaWzWK#`P@(3WAt~bOOYVf`tES>MqQ<4Sz_p-pR`_vUa^oKS%upnC&zy95uky99rX!sr-)FaCONpYgq5EVIve z3HLQJ4&4oZoUW@cZhhfTAVDZnFA!(-BK{=f%eZXkJt&Xf34#8a&}axO7w7qGpZ;-& zL;7@v{OI?VMS;!q&rHqt>5NJGbj?=ipCwPOPuD!QPoF(cu20uIwojiuPp(hbJho5I z=fQeAeYo$VoaUsgugsXhJVShCjAJO1($s&k*ndc6(j~T1+h9zoYQ5Dacb%7rTX17> z*%tuwEMoMB+N>FDII^VCrraE4wq4szWC6ywx(##_hNjpsfhxsQfI7?Z|Gxp_Cq^rJ4Bc1M4gP5B+sp|E7w_)u>o*r6_hC%ILQ=2%Hlic> zE06=&zzWd!2R0ww?@EN)x9s~UCht*w- z<|0$QJb>L+;-f4>&nT(lAEv45!7SHQ$%-DDoht79q~m}&KN}HQ6w=8ej)(xn7iSbm zI$yzL3*jq1UqH>ZEY8ZQv}W3$Mxp&i`vLyAfeu8Fm-}x!{$ljodYCbsJ%PFM`4dlhNa-6kpJpQ_?n;o5x@= z5?bj#s+jS~8Q%tVPzy|yfjO1fIKQFy?CBkKHm6u;w{_N;&R@jjQRMgr z%1Sxz1{q&c%;{qI+(63N1>1i;=FREg?q)BlVgR$;8K`fgS`Chj>O+;0p{ihm<8v6?k)|6v-0XiNtjL zq~mGr4;0N=fRqXXzmzlQi?v;i!DF0c{# z$NUik$$X8_%fWsw3(LR`U_YOQWgvll$XXL^cS$HAq1i2P4n zffW;EK=ZT2>H#FPD~RYbx*{2|#~t~OLcWpN@@bJt4_AshznLU-z=9G`Hs|X!C6%(INE^fav&9)L0jtiINuXguktNsuP9gBBgGV>u2?wpk{(xdn3( zk02Cn|!;;s|vr_G3&VN*CE6ExMyFEt?3s$hl8!> zkQ`gXU4(pa-}#F`?{Cz#$z9=?E|QzBFr6E10FSx3Kfe1A9nu+#x2w4t zU4X?|U9MT@VF`H447nR2v) z9~r(JMIaeV1|D`0=)WY3&hXD`r^wvYL@ za{vPo@kgd&M>#3?e2wH!G>l55uPL*W>X%|&&DxGYionvlc7J4&CaMY4)X;ra`_bu& zlt26Jsw#?9mS`Vb;&Q5{@@KjW2pviG8_AxyL|^RO?n!{o$S?5^aH{M~B<;5oK1grx zL3Cp$Gp2?Qp@C;Aa%D=!u$mQ|G2Qi)^_oIJLC6S;J*Svhg8TlMHd zt?y?6D&e8oOCV3jX%*CI442+QYd&SftnzlmttGZz^FMJ7toCW)tnR7 zMgf*G$>d>K)i7rBFm^)i2km@;7pA7Xh*?x#GW%c86uhju%q%)-XJ9Bs)u-8E6b~zR zb{NGo1I#M$Zu@vzh@=AcLcc-VkVJ?9b2INMBk~D9ow8?M&5*7@T;#DW${LaO0|<$o zS1X$0fKNsol$q8=S`Nj*6@M5k1w{?vwOTeN&T zhR;WKZ7xFZ*?_N!{~&Ev)`!S^FriFxeTWoG6UrvTWXVl;c^gh1SIuDxrCf4iW{QX> zT~pHas2S;v7wC;Ey=-3E#iUHxHLn+eY^F^6C2-odb=^vuw0^Pxb~TF}>uMHzY(>I8 z@svCcC-!V@cze`bQ9YjdWm>*siV!50_N}Wg;q<*a9I`Kiek{&eQGe2Xe|I`R_8}WR zbm?7)^5gFzb29K}zzzlB$u4d)tOI{d5%)exahpssh;-n8ubV#gr#|Th$e)k_@@X6( zqqD{UnJLjG6omtGjum$S-O(R=<8eVM z-Xa=D=D=V-Lr{<#@`k1>)xU^zlo0Ird*YU_~R#<^^=@ zlMNKKQ7e#dUM8PmJ`9cJF8{&aW_Q_aL6r3;2$q!5=@4*F6JrANLK1Pdvtr_$gDuFtLqe_5u>|JM7{DAC zx=p^J^D`_G{0HxlfR^h|mP?u9M}bbnh3zdtn<1RH#Et)@=%u1mxU=ZR{P6s#GtpT` zuaVeJJm1gZVF-Bey2fmHUN3k?X4>q#idO-=Nr>|Ku2S@NY78ro`oTF9wL8(}h>xF! z$FltBN_?8@vHm4xc>=f_if}564tzHj;cS0aq`R#MXMKVq+)XK5cKm&ot9Pz6e*)&@ z;rG)CKLg^PL<@39Qbgvy*g||#xkW6Qm6sn=>edQQY-s-^6I`*O{qs!lv4h$_%>Ffq6r=Jz|1}HU;I0DNoTSS@Ra@S_w&A=af+ zKPxO{ox)}%--(yil)_4-&5D;boWe?dXJIQ|3;1zGvn!h)lTY=w{h08W6=N|c#O1H4 z{P9M(1Tmo~iPI&_P+-du0kMop5o(}}NGVKAHml~16svD;1^^l_^)NH*O!@=3kD7X(`U9WL>bc%GJgD;h6;SGWKkq8Wtyg7(T_fezJMq!hwR&qaY?=KWs$=+eXcB&Qz}DyzB-i~O^=99XKy1k+emrYA@0HH_I~O?pO6+Q*Xjebw^y2KqN)JW~Plo05|HxOV@*Z^4XICH=xPQ7?A?0OPd};`RWBlKle=XcPe8 zbtC|G|G*=lWV59E2d+dFKL&kcR%GvbuybLxqCm&BX{qod2)B? z|F_7C>(1=cNW-M}?=#Vl`PcPnxxByc%==n!tatY_(U1Ap+o||~SN01?zG6<}2yn(L z*z8*F0&m$`Hy+n@Io$W0_g_Ba+L?~6hQY%^fr zP2|xSOC&KakNWC5E|1B9*n<&{c^R^O0DXVkUjLedVMt(nxm-qJ2BSZrc!CJ|ICpX@ zeiuQ0t(VZm;XcA1U=9Xv&lz~3?hd;$MIvhcU&;Pq})t7n#XEH#poz54JF0F&v#v$- zB`||g031%XGCw&7_JVEXB55Oj8!j5}u7WRC@>;QN4xeWT`&%d;SFPm2yqEm@F@+=d zJfa)LEI?BAj8_?|8aNmXSreF4Jsf6=!iZ$htUd?Qb}oZ=X`^vnTx?tfsh75+*R%@6 z3YH3U5!9$Qb<9OjWwaf2WNBndY3^Y8yhlTkx6Z51_dfWbY-#Xt(ESdWh4$k_j4O(~ z^5pqgkeAym+n!8>N#rg)E^>}U9)+nSxBd;&Bme%dP(de1PIW@>y|eny=zROl+hfV* z<{+=uHpb$JiikaCD5IAaFAI{wFeET}d)!yhHSERkaA|$mYKyJ~?JrWTvW6J_d$auo z#Fk_J)oJFiT#gCZ>IXha^;%QF&|59Hzf26(m_L#ub6?trSaq2sKdK_X`DjOUnbCK4 zME5ZIZi#NRF+fq{UY#yqlGnd#%*4L!d(?5gS}DS!caPVwww{GB9{~>05iOLthd9O7 zbMn+X#C!XS2N&19b7jW`WTbaMS+D$%EpT+7GNt-_cttc0K$CxpJ z`4d@F{buKt^dBs~;f1mZJY#U<2>EsGVNbwY8!2Uu=CNx3K$Ob2A5*TT2QgFR-tJ*o z?~3&Zi-?EGlpFIH;Gz&XWF9R$mU=lAo2wnEGl?&|i%X_0YaoPU`n~uO-w7V2Bh*#LhCzQ+VVEBl{k{j>(>Hgv%fpS~Bl5F&}aS!?7>`l5yNsy)p_zZcb?gpK_lz1S}nf+54 z-;U^AdV+-Ihn4o0QAW@^o@!=dd9;M5974qKWHU~)?u{QiNMxS9XU((JmOUZThR6O&4C+ z_oz*c4gm+|ljzK)D4geDOknP1|E{{AWy`|f*9m|Bj^IDl3IFLG!9UOm|6mbb+Ng4C zKGO;RP!T@M|7RUMy8XN>E9;gqc>1F#8`WD$HDBz6|56d& z%2M!uxfA{?MR;3R0{_)c_=k(|S^ST5!hdZ?@L%tQ|Hh8szu5`@tt>o!6trFX9|Nd5 zX(n&r0G1(@sHT{2Gn<>{Oxl_Hgeu$bbkh26mKMrw`$>iWuTJ>yrSLhut%I9HZyA_D zZyy%DWn!YY3}p3|VbxnrN%fXtr?(kIs<-I!M1ORxArhePQwmM26iaBk$OLHZ(RYzO>+SnmZ}Y*r)Y~gqZwz594qAS6 zAt}o9R6k7Rs`Gj)H1D9x`)lT9$mWgtop}$%Cc$NwH(2#OlpiTpXRn70Dc2+)tcYF$G$NOL z8Xtz3EsYN)%$D|TbY8Qi{b~nk|J*^^+=1C~?zDrnu^ps6Wd~^&lxC;*(vGxree;bu z8%+I&tn+;{4xi~=t$%U*X%=i~4^g44Z-w9j(J%Livuq03bTn2yTW7-CYd4T8eLrW^7$9 z@1l;pjPYasoguICxSO<%m}Rs&8Hk^cz0I_}jGy`zW+LQF9~R|srtd8fdh0phWOxfx zq9ZWzV)K^ePKroy;wl9C-di!Bj^pz7BYF#z-{S>LL8&w}-qkfU&dd0tDwOT@FrE>jw1y#=adWGDcA4Asx4$%QZs#ZN z6J_0%&2yK`s9-^@rx}O&ya5e%%XFyUa85^^JG2E9GEK<=mtHA>O z^5#|q14OkB7%CYIB2pV87<7j|a7cv+4*A+a$+~Q@@alq=3$HB9SSq#O$Dv%$q`u-L z#-3Jbu}c+&GIu~0dJ!?ke^w$dphSjnr>eV(n1V9rAeQ@~#_n}T>tr41Wx(Bp%vx`w zslntnmae(FBf_07znyL2g~-aeyJih@k4&HF#c8i|5!=^X*=^3lhs^H{n-74U>bMpv zEDf6vYFNtVb?cS-U)f&6rmSvzg)7GbI(NLEx9|D72FST3;rV=Ewzo;!#q3wJyy=CU zMlOJJ24fpqox5$W2q+iLIlz&;jbT40zJPUgc$f5*AcX5cgXo?7png^O=A}0(ZQqZG zU+zbXt`W%STKwR(@pI$?u^KtFcz6a_f zyOEfj-z<42p!};uZYm|e+-OAC0j37vMzoF4e$}2g7>ce(7>j{JDa??-^!eTPFoK2A zab(GR8|>pA8T_~b9EvkqEy=I$#asuBmTIqGt}4|&d@1gFsoPu%T}N&3N2YIZC))nN ztk~p6wBu7G^@?8(D>if0538kyW4tjWg;NM6RPPQIf5~C~5oDtL)qBF8(JW?2C9K(e zy?)pmB$%y8>H=YD_XS~Jj%QJ~q_FjVVC%Qo=JMO-n-|WNY`V9#9){uQkc|rGWf3;l z`QhA79t5w$6_jiq*?wuuD0j6{r(T7!ic4;rHBHfF_d_S~94m~`D%;$vV$%A$rG=Oi z&^g${PvuJYw#v{r+#-2vCW8gKjQ3l{?!|V_)W~rrNvf-c*_8^{2jBqXl0xuP5gmUH z_`!=Kc#{}UJD`)mU6bN~aMO!8A_Jbe06ao-&^?sOea(G+@re4GV*sVUK~V8KQcz)* zz?d(i6V%uA@GuGc@1KF*YSIf}6*!lPa`Q_ydcD6Ic8C4ffoyGP9LiJ=>!XLFB!g&}1M@{UsAG+=F&Yfj2gCkwKG+)y zheo@-u)jVZab7rBUl1-BtszS|UmaU?;V{Cq1uD9Q;llMLh_2NF=k;=H6Mrg=`l7Xe zQ;96vT3_ski>*YK$frnTr*NlmiLkb7xa(-w+D`*MEQgEDW}xtFZNqukIsIH3E~&3* zZh(nfF)%De7zuX{hsWzXhbzJ*t7`bWlU*@r)JMXR(f)9$AFk+%-UEq@*Oz+X3h=%{ zz)JPq!rjL1tcHuO3U{6emrm4|h0Dm&#CfOGcaaaN-TLxIJ! zMR9fycOUy%SP2)0%gu|)wihk}z@l)GN@r!ba{b??AAcN`YhFUhG}l6pyn$x)Qiet| z#T*-~uR{6F%b2i7^Yno|qKo(mXDQrMr5BFwIadOdUpUIUmKycF!o5cKgjERlG%?`A z(FA12*=_vVlOBjeWy?M_))b_7OJf`;ifwVWPe^+$UTmHB(;~t{dIph5LnTud1&P z$HMg!;eLGQ3sT>|Q9qzLA4vzineA%$sp0+;&k7HKKo1BHAQY7UDdAJbFn2+|Sb+7X zLibRHz4K*&fZI&H0)EAb?JRP=I0 zhewZFa>()uM2tNM0USBqxFHol(xCc=>c^<%ImWz_=#LGL9qsM*!((id>GQ&4!1OWU zF)&`G`f=fLV~?~hgL5$)w7&u;dbr&FDt{{Nhxt=&V<%u~xVw$5qNU-k_Sf-KKOTM7 z@hcC$m^Rn*TKID=ez)Tn=dk1-)sAVCvRRu_@mKp*Q@9snoFSy-EXV+R6{pT z^*pU8XHUcGo6cGNU2iQa7pj@m5yV~#YwP}wGPSM*?{(Z?A;?>=B{O|tFS&sK^g0C3 zJEi@7a*KYVd=-7b*OQB5$VERaJYu&p_6>|Zma%gM^j&#S?P$tZ=Rrfi8qS;gHqdA0 z8Qw~mOMz~93sWKt^O|tO=1xR6z(#r1DeNB3!e8!i4sT(KGBM!eIu6Q9N-|*c`qk)0 z;_#XmqMoQL!{W&MssYSp@wzHtA;}Z3vBaTfX?d>z>e1! zAUa&&8c0Ko#Ml?mKpHsIi_-GXTMV#7NfCq zxKn*u^8j$NY+x75$>MOA@%m!+GinT%hs#InA^OK<7L#^Vi@k6enjJf&ol*bjAII)? z#LS%#N_}a#^t|Xz5C!{ibZEFpr8``BRed-d4i_T}JHOCFzch@l?YxugOTytghKNc9 z9wR%y(FS^}aB-WXFMKR%bCBjW(d{#qLo|uyNDdmg5DcNSuZR^!54iq^u&rHn^nmLy zcMD13CHi-=cHa!HqT^9*(Nn2mE2~rA&FjDwsm?GZdK$rChU~xkXrn&ng-!ET*7T~i zv?7xgE5os^!!i;LN5`eG&AN?b z85t?RV<;&Y7z6|@K%gmRlXiH9ZGq8gldq+5mI2zw^^ypv}>%%?kkD^KM3s>RQ z#8s|q#b8h0VtI7V`i3uN%lGaG?lmQD;S)dm9Q^J>J9Q1D#JP;^5E15xrpxc9*scJT z2xHM^4T7U}!Qi~PPZgF08?9o(V)TcxB&-w$6_ry?u48kRM)TJ139I@tj;6i&3|JDn z-@xy_^mUVZfP>%M7v6nzBFSJoA4?d$1AqF;Hq<>a-V@-PHPUTSt6Oc}i74nH*ctnH z^ISBjuI5Qz5OxW+dO5)OUV5>zptVFFJIFHV%pW3#Q+t_OSid<0mkRZSLI#c&F3}vj zI(yTBPd9b!l^8GivW~e8iX`JDtT1&09xFlowOFvCdX*GUbnI~G*nZS8 zosJl*2C{RZ*(HZBdUPsb3{xK5jbLN3XPA>sa!>;kEppkqot6PkzG~!oYl&0&3d~U$ zbN7@N$)LEp9FD`|y|@7^dKl|H=O*(x**yzV9=zj?!$rskA}~XtS>yxjeGkIeV3WiY&a48 z_Y3?e;h&y^XOxBC9sI0A)%x*Xh|Js>hYd5lGmf#iGwvkjFIU$50NEfLy+gg2PgZ}Q zAm19~U$44J)Vc<})C*dVfLUA`$4Fcn_b#@O!liMj($z@i{ubUa2j4kpO9c5r0rg+w z((hvB>|xZWJ->cPa#Q+HF)6*sc0n=eH@#TdyI6KqLUVM9P0OC$Cv!bJBxxXQA6&=7 z%pzo;IiLG&w~m*#A+7)Dn<%mQ9hQ6r1NU1nCNTe{H zM}uMAqoFC%O0hj~PFrw_s%oRLh%$SNa{TO*<%fX|ezX<&F%uJh7|8O&u=1lRDL)Kr z)5#&4ji0>%p6p>^po1T6@P5q1gdYa7{4lKiXiCZt!^%$%k@5p;v@dgVU$=Z9Vm}ul zALwVE4X>AWD*8KGw!R_wD6P{&iFJCTpS3fGX%BU_9K0(7$d8@@%S#LxumZztI#NoS z0tmRkfS4(-rbr)MgFQiKgS%dC?66%26m8dkb=oeg+jICjdnK#ej0sG27F}Ko$s~2f zKu29QE~RArn2AYUF_5h*hPAFVC9NxlwXSlAGPn$S(pv=FUp3zghN>_=t&U^=k+qCmEf$o{W%9p znf3=gb2a)?DX`n)v5(mN_$f%t#pBsd^ab$&#rO>xe_%2G2*s0wuRuT|XZzSNeW^nc z$A5n78nDtn6nOmByZO11pYF7W-?|=sZu?-yVIv6~)HYef_sxtac`YCJv>dEF5jaX=VV>9-n3! z_aslf+`vNFT1*jDwqlyMf@##70T(m`FUN#0=KjS(ewc7#}AUVZ;04td&V zTJT;I%LD(|JDlbDpe@f&S)Np`VD@%0dp((b7MQJ7z${utSEXKRHl^S=)D$yYn{{Nr zqXj6zkS%r5Moo6M;Lfn(gB=5oa>ushNng81XcTX!X+~osdaH58rH`hzKYr%f1VWeH80Z z%Z_E_+fZaIMt7IRsNxE2+#rW5u$O!O7Is6DPtUX*&3t~m0kO$mxZ7caY zM#?XJtSw~p9Ehp59SlmDy+>tUNo{Avo7?a(o>e~C!5+)}5k`tVJ$M*;{z=%;IN+Dt zKSJvo@TKo={}|uZno6*|84BkQkCjFSn_bZj=qG%)9}Zi7=Rr6T2BjEIy2i`94h{sJ z<3!%ku7H42M!VzJ3(S6m#Z~Yt862u@U)bwm+Fe48+IH?eh;BvG#%V?tf^(Nx+VC(5 z-cSAa@xA+A?k+>0GV_j~kcZQOJ#b|K#n~4td$4SI-p#A67WKwS zQuvR=I5aNMgrQx%4ZkOXZtEjrr-L?bui(@$f6y7Ban1*U>GDTuu_5=KXa(rQYfxls zFfDNyu)<%{og>fmnou7BL_ZOjnYxQbqJ9b6d(^;>9 znyu0x-#`>|7nq*{N$Wt?XVXK2;hi+_S-g`3e)A6?3tp|s{hFhw{pY|$n7c8Ph9*oW z0b7Nd%}jLJ>zjPhCt z7+419?_#gW{rS2tGErk=_ImZM zZgV$y#YT!BqF<8l2u=j{oM5Le9vdK#Bz2ol0}dE1_>c17+_~$(nN$S-NgkXpb2)G( z6~TX;2dD4gz?o#hy>8#U7hHMWsLtlogUz^Tk}{NibCC5WhJEvEf_Tj}!RA-nbS(Xj zu0T4&<^fc_6%n=*!AI$;I}ge#Cl_KE(c{h#)i(LT^4TglX6G<)w^tV`d~L0$Iy zO61cZQp4LuP;YJ=gL>B{Pe|xUUq&3mz%efRV7u?h%Lud@HFA+_4u64$NlU;x87t5{ z>B};2hra$fudg@r4SVV6yUZ|DXT&1JyM1zYgxk%{{~(X-X(baL-vM^IZT^ZRDK0nR z()}~=-0>P6eR%W?-pLBf!B_yN6bV~6tXh28)6sDcH(IyA{tYiS@5PTdJo#RT#Jr#1c&S0thFse3GHDAmZIMgc zYcS2XP}3I7l(tCI7P_?a(|lX#nXkkns=I-87@mkP?AfbDc~1XXOy+!!d>~@nMaT!{ zUXG$~fHCX|ytI1*GzfRnj_`)rL-@UNy+3&e$VGIKVK;%{WQRdMARpSD{qZZdG`N(# zyi=BIF%{&LWdivgW}+S_ekRZ>u(^x4SE8$n2@?$3h-bQph_Eh}^mJbO6s=$8F?Rz+ zbT+C#(f`0>-+XEcLml`Sz@Px5vf@F#$413n{pfJwx8qH07-ldqPs887W|udpyCb#V z9RtqOh_iJMQ1y7Nj|;}KZ$5z!7_3j?2ObXIRI%ri9_7<8wqLJ!3zwyS%?RRgOd9&! zx;KZ++&3c<=g))-6$joXxgUUS3c%JQ7ZPlR2JKT2ul=an`{mj%FxuLCjXy(qcsj~! z<9!cEyfY=fcm^CVQcax(6t(6`|6z6u>G^O7v^sT$r1kseQ{XLn29RnmsWyT9oJG9B z=C5c!8J!G}(Rw*1U%vbmgAc#NW@LS{?b|g|!kJG~U`<)Z6I(-DH($z!BL*;YrJ-7L z#2+oQ`^LQjtZI41Snvlal`L-@_NhM*L=#|&{sl>pK6cT_zscXQF|bryP6Z#6e@cRs z$>hJ2;OPu@&3C|*%4C=X&qQ!#c4_%6L||$8*^GDdSv$BawrWe8m0ybo=lWRcX? zso+PYLA$#cFkO@d3eWBv&VC@6Arnf$6Q89dzJiulkqtJ?JGtO@MuJV-HvBXzmn>0J zhxvW7u!EhjrOcbTS-hQ0(7w#V!#g_pE%9xE0>7!K40CjnfDV&s`)xwbs|tHXR`ut^8YuQ{q_FA=zXf#^JU%$K2L3Ok3KhyK;kB} zLceUj2_t|hilK4rLF1Oc-s;$c=q;Y(`k@ABo-Jj_+(W+|y?(|9ECUQq_@PgVUWTs2 zb|ZMfi=nb~PSWYHZ{nCm+nuBanXU`<;Co98xC|{?C#soXgZ~JYR`to^rL~?BHt<-- zIK+s)*7>~-)7zIf?$>p?g*!+!fS z{K4b3{3*3Riyuk-oTh$WQ@^08Ut}tHpzLSNrCDQ`lp1E_%!qs$xifitKr!N(O z@sdd2%%|$flOC+9z+BCKAQQf(5Po+dd~G58oyte0?E&Lm_;lglUuND4Y62 zsy8L+ZPPYDy~?IbKcDER>Ye(JnqT_tBwg|AT(ZM2t)A}RMk_5GqSlU5egWM)Tv}?^hT-UO zuM%UiSLwyfR@|#p%!fX$XVa6&cdpPoCr=N9b<$%j=)Ghndc}M~?@8oSK3|xpXZd98 zj?0(k%a(6P`OcH_otvkJi7}Rsv7qu|`tR}c5No~+T|-Agl6Kxs1Gy(*k%zW|^T+4YR&am> zlT{h)U3)d+f=y>)hNGt(SD>A48| z2uZ$8PTaH%crSS`2cIt@@7N%+P0XvXqL_r8S|y%?Tqqg_e!Jsw4nL;caF7pUyg6;A zDJz<%VjiaGJk3?=+UCd9F9;FywF@=i2MXJIFKm)|gz(Ppt^+^j$@5dfgo0(TwAIZm zuw1_fo(o)^z~MLzl_?cVd0{Y$vQ!59)_wtCnxL|;wY~;RGptcZ8r-Ko3Fz zBRLVKJ?3qt$9l05k&^z;`Z ztPRXYd*VN!J+TAYzRWR9y81^su|+Pa{=Vj#9ceqOYAk3_ulOl-C91_TeF>Xq_Mq2W`&P)rnr5v(ZO&+}q8QA5y$>DA&;)uoJjM`UgUO8uN4Me+ zJ2AwEFhaCLvcUQ1jBWB8EUPwwn8Lv(D4HDH_@8YffSk>@eoYf7*t=1v2h=*k~wulQhKlM6fZz7~sk`tAu6 z{g{7UUe#yxgD6+bY7>#Ud3LO4GyX+sd`Z?ntbQ{diwbD-V0AwyW?j1-3kG2*w7Ph$ zePH%R9c$8fPe;P55&G13XYTM=IQR*A0cgl}fydr=?v zsa%XJznouVNNdH9`E7nIM*=7_>XaR8OReqcXo$}FGFSgHk!kc*NCP(wL3S8paFc**HI&2ENo$cyPxWiDlqU@@D1;YEm~$RN;U`j#B=}PaqFrXsirJR5 z#1Ydm6XzH*vJK2mE*(pknx$lRE>K@8VX@=KBY&)AeE@P%n~AFkA_>Wi1n-!^%%H|p zWsajyQFjk1YQ0ycV$WQDgNo&NzgTeVq-E>hlspZ?N<1-Xuo=xx>`(@QSyte37v)mz zb2`@&l;nc!=!XtjLMv1Mff++?p~d_qZxH2No$4&-O;$MwH;8OANk-{y z!D-K$WDsTc=jZroW%*$M{CrEg%7;+ndao`!JwIk*!Vd$MpY@o-Xfv$*Xo~QYq|AV5 zHhwk%Q6e7(I{4A<)Q_2%@WVisABL45O-cD-Soz5znvI{$08jW~po1Un`TdxQ2|o;E z`C(Z3(Ug=QhLxWjqS^R)F~Adk80g?f9S1*VV!{stS$-H+el#WJhhgO>hiEo_UIOrh z9|k)3Q6I;TnV9gyK$ahdl^;z>`C(Z3$stmHHfB!#{0rtlwt~ErxVXDSJ}%1aJ$M;$ zmD(2x%4vZ|x6;DN!Jc-^NI&M!VDz}8p-l(gSJ0;0V#8u)H#CbSov6hnR5u|Ny>yyV z5%Y-ARuY8=d`M6hZ2DT?hjT@Ly}R8F&o_iiK)|Z`Hqf^5Do7^kTa2n93Ld}t4%=iF ztFU1AG>-0saex-17x37E9`m=V<-imYZ=1r~h;-`LABVdE#6Ii0-PWHV7l}Vnn>-25 zrcQVzGMOXRT5RDZ7#B`aCXJq;^<8jQYvBY_Pqx%5qCU*Zt^H0>MkvlZF`B4%Wy%vG zkcg>X#we#81)#`*A@qwwvUR+21vgq$unq5f6h~NzDKXhIkGW13A?#|H@38WkFs~Y6 zzRNIRDN5P%Hs}rE_Dh@kHKu04ziz=PK~m-}xOqPEGXi%Ah#b(7*xAEwh!q>+)-Qrs z<)l$x*oTp9Fog$Y^zsqBRD+54AEM%0kAm&tEli0n0#V+JLgx+RtA@e)RZrxz$hfA9 zgmDwf=t7itu7SJVGY=I(mPJh6_eH^NehcfUrf$IFDfP-p5$72 zxjxU{-U4lKC#J#JLbgx*E|qpVITKJ2)g>`M-up#|{9d8*OW!_5b){>ox?dgRfBOF+ z5So4A2D#Hz7>y)b~#JImH*F9+Uo_0rdB0 zp^2q$Z)#ic1v2UH32FO#t|he@*8W~oHnNo_Db62aqq2x*^FP{Iei-QBM;o9YGcn7lVBcJZgR)%!6M6Mh)5{9vQp;x@y|kERGe zNy-d}X5;4)AWHaQphG@tYW$dq2|o;E<-@S@qbaF;7*>9Ah%)^6@)kXH*ID$(?rUGh zY}UXd_@;dD&H3P47+lo8Tz{_Mk9|`>AMe}z0<0ULlsX$yn|uz8rFt*gM{f4jOgFZ? z9C;gCUctYY{Q%Z_%PaBO`WY%{%dN>5raDV4%)It&xs6}Y!k#T3#Fsa8>91(!nNg<( z|B_hc1;wPs0@nj9DkhC4Njn#lj!lx5&MT%pJ55_wOxrxiQCqs9nD*u*Z5gKuipdux zXqS2L>x#*jXObbtV)FYk$*AID@+}$K)y`yW8?lq5%WxS)M{d+hk__I9$h(pw{mZ-! zoyogplDBjw-=EptnBL+9k6IQ-zoi!%;rcGsm+7@Z(oO@xdf~$bG5ypJdW6&?5Sp^SaG1 z@xjrId4yeny`TJ-x%z-32DYcb9VX&AgRKAp!4+mK4%9b2FzOgsWp%B<4cu1N{D+# zb=I^6QTXN;kU)CmdkB1pN5m=BZnFx*gf_E+E`OwcMmV*~5bX{Ld*17me&S1I>xuK6 z9~2)Zel;>l(&Pu2C4~BQ;k{DP5%S^LGev&m72meHbFnqxoMf;i5uhP@z`&1~e2;gMfrf_ydTC{yy#OYHu&j~IMeO$J= zz?{fDZp=k}&cZ*V6aJYyf`68S2OdXXby9gAcj+npi6TDhGmD9OdMErz0*?bh?}wOW z7Dzr2akGn%5777JA_-fbvrt;v2To1{_!b8&ALNyDyKfX-6d2*3b-c5--!~$IBoObp zh`&@|rCgh_hf5A$a=oE8c?kLjyO}8a62psmw$hJ@NbPMOd|!t2MFt+5z>;tki@W-i zL(pcT)uhzkj0!(0&y$^eth~vu$~&h2W%(_6G2%rILE@23^Ofz|C(*x!8CI^t18EThCf0)3I4)G8UC0@_4a?CKYFN7g1-~8 z{E1g<<;U;Yq$6-Ko!;3Xm}bt{k^BhpB=~!0mOpW`|M&RQy};Pd$9V&3zt2YrGM#Gc zChX4>rl%}KCQ%nL%?nuQtUZb{_|8G1l=OQsbw~%H$&t_zMo{#o% znf60(gSJg!LJRgaXfxWG%=0BD^KqZLwJ)1tUnGyN+0x9=2I~4A&IUP|1m+ZE z7sNXDUIiSwE|n-l@}cWsF9m8pIvammM`IEz$vXq?Q~y)k7d?60r~Rk6FP;T=$2uBk zG(=y{6v?XGu*KJVlhlddx)AT+w%@=ii21jm0?(CPoZ29gU?+37L~L~tgVSXmsLM7M20P z>UYB=O0XlAmaLtJ5VI?pxAp?+V0sl2g9>|{o;J=WAC$(ug zUf!LBWnc%e*JfcE0POEmzH@l7SvZwH1AxuQGza^>EGz>%fW<+J6fXlifW;w<6qbP< zz~X>L3d;asac*HonO&cSWnc%eH)LTM04$EEIJ~}`*SGdt#%~-JnqQ+ekKu+|9Z~Y8 z5;P_Zn&n1~5A$q@Z?2=Jb=3V$S$YhB-ecK1S^?csdhv|{%RvdQOu=O#zXHbAo55W4 zGvelWQ13v>!OOiEzGUv)Ur(h?#-nS1WfR8nI&Uz-3r}7TlH|GM{T1^-ZzcHLIm6Kg zv>89zAMic6$VT4OiVo&t2@?;=CCUq1(V;H!uw3FlfMFs!+$CTGa-On2aUms4lDptGmgS_*VpB4XV~`$M25 z8^QXP2(2&GFTS`<$TUPSc?>Js6`6b2-h>%QKc=FNE(!ejwfKVcoYqhQ;jkK?a5#o6eE<6HRC z!DhX{hO`8!=YH%2E}2__q0M3{b=kPA2qy$#q1dX&atWb-F|*ksOM_@O?a)n9r2U{( z@Nu;P2h0(mzH-&U7vv&K<%14ZL?exeh-GZ1h}r6Zn77Czh?%TUWNCJxp4C{cs?XQ7 zB-(P4Vog$@;#^wq$Y9%a-k6hfzKk`*Tbig_@aL&n*eODl@>H~3jo-za#G{ZG4B3iR z1-tYv)~?ni>Q8izXD6X_ZjR%K)W0{+LHA)@^d!As(}gY0F1mES9rF#~xq|I#ipvtd z`2#wP5n&1KY+rA39T-~R7?M$dGBiB211&SRQ1f(h7g9MdwN18$R^X9RZe?%*(<%V+jU-; zJumw;?)A&eWAJTSCpGDu*+-$H=DUR$H<=GeVWQLVGdeJJE5#%M^GC=E#(?`DP>|~h z);w6N2q$MHti4HU*3=$hw@fqwHH8_$RN$SGv5NWMkMfH=`raDQx4wZzv>u7(Ec*I0 z2o#l7v6wXfA;>TDeafr)k+|lCrSQ!iLUM&pEpPrg>Hz?#5nS)Y>E%s~@y!bEh_K^G z$jf`X$U}xXn{gkEUigJvbMfTom+8A4$2q1Z82OMCYG17%370ZZI8AcQ1d3AhvpVt%t4|UZ_jJg277V-?OGJs6C4IBI6W0? zlY#DZzv-N?Yq|vQMLLE7Y@oRePTZVc{BjksPqS3I8`yUPYCU+Xq=HAALOgU@*=jz9 zvcEgI7#4`wagY6|O7N%+CUiqiH8}~J4`Cn9T*8)zy}0G}Uad0o4-l%)Yt+N$UU+3N z+**g61_UQfGv5xBh?A)8NH~kX(5?`u@Z3{452!xtZGW04HERAzF=|o&C7-mLHkKM< z{>|8iD6$%+!Eg{YdsU%kA6@Ak47H~7fQ5I?{dzay|EJ-b|ENnV@Vl+3=krv{rSh=v z&RuRpAL+G#f2X$5v|V6Bj9M!Z(_I)qM3+F)zL^G}wI!F~l=Yn9hP!stfL;%LiOJ7{ z-EG4Qe7SU}7rx=+0N*yeaPq5?un4}C#w?!vHe;gyLPox=DH!Bb%`3d6%fueHP|6-m zET04v5pLGRJ~aH%HK$&dRm*rU>QTBT+6T@{T`6UeCBm`pDK4e=lyQ5TL}1MFYrwYx zqT7N3*#%7IJ$SafD>d&_m{-Scsv{8%Z(&Lnozw$u)m19jGeMK@huHN#9i3q)AxnPu zArTegr)#N!w-t4Y|C2MvU29p>LFR%)9ogNDiV^n-c4uVrdl2c&FwsMhvrg{^=`t_6 z8|5r8{M8<|uY28P;2gy4SW-IF<&zUjybJt@%-XwFrOKpY9AakhBQ9E`LzCSmKZcBo z%)Aj?%$D0XXCR~4Wid-tbT|^@HL-EgG82fG`5)jsjX1HZKgCUN6zk8vk)(u(^*ea# zkDe&rvFBckHW!+;`mGfX>`Ilkwa-CN?{f8oI_O#puiCjVaFdxmkTx^igM-^Jx#+xW zleoLpF1BQ9qo#$#b%rAGy-;ZBc2il_CeKPU4r&2#1)P=ATraR<)(E9uHYK(i*{;gd zb4xr-1Bu>A`4J!yi$limTTp_lrA&I`5$h97p`$4UwdV8fMRay)3T57H@?YR86FplE zD>~IGt{T-QPu@9^gCzRq*-~H96wuW1-$T}K(OoV&JD6+;;#8sC5Oe@HC^4)Xf;43# zs&G@1qMdaPk!}cbG<3U+A9GeQp}~Nq@f6ZvSZQdA&`460Mh;P)hVHxZW6nkDWjU+{BBwOU%7H%@3Vkfp`2 z($bWa7Q>EK0a=lj+lS`IoOe!WF_5Lju+q|$lorE|RsmU&mfO_k$DFrLXfa@EVGOvq z&9Kta6rq)*I9df{MOw=e8FJn`p~XO!7Q;$QQ&L(CJ6Z)~MOtX@w!S!Tp3q{z(kioD z3@a^75n4%#qg6mwq~$i}>AZGAi!H*g zedS2T`z6`CqI<`DY=ip)I&*Q&Z^k|TKjo+e?!4{=D@D3D3l}BoMysw!HhPi5J&uBW zAmZaLLOu}j2^S$Bi1?(7kPr3EIA5dtN@RV&kGQ#PTxYR3PRgWniNKHkoKHUv`O#=O zU%>T+WEyYHK8h-hSm8&+kVe!MSrS3dPgg&IleC-oT}Iq?UloRD86Ij)gh|u#tRn-L zPxoVOraUo+p>rU5W9x;C3vT4!Xb#4sX}*D^ED9sZDhlD}RHS1a1L9J`ob-MGb>CB7 zhAjpjE={KJTaJYj@vT?JA!N`<=_R$uZlXof1E&V6R~Ka`61^``qDl06bL!k}TC&fz-e z%(7>GdN3jsvdJl-XhZM?l8dBwc$LtxI`M~$NW3q{lVn;uS{Fu5mja8;8Phtu0cW#*NHn^Hw*5$t@;~!6=7wg(@q> zY4?KO=Wt>#K+tB$j}}@Mg+6g>d%KvaQnA7W_M%9PYx_2vn}^QkVdWR{=>E?g<0#0u%fjWQ$w zY+;wP{g@3en=Cm+g9l3lBs*WH^YPrzsPnn;rzjWBu;2#XQ%Q#}D_iUP*nKj92J;Q* z;b#CD=n5p--=`7EET_4d6aWsjA3&PIm)zo}(tUa=chVihELWa)jPk)uH<>w&%=p5e z3UCQgKbW9)w+6fr6Cb)SV~)&W>E0^IH@2vVe+-9rSq|)Kj7|puQDnC7E^j<9li7Hq zc{!uV+H#DZa79b6uvf(|B~TR^L61mK&%%K>YireFWG3;8oT@R)C=GdhH1ND@)t1rX z4B*Z=^A1rtEpMMnJ$gQ5!XmB%5SC3v)^q)sbv9O!wUH)P9%N0i0fV6K-X}Q&v9KRWJ-bhxLtA-ZXrQg7l(b8k~7TtDeM~<=+XkpGN~W4Oibm{ zsHO_*vbYEa1lGz#C)xqk<%Fbr54waETWA1rF;sz4R1T909xJ9?11)j`Am*@p0|3Nz z&mvPvv*48cI^4(s=VPeND)M8t5Nv0Wj;tXTg$Iw<-3S;6f*sm|RWLY*Lp3mC$CZqM zaA0&O!lZrKyakF=uMgCtbNLbS))@ktJ@6+JuWB|BMxVubTdPRUW7}}bM06MxNA{E? zke^pbmaPL)_Cwgl?NwE6Wx1}-nf$ZBHVajsAI=}$&-MUfjiL?U(yBZ+U06=6>{>@5 z%3QN*Z^=aaC< zLQOsoCndcd^O>t8TjCGBr{J?$Q!VK=h-NN*gjVSM#w6c$norJAk?Cwc`dQ1>hZB-p zK~mD`!zuIcQZ7=zQ2P^;^cM6(&jB9kKjC?D*OJp{Pj=boHsaX*QNlGx>G7J z+O<-vh-WC@-y z4~r>z=s#hu)4u(XFL^BqV!uu5MHq1`FeC;g@q}Ed=W=tm+yc9jV&EX^hL${sK&PG`M}*+=zf4H~MySg*Q41#ouv8o{$H<}2CB{kIh(gg>y}Phx9$l3J)Q8^?FfEbC;atAcpbl~tUk~Qe_IhgE2|GW zcw3*v@_pE)r?&0R6rV4?@{MXM*;drwtWAC`G3+W&^ATi9Z>nwL9w z#9HA<+tF-w-Qp1Pu~=3UvHs zY+$3g$mafeN+7OzQEN1nSw9g2<3xWH+EH~bd%wUXo90h&F1*qNV1boBV9ScS! zf?F0+5@}q9(ph4f8$nnvs*se2P!SxGs^g^^m&_Vd{j#_i)^$Kl zNpXpyb|TUlV@E?hI6tO#CNvnx(qLF=Xi7?hVP!UlC{IIOLDkcQ29?&*!0d?MW>{%x ziqJ?>ltvDb(!k=R6w&&WeoVDah%k^X2*bKArzvSc7@i4}QbE&bXtkSXQ-3(k{RnY! zBHe!2iS(NQxm}QzWzHQt>NX)u`+JOw<*#{w&BXaesUP_wM60Lh`bP0DHJ2nfd!c(f z1)It4?R4o!XrD@I<^qQmJY(#xJj(|nzV9OBV-*{Gbf0oZo5^`@Yn$E(9nHLH_kN77 zxOXj$YPGSMXBD}ONVgWpk`T!@?C-Me`S zznfd=I^A324csz@fuCz(uS3_0ON-|ta?nLa=y({33$(;8oe%opFl<#&2c%!cFX(r( zO3E>RKwtJSU@^zi2f`jCv}*W+VOX9SJkyN{1McXq;g08*bJto|v!@chLcg$Q&e<*6 z+nd#1Cn#F41z9jqGOwfhxNc1PF|JeGLik|wZ_yCsJyqDW6)@$O0oe2k&*qKz1`G7n z$`ZJUmlXu256Pw0^CPj`fT2gVt{pK!6dtnjV=% z6J>*XP?1H)<>P3mM>LP@pm%*W3$pSDke}s79RX)J{k6na( zNMB3e?E_jjWZ1STA8!wP-fd|-bOXA*0*yXfxVNChs2I#;F|Vmp5a^mDFo=NdblCBs|zlOA=0w_lBbDm`h$7-|`DebJ5f< z`LnaXMSe&8Xui}DpNiBk6!GT-$;&8aT%rrygZM$}=VH;%pp9$VsF+KvVlHut=}W!{ zYgb~-soNhw-rJdXC!2RC&AT)6N*fzpEI+0J&ZND`moz%eL_l7rwsuC|-fFpxVOq(n zS{1}luT&juV+2>KPM4R?#6vYEklKrCOh|QbDjI;j7=-N;j$$%ohEzJ>nY`1N6I(w; zVQRJZv?w=`uEgq7>~w8X-}Me{Hyv?Byi7sGizt1;uPMW)2THc1NGLKKxi+NqsZ zdx34i?ruQg|1j{+e@Q!UEhg3fhBW=DKjCltxANHpF4<+h5+Bp$i0mu@};JTCY*j?liv`3L_k+)VN4(Aivs}P6FOH)eydN4hu*WcCtJy2FkT~rwP*N8sO zmOn;(6+A)iIB>Le9r7cpC*)t++KFCJ;!BHsILfcK+>FC|1)_q*@M z4x09LjRx0Vz_zq5hH1GdWoLE2`?io!sM_R-DP&2O-NpNOE@L+^e^6@w8mt9f?cdGrbb7YV43S2wdCIgk2 zItkk$`-^)uX!b+BDznSM?D`{cFk$=L0dKnTIc&GF$B5iLQcdsv-^lhC?_{sFE5Nt> z0T^2=`1MD8sb6~w(A@)hwf2!V)YZmmzf!rs)LzTqQhS{QyV^LFNK3^FWcHMm^9x(L~V+!Dv632 zK{VcIpieKNOxxNg0h_e7QIzT9EYp5cCcpg@a$W8k3$PMgY9C1Q)8(}!gv-zLS-tw6 z-QI4+BP-C7oX`ZPKKrD9aAbd=h_jd$_w=jh_p#d#xhfgMzhW+QChN9N11GxN{YC8v5=FNdrM)4tS3g>moF{x7rxxm+l z)G?;6!k^yO-YDHL?sne;zuqt&d*4exXsk^`0-iN=w zSwq58RQI6U>;ZPY?wF8Cm1+aTg>1hiKDE(-_e0d>CuuvZczBRIBOOI(;8^e(^0p;l z_M$kdF&WCS{|ll{;?pAhDvdY4BkNlGHY0rA=tz9(kyV- z3nD}(R(R5WZ1g^eHs2N8Y(9b6m$-3gDjiQ!*T2X9`H9PF-<eLG3LxDnbZ=a3KazYZB2-L>l)PJG_)eJ<*7>hjqvHqQ~7 z=SZ99sm!ykGtUFe^E8|1D9v-U&2s|ttnbY8AoHAP^Bkjjjy#M(#!0Syha(JwFr1c0SH7qb9nXQQs8|^vRROGh~0GT#K zg3qV$Gr*_XKHu8_d|jmJ$AmBk0sz>E%-5Wn1hhyzBlk20Urt02MfF} z1K0n@+nWH$QB?oqo$i^Qot@py&hBP*bIvAVmu6=-5W=xUARCTw$tg!R;TDhp(qSh- zWSC_^?jwL8LIgw(6%SOr6_qdg^*~g_h77HO;Er8|3ap_ zU%h(u>eZ{NS5>d7zDnM_!jAB9kx0vdSaQ9yFuC8Dh^AZK2Y4{T!hP{lO*DXKNPh+wiYA&AAw>k zW3e6f>y!8@?~866BOHu2Qb=xqG5Dg!9L~uRD9hY)4u@P}ucM6I3QH6>%1OaWi7Ch{ zAHp2J9zUj3kR#4&a+Y87^L@#WqHBd9ZTi7}je2^l=&4sdjG|V_pb8yVE6iGnp*Nf? zFI4I@GsH?QF97%!ATI!9EI?iWXtDr#0U&Du@&Z7!1;~rYg}xOhKrU`2hrq-=yy)b3 zk1L^DzsEI>w*ti>3m2~`UQ5ID2;F*malB-Dlj8j)s=|@w68x0K2RrV^@+<^DmuD*Y zi9E&d3dF1$aCnw2tVEO}bOvSF3cldG1a-)ZwV)6+6rk=5-UL4(Op!M`PorT_eV^t8 zJ2=?Cf$=Lw?k{SxXI0yP?JAiq{_g>ejdr0V?Ud&nXw$b*BXh>&q{3XIg9lewisVOf z3D2#|IP3=3vA#4lS(>F5P=h>0_T4YR3ohcO%~K)!E1M%`{BzvkDP-dOb95Y+bKT$> ze9Oo&BO^z{udg{5RRh}??SgIUPm=9SL|BG)82X+G**yz_VwKE8>tZBWm%nbz!SADD z0C6!YUV~Ij;S~@$O$ui2p5;&a-;g|)4@IMZ7V|JXQo$d^rwYc^+eYckG84TZ}!8pYU*y=)V4P*>PQLzB4?6lnc23YWPr~JATu~)@*>_Qg|dn zI#b!;C_Z_z#Y`uoLlw;JzlGO#6>^RxttG-|gXw z6o12-?$I50_nW#`Zj^f&hD!22eq?R3tK(!D5?qB8>C47Z(ZR?qq8GwfP-}{NE%JKk z``4V2Ltb*ooyn%-<(n;oHM}4;uKsKXKiTo4YSTSFPM0B)?qFLsd=5#?l&eL^1$`p9 zY;v*Y?5i$C`3oz`p;_6n-$Wm+*|C@G2l<4n)%c=ldaoLa6E33gZCv^W%!@R2kG5pQxiObeH4oRspbKpd z$5mR`nve0PDZSF7p6GpOQA_kbuw*X%XQhOD7qvz2S#k7aj^Wj~M~2qE7hXWZHfm>2 zM^CVd8r?non2}(zV&qf#Zqaz!9kcSYuwDBhq4HKzDSw}`pP8STPt8`He&RCRP9OY? z8DPx{SK|j~gQyNB2+z*X7A+|(Zp+V(lOU^e@^g4j#7tmFY|+1xTbfQGstD)i=MH_y z8-wHV+WgGmc%)%9_Ck>wqpmnEO=E z$tva2Y7-vR#%1pi#f`%xZnuqFw8VFdA`8N-lPy~;>#2l@GZ~h?uq76v$;-edXM8&4 zHvWd%ruqan)n|fW-vmR#HF%}7W-1&LMTN`rKPilXZ;y?DpJGq>EMQEK*4U~9fC@bJ zwuR2xd5XY7!o2p>{rJnIy3Kw(?Tn+;zSX!NhkGVYP8qvvI~;#f2+syzpvlWD56++? z#~@B?a5l)o9fI~t=;I}P0d>S)tcKgKQel}nEoHrIK{IW8KB>kToIdkW3%n0w zM5)jKC*-5OalJ|bj8^$G@Bz$ETX-s%O9a;q5;Ss%uBZcGahgz&`tLc%fj=1!xRuSI z74D6|ZW-tATSLSRB1VGS!4hn3;&+GpnB*9&iI$fERAnd{WUeXgi!`248DtP^=>}Z{-0_v(kB*)BF#v)$vx1f6NO;h4 zMQ-0CUv7npp$;CnRqs4DwZY4XEefNd%7Vn(1w3eb0#_JB^n$+tw;9WtR5R5zze1I$ zieC5?s#BFeXsx%*AbC!~dR8lh}n7Qlu@;qs_~t;fKT1Bwd1n6GX; zzc2ZcoS^sc6v24eQI2dAYjOI5IY`f28O&v})*+AW=TMYi!`m~4jZ+#~!$(u)`48v8-q2Xmx6 zf?oVW%yzO|Jo!xpJ1}`yio}!O2*kqjq}&t)UNO7imlxv46u;5ijho8d9mjgdro`OFSeg1@;>QFe_r%vAW{aGuo8h999O_2%Zj@6zvR^` z938Q+q{S6Bi&^Va!=oq;cXhs?7sul{U0#4g@VRV&hKiw!J@1er){UQox{c0SRVe2c&cZ(|{MBEJP9U|PEd~|oLORlpVJQ#Z_R?;PdN&Q>`D>GKjCGBp7y@w~iG763B zo361=rnh4az4o^WH4FW2D*1wKw(NdZ-b}R$} z=Na6wmzK#h;aIn+HgQOIB4!!b8MA%t06o#0@dr?}7}}f{ciOD8%XlFP{-iF&KLx4c z6LS!!cQb=uuEEjJxeWaq130tO`#%;%L+2s15L1*l4Jjg|c(DdyN=?(&px!7!w)Jsr z4V}->KQlmnp0+3&x`3e)?H3IAN^R&ugcb_Qkm7F_;S2j*B~38dC;0Uo^fS&iz$}(} zpRJ9sJ%jFN&_Hn@K`0=66LCMoA54!Yli2~G#glsPBJ}RspaBM{n38OlNRN{~#Wlrw ziF5`DXZDL17mrB5he+nM-gl5V<_MCBFS1dzcD>UvKu3Ofe}7UT4yI{?am-3 zJ&CnpgcOe{o?YBAfxZXPMUUttnoMIULvAPeoqHe0BN6F!Q5wkzdlLFvV&2MF7bYU? z#h@D)^e}(wB(pa{iw73>s)sKle8=M9#lsV%MgT1Iew$>z%b!?I%bCb6fE9YbR~xbq zLquD;dT*``+E>VZ$pRDP_CpA?4*w;9`x7{?_r?bJE0_o;(2EO-3ldQdAY3FYt%o!) zG1CW<-~!2cO{{}#ER}GA-oXqJ?Tvq8dWSGn+OI~9*y}A-X}^+%hqbd*FODB}v{v^f z5JxiYc%di21Qbc-&EO;VyMJf)B6b zMQHJ&-hY5%QX;FONJ6cy0bb2ek=KvNiKH5nJf5MF)&xW4Ck{P)0n#kx$484)C7x^P^G3ApPDs?ITi9=6es3iF*#{I8a%BM!5cO#&tHFzU}ioH@- zdOuJb>omraUPEelo#0Pr#JBWb#W-x45*ayz5kE@USNJ1cP|WI^7%HsF&oi}g&qSye zRkFa=FtMFg;dV}>bQWm|V^Sh@MRm4KNl7K*ox_j`q+HW4znQ6=A*s~M;#>p)w@y<+ zlKC9S6pyKI=GHQZ?OSneFWf7W;yI7W?AiNq2A-E-YK-to@k}lLSYTzq3!2M~wUpK| z#(~=Q)^!W(5!CxNCNZP;^4eJEGuBM}w>FXZTZkXk9!)J~;R1$Aas7g{epXBHt+k<_ ztPQ;|3Kd0=iWO6?AQXa~sEuB7CVJ zb*1(WhTctDM-_(>v2G>&5x^5aagN@}(717Zo_KNSZ3r!%Ra{ly;M`95TGjo!{$V2t z3X_s=`H2a>3!$pt#<158=?>Ccp}loo4}T}=Ne?9fb)E8ELT`dx%TJuryBSY9&Mz@k z-r~@^8OqP%8;b`dGW;IEizC`|KEZf#lzSLOWG+TUo%HWzs1%E|E^Jg2aqqLq2`v86 z+}|I?6$0`Tr~BTTxXH%heGJ*ilvu0KFU67GkDy=-Bi(WtKYe3w$B21+4uIi0d^>$( zA0S|E0`Nrw<|P0>BA}Q6JWD`t0`M{c^AmtnKL867fOY~FCIIsY*e(GWAfPV+IFNw; z1mGwFwod@gBp^rt))ByQq|Mw_1aS0d0e29jA0UY#Mzz6{x>RG_?1aNd`0p}9Hv7H56O2F<3 zz^w#uAZIZiB!GiB3wWFWj@>NaSpqm>vw)Wg*fRlW3INzE0hmX?-U+}k0m~AAqX`&E z0M-()JOQ|lfPE5xdkEM!0r&&~`y~L66R>{*@H7D{5`dQoI3NM=cL3nP1YjNk96Z_F z?nVH|Oct<$01lHZU=;xz8Ck$u0yrSDfC~xWFvtQn5Wta-1>8me2R#;W9|1=u01p$u z(T&CUHUS*dSimL%IGC}3mk8i6#sV%lrC;_;N zfNBD88v)}9z;cs&8M5iMX90W=FO z;7kH&30lAf1kePufa?gL;b#GN6F^(f0zN>%9SOjr1l*Yb{E&dV5`awvygLE-4FPv2 z0522po&><(34nVNfLR3Gn*am^+?N3CLcskAzz6~FO#qH1;C%_eX#~7K0!%!BS2}Ke zfKNJZ$qUz{hG3R$;#!8c-oa@*Smm1I2FtME;fMT{C9I^=R&pJ0KH}E+Z864H{kC-d z!-i8QpB2_Ph+}K56+bo-U!PW2>uYM2=yA}R!z#1Gk&5T_GB*k10JMlvJ z5{NgKtfi!#pMv&JnIEjS!<~r7*W;86e-KB;kV;`=NH9+%=Cj!g4<-v9Zbw`L2Y~QQ zeqlj}agZRFq9l<1KLGRS#MQv18xTI}kh3~GLo$Ii-6P>t!9=nf#p90&=v|NM3Y&+o z)B?adQ}FyV&IFCN%7-Tl!EE=+)~v}p-G<@)Idqp79>TzZgW)EbsvH3Cx9;EoL6`ie zoa3!*O#+*jRUf1b;WidrC5Udi`XNBtc-HnVjywJ_d{jR|oC<%(x5EjG!6V=k(#A2# z;?t%<;hj7aiu*Lxm*^RhbA{AowU7&1T(8;}JjkCbVM-#roRQt~iSYXDb1P)3dNdtE zm3H+QeSe7XWAR?)oBF?SF!QrGEko}Lp;sZAZiP7o;^$Wmo(_CgA~J5K!lYCZlFLkm z=}9(G#{CX32rzPBjv8cK*XwHhsF)4O`xRIdHuRIR86Lh%kJ5r{(hf(`^5?o2QQY2j z+o9S87oli^Yq&LI7Johq@hdM$tnrm#QMPs*hnFq>DRiL4W$)THrnlt!YIk_C-&PB~|RS=Lp!(>x}t)z~oqEUW1V-Av%;`U;-K`BFD$ z**vM=K=65+LaD=s1fR38q;Axts%xUlk#1_rbR%+65>t}96)H}Z-fGcO&(w!V(o}w= zWW3;dNK6;Qt?$~is*5Z>!I4mILX1n^3pYriA5{YluWSUosuA$&M!;(t0k3TYysi=O zdI8omdV@eW)G*5SP|kLR!!6HteY@bCSc?NkRE3`b-LH+14x|l}HYqJQ=F+1yDOVqf-Ym@ArHPK9B}UqE(K$A} z>KB{mba1M)l+YvAyL0dq9ukLCEbfTTY;hcM@_-izT0OV4AI>kP18N;dzTv3D;jt8Y zd-&|BS%jp~>_!c7aGGI={2Xfe`M;6LEe(tI9Rh_*Xi_s%;jN9q?-cMgHP~(O`3`4#y=ZgJ{^-;5`=zWX`&V1a`-v)KGh z83#vLA7dBDHlH>R;q6F+U4*nHtML4FoJVdA*w^uz?tLBIhOklGZ^kwja@FrO-9RAB z3FbM#Ne!?^A{etDU{5{zUD*@haSKsvcIe|$w>$^kg|?G*$1w+Elx#^HKiQ7YjPPo8 z0h<*p8u-?}?KfI}AGUql82dJU)#y=plN9?T?YdFGwmpTM=xZ9cjNu(NMcknLQ4$T` z%K5&5=<`DPG;%ChzQs<}fegA4iytqdF&jhQPa5PB3`<6Zlc1B(Lw|V`%5}Xj!#swnthg zfSv?%`!yObpy)R0iy1$$8~T|kVp!%6|4o3R?bAv4u7@jhPp6!cq#`Uou!-6w*F*dMw}B)Cl? z!#1kr0pqYJq=pL!FZ`5H-nezjso-5g8WOH24X=0&LtE}UtEM^5^DOtabh<4)Dm#{1 zqw*YC-3};A3?Z<3+G5LyL9W-9UWtmqq_B5tCD2kTzogN`Z3}%i7!hpP#IcV=Bi!J6 zO9O*W(rG{jyZwWRj38M`&_ks(aqNhtM9x5}0UdFm?pNM5F-r&04V^P0I>>uNBJ{Uj zXow{8bcUhu%vwWXKy{Wj14@D>19VotT>bL&%agC*PARsjboSE;B}`BZ-Yu~v>Fj5w zKz~nT^v?=9ZIhIPnHA@E(nha$G5FMuDmS))wR#2oQcbO1zZii-?Yg~gJ=z~)!bu&v zvIM3)8@Y?=FzC+%{D|AZ}5 zQ;oj>YJ#@N^}2%hQV@|nwmV6!?2qH4`zq)DKzSwltNB(W1A_K zou#q!wC7NMGdx4s!R-#5YoY)=Jv7Mke)FF<2f=IOZ*%4u6Lj%Ia_q zypYJxYKidv^g1Gf(U{0rkslKIc`Xs1q?7;_!To-d8~} z_zJ!{+JgyFY^n(MxJX;wPl+EQB0 z;I?1^gK<`duxpPymIEi!`L@>5uEd%iY#>&1e)_BkgEwIL`RO=|uOr_g`Qk2W-f!iW zO8GSAMsXS_cb#Z4Y$ZU0596ydQPx81F*=s2| zO{AH2egK+(5Zx0*w>TL73R!LTXUI(UV(g`6tX83r?MQ`h6X~F{L$lH858sOT+2BF4 z><_b(aH9ij2Jh?+F9UWi!+CgVgL2C32vWEZ2h=p-Y?snb`KCN(zndK#+`^6aEcdCYH9|MN}Q<^FZI_5hkea{!I<0;&1h=BAtz!Pe;_x45W+%fT58 z)1|YoKVSFdPe6>^@N!RI&)5cepBbay(>H7EX##_%z{!nd9Gh`1NhokTd`|+NLEv@7l*G{c>3LMU zIlafquors53^~ppV?7yXN^#paP3{A@gEH1JAv+^!ezt|f9%NfMY}>bm!%if|@toI# z-#?LGS1M$Cf-g7xEs)1o+ezLU z@x=BO9+Gst@WlqnifzPtG6`Re5N}oEXwu(t-tNyL<0QX-el5IgZp@3y;4hPC{^hmM z{KM90{&f<~zrGflFEyr_cD9RT=7nt2y^zM57t&VqLRxCUm+@oD){}jFFW2*+WrCv` zS(KQvpj7NvI%IzA7sh#H1tx`9f1)?i>Ts;i4O*`VZLuHA8>p~qJ)%!Vqp`q84}Sxo z3dCJUTM9Tv$<-s8ZbU%8TA6Vli^0{xIF?$V9jPsarut~is&=}vVws2}=BnS}Zz*JJ zBgJ$nxz0>SMr?-QztPHt!i_JSbvB_Dmww81-h@2jj!&*Rr$LQ(ozT=~A9tjh%?W#V zaH(e0mqNiVQ8A%?DIDw)6+_yWLc%UlF}8gvL_Mp>^o>l+app*UR6#w8-bo4+tKy$U ziOH(Cya4by3y_yHq7wzZ;OodFx353O=fH)NL(2Cf#00aB7m%*lnGNqC*SX@Y<3yVU z!PqY?WAXyPuPi`bkQVI#`c%WtMEfn)3=8J$=JHKYjlQvm&^h>Mm?oC54Brk2{4Bp> zKu!$$zQr1eu%02vMtRXj85y;pzeQ0ZQ1dRDmb2V|U_G-yC>OS^|4<#k5XGDq^8`4R z^J4fC+zj@Tt_LQr=b)2!{>iu)F?|o1j)%$fTYwEETI5LX_LDONVXI@SxdK)P-z6&6 z@&K{#JCFYw0z~xi9f;1;_M<>tGAMy#%y@V!f;AEvSn@v`JZupj%$YT08EaR;JAqku zTFs*1`v{z1Qgp)jjV&{I0UgrA5`Y7Xn{}c^PSBq00>swl|CcWn1;8$Re6Qa z$WM`uAM!V>=gyc^!e0;KYCSakNep32l7hDD5kC;rb5>CD63Yn|8`Ex! zb!^s5<5tg!wUu2QLWXfvQcjF2a*|eY3OS`5&LgBWo($a&5b2H)Zz+Q`+ zX$l_HNqCaPNCPT+kV!Fo7YJj7RP0CvcknfxX~GrGcj6U~yYNu{5d3a@4E+da`l1tf z7Caa;l#?ZDFYfOQo~P&avQJ|F=*RpCPZ-$>PdV4mC{J3qQGOqm_iXNzTLL@`$7TSjrV zW=p=+RnZ3Xfa161lpHrGC70I(abh0<$ME-H&It&&nr2P zr`3LMUbeE`jXz{cJP|k=6-LiUYL(#~=k}z~$8>qFHyQzZMpmtCEu9!;FA5;G%ulCq zmCW8IyeX#Uj3As-&+|yn-epS*;b&4QiE*M`Vb; zrH2R7!!|%GFBBDf!Oumr$Bn ze>9(7-RWmD^2}tLhDKZHv__=67~gxBkJ^gC&Y0C(vmm~Dw8+|s;T}6C{Y>KgT;utfOhcM99U<{nwjjlqJ>eRSBt^NVcwq0l)xU@dN3vS_zIxG-bFh*k@m4L>K*INw+cw#@p zwPXHG!k5JYbGDyejfb=SHiHQ{K@ac0=R1G!PUcKHm6!O=AIpoRvm4S7n_SnjbpmcS zm64OqW>gj*&{x7;e@rY~Zq~VZwj}K({lh6bX$CZ2ht0L*q{CvvD)$02OGN#kC`MU$NyyPzfwn*K>n=?o#`QfaXL@_zWf(09v6lJ^W0 zxCJlv)bQDu*N3I&v@;Ez_vesSW=Ty{9O`l?qpF8RCgf?8EjXbJuvV|&$@H@xQf&{? zE#C)DJJZMyZ~i$9h%&8+arAjO<(3nRomotxdVwqoQ=h2q=*7E&GK722JAUq@} zvzAwEYK2(>)5I8zSZaD7FgO=KJwJU9oN0rDqB@c4cBya$7#Ny^dy2?UyYd5O+6^-W z9;M9{g?Tu5y?`|YjyT5u0j(=!H0}3G+T{oE=*$CY`~*A6cf3sUoykeQ4_(Y%g&#pszPl+rTnIT>PMKk#;XweEKZ@}1WB3tPD8Hp^c=uQ<)=Zkf z99A)LWk5b3J_MX@s0)`aK&23VoH0LvpU#=3{Xn>>{AZ>yvxE-Q6B%VpvN)(b&KegT zrsroB!a*i~FQZ_w0?}}C^}sYVG_G^1GyaTRm4f%nr`@&CZH1svZ_~~VD7!rMH{E@7 zTS^i+(i{I1o4rqhlV+?T%~dtkb*1i=i(5T+R`@9dqU%R#qE=-Jt-}X`kk#mv=(TDz zZpzBxbmdo&>*6?a3j<@1OPG45du7fmj%32$B8c`6Rx4;s(4JoIc*P6y>7JDu2-|ta zqB)){S7qYms&w$_h>K1d&gA0}(k?YA&zqwvl z`E1WhWegS{>s|-gBTx>Xw%p07ZS1qruHYsX+qURrnQd2On?y4X7Ka9*1hRf%W9u-S z9(NJSwR#c^tI7jCC`QmTJq4Pot*f+ojI6%9@y2Z#WD?ao&3MZH)5E zUqaf!?Z{x5LX%K_6$Vph-XA};RyJ>rWzLXbBPGICZ!eV38*6dTCGI04M}`E@%~Eg& zBVegkx?eOJyCXjkUp}(u_J%a2zmW+H-pHyZ=fhnDw4 zhQ#gztTwDG=l~OOm?w9ObVm9q-6mAgcADj5fDZpgPx?$dcHz9o*Fn3B@yhp*B792z z3)#;NLld!1_9)(AJcVDzvp6D)+O1MCIYerWOiIjn9AdF9z?x!TtJY#)V`lSyRx2dt zJ-z}`cKLD!Y#Pd@Dg19h!v{HaQ<@8(0r_^zJVUw=uqnkc-S^=^o}?8&g{^pU`OY_! z+d6kL-FfdP?OL1bprdwX)XD}?t!&iaGEAc|d`VFZ8rm#1_Dq4|DPd%%b}}ALp_XPs z-fnpm=#i0P1a9YXbnR4njalJWk#iVaP4bCVYB>D^64_?`NT<6toyoknfOj>+WX-gQ zIG7Z~{9N#LQiu0uFpJWg;=J`-r^@OIn5r_NCi<#^SF;~Sry~i@O;HcKLBEGQnGIZ+ zaW#9jRFS!^Hy=2VJ8&-Im_RpxHM!wp@PVCQGFlLE_H$m7D70OtIbDc1vz9hDd>MH( z4Cf9o6Ye?8yVjpF&kx7Wrf6K!=gE*n3z2R5%sO1m4$cKF;U-zPI_vQg7!B!ojpAQx<8tLuszk?n7BLbBRE9@1^h}`}SmZBWGAMp_x@CG_xueW1~8WLw`v%u9IjP zOxa^*g$d!oWNPtJ&N0B7r+k^cFsQn@vA$hxc2%!iJ3OJ{t-^qb8wm*@J#Up|89Ndp zjWL&0f;M&HKTRXG%``k&*TVcO>R8kg7lNH?WwI;y=_QUA4&$0fJ0QF`&Z`E5N5KLJ zZ^oE3B_y;aYg@YxEbe!CQtw8Y@I-5M19^=3;%jU1iP8#qS`ea$STF3(2a5k(-Uh_0k4|C>JuhIn%vIR@a_ojg2MBji5A#KO`=*rkXh=q)08XC zXp&nfV5hm!sBP$n85-_f=xEA-%w}{nepmHuYEW0BZKCAPPDgr4!)gy%SC)vSo9>wYq=f+y_$gV8?ZrSJRt)l z8B7#`Q6WiBq=g%}Hi`iz3_7J_G5FZ9M$S*}Y=@U5@||zb=PhzRuh{p%2*>CF-K6D$U4u=DRl1?=gG~3_AHPkbK;MyZfEtA0;x*iqsXnk7A{Vq=_Ro+y2qT-6J!M@u3CNN~*kmS5HVq;SA8IvBAQOsmuxF=@W z0uHY)h#Sz?p%p*`RMB2*VXv z=tnqo{n;y-3#sL>9on=b(A`5=ZmZ9yj%*xGVzb3CyNu|E@CrV~?L}TrOf)TjM~D~P z1=XV2E&T-d#+iPCq4WZkj^a~sw8&X>+&GI?iHUHCC?dxGdPmUGaY*HFz)-uO;EsJ0 zhJjmQq~JTqdX<5$pr}Pao3RCPuNN5!qUrxUXAR)nv7htScVV6YGJ`0D(>1<%+UXid zlCDO3VkTyx;$$}}PIjZXlFFQ~c-)#Z7?h5#&J8`@ZH7A{7v=@c72JyoXh9_DAXlY{U;@W3!aIf_7IKr zex`@}p8+)rO*}8e8j?<0BZv91??9Tk$OwY0wWB@hkGBVn@;X%VWpUW}jPqD>8tQ);c~?)${pCS1-VW z^~)1owmdVDMm&St;h5XFEWGM893p@s!7dUli9@f-1u8-|6A@O5zxIJdhBeDKdM z*}+`kP#Z%|%>VjT50S6|Lmm=fM&jJhQz-Lvk*Z6S3V+RJPAFxHuv9gThv=r(O;iNx zCId~~tbr3-;AsDZUU&`Y%i59R?V|CSl!@;;+k^M*V!F5_8KE-xQLbg5QTbJ5TB3+P zbs&z834&7*;K`)828%AlV+IXRg+qz>$uWfuU$l+z9k&r44~|$S%UK}!Gww3c{-Z-V zU8h3@zIsEM@y{T)rIzH01YsZQg?il#;L7qBC_+wUv;q@*Sf}%ms1NF1?PbidL5PJnGV*=6Z)<`LzGE#ych)PLx=p68!W_`v|?Uf*i&YD-NfV>Kjze^6( z%&0h*EH&JRx~30MWpUpfJkNiXEDI01_aQg=Bn({$Gtp}Vj})w*Kh(_L>J zfx#t+7WH#FC$4sn7c$5+A(D@aK@aZGXzzq^o;CGl6l$|S`&55a8Md&M7RUmc1Y|ZQ z0hyagKxQfdR7-??+vmYcNp<1fz_GL3xv|;1#WPEHAq1)+$*FixH%f3iN}gh8SyRL+ zM3e||Rlcj}&?5?FzBPuy9L4^{3@-H3deekAtvOk|Y2Cr`SF5dFr17ftC-37mp&K-g z_52W=07iC8GVLw$?n9W`#~6cBX>hAh0mW#qBx*(#N)(^OiS1TTbj{kW)Q1A-4T{Xl zRVD?cxfoAKnBEDmwMJgcC}>|j-1TniBid>TbCnS$>LVa5c|s^rR7c2CaM~iI79-wO z1SwW)TZD#EV8QT?H);lICBuYh8^RP{3*+CcnvhqLe9>k1syF1`>i z0*MdmuB^ zqS-FT#m(Ul!1CBJ=xJrVog021Fq1)RY|xzOVm3DZ*t`|*mXZtF*q+xxaZwu^{yHcw zY-5vO2c4yzLmd=c(r&1Q$|Y}V=&-!s0FGgw%NbZaXT|hRSjFNARCRq1po$~iPlQv` z2g!L}+Iy4!9iYFX^eY?Iz~*4?VRA6OH92TqkOCS;>ESvtyGFKkXYp~E_{`pL8^y|` zo1-tXhpV(T%+IcZm(Qw|^uGN%0-{J*#778vPkQ}6#*kU( zWy1eKqS!-|=~kSOw{oxP84Z2}IHvzD;q>4C;yrjbh8My82(4a*_=yrg9C!M>{ba8ZjgJjG4Kt0W+vy<2NH>f|;vg zW*Ab#3{O6ZnQ1l5FrAng?0>M#z!kVDQ(@_?&YEXFWna?frThmhvL++_9iD@*Y`6*UC=s}EaU;vZZ#~Yx-!0p1 z7!bKtbmQ&(`^K_e`T>!h6A`2fkoZ1Pj6|g7iHm8v2X5S>mTDB^KcLEm&vZAadIjvk zgG(+7=UQacu0M#2>P}AiVo0Q~sY+GsGbN7GnyGnx`E->ra(*WKDY6am7czaKlo8@e z!Q{#UWFvlQ|BC}oHs!K|nXK_G_HiNyy19Ynm~=z)Abt{yAj{?Wm%}&zIBs2v=MuIZ z*MlRBf~&V7ZOqTIi9jQ;fhG40*a+?gBYi`yIB17Kh45zpnz<7Cz~AUO&MquNoPx!Z z&ct2Jh#iV1xHUd9i@N)=HWq8)szHuTTd^;Y2TiwKc`B zP?<(sOxhV=tIBArNxI1bI27wl1IjaFJ1t9_mx*_(IS)K*6XiBR*3;b`dk74Mz^?cP z&*Yi6%w}e_!NzVrISV|B+=_L;=mV7Kd_U|o#UNK4gJ;?y!RBR_S#zp*gbBrmqdMze z_$=!|+pvog#fdsU=ht-ZMVgKY7LfsVd%hns>}&_I5#}*($RLj$*-n(EGz?0pYxpW? zLr0eqn&EU5@*VKbogvDWpDvH!AW%UHGqPF&9i5s$cSjGFzx{l7zFkm&POa@(G#&Bf z&8U1qR*PlFR8zhXJV5SddHGrSo`|#X6q&>xeuheEk~bxW({z*%`#r~yr_=o0{M^Bu z)6pX(fpuQP1B2$}=V=f%uXB!*pB;&FaYuem^bzS|F<-*ij-2tN%l_^3K>O~BbMaGbU)>vKv<6X#E0$TR4qQ=%1Zsnx53{V;c* z%e18r-@=msF(q|)4rdCc56_GqhhwoAlkJ(Ob+I*Z4>{I&SP?oLA~qiRH<{KZI3Cd6PYR;)6#)``HizHHa3Bz8q2 zS0rvlVpb$xg|WiF*>x*e<+5ai?RLQ@DMoraEFfX7WXTKYyK*M#u;|}5b~+H6_&5Iw6bM9S*lkn&`a zK_KFV^k8IIhv&(OQB|gs z&6QS{Z$R^o&LWTHTEeQgv(DsU7T?HTTvqb$LoY5KTv?MqX}g%7M)QLEfmB1<(KEKO zyTf^%@TzqtH}*3wFzES+k|aG+n6#dp5BY&(lTvHxcnur!x=UCHCmI~HR*El#`KFnU z9(r(w2E$!jv4Y>SHu&7>GV0yakv0NI`;zy3+EjFow|@v8_q04B^~pSfcTD-UYX0G( zhTIwnd%=5=b2&0iWEA6E65*&X8TTh;#RVA-KX0;Zc8^MCau~;BvrB1v3^uR|C1#Gx zVMtRSn*Jum&Sy5>gK!<7TLNY_;%gl_lfzs_bC`?#ir6-@?bvIw&O}AJROun3vG{Y1 z3K~;YlL{KNSw~8E?#(nJTF}bY;Qfdpdl7RbQ`F`QDuQ^rj=xOe1z%tdDPakR^th)% z#`M$Svi+zH(X=o(P#b0!Y78&^cuHI8t*7EcONgKghgiG2pFp8$>`}_-a>N-C8Ho;Q zE~1sAb3B0#78O3&t=}8g=r^4DxD8D=wsD2f_zO`Rvl|t+)?X-BnrZxnRAW(+*s215 zA;Xf$bbs))yk4fM8M)G82O}O$y0w6!E@035#?EvT_Er~aAkjlS^t+=Q|3$Koq}0C zM9@`#k<$rCn}1PP{iW&vGL!f$@zb96ZCoY}g3Cm8dj_}_KEki!Ol{MB%5gTq50MNs z-?cGjBM)DO-MOFYAN`Tgaj0LC zt$5A;9`^zTwSozw%ERiRdGuW^Lt`G?4Ycm`=~==K==(sVriQ3#b%t7igrZ$w7M9?3csc?sLgdTxX-OF z2C>4gYm7m>!z7nUj5;(1g^w%RBD~`ynF^ob3#h!aP0EqNwhs@61PacYPn?`>?)~=OM2P9z()@`FCi&s(S#a zt(WbC?hso|N>2hF!W@Gs>Ns~s=VE0DrJ%KK(7tSe(jk{Z2a9rEm0w9Isb;7GnD&*v zsygQ_IhVL&j4PErAz@FoAep9#M=8be_?1l4Q(Z{L`;78R$;I*bRU1!~L*wb5I^8dq z;3@nT%3MfDd(3@zhNoC|;S;X`=er3UmFEhn^A(n8%p<>QdHg1oPI=V*a@uz!c!aa& zwp9dk+wrWG?X+0mn znvURwFVN&p3MKrWl*vZiHVGNtLh-bjGmpT?G+Fz%R% zbOdJWOFJtjjP4hq`-*Emy<7HYzfEh^73rH(T2FTuNfF!V<@)Ez&P64x&o(vFSVDu%9u1SY~1V%n9w>ilqI|K`X;-m<3 z+{}}ckDFnX4Qp`J7NdFMR6z`Fu}R*YJU@o_L@l&?o+E@P3-uOm5{Z09Rg5 z2mA^VF%dw-HHC0K-0iDp<2`|6XGC$aEJM2LE`Ca2DnhsbM07CBK8EudGWJ5{k@zzC zi%nYm&`nx32a0JMJk6PdZJ3BEHrXmXWlqEmTAA}CrTy>~<;PAL$0NH$G7dM5MW}{Z z8QwVqtCB)JoP%o$Rc*3q;y){Mv?e|g$&p!GG9Y^eTA=U<(1n*tLMq<-v}L(*T3_%%vbA2?^T%x@x$erC`X_Ul;44B#`VlQ zQO6(;;$uDYR#v`$fI#p8)X=`6Out_t21XOa$b|ny7&|`pb6*3kBek6*{j$%AX1^l& zkl%0%vHgl;|&02 zhPG&Pb(sPr7fl3=C_pj+tF^hhp8_Ng%>*o0fMg*@z&;9)9JCOyuL78ju$6%Q@fMFY z=7T>oFJbb9W(?P&C9mT~vJbm=}PAlv&2P1o7V>ZJ^vwWQuD}*oLG`Nu|Q+ z@kcuOfz#O&LAcH=`Q_WMSl+W#+`fogZ$QHZWO@f0_@GZ>V}9oT|H+TuyC(d&&aMsR zGtcr9=dB}|w@|NX6B%DTM?>l3S`JcUQ`XaR{^6 zugf&?)j2xZhJ`t_bZS3Pzds25I3^h`jd-!B`jN8NwV^{e&`C)%D7z%#^2TNu#|NTY zMO$c?h0zatl8jVnbR~78$zI^L4CriuQ_`ojyGqII$B!t9;o6xbkP7WBZ=6RNX{gr) ztJdUa5Dq@H*U+EAsOK<7zcmfLM_$&G8q@0j7ih^H@nbB+e><0h3^G2f6j?UVF|HDR8- zVe}5NOgo*qT{{?_0+|5$~e3seD$^3LGek%MvMoe_+ z%hF~s$=lvd+CtN6LzSe=mNia)hE1O~SSsw;h9RRmHwCSz;?>Zi>6Q*Vl`ubG6v@|C z%QUKZ|8kk?J>|%AigzM6vMYLQo@;1J0a^(*R30?(3FS$ftItKgQ>GOu^M9C@UY0It z=^YA5UBcek-Bk?|{Drp>B)Y`$;b=ma8sUe$Ry|r@O^HuS((Y{(2j$8uzs)?gD?84T zeCg1pk+@ZlINvlGA6F6?<67#3T%E05jOy~%cw?VpDt9{M6`m1ql)5bm zyleOiWoQhUrsUiU8CQ6w-=hP;_KxR;%^)J9B+MO1@xp^Yo$p=L34T=QtPO z-%I%Sef;||V86vb*aHq{GXIKyoP&n%1<$l+o0CpPU+=hQY#J@qnj>123^(4ZEae)Zf<47!@qE8B(4dCdyeh_)! z)G>S%G34@adh|MiR0yS9zKQ2aONT!E04U%)UEvtf2aV?2|J8RLCk>zUe?Un_IKwkY zDU%AXM1eZP8S{0Oe7%C~gI^uT3_q`5|0>5*;p^aI_#LF0flN3m&ZjBZ^u0W5E?wa$ zI151Qz4u_iTK^s1B0L^5b^OLs4sVuta}h6H;V?SSlIZj|;#O2K=*r(guLI9xT$mBQ z#3?(lmv5Oe8*dkK--gCej91IoBj)QG`Fe<7Qy06Al7_F_29}I0dUhFBU%4lQwE2vXj%dLzVhVR-2mRSD77Z3|l6{~ajEd5HRA4*3!e1yTf zT;#paWW1U|$p<7VvB{Wu|@Ldw}3$`_h8r<2Mu5bc} zerheZTtALg#Ll)tXGf_!-mIlZcId}Q1g9^zg*OWED;p#$ z_FHMKaFc9(!kZWcN7zF^*U9Va`Fg#)E*JEe`6M5q^s}XTlPHQ$Sa_!pK=$FAMK?Tc zl7(ZOxVCikZ?C>O0LQ4s@Xo>Reb^v6uX#M%c$|nwPoIOaY_x7IDzQva?d*)b5S^*8 zic?Q-g}mHgDH8I+i8jy~sKLQ3)j?cpCF(^$mHxd0qG9WVxjVwVa63$J3;m@A6z%|s zGq87rF(BWFXV-(^PiNyxOrWAG16FV*GtDJ}D$}Fqt9emQq%YGk=)OWDcoY%tUxPJ~ zh|qQX3cf6aOqy8#cTP~btR+5f6jOXm!k;UMN4ddce1YV6gFLZ1!y6n^ANxZZ~8^tDJz>J-<{JpkFk#Y{Q8?%5M-X;0(?;ZPFme|x;^xu}c>K=58%|WA z7&75BmN|e00EeE%`jR8pB-%6M26XPe%~`OMT|d=xK~28PAOhb-CLnHczf1ZZa9mo$ zA8i)wj5Q(@89fLbJr|=w`2qnqJQP&cB2J~QLK6iE;fsm&f^a<&#TLtMC!vv zM>Onhao9mN-a#hpvN&uK&C9nEc143Qo8FZOLv@roO-WsbhH@OPDj9@+^EbYmgt#mSQYFkG2&1Pd|nU zCY;sw5FQ*1&tc$ztV#bAG*1ZgStNX4a&3+P40ix6EH@(?c8AKfR6zC+@*?$zbwhL@HG~G1EuR+- zAR}68H%o!CRH6CWedyp{CN^4jfy?pr?6)`dJ?08%smea>eKCH0k?n zml8gTW+zulbw%UPx!~t?;YV@WT)|oQYnTENB5>H|(1&bW^x&7~z~V*zqEp=<$kUOD z(1&F%6^^ua2i}_mFPCZddlup9Tz}@Gwvyc~_sp`E=zTNZ<1N+pJSg?EnF z+5@x?z5qpZ2ITdN@{0a4MC}5QZ;!;m{}sPJ8oz#7UiX2-G3-ovU3y&NzzPe%34wcX zm?4IXpoB~7zW0)EmD?iZ^-Sh9z)kBo`kmT^?Di~bF13$gv*g+qJnxcc)7U@c$?NV# z<}6Ez>(<3Peh-b;x0KJOu`A`d?RZ}ny!NrfUZ?Sv@5!f$=gGR+y&}`fb&-C~L2vmB z6rr}!Qkrt3bCoErAe!k3@a)O`^=qVTE7wOf_J`nq4H`LaQbz+i(?t)@CO<)r*rnO1 z3(o*9!U}#uj8ErK2N;L~;3L`xQcUI4hw0^|jN+buv|0N7{&=B36a&w)SK0a%;Ao6ZZgMaOB- zz7LV$!18`R($xp}zz(|ik`(fv5?l3b)hps?gH>=V{E+<$9`a_=7ku zEfstSjYBCtj#YTQI{~ey421^fIePjs_@OP#y#nWuK74K$p)tkck(!Ho&}=Gc{^_x% zEj7oQvd*dJpis7@A9XmdG0pN2MATI!X-U8$WfQKzWUUt6tGx*l41ZX8`y3q^pTW}=1 zBq1*Vv|50?0MKRu@&dqg3y>E8+ATm{z8#MxgDdHa3n#&=<(Uqyl_!pI!WlydXiEn- z@P({the*Fa?i)Fm@*eL7VYIexsWje$S4?JRa2yd(V7Cx}`mvZFn{v2ND--O@_ovNR zrpxIWv}NcyKLyP&qB-RANIu=dNZ(9!7)lV6r7+ku1(QSvHerA+y(;O)3Qy0U++xw) za2Evi2a9QVdFXYF>t!o$XG#VC#jH7{RnGWK@G6__@)_(<5dIYy?rKQ$)DP^X_8&zY zv7Q5Hg|A4UrP*|hv!TtY(+wTOVG2zq=RB7e9k}aU>@0u8`Ufs>KKi7UgX`=C*4I)F zIM`CgsW|p8+>LT8&2-me_vkc$Vac_)>-eFkG&q}DU}FZbACR9-bUTuIf?sFHotzff zAk$b+E(ZKOkumd&xo01)-zKvxN%R`-rjt#^ad3ZgD=vcef?>Srp&5JN4Q`N2@i4+e z@aym;7eRYl3hlA&D>4oDL?BoK!x`TezmdU!GkC1puC9}H&ML<;V1GW=n9qRnce*FY zZavwkZJ24!JRTq43(1%F#?J(`G4V+O#7Z62H?8mcB7L!4QLzIcqRrfak4is&)uJrI z8EqNpRtYk%+w(PiN|eeC|Cdjl3z`Lb2eLhW0>iG^ItrMLIfVQ9DNPB})p-VhXuC35 z8D*Pb3FlrA<*Pz|BuI^6j((H|ab#Sk?v8@PHf$l_Vq5YyOjKE#s9hKpKaP%T{R=Qg z!(V}6wKBHZ7e;d{i9XZJdDytZr;h)m4W$eW@39nfW50oQq~i)?fVK_XtDQ2--VL6o z1iP@MmxAT!a0CL^k=*-$<#Yjh?qE5>*6|xk+}0Fcgly?$pz6UrcdU0WjB%5L zn?!H(#0pDDV}|=^N-`!~Fm_IT)Uo>j3I2&jMR|8kv=_m#<<}4Q1rgLpWkcGgbXTVj z$K2op7(1x$5;ABm?agJ%d@GiB) z7FU0~uI4)2`!4msO;m&zAhWn4yw{eyR<;=L37i(GRY&D&WwxEA8KZWa^YOfUg8d<# zn79mBHc_i0%LEn2_WoLbGN3ogsyI`sPSo!mg-SU9Jsdv)R*n~bnyxPc5%8o&z~d7@ z(d|7!`+UmC3y((i4_1IX4$e80Mhl7E>P!I!)u9O0B)B_TfhI`~nrZ-`$$GOrp4ges zwnKtZT|TR1F(O47LV0-1McV1oLSviIia63%pdHvk)umNq=-q_p1wtAK})eyl3$WNDHR;sC*0O0kxyO6mQiz@ zPqmaHdNPcX_9QX)E%^-(pfEK9%p3J_fwZMkV#4*h^TBHZ2jR|JC6D7QE5#{*!)Biz zy@l)d0KOS`S(?x{$atIuuJ|3O6hiYbxBLhsUL`x$T7vC`tH#xSlNSI6EkIuSqh$lk zU3%+a24OlnPZiacojMz21#mE5&xEZ_gY7In2LyDE0i7!#O#KJ4xA@~Q)aeJHcMOPc zy@psTUbtQaVqS2SMAi4pG=b#vC6XKe z0#$^6i?))M+6t80g<6lvM~MC4R;@*DQUC4+^TC6N)Rs@1=%(-=a-kwAZ_?HN zSK@{H+VFEBYEtsT{g@qh>`X8m>`OUoTcBmHbxGsyKRNCSjeF@f;~p?M?tvQj+H8Hg z%&X2nRp8C4M#nW!w<^CZ*9U3raw4{sN0R4*C#QRe#=LEtJimT&+(R|)ecOzC*yOl} zYutw$#(h}IQ008YKkehkmX|NwK*JaWBw73_ML{lb!8sadQ%#xql zzHtYnRUdD~*5W~FrB)WM+f_^`5)QvY-qDUNld49&4o3Le0QJ8mo2dVu(`W0k86NUh zs-10CThSCBj0Ph-gpHS}znaf+$VM>}`8*f>8}iBc$ma(e<+DDX}mn>0>Ew-ATPA=uqo8S zE8_OJkX0br>G$O{0kvjBMkU{4E>7XbDmK4#c4@&drV79cMG;A}(1kQV^Grb=njlm6;B7sPgX%awF*f4E466bkl^OGBQoAF`3(xOI z8PP6*=_PbPgmz!GN+Lo-$LMoGkuXc~Tc{L?EtWzO2Mqw!P5C=9pdVwoE; zbzzA93QznMY|2OO8{5?}i}CHlJV7U(ELPpLmXf1 zh9th)f{Gv6f-%0>f{FB^epq7QY)VlKx*3TEXg?fBSMQ7XTfH-^U8a4$#*F%W4s0cF zQ}rE+AN3ugTdv$GdolaA!5w=4`_4I+U{(|JTAA<_^vC`wy*E#DrmbogzkD}*4zL~F z($9SOJd9^y54)AislU(2@FHppqZbbEuK_OrK*~?$CzHO~u>+B%fUYZ-2bePCO&ckN$6FSxM z#(?oLV28)oau;EsybQ)$YB99DARz}*$YbIXZW!V(R$hV8akH;UhX>)qrbewnD|;mg zIh$yqUc*oaL-)sGbge<8X*6Nnn}^)X?!IB421CQ}>TU+zGMYy+Fpo8Vw_5&={eJ zNku%~aLX^&8tCzciyPhy`8FAkw`sA*8_u4|V)DftJZV?2z0mF?eLiG7a9kx0p#IYZ(3&&~`^br!r<;Li_qoSV?75&qK(IDU_Hmd40 zXo#_*V|yr4g{4yqb@g-ghQ67s?=66A;h)46N`Zy&m9Lhe47CKW?hmNeJb(pOguy);W zqXb4A5TyD{{Lqil-^EuncV@vykZ34hs9K~qM zdfqJ0Z%N$#<1f(gm*@YDE2$eMc-;pUr$36swtGSR(bE%dQ?mj($>~8g_Dc0$mp&hg z-kB8|X)m8QTd$utTf^tg5Kb@947bLoB8I7qp0qDvIYqv5WT4z$8|xZUdP1n9OExF0 zfZ1D9`XqxJBt|FW=Q3;9Zzi^gaz1=7iOm3tEbTl2#&3o)Q0_$K^gY>|e)t z19#bbGMD{-ImU0l$5&&wuW$c9`NGRQ{!_1}ZeMr<&%a{w8pl+IPT<&PzsvQNWk6qC z5piP!_gTtfjN@Chtucy|)*?K3y%OKRq#PNJ47O8$TY9vN`Gj>a#0?p|zX6rfTfjV2 z)+5Vj6QbbkUFp>!swODWanLZ z`I6J$NVPk08_LaM(v|;YQj*04@X=>?9dJvhl0!57bP&$)d@WBvO@I}IZ{rb?Po5eI zC=Q+_{nO^Cqg7o-9mnceyW3vlAQBNgcct-^{CG4nt0SSc2~Tl35^#skn%kPoTrwaO zGZh{}_!ZUT`=VIOm;mfg;9+`b>uT+vTFXDsVsAog`QZiRWfYK?e_~<-urHyt*pHx= z4To0R9~*!@33P^ZjI`OqxsTB^`pP3RF3Z^l258Na2IwqXd#A}>Rm@J11~!qqg3 zJs}R%*@6o|#Ey04J$w20){IzxqAZxSLRl;Q-HCr$g|>-t&S7qvv1#t?&Sg4Tdv(SM zbGGIm7WFD~QF7BeQ()c?Pgpu5bK;AAnJVE>Gd#AEDR;_qTyId20pEVbMwSW>{`8BJcfO#Ec=;a)-E>cs5CPZ^Qly?|hvUP1Ya z!tIX=OZ;*qI`fN0=BxkHx{1dw&Sd(ZIiL+@RSa%mLS1~~V#GR}BIUJaYazU~@5Grh z{vuX0C6lQM7>Mi3fI+-^eazFMIY53y!dT$;I;Qi_kYudN+R^7n@QK|kh)(=~6-{C@ zsnM+&CTX}_mo%dxiISLk{l{Ns$h3=+I!H;bb=?iF4~?tCWQJ}(vb#)A$tnFb8ymW3w{|PYS9)UW0UEwZE0xz(r>%*6qtJq|xb4xJuY6 z6TOJrAeJm=_Ye3E*$wq}q&eSWy`HoK5}!fPE8l7CLuX%pmoEL;lT)2l5lXVB+wN@w%xF4 zRDPC}9qCT6IcG=;Lr)Xu99QMKfn_)v=DMrDQ7qi;N>^+VMdmTYU*fn1hHfs}-CbO_ zMv=xKh`?YsJ6pO3K@ZmCm8&K_#hiY*z8BwhPU zuG;q(rMurYx%=&bSft0OEZZ`IzZ}av?p))?SDv#-ILdZCMqaV1i*F6G0JfVNzDZY1 ztj?o29idA7(J&l8OQp_Op~Opluxln}*eDu^1n02~#?EEhHeisLK7Oz1dkaZ*6*5?I zvTYU>ihjDqw&6KJbfPZS{-0v)x>$u5dvX_T2t2&CW^t6egkLa^x`gbIf|0PJc%a z82k)*`X%5tIyw7(C-_phIRQh%ns6Rqh!-;F-^ctHnO~3Fl4#t74D;(b&aa5jFhs?f zAB%100ft@Q@EYTKeq?G-lHBg$dcZwg zd$=t0Z0O!HKEko*+zze9iO==HOE;7uJ16NXC%zL0jeE;jG*%}*IfGQr2I=;E?T93! zDem(O_sFqe;=3()ykAFjjKv{envY``=SOqGH6$ld2a_-G$2kVmvvUMmgs;D2(Kr$k z7x6Ulh!IPqCL^`nef+8qJCpcrynAO-+v(@%^zRX>sNyktkFuTFUA(w)O{YQe({Q*Y ze}w|lhY;pih9~d?yj46IH4z+P$+3a|GB5|$$&@2Dy_~A%gfy1poXtAAhr&tsQ20^$ z=RJy-|4Z>g6#t&<_)FN#bDi7gX?I~(-eY0q^zsaMitnOwNU$V{fP{Ol1QEDqt%16HbU07A=Z5;`gzu1Sak4NcUaW&YcJ*i-OG1cbdtJV=)T#I=OKrH4D zr!VHI$*`Eu&KqfZ1&3CSfdduT%V;ioWh@fR0V%+waezSHL-0dgut$YwQ>gW_7kwi? zRrC!qm&vNq@DsN2NWNW0)(rYs%Ztx)$#VM1GXXq9+kys2DQ@J4k1aJOoM!q zE1%aL+;z*~<2_FBqVY0LOwL|OQ<$;n8_8Lw4tz4fS%RvmkXQ=;W+=tiC?&1FD<2*` z6k{VZ9;Ejww_C@BDta_p;_QgZX7da#j^7abc=6T0)2O`7hkE(_PKJd4@F=zX=bI?{1&N|=GaNenpTnUooJ$g?Q3JNUb*fY}f-j+{B*#>kmVmA?0yK6a>gkDYw( zu`>_J|A(=26ZM}W^=E$G9m8&5z94HED+bL-j24{Z*wfS^#PjjT*%=|m+>0^d!SS?! zAw(}OfDXUP6Qo_hcJ~-q#6*k%dMQ%_woK4tU@;`-=HH|x01Psk}#oxyRTV`41F!s)z?$q zvC@6bu1N1|@hW}24C(CCRQye1G$1dh%qT%#L7B0VzFr9dH-9hl^!N^QRr>6O)8lpA z=#YJE{^ktZ-FS9>UgFBzSFY)L1CI0Zf#NXbR_^TwMZLVu7eZ9c9Lb%RXYf-BVXQiO{yNq@=1R-Oz z6S6Qt`{8xzbjI5p5R1$Mu|J}(OA#A=!AU#)eYY9XFM4ZTHl=W^%CZgjg7ENV8D2ry zosY0lCEM-pQ#sW-RwZeYzMx1~1pF^WkSI_YV7*Mi%5H2>#BJu^Ny2?{+V%{J{=9t??QWJb{i;=nm}if0eXMcu>3p>!0Kt|2lS@`=AXB zv^YE9udz7KDLXX!IO&42^)qv_t7CS~*E5N+UBqKd@Ao(tL%|Ox^h6btF3KG99&LAO zFNv1BMENHF?A}5P?27;}OZ)&lQi5;T^v56N>_C*(QRi%#nZ^iBKlY6{ifL=;B#sP? zq_h!h9DN($D#OGw*qo3Hfl0W9ipft9%n7-{_2W>1|7R_{>18$gQokE!Hu@@lBTB$Y zBWV*$vL|lFpSO8?VgZ0HSjg!`;jR2zkr2NPAWuf&mHf2Me2b61aSm0SCvfJaSH1#8 zKOj-kD~UNWTs+A$STV4l$Z>^5fG?VZPy7lNVAFOWL%>AF!+64r7WRP2Iz^@V8JY40 z%wUrCkZ_j)%FTED^Y_qLoADViKjRrKGvq2&WogXkesolDjaN`gEyPmuF>CtV?Y5F< z(jqd{7x&<-3Ak;CN{d*;of|(I#tOoogj;s_DXmJ&s{(eSEvR8J+PEsmni=&g=BIy4 z%=!hD=j)>6xg?|4ICiY6BGTrd-|)d)cu9E15t>i}V##to{$}%A`v<&wK=i#3Y^K}g zVKe{0`Z@=`UWvqj{F$zl+|7HA+LeZ0V}gIWSjv?vsU#(%B>|9m?-8#w3W_hq<2Dc} z>2Z5+42R=0T(C+g3os{?16rI#P#TVfhw+XSEEAx{VhGsS7z;o(Ad!N>^NkZKx7_AOyiR*CD_~1>Av~U~9x3o(j zTs6c^uplj3!<)8s?nYp;C>sIl5<`X}`D(;BA#eGLf;>uxCbUSXrM0DX zmg@7Nwiq@~U?W$3l2EMe!22Pw-lj|$G*M4OVzQL!AZGU>^8JW>2wi}7lsYNs`TxrI z6Z08%_f|~$>3`TI|4cjO2<&T=_abD(-<&E=V(!qRFg6gu>uV|QTQ0oCKYpH}tqse2 zA*}EqZK$)T8xOj2#Gbc9-#pT z&^hkHV))E~Sz%_Df36JoLMqj8$?2JuyV{xEsL+`7YLqGN%J{#{+XVJP4JFUli*4vy z5jWNNCnUBt*8Emg_h0ov9b8@^X2|Joh>=JiFE^^pml$xF9cJiqrRykW(&b6lQOu2>)VWkj*iGq^KkPK zm#(9z{al2U+0RGJ%m+BkiS=Eg%a7>zJcpr^M?2U?dE;HWpMS^ZV>$}OTE(2$z$LnT zijGfc7&?lXbbN@x&{52!Z?YNMM$keL6d%hO z1>4;j=BWafqQ#*LwiK-$ne;o}n#CukUqTfhp^3bM%ULxe zsY2pDHMs>IPr(@VQCvGEe2Q|-iG6?x-P6S`>0&R40X}dQa2a=eak}q~1nx!sPd{DL zGymI9miPM6&uaarKL5^~>pz*@ZTbwG=6zAD?vS!MK%GKQBSd&pUB+FgeypC}zZ?KD zP`AaVj$uD-nZ$$^UiJtJg5=tR^n_dn?^mmiWxA@~7N$Od*n^>^3P|K(y#od~2jc~W zU%-Ud#4qtyw4~uI%_k`Vf2!k-H1~-lDS;`olM?B`?0Vw^K5PVzS3V3_jM0TxJ(v?| z5bzFXOT6%5K&qtTtxZE{7J!{EucRc1_<<44j$+8*1c>*L2~X-zRX(X?K6h=g+ay`c zQiFUkQZ-F<)u#3gX@#vv*s-FjI-a|eYR9vPV<*Cuq!G-A zO7L&eNB{zmj6Y?hK#U{Lz*5&0Ja3!7!mc>dHTOd8r^B;REQKU__DI zXe`i&D>=42!~U00p4Zx-DR>V$#yxvZ?|*R+r0;*p=AsCz2WPoL+dKC1Da0@Oe6Bg=ZY(W;g(YALjs;9?Gg+U7^zL?51V3D0n_Yk1imEtdm%!Bd z5{=4uxGqJaak!?^6%SWgqwxAq-*cb|7Ki3C_@5k>Ouzw(fv}8O(l@<@8u_s#Rtsb- z&|HrNmXJOcq-Yrnd_|?~e?l)Ws+4|S!hYU@tLc+GDgsUc6Xfk|TI4I)oD=nvQSN66 zPQwU4g|^63{8mAngeqwsa0c4+UT|r*dEk6AGBT@VN%KKGGdb1 z8A78n?d*dVXbY^L-4;wTJ43~ymVMA-Z6TK|8)XrkhhM(Lu&&Sq+h+g~xpzv__8=8epvO&64^afwfFg88cKUa}n8r zNm@lW`I49>GbaTZPgGM3A=b*KIw-wr)n^f7@EO zd40U_9%owo%ZmR7e;8CDsB(qM75SqnJQ>~xxD6MH#YdoTF{#i09y_+p2M*}jw>uvt zP`hyJb6p71K54Gva9-k1^omD)@=-Yc_5m;P8F<}3&Q3JOKb-1Kt(NTx@#F^M-=@m^ zp$JP~i~p8GiMylP;*!c%%>I?INESoY#vfo+9t)b!Zsg^)zM2BuoXTiN9wfF6c?mfA#nc&nw=8f4kaP z;O-E+YPoLc0lPXkmo_P5DNoHtyqlFNb=nX+innHqD8I}~ZFE=4d9xMIkFCmHl)a>s z_TEhK^=8Uvy@{iGbs1+@$JbImx1ZRrBk`l`#q)1eXKh#SGC216N_@vMoFuii|3z*1%7W=izj}Y*RDs?*R`UEFZzP5#Ua9J7rl<(7A^j6CI#R|JRvod6Y zT@6}Kyn2-ByLuAKe@a}wjCHd~8+Wc{O>#-}o-d>}SR&BEpLGaq$CNT{=reCy$`ywb z>r5e*n?SrQxmMq#yda5n+pv{#u9RaKf!E_Gk61;FP9kPM!jbvx31zeRtht!-#Fa#= zv~+>^93{9^;#syOJwHD}yf(CL+B8)Sdqj41e+zR3=O9K%#L^@_9#@$1YgfkS={({$ zD~L}H5w9PjwxZry^P+9t&C4(Q`)!d zz?A4&ls}bz-1F>P*?-L`$l1<>!~f=R|Fqhag}wTM%nCLNw}D5^@=puHO<-!h)sW?6 z*;RhAtkRX1Iq>Tg>Y|_crzKkQlELTRmel#;%8$CYmzl3H8Fa&^Q}=-i!@T3IKHETD zNie8XiKX;XO4XBm`S<&$Em!4Ld&zgX9rIODp9(wDg{%e{^2M!WzBK)A!@jI zS^dC2t$_+v6U6dIuuYawHCJ>c=KH68fM@BhRExIucXxUrgCzP;!j24BfMAchZCG=6a8m;&}81#zhCa4tg;w}9*QB6c$ywxLV z`!uyoblso(r!B^rWv}FG2Ig&9td5FqR0LbJL>-ql+*`o7Y*$xA_X>R!ralK-juwrm z#7JDmm!rrYXVvU0Qz}^F6c=M_pFkG|%df@DLX5L8^@X}EB|MT*@P)bqol-R#NDDW7SWSXPl^ET3s47;gVb35Cc| zdcbOqp2DV4=22i((DqH1qNXXL+q<4V15C?>{fXArSAnKAVEC$`jHN)+S}9?alu*Wm zpZ&p0Q5ji5V6^Nameov`MAuYw)lIj>=O}&rnSK=AZqbFB{t(@jG?w1PWVf)MKXqU| zo0;-j7~Kz~$6A_#MRy0|Gtm-D2Hl+9j7wWnOVND^T_M%UV5ds?r!_HmGPM$2B<6y3 zU@^kFZ}v~S4i+n{(<=Y8r(kWwXa9lp*~t`VS&kMBl_RyA!S29{{)Wg051^=$vN{HETfB*}N-G)w4h z8X@@>q90m=jSy)Q$0j@ng_wN<76vv;bYrD-r)jR_n`l_rk(ueyL^tT`c$FnBHWmYc6Ev zD3~3^^6HsufhqOzcP!x}b8{>EJry%_ZG2UIq*#73gO<$=wihuQfnQh87u|NLX9x3g zVc8J*O_q-4Rl?T&sY|8kWuohu)N*oTaxb=oY6N~4hVzgL(aQL&3}lO>~fwyZhj+{dyy~E za?)(IGoE{7_C9YeBy5HpM_-sr32P^3-|OZNg)I@wugoEK)@4Uq*5zw+sOVbA=(%N% z7v=>v*?ikPR#-k^cg*AMjBd9DtaX}slIT8=xI8e}{i*(GyDSgPQ=r51K3CYH2j5 zIY45T#Zt(@C}kbQC}pt}#)Y4^%8owzN@cfHaPS=W?bp<0w^SA{Loi1sTD&b`;w44; zD3_&~u!rlY%VX&yY}HKGGmoX8gU3o&Sq1r6hKTN7Yg+nP#t0iNE5L%5byDlohZy;i zmi=Jf>WuVsX)@I8c|Y;(Guse9Q7=Pv4rpFScYgzncc`(mtHcvb+OEW4)1A~ z5%Q^Jr$;K-ImDCSvKFsn)nB@_Vszi&`lP$U-XTwAb zIuq<7j_D@mM2m;8rWmd3z&wQwK&`KXc?s)dr!vmCt0KHwEQ4ma$}atW!h`79#ZSQmLE}|w+bD?k+skALcI9Ns5@-2 zda<5fXv1R5VT%Jysf*~bO_nnjf6;BmC|ItpTKajhywW&t)>hXn@xoTgnEx7V6ueBp zu^DT+1;%>*E~DVCWt`|tIKyI%(6ksyEQxa!Z7vR zvdwE0%1by%_KRh&sD^mlsTNir{C-m3mm);gQP+M^A%zn6IU-rcu7w2rX#5_bD`_ia|&2wPua^?P;S zw%IhwmLT~)L3y{WpW#b2^b!p(%J!LUY&Kr^|Nc3Ber8)Hy36%xIo_5kUXs^nwpnz$ z!CphRO?0nNUYHthJCcn@>WCd=lWiBpvJgtRZJlhpBg_W&+B)6#m$de)Xts8`?TxS> zBQ#Ul85h-9GfQ?x!ZMeUm~OL+?qk#pPq7+o&1afr7t6X|(Q=k8hgf=lOx+xVWgo3s zUa@Q?mUC=AVtJ(jb@L2%SuE$-3W}~zBdseW>_`*Mie_hTdY)u!=h;e#u8mkOvXv9o zQ7jkPDhivriuo4VstXGrqgf4MS*5j$Y@x!|8oEfS=c2FKqD8i7(fuesmm2J!kLYEo z?PJj`W^aNu6t-lYW{rdmlt?VKH4zpi?OSSVB_)iKNRTn|eI*j923sbUskXLac}gr( zZSBNzh4@@yu)@-Y6}FC|+b?ZcVe2aS)=L{!*t(0((Udh?Ww51^ZDhKR0`)NGY)q?FKKYPQOjEV^!TRIM?XuZ*)bwo#(1EaPR3ZJe+$@wvt} zUYJ$NTVun0NA&HGGu^i(TGrSmiLQcJZm>-g_C$`<4Yt`*`XD({H`wNgu9TFw$zWa* z&rP;e(K)5on`|2;-!iH7Cfg>_1&ietgQbY&7TYed+%A?|Y`euWRV=p|>~pc)X4@y0 zH^g$AZNFINh++hH7%ZE#eTVIM_EhwAUKvYd?Du$sofKA0M)D5ZDPbdIob9lk7S_t} z@}-pbv$TDO?YihDi{&nZbr;KBwy(wVd$HVQ`$jB-q~G@#?2?R^J+{Z9`%G%>VsoV~ zdu%_5mjoG0du(sTvXA833�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%0DMTp-m@zRfz*D(gA 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

Rzvl;SL7 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 ii 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 literal 0 HcmV?d00001 diff --git a/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj b/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj index 621e07f..f6727d5 100644 --- a/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj +++ b/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj @@ -1,9 +1,19 @@  $(TargetFramework) + PresentationCore + PresentationCore + + + ..\..\..\..\libs\Xwt\Xwt.dll + + + + + diff --git a/src/Editor/FPF/PresentationCore/System.Windows.ClipboardGtk.cs b/src/Editor/FPF/PresentationCore/System.Windows.ClipboardGtk.cs new file mode 100644 index 0000000..a60ddaa --- /dev/null +++ b/src/Editor/FPF/PresentationCore/System.Windows.ClipboardGtk.cs @@ -0,0 +1,69 @@ +using Xwt; + +namespace System.Windows +{ + public static class Clipboard + { + //static readonly NSPasteboard pasteboard = Xwt.Clipboard.GeneralPasteboard; + static readonly string[] textTypes = { DataFormats.UnicodeText }; + + public static bool ContainsText() + //=> pasteboard.CanReadItemWithDataConformingToTypes(textTypes); + => Clipboard.ContainsText(); + + public static void SetDataObject(object data, bool copy) + { + if (data is DataObject dataObject) + { + Xwt.Clipboard.Clear(); + + foreach (var item in dataObject.Items) + { + switch (item.Data) + { + case string stringData: + Xwt.Clipboard.SetData(TransferDataType.FromId(item.Format),stringData); + // pasteboard.SetStringForType( + // stringData, + // item.Format); + break; + case bool boolItem: + Xwt.Clipboard.SetData(TransferDataType.FromId(item.Format), new byte[] {boolItem ? (byte) 1 : (byte) 0}); + // pasteboard.SetDataForType( + // NSData.FromArray(new byte[] { boolItem ? (byte)1 : (byte)0 }), + // item.Format); + break; + } + } + } + } + + public static IDataObject GetDataObject() + { + var dataObject = new DataObject (); + // Beside copying and pasting UnicodeText to/from pasteboard + // editor inserts booleans like "VisualStudioEditorOperationsLineCutCopyClipboardTag" + // which allows editor to know whole line was copied into pasteboard so on paste + // it inserts line into new line, so we enumerate over all types and if length == 1 + // we just assume it's boolean we set in method above + // foreach (var type in pasteboard.Types) + // { + // if (type == DataFormats.UnicodeText) + // { + // dataObject.SetText (pasteboard.GetStringForType (type)); + // continue; + // } + // var data = pasteboard.GetDataForType (type); + // if (data != null && data.Length == 1) + // { + // dataObject.SetData (type, data: data [0] != 0); + // } + // } + + // TODO: Xwt.Clipboard doesn't support enumeration of Types; workaround: + // https://github.com/lytico/xwt/blob/merge_unitsofwork_xwt_200408/Xwt/Limaki.Extended/ClipboardBackend.cs + + return dataObject; + } + } +} diff --git a/src/Editor/FPF/PresentationCore/System.Windows.Clipboard.cs b/src/Editor/FPF/PresentationCore/System.Windows.ClipboardMac.cs similarity index 100% rename from src/Editor/FPF/PresentationCore/System.Windows.Clipboard.cs rename to src/Editor/FPF/PresentationCore/System.Windows.ClipboardMac.cs diff --git a/src/Editor/FPF/PresentationCore/System.Windows.UIElementGtk.cs b/src/Editor/FPF/PresentationCore/System.Windows.UIElementGtk.cs new file mode 100644 index 0000000..2c87880 --- /dev/null +++ b/src/Editor/FPF/PresentationCore/System.Windows.UIElementGtk.cs @@ -0,0 +1,27 @@ +using System; +using Xwt; + +namespace System.Windows +{ + public class UIElement + { +#pragma warning disable CS3003 // Type is not CLS-compliant + public Widget NSView { get; } +#pragma warning restore CS3003 // Type is not CLS-compliant + + public UIElement(Widget view) + { + NSView = view; + } + + public static implicit operator UIElement(Widget view) + { + return new UIElement(view); + } + + public static implicit operator Widget(UIElement uiElement) + { + return uiElement.NSView; + } + } +} diff --git a/src/Editor/FPF/PresentationCore/System.Windows.UIElement.cs b/src/Editor/FPF/PresentationCore/System.Windows.UIElementMac.cs similarity index 100% rename from src/Editor/FPF/PresentationCore/System.Windows.UIElement.cs rename to src/Editor/FPF/PresentationCore/System.Windows.UIElementMac.cs diff --git a/src/Editor/FPF/PresentationFramework/PresentationFramework.csproj b/src/Editor/FPF/PresentationFramework/PresentationFramework.csproj index 10e9077..90ae332 100644 --- a/src/Editor/FPF/PresentationFramework/PresentationFramework.csproj +++ b/src/Editor/FPF/PresentationFramework/PresentationFramework.csproj @@ -1,9 +1,9 @@ - + $(TargetFramework) - - + + - \ No newline at end of file + diff --git a/src/Editor/FPF/PresentationFramework/PresentationFrameworkGtk.csproj b/src/Editor/FPF/PresentationFramework/PresentationFrameworkGtk.csproj new file mode 100644 index 0000000..41ed3c6 --- /dev/null +++ b/src/Editor/FPF/PresentationFramework/PresentationFrameworkGtk.csproj @@ -0,0 +1,11 @@ + + + $(TargetFramework) + PresentationFramework + PresentationFramework + + + + + + \ No newline at end of file diff --git a/src/Editor/FPF/WindowsBase/System.Windows.Threading/DispatcherOperationGtk.cs b/src/Editor/FPF/WindowsBase/System.Windows.Threading/DispatcherOperationGtk.cs new file mode 100644 index 0000000..35b6795 --- /dev/null +++ b/src/Editor/FPF/WindowsBase/System.Windows.Threading/DispatcherOperationGtk.cs @@ -0,0 +1,179 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using Xwt; + +namespace System.Windows.Threading +{ + public enum DispatcherOperationStatus + { + Pending, + Aborted, + Completed, + Executing + } + + public delegate object DispatcherOperationCallback(object arg); + + public sealed class DispatcherOperation + { + readonly Delegate method; + readonly object[] args; + readonly CancellationToken cancellationToken; + readonly DispatcherOperationTaskSource taskSource; + + public Dispatcher Dispatcher { get; } + public DispatcherPriority Priority { get; } + + Exception exception; + public object Result { get; private set; } + public DispatcherOperationStatus Status { get; private set; } + + public event EventHandler Aborted; + public event EventHandler Completed; + + internal DispatcherOperation( + Dispatcher dispatcher, + Delegate method, + DispatcherPriority priority, + object[] args, + CancellationToken cancellationToken, + DispatcherOperationTaskSource taskSource) + { + Dispatcher = dispatcher; + this.method = method; + Priority = priority; + this.args = args; + this.cancellationToken = cancellationToken; + this.taskSource = taskSource; + Status = DispatcherOperationStatus.Pending; + } + + internal DispatcherOperation BeginInvoke() + { + + // NSRunLoop.Main.BeginInvokeOnMainThread(() => + Application.MainLoop.Engine.Invoke(()=> + { + CoreInvoke(beginInvokeBehavior: true); + if (exception != null) + Dispatcher.OnUnhandledException(exception); + }); + + return this; + } + + internal DispatcherOperation InvokeAsync() + { + if (taskSource == null) + throw new InvalidOperationException(); + + Application.MainLoop.Engine.Invoke(()=> + //NSRunLoop.Main.BeginInvokeOnMainThread(() => + { + try + { + CoreInvoke(beginInvokeBehavior: false); + } + catch (OperationCanceledException) + { + taskSource.SetCanceled(); + return; + } + + if (cancellationToken.IsCancellationRequested) + taskSource.SetCanceled(); + else if (exception != null) + taskSource.SetException(exception); + else + taskSource.SetResult(); + }); + + return this; + } + + internal void Invoke(TimeSpan timeout) + { + if (timeout != Timeout.InfiniteTimeSpan) + throw new NotSupportedException("timeouts are not supported"); + + //var mainQueue = DispatchQueue.MainQueue; + // if (DispatchQueue.CurrentQueue != mainQueue) + // NSRunLoop.Main.InvokeOnMainThread(() => CoreInvoke(beginInvokeBehavior: false)); + // else + // CoreInvoke(beginInvokeBehavior: false); + Application.MainLoop.Engine.Invoke(() => CoreInvoke(beginInvokeBehavior: false)); + + if (exception != null) + throw exception; + } + + void CoreInvoke(bool beginInvokeBehavior) + { + Status = DispatcherOperationStatus.Executing; + + var oldSynchronizationContext = SynchronizationContext.Current; + + try + { + SynchronizationContext.SetSynchronizationContext(Dispatcher.DefaultSynchronizationContext); + + try + { + if (method is Action action) + action(); + else + Result = method.DynamicInvoke(args); + } + catch (Exception e) + { + exception = e; + } + + if (beginInvokeBehavior) + { + if (exception is OperationCanceledException) + { + Status = DispatcherOperationStatus.Aborted; + exception = null; + Aborted?.Invoke(this, EventArgs.Empty); + } + else + { + Status = DispatcherOperationStatus.Completed; + Completed?.Invoke(this, EventArgs.Empty); + } + } + } + finally + { + SynchronizationContext.SetSynchronizationContext(oldSynchronizationContext); + } + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public TaskAwaiter GetAwaiter() + { + if (taskSource == null) + throw new InvalidOperationException(); + + return taskSource.GetTask().GetAwaiter(); + } + + public Task Task + { + get + { + if (taskSource == null) + throw new InvalidOperationException(); + + return taskSource.GetTask(); + } + } + } +} diff --git a/src/Editor/FPF/WindowsBase/System.Windows.Threading/DispatcherOperation.cs b/src/Editor/FPF/WindowsBase/System.Windows.Threading/DispatcherOperationMac.cs similarity index 100% rename from src/Editor/FPF/WindowsBase/System.Windows.Threading/DispatcherOperation.cs rename to src/Editor/FPF/WindowsBase/System.Windows.Threading/DispatcherOperationMac.cs diff --git a/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj b/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj index dcd2c2d..65a0685 100644 --- a/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj +++ b/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj @@ -1,14 +1,21 @@ - + 1699,67,618 true TRACE;NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM;MULTIPLEX_OS false false - $(TargetFramework) + WindowsBase + WindowsBase + + ..\..\..\..\libs\Xwt\Xwt.dll + - \ No newline at end of file + + + + From f7c780d6e4b0c5bb42bd2ef179e5e314cc874533 Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 17:55:17 +0200 Subject: [PATCH 08/27] get it compile II --- VSEditorCore.sln | 6 +++ build/Environment.props | 6 +-- build/Project.targets | 40 +++++++++++++++++++ src/Editor/Text/Def/TextUIGtk/AssemblyInfo.cs | 28 +++++++++++++ .../Text/Def/TextUIGtk/TextUIGtk.csproj | 29 ++++++++++++++ src/OpenSource.Def.projitems | 8 +++- 6 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 src/Editor/Text/Def/TextUIGtk/AssemblyInfo.cs create mode 100644 src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj diff --git a/VSEditorCore.sln b/VSEditorCore.sln index dbc8643..fc09949 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -97,6 +97,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsBaseGtk", "src\Edito EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationFrameworkGtk", "src\Editor\FPF\PresentationFramework\PresentationFrameworkGtk.csproj", "{ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUIGtk", "src\Editor\Text\Def\TextUIGtk\TextUIGtk.csproj", "{5E59E39C-6B80-4F63-9753-E872A10332AE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU @@ -139,6 +141,8 @@ Global {930FF802-57C2-519E-B2B3-C68CF7B8672E}.macOS|Any CPU.Build.0 = Debug|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Windows|Any CPU.Build.0 = Debug|Any CPU + {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Gtk|Any CPU.Build.0 = Debug|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.macOS|Any CPU.Build.0 = Debug|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.Windows|Any CPU.ActiveCfg = Debug|Any CPU @@ -343,6 +347,8 @@ Global {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Windows|Any CPU.Build.0 = Debug|Any CPU {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gtk|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {522016EE-7098-5C37-844E-297AEDDEE1B4} = {01986EB1-3128-5838-B09A-7754A44C22CE} diff --git a/build/Environment.props b/build/Environment.props index 2dffdec..f2245d1 100644 --- a/build/Environment.props +++ b/build/Environment.props @@ -16,11 +16,11 @@ $(XamarinMacMSBuildExtensionsPath)Xamarin\Mac\Xamarin.Mac.Common.props $(XamarinMacMSBuildExtensionsPath)Xamarin\Mac\Xamarin.Mac.Common.targets - true + false false true - false + true @@ -28,4 +28,4 @@ $([MSBuild]::NormalizePath($(MSBuildThisFileDirectory)))..\tools\_artifacts\nuget.exe nuget - \ No newline at end of file + diff --git a/build/Project.targets b/build/Project.targets index 3ab745b..3062665 100644 --- a/build/Project.targets +++ b/build/Project.targets @@ -81,6 +81,46 @@ + + + $(FPFOutputPath); + $(AssemblySearchPaths); + + + + + + + + + + + + + + + + + + + + + $(RepoBinPath)Editor\Text\Test\Util\StandaloneMacEditor\$(Configuration)\$(TargetFramework)\MonoDevelop.Ide.app\Contents\MacOS\MonoDevelop.Ide diff --git a/src/Editor/Text/Def/TextUIGtk/AssemblyInfo.cs b/src/Editor/Text/Def/TextUIGtk/AssemblyInfo.cs new file mode 100644 index 0000000..7ec87b2 --- /dev/null +++ b/src/Editor/Text/Def/TextUIGtk/AssemblyInfo.cs @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +using System.Reflection; +using System.Runtime.ConstrainedExecution; +using System.Runtime.CompilerServices; +using System.Runtime.Versioning; +using System.Security.Permissions; +using System.Windows; + +// +// 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: ComponentGuarantees(ComponentGuaranteesOptions.Stable)] + +[assembly: AssemblyTrademark ("")] +[assembly: AssemblyCulture ("")] +#pragma warning disable 618 +[assembly: SecurityPermission (SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.Execution)] +#pragma warning restore 618 +[assembly: ReliabilityContract(Consistency.MayCorruptProcess, Cer.MayFail)] + + +[assembly: TypeForwardedTo(typeof(Microsoft.VisualStudio.Text.Editor.ConnectionReason))] diff --git a/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj b/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj new file mode 100644 index 0000000..de94a5e --- /dev/null +++ b/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj @@ -0,0 +1,29 @@ + + + + Microsoft.VisualStudio.Text.UI.Gtk + $(AssemblyName) + true + 649;436;8073;$(NoWarn) + true + $(TargetFramework) + + + bin\Debug\ + + + + + + + + + + + + + + + + + diff --git a/src/OpenSource.Def.projitems b/src/OpenSource.Def.projitems index f8fee42..a48cdca 100644 --- a/src/OpenSource.Def.projitems +++ b/src/OpenSource.Def.projitems @@ -37,4 +37,10 @@ $(ReferencesVSEditorCopyToOutput) - \ No newline at end of file + + + + $(ReferencesVSEditorCopyToOutput) + + + From 5ee2d475050d6654dc3a91455f0055354b0ee2f1 Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 17:55:38 +0200 Subject: [PATCH 09/27] get it compile III --- src/Editor/Text/Def/Internal/Internal.csproj | 3 +++ src/Editor/Text/Def/TextUI/TextUI.csproj | 2 +- src/Editor/Text/Def/TextUIWpf/TextUIWpf.csproj | 4 ++++ .../Text/Impl/BraceCompletion/BraceCompletionImpl.csproj | 4 ++++ .../Text/Impl/PatternMatching/PatternMatchingImpl.csproj | 3 +++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Editor/Text/Def/Internal/Internal.csproj b/src/Editor/Text/Def/Internal/Internal.csproj index b6eb419..0557576 100644 --- a/src/Editor/Text/Def/Internal/Internal.csproj +++ b/src/Editor/Text/Def/Internal/Internal.csproj @@ -16,6 +16,9 @@ true $(TargetFramework) + + bin\Debug\ + diff --git a/src/Editor/Text/Def/TextUI/TextUI.csproj b/src/Editor/Text/Def/TextUI/TextUI.csproj index 92bd85c..54099f9 100644 --- a/src/Editor/Text/Def/TextUI/TextUI.csproj +++ b/src/Editor/Text/Def/TextUI/TextUI.csproj @@ -10,11 +10,11 @@ - + diff --git a/src/Editor/Text/Def/TextUIWpf/TextUIWpf.csproj b/src/Editor/Text/Def/TextUIWpf/TextUIWpf.csproj index a79c89e..ef80bd4 100644 --- a/src/Editor/Text/Def/TextUIWpf/TextUIWpf.csproj +++ b/src/Editor/Text/Def/TextUIWpf/TextUIWpf.csproj @@ -12,6 +12,9 @@ true $(TargetFramework) + + bin\Debug\ + @@ -28,6 +31,7 @@ + diff --git a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj index 679ed06..6e4f375 100644 --- a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj +++ b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj @@ -12,6 +12,10 @@ $(DefineConstants);WINDOWS $(TargetFramework) + + + bin\Debug\ + diff --git a/src/Editor/Text/Impl/PatternMatching/PatternMatchingImpl.csproj b/src/Editor/Text/Impl/PatternMatching/PatternMatchingImpl.csproj index eb6809d..07718bf 100644 --- a/src/Editor/Text/Impl/PatternMatching/PatternMatchingImpl.csproj +++ b/src/Editor/Text/Impl/PatternMatching/PatternMatchingImpl.csproj @@ -10,6 +10,9 @@ Microsoft.VisualStudio.Text.PatternMatching.Implementation true + + bin\Debug\ + From f32942135d2ed1acb0edab0782d196a3dbfd0cf3 Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 18:39:38 +0200 Subject: [PATCH 10/27] get BraceCompletionImpl overBraceCompletionImplGtk.csproj to compile --- VSEditorCore.sln | 9 +- .../Editor/IViewSynchronizationManager.cs | 22 ++ .../Text/Def/TextUIGtk/Editor/IXwtTextView.cs | 57 +++++ .../Text/Def/TextUIGtk/TextUIGtk.csproj | 3 + .../BraceCompletionAdornmentServiceGtk.cs | 223 ++++++++++++++++++ ... => BraceCompletionAdornmentServiceMac.cs} | 0 .../BraceCompletionImplGtk.csproj | 57 +++++ src/OpenSource.Impl.projitems | 10 +- 8 files changed, 379 insertions(+), 2 deletions(-) create mode 100644 src/Editor/Text/Def/TextUIGtk/Editor/IViewSynchronizationManager.cs create mode 100644 src/Editor/Text/Def/TextUIGtk/Editor/IXwtTextView.cs create mode 100644 src/Editor/Text/Impl/BraceCompletion/BraceCompletionAdornmentServiceGtk.cs rename src/Editor/Text/Impl/BraceCompletion/{BraceCompletionAdornmentService.cs => BraceCompletionAdornmentServiceMac.cs} (100%) create mode 100644 src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplGtk.csproj diff --git a/VSEditorCore.sln b/VSEditorCore.sln index fc09949..a6ab337 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -99,6 +99,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationFrameworkGtk", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUIGtk", "src\Editor\Text\Def\TextUIGtk\TextUIGtk.csproj", "{5E59E39C-6B80-4F63-9753-E872A10332AE}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BraceCompletionImplGtk", "src\Editor\Text\Impl\BraceCompletion\BraceCompletionImplGtk.csproj", "{033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU @@ -219,7 +221,6 @@ Global {E6518A68-6309-5458-8E15-B65A391CE8A8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.Windows|Any CPU.Build.0 = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gtk|Any CPU.Build.0 = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.macOS|Any CPU.Build.0 = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.Windows|Any CPU.ActiveCfg = Debug|Any CPU @@ -349,6 +350,12 @@ Global {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gtk|Any CPU.Build.0 = Debug|Any CPU {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.macOS|Any CPU.ActiveCfg = Debug|Any CPU + {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.macOS|Any CPU.Build.0 = Debug|Any CPU + {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU + {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Windows|Any CPU.Build.0 = Debug|Any CPU + {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gtk|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {522016EE-7098-5C37-844E-297AEDDEE1B4} = {01986EB1-3128-5838-B09A-7754A44C22CE} diff --git a/src/Editor/Text/Def/TextUIGtk/Editor/IViewSynchronizationManager.cs b/src/Editor/Text/Def/TextUIGtk/Editor/IViewSynchronizationManager.cs new file mode 100644 index 0000000..70eddaa --- /dev/null +++ b/src/Editor/Text/Def/TextUIGtk/Editor/IViewSynchronizationManager.cs @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +namespace Microsoft.VisualStudio.Text.Formatting +{ + using Microsoft.VisualStudio.Text.Editor; + + ///

+ /// Manage the simultaneous layout to two . + /// + public interface IViewSynchronizationManager + { + ITextView GetSubordinateView(ITextView masterView); + + bool TryGetAnchorPointInSubordinateView(SnapshotPoint anchorPoint, out SnapshotPoint correspondingAnchorPoint); + + SnapshotPoint GetAnchorPointAboveInSubordinateView(SnapshotPoint anchorPoint); + + void WhichPairedLinesShouldBeDisplayed(SnapshotPoint masterAnchorPoint, SnapshotPoint subordinateAnchorPoint, out bool layoutMaster, out bool layoutSubordinate, bool goingUp); + } +} \ No newline at end of file diff --git a/src/Editor/Text/Def/TextUIGtk/Editor/IXwtTextView.cs b/src/Editor/Text/Def/TextUIGtk/Editor/IXwtTextView.cs new file mode 100644 index 0000000..6084746 --- /dev/null +++ b/src/Editor/Text/Def/TextUIGtk/Editor/IXwtTextView.cs @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// + +using System; + +using Xwt; +using Microsoft.VisualStudio.Text.Formatting; +using Xwt.Drawing; + +namespace Microsoft.VisualStudio.Text.Editor +{ + public interface IXwtTextView : ITextView2 + { + /// + /// Gets the that renders the view. + /// + Widget VisualElement { get; } + + /// + /// Gets or sets the background for the visual element. + /// + Color Background { get; set; } + + /// + /// Occurs when the is set. + /// + event EventHandler BackgroundBrushChanged; + + /// + /// Occurs when the is set. + /// + event EventHandler ZoomLevelChanged; + + void PushCursor(object context, CursorType cursor); + + void PopCursor(object context); + + + /// + /// Gets or sets the Zoom level for the between 20% to 400% + /// + double ZoomLevel { get; set; } + + IXPlatAdornmentLayer GetXPlatAdornmentLayer(string name); + + ITextViewLineSource FormattedLineSource { get; } + + void Focus(); + + bool IsKeyboardFocused { get; } + event EventHandler IsKeyboardFocusedChanged; + + IViewSynchronizationManager SynchronizationManager { get; set; } + } +} diff --git a/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj b/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj index de94a5e..969e1ab 100644 --- a/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj +++ b/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj @@ -14,6 +14,9 @@ + + ..\..\..\..\..\libs\Xwt\Xwt.dll + diff --git a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionAdornmentServiceGtk.cs b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionAdornmentServiceGtk.cs new file mode 100644 index 0000000..0caa87e --- /dev/null +++ b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionAdornmentServiceGtk.cs @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// This file contain implementations details that are subject to change without notice. +// Use at your own risk. +// + +using Microsoft.VisualStudio.Language.Intellisense.AsyncCompletion.Data; + +namespace Microsoft.VisualStudio.Text.BraceCompletion.Implementation +{ + using Microsoft.VisualStudio.Text.Classification; + using Microsoft.VisualStudio.Text.Editor; + using Microsoft.VisualStudio.Text.Formatting; + using Microsoft.VisualStudio.Text.Utilities; + using System; + using System.Diagnostics; + using System.Windows; + using System.Windows.Media; + + /// + /// A service for displaying an adornment under the inner most closing brace. + /// + internal class BraceCompletionAdornmentService : IBraceCompletionAdornmentService + { + #region Private Members + + private ITrackingPoint _trackingPoint; + //private ICocoaTextView _textView; + private IXwtTextView _textView; + private IXPlatAdornmentLayer _adornmentLayer; + private readonly IEditorFormatMap _editorFormatMap; + private Brush _brush; + + #endregion + + // TODO: replace with IXwtTextView or similar + + + #region Constructors + + public BraceCompletionAdornmentService(ITextView textView, IEditorFormatMap editorFormatMap) + { + _textView = (IXwtTextView)textView; + _editorFormatMap = editorFormatMap; + + if (_textView == null) + throw new ArgumentNullException(nameof(textView)); + if (_editorFormatMap == null) + throw new ArgumentNullException(nameof(editorFormatMap)); + + _adornmentLayer = _textView.GetXPlatAdornmentLayer(PredefinedAdornmentLayers.BraceCompletion); + + SetBrush(); + RegisterEvents(); + } + + #endregion + + #region IBraceCompletionAdornmentService + + public ITrackingPoint Point + { + get + { + return _trackingPoint; + } + + set + { + if (_trackingPoint != value) + { + // always remove the old adornment first + if (_trackingPoint != null) + { + _adornmentLayer.RemoveAllAdornments(); + } + + _trackingPoint = value; + + if (_trackingPoint != null) + { + RenderAdornment(); + } + } + } + } + + #endregion + + #region Private Helpers + + private void RegisterEvents() + { + _textView.Closed += TextView_Closed; + _textView.LayoutChanged += TextView_LayoutChanged; + _editorFormatMap.FormatMappingChanged += EditorFormatMap_FormatMappingChanged; + } + + private void EditorFormatMap_FormatMappingChanged(object sender, FormatItemsEventArgs e) + { + if (e.ChangedItems.Contains(BraceCompletionFormat.FormatName)) + { + SetBrush(); + } + } + + private void TextView_Closed(object sender, EventArgs e) + { + UnregisterEvents(); + } + + private void UnregisterEvents() + { + _textView.Closed -= TextView_Closed; + _textView.LayoutChanged -= TextView_LayoutChanged; + _editorFormatMap.FormatMappingChanged -= EditorFormatMap_FormatMappingChanged; + } + + private void TextView_LayoutChanged(object sender, TextViewLayoutChangedEventArgs e) + { + if (_trackingPoint != null && _brush != null && _adornmentLayer.IsEmpty) + { + RenderAdornment(); + } + } + + // Draw the adornment + private void RenderAdornment() + { + Debug.Assert(_adornmentLayer.IsEmpty, "An adornment already exists"); + + if (_trackingPoint != null && _brush != null && !_textView.IsClosed && _textView.TextViewLines != null) + { + // map up from the subject buffer + SnapshotSpan? span = TranslatedSpan; + + // check that the span is visible + if (span.HasValue && _textView.TextViewLines.FormattedSpan.Contains(span.Value.Start)) + { + // TODO: refactor to Xwt + object xwtview = default; +#if TODO + TextBounds textBounds = _textView.TextViewLines.GetCharacterBounds(span.Value.Start); + var nsview = new AppKit.NSView(); + nsview.WantsLayer = true; + var color = ((SolidColorBrush)_brush).Color; + nsview.Layer.BackgroundColor = new CoreGraphics.CGColor(color.R / 255f, color.G / 255f, color.B / 255f); + nsview.Frame = new CoreGraphics.CGRect(textBounds.Left, textBounds.TextBottom, textBounds.Width, 2); +#endif + + _adornmentLayer.AddAdornment(XPlatAdornmentPositioningBehavior.TextRelative, span, null, xwtview, null); + } + } + } + + // Gives the span the adornment will occupy on the view buffer. + private SnapshotSpan? TranslatedSpan + { + get + { + SnapshotSpan? snapshotSpan = null; + ITextSnapshot snapshot = _textView.TextSnapshot; + SnapshotPoint? point = _trackingPoint.GetPoint(_trackingPoint.TextBuffer.CurrentSnapshot); + + // point.HasValue will be true since GetPoint always returns a point + if (point.Value.Snapshot != snapshot) + { + point = MappingPointSnapshot.MapUpToSnapshotNoTrack(snapshot, point.Value, PositionAffinity.Predecessor); + } + + if (point.HasValue && point.Value.Position > 0) + { + // The point is after the closing brace, we need to subtract 1 to get the span containing the brace. + snapshotSpan = new SnapshotSpan(point.Value.Subtract(1), 1); + } + + return snapshotSpan; + } + } + + // Set the fill color of the adornment + private void SetBrush() + { + var resourceDictionary = _editorFormatMap.GetProperties(BraceCompletionFormat.FormatName); + + _brush = null; + if (resourceDictionary != null && resourceDictionary.Contains(EditorFormatDefinition.BackgroundBrushId)) + { + Brush brush = resourceDictionary[EditorFormatDefinition.BackgroundBrushId] as Brush; + + // leave the brush null if the opacity is zero + if (brush != null && brush.Opacity > 0) + { + Debug.Assert(brush.IsFrozen); + _brush = brush; + + // update the adornment with the brush + SetBrushAndRedrawAdornment(); + } + } + else + { + // default to light blue if no format was found + Debug.Fail("Unable to get the brace completion adornment brush"); + _brush = Brushes.LightBlue; + } + } + + // Redraw the adornment if one exists + private void SetBrushAndRedrawAdornment() + { + if (_trackingPoint != null) + { + _adornmentLayer.RemoveAllAdornments(); + RenderAdornment(); + } + } + + #endregion + } +} diff --git a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionAdornmentService.cs b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionAdornmentServiceMac.cs similarity index 100% rename from src/Editor/Text/Impl/BraceCompletion/BraceCompletionAdornmentService.cs rename to src/Editor/Text/Impl/BraceCompletion/BraceCompletionAdornmentServiceMac.cs diff --git a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplGtk.csproj b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplGtk.csproj new file mode 100644 index 0000000..7ac8369 --- /dev/null +++ b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplGtk.csproj @@ -0,0 +1,57 @@ + + + + + + + + Microsoft.VisualStudio.Text.BraceCompletion.Implementation + $(AssemblyName) + 649;436;$(NoWarn) + true + $(DefineConstants);WINDOWS + $(TargetFramework) + + + + bin\Debug\ + + + + + + + + + + + + + + + + + + + + + + + + ResXFileCodeGenerator + Strings.Designer.cs + + + + + true + true + Strings.resx + + + + + + + + diff --git a/src/OpenSource.Impl.projitems b/src/OpenSource.Impl.projitems index 18c1eb2..8f5d661 100644 --- a/src/OpenSource.Impl.projitems +++ b/src/OpenSource.Impl.projitems @@ -157,4 +157,12 @@ true
- \ No newline at end of file + + + + + $(ReferencesVSEditorCopyToOutput) + true + + + From 3d48f76d4f709602d0ef1fd3787d4de6e6bd6e29 Mon Sep 17 00:00:00 2001 From: lytico Date: Fri, 24 Apr 2020 19:53:45 +0200 Subject: [PATCH 11/27] rename Gkt -> Gnome in solution --- VSEditorCore.sln | 175 +++++++++++++++++++++++++---------------------- 1 file changed, 93 insertions(+), 82 deletions(-) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index a6ab337..2d18b3d 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -105,7 +105,7 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU Windows|Any CPU = Windows|Any CPU - Gtk|Any CPU = Gtk|Any CPU + Gnome|Any CPU = Gnome|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -115,247 +115,258 @@ Global {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.macOS|Any CPU.Build.0 = Debug|Any CPU {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Windows|Any CPU.Build.0 = Debug|Any CPU - {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.macOS|Any CPU.Build.0 = Debug|Any CPU {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Windows|Any CPU.Build.0 = Debug|Any CPU + {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.macOS|Any CPU.Build.0 = Debug|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.Windows|Any CPU.Build.0 = Debug|Any CPU - {58999311-75E2-5099-856C-CAEE5CD13240}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {58999311-75E2-5099-856C-CAEE5CD13240}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {58999311-75E2-5099-856C-CAEE5CD13240}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {58999311-75E2-5099-856C-CAEE5CD13240}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.macOS|Any CPU.Build.0 = Debug|Any CPU {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Windows|Any CPU.Build.0 = Debug|Any CPU - {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {4A320450-5D4A-552B-9D33-4BB1FF841D95}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {4A320450-5D4A-552B-9D33-4BB1FF841D95}.macOS|Any CPU.Build.0 = Debug|Any CPU {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Windows|Any CPU.Build.0 = Debug|Any CPU - {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {4A320450-5D4A-552B-9D33-4BB1FF841D95}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.macOS|Any CPU.Build.0 = Debug|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Windows|Any CPU.Build.0 = Debug|Any CPU - {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {930FF802-57C2-519E-B2B3-C68CF7B8672E}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.macOS|Any CPU.Build.0 = Debug|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {F837FA63-028D-5780-8459-B9B92894B9EA}.Windows|Any CPU.Build.0 = Debug|Any CPU - {F837FA63-028D-5780-8459-B9B92894B9EA}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {F837FA63-028D-5780-8459-B9B92894B9EA}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {F837FA63-028D-5780-8459-B9B92894B9EA}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {F837FA63-028D-5780-8459-B9B92894B9EA}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.macOS|Any CPU.Build.0 = Debug|Any CPU {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Windows|Any CPU.Build.0 = Debug|Any CPU - {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {6308AAB7-9DF7-5C7B-8FF5-AA25FDFA642C}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.macOS|Any CPU.Build.0 = Debug|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Windows|Any CPU.Build.0 = Debug|Any CPU - {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.macOS|Any CPU.Build.0 = Debug|Any CPU {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Windows|Any CPU.Build.0 = Debug|Any CPU + {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.macOS|Any CPU.Build.0 = Debug|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Windows|Any CPU.Build.0 = Debug|Any CPU - {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {E75466D3-CC61-5625-99AC-278C0049BFFD}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {E75466D3-CC61-5625-99AC-278C0049BFFD}.macOS|Any CPU.Build.0 = Debug|Any CPU + {E75466D3-CC61-5625-99AC-278C0049BFFD}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {E75466D3-CC61-5625-99AC-278C0049BFFD}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {522016EE-7098-5C37-844E-297AEDDEE1B4}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {522016EE-7098-5C37-844E-297AEDDEE1B4}.macOS|Any CPU.Build.0 = Debug|Any CPU - {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.macOS|Any CPU.Build.0 = Debug|Any CPU - {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.macOS|Any CPU.Build.0 = Debug|Any CPU - {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {1C53C421-EAB4-5104-BEA1-164D09E40C54}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {1C53C421-EAB4-5104-BEA1-164D09E40C54}.macOS|Any CPU.Build.0 = Debug|Any CPU + {1C53C421-EAB4-5104-BEA1-164D09E40C54}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {1C53C421-EAB4-5104-BEA1-164D09E40C54}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.macOS|Any CPU.Build.0 = Debug|Any CPU - {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {2A67004F-832D-5D47-AA7D-26D1548EBB88}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {2A67004F-832D-5D47-AA7D-26D1548EBB88}.macOS|Any CPU.Build.0 = Debug|Any CPU {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Windows|Any CPU.Build.0 = Debug|Any CPU - {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {2A67004F-832D-5D47-AA7D-26D1548EBB88}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.macOS|Any CPU.Build.0 = Debug|Any CPU {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Windows|Any CPU.Build.0 = Debug|Any CPU - {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {B2040CA1-C6E3-5D44-89A2-6C1BE936184D}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {34D4D478-647E-509E-9B2F-7E11FAE15C73}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {34D4D478-647E-509E-9B2F-7E11FAE15C73}.macOS|Any CPU.Build.0 = Debug|Any CPU {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Windows|Any CPU.Build.0 = Debug|Any CPU - {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {34D4D478-647E-509E-9B2F-7E11FAE15C73}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.macOS|Any CPU.Build.0 = Debug|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.Windows|Any CPU.Build.0 = Debug|Any CPU - {4F556838-7D8A-542A-A886-3AF972665C3A}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {4F556838-7D8A-542A-A886-3AF972665C3A}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {4F556838-7D8A-542A-A886-3AF972665C3A}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {4F556838-7D8A-542A-A886-3AF972665C3A}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.macOS|Any CPU.Build.0 = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {E6518A68-6309-5458-8E15-B65A391CE8A8}.Windows|Any CPU.Build.0 = Debug|Any CPU - {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.macOS|Any CPU.Build.0 = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.Windows|Any CPU.Build.0 = Debug|Any CPU - {D559AC50-50B5-5C97-8F18-CA5581B16266}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {D559AC50-50B5-5C97-8F18-CA5581B16266}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {D559AC50-50B5-5C97-8F18-CA5581B16266}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {D559AC50-50B5-5C97-8F18-CA5581B16266}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {B1374407-B888-5E5C-8413-79E4F3440D61}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {B1374407-B888-5E5C-8413-79E4F3440D61}.macOS|Any CPU.Build.0 = Debug|Any CPU {B1374407-B888-5E5C-8413-79E4F3440D61}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {B1374407-B888-5E5C-8413-79E4F3440D61}.Windows|Any CPU.Build.0 = Debug|Any CPU - {B1374407-B888-5E5C-8413-79E4F3440D61}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {B1374407-B888-5E5C-8413-79E4F3440D61}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {B1374407-B888-5E5C-8413-79E4F3440D61}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {B1374407-B888-5E5C-8413-79E4F3440D61}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.macOS|Any CPU.Build.0 = Debug|Any CPU {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Windows|Any CPU.Build.0 = Debug|Any CPU - {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {9BF90695-9B58-5D2F-96DD-57B0C43B2D5D}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {47D4821C-121E-5886-8127-A13580FE508C}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {47D4821C-121E-5886-8127-A13580FE508C}.macOS|Any CPU.Build.0 = Debug|Any CPU {47D4821C-121E-5886-8127-A13580FE508C}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {47D4821C-121E-5886-8127-A13580FE508C}.Windows|Any CPU.Build.0 = Debug|Any CPU - {47D4821C-121E-5886-8127-A13580FE508C}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {47D4821C-121E-5886-8127-A13580FE508C}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {47D4821C-121E-5886-8127-A13580FE508C}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {47D4821C-121E-5886-8127-A13580FE508C}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.macOS|Any CPU.Build.0 = Debug|Any CPU {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Windows|Any CPU.Build.0 = Debug|Any CPU - {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {F36E2228-0ABB-5D93-919B-F9B0A71AC186}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.macOS|Any CPU.Build.0 = Debug|Any CPU {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Windows|Any CPU.Build.0 = Debug|Any CPU - {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {FFF452E1-C88A-5481-BB60-5F2D81EA8CD0}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.macOS|Any CPU.Build.0 = Debug|Any CPU {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Windows|Any CPU.Build.0 = Debug|Any CPU - {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {A8740D4A-6C05-548D-88D9-CAD8E756B20E}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.macOS|Any CPU.Build.0 = Debug|Any CPU {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Windows|Any CPU.Build.0 = Debug|Any CPU - {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {3130DB38-F8AA-5ABD-8237-66988CA4B66B}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.macOS|Any CPU.Build.0 = Debug|Any CPU {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Windows|Any CPU.Build.0 = Debug|Any CPU - {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {1E6EA3BC-75F1-5708-97EC-7FFA1E61941E}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {8C34FEFB-06D8-5559-BFA3-514171281325}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {8C34FEFB-06D8-5559-BFA3-514171281325}.macOS|Any CPU.Build.0 = Debug|Any CPU {8C34FEFB-06D8-5559-BFA3-514171281325}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {8C34FEFB-06D8-5559-BFA3-514171281325}.Windows|Any CPU.Build.0 = Debug|Any CPU - {8C34FEFB-06D8-5559-BFA3-514171281325}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {8C34FEFB-06D8-5559-BFA3-514171281325}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {8C34FEFB-06D8-5559-BFA3-514171281325}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {8C34FEFB-06D8-5559-BFA3-514171281325}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {C9A833EC-107D-5F96-906A-DEE43518FB18}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {C9A833EC-107D-5F96-906A-DEE43518FB18}.macOS|Any CPU.Build.0 = Debug|Any CPU {C9A833EC-107D-5F96-906A-DEE43518FB18}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {C9A833EC-107D-5F96-906A-DEE43518FB18}.Windows|Any CPU.Build.0 = Debug|Any CPU - {C9A833EC-107D-5F96-906A-DEE43518FB18}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {C9A833EC-107D-5F96-906A-DEE43518FB18}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {C9A833EC-107D-5F96-906A-DEE43518FB18}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {C9A833EC-107D-5F96-906A-DEE43518FB18}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {1E9081AB-DA57-5A98-82C6-7704040940AF}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {1E9081AB-DA57-5A98-82C6-7704040940AF}.macOS|Any CPU.Build.0 = Debug|Any CPU {1E9081AB-DA57-5A98-82C6-7704040940AF}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {1E9081AB-DA57-5A98-82C6-7704040940AF}.Windows|Any CPU.Build.0 = Debug|Any CPU - {1E9081AB-DA57-5A98-82C6-7704040940AF}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {1E9081AB-DA57-5A98-82C6-7704040940AF}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {1E9081AB-DA57-5A98-82C6-7704040940AF}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {1E9081AB-DA57-5A98-82C6-7704040940AF}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.macOS|Any CPU.Build.0 = Debug|Any CPU {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Windows|Any CPU.Build.0 = Debug|Any CPU - {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {FA1C9CCF-BE1F-5554-AC36-E55297A07775}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {E56636D5-1E6E-52B3-BEB5-11207293AE22}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {E56636D5-1E6E-52B3-BEB5-11207293AE22}.macOS|Any CPU.Build.0 = Debug|Any CPU {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Windows|Any CPU.Build.0 = Debug|Any CPU - {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {E56636D5-1E6E-52B3-BEB5-11207293AE22}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.macOS|Any CPU.Build.0 = Debug|Any CPU {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Windows|Any CPU.Build.0 = Debug|Any CPU - {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {6C8F77ED-8258-501A-B5D4-4E8F5ED378C4}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {ED3EA28C-3C37-5233-A975-721A152A109D}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {ED3EA28C-3C37-5233-A975-721A152A109D}.macOS|Any CPU.Build.0 = Debug|Any CPU {ED3EA28C-3C37-5233-A975-721A152A109D}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {ED3EA28C-3C37-5233-A975-721A152A109D}.Windows|Any CPU.Build.0 = Debug|Any CPU - {ED3EA28C-3C37-5233-A975-721A152A109D}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {ED3EA28C-3C37-5233-A975-721A152A109D}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {ED3EA28C-3C37-5233-A975-721A152A109D}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {ED3EA28C-3C37-5233-A975-721A152A109D}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.macOS|Any CPU.Build.0 = Debug|Any CPU {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Windows|Any CPU.Build.0 = Debug|Any CPU - {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {AA6E4924-8965-5007-AA82-54B1CE2B18AC}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.macOS|Any CPU.Build.0 = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Windows|Any CPU.Build.0 = Debug|Any CPU - {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gtk|Any CPU.Build.0 = Debug|Any CPU - {0E73055E-9DCB-554A-935B-60C223D82B83}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU + {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {E3E20ABF-9920-59BD-AA5B-96DC69D5382F}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.macOS|Any CPU.Build.0 = Debug|Any CPU {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Windows|Any CPU.Build.0 = Debug|Any CPU - {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {92E649D2-BE16-4688-ACA5-61ACC5556CFF}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {48C412AD-19A4-4F88-9458-96A41102C133}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {48C412AD-19A4-4F88-9458-96A41102C133}.macOS|Any CPU.Build.0 = Debug|Any CPU {48C412AD-19A4-4F88-9458-96A41102C133}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {48C412AD-19A4-4F88-9458-96A41102C133}.Windows|Any CPU.Build.0 = Debug|Any CPU - {48C412AD-19A4-4F88-9458-96A41102C133}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {48C412AD-19A4-4F88-9458-96A41102C133}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {48C412AD-19A4-4F88-9458-96A41102C133}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {48C412AD-19A4-4F88-9458-96A41102C133}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.macOS|Any CPU.Build.0 = Debug|Any CPU {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Windows|Any CPU.Build.0 = Debug|Any CPU - {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gtk|Any CPU.Build.0 = Debug|Any CPU - {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.macOS|Any CPU.Build.0 = Debug|Any CPU {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Windows|Any CPU.Build.0 = Debug|Any CPU - {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gtk|Any CPU.ActiveCfg = Debug|Any CPU - {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gtk|Any CPU.Build.0 = Debug|Any CPU + {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gnome|Any CPU.Build.0 = Gnome|Any CPU + {0E73055E-9DCB-554A-935B-60C223D82B83}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {0E73055E-9DCB-554A-935B-60C223D82B83}.Gnome|Any CPU.Build.0 = Gnome|Any CPU + {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gnome|Any CPU.Build.0 = Gnome|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {522016EE-7098-5C37-844E-297AEDDEE1B4} = {01986EB1-3128-5838-B09A-7754A44C22CE} From 71c1e0d3368d75fb1db1069cba742239e6b7865b Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 27 Apr 2020 17:39:29 +0200 Subject: [PATCH 12/27] remove Imaging, Extras: they are moved to TextUICocoa.csproj --- VSEditorCore.sln | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index 2d18b3d..3318781 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -5,8 +5,6 @@ VisualStudioVersion = 15.0.26124.0 MinimumVisualStudioVersion = 15.0.26124.0 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreUtility", "src\Editor\Core\Def\CoreUtility.csproj", "{079AB40D-EBFB-556E-AC42-1FE65D0E0327}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Imaging", "src\Editor\Imaging\Def\Imaging.csproj", "{71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextData", "src\Editor\Text\Def\TextData\TextData.csproj", "{58999311-75E2-5099-856C-CAEE5CD13240}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextLogic", "src\Editor\Text\Def\TextLogic\TextLogic.csproj", "{43DA95BB-5CAE-5E28-8DE1-64CB45E4396C}" @@ -21,8 +19,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntellisenseDef", "src\Edit EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Internal", "src\Editor\Text\Def\Internal\Internal.csproj", "{B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extras", "src\Editor\Text\Def\Extras\Extras.csproj", "{D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardClassification", "src\Editor\Language\Def\StandardClassification\StandardClassification.csproj", "{9A603430-A2C1-5599-AECB-1E1A5C229DFE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoa", "src\Editor\Text\Def\TextUICocoa\TextUICocoa.csproj", "{E75466D3-CC61-5625-99AC-278C0049BFFD}" @@ -117,12 +113,6 @@ Global {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Windows|Any CPU.Build.0 = Debug|Any CPU {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {079AB40D-EBFB-556E-AC42-1FE65D0E0327}.Gnome|Any CPU.Build.0 = Gnome|Any CPU - {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.macOS|Any CPU.ActiveCfg = Debug|Any CPU - {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.macOS|Any CPU.Build.0 = Debug|Any CPU - {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU - {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Windows|Any CPU.Build.0 = Debug|Any CPU - {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU - {71237F94-BC7F-5AA3-A3B5-3EBB84721CE8}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.macOS|Any CPU.Build.0 = Debug|Any CPU {58999311-75E2-5099-856C-CAEE5CD13240}.Windows|Any CPU.ActiveCfg = Debug|Any CPU @@ -165,12 +155,6 @@ Global {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Windows|Any CPU.Build.0 = Debug|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {B5F433E1-F4DB-5EBC-8CB7-E3F39E6628C4}.Gnome|Any CPU.Build.0 = Gnome|Any CPU - {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.macOS|Any CPU.ActiveCfg = Debug|Any CPU - {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.macOS|Any CPU.Build.0 = Debug|Any CPU - {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Windows|Any CPU.ActiveCfg = Debug|Any CPU - {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Windows|Any CPU.Build.0 = Debug|Any CPU - {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU - {D7E391EB-6FB6-50EA-AE0F-B5BF16DDA6BE}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.macOS|Any CPU.Build.0 = Debug|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Windows|Any CPU.ActiveCfg = Debug|Any CPU From e24b000f85f37addf9354dc92b34e347c490e479 Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 27 Apr 2020 18:25:37 +0200 Subject: [PATCH 13/27] rename *Gtk-proj-files to * & remove *Mac-proj-files --- build/Project.targets | 14 +++++++------- .../PresentationCore/PresentationCore.csproj | 15 +++++++++++++-- .../PresentationCoreGtk.csproj | 19 ------------------- .../PresentationCoreMac.csproj | 12 ++++++++++++ .../PresentationFramework.csproj | 12 ++++++++---- ...csproj => PresentationFrameworkMac.csproj} | 8 ++++---- src/Editor/FPF/WindowsBase/WindowsBase.csproj | 15 ++++++++++++--- ...wsBaseGtk.csproj => WindowsBaseMac.csproj} | 15 +++++---------- src/Editor/Text/Def/TextUI/TextUI.csproj | 4 ++-- .../BraceCompletionImpl.csproj | 7 ++++--- ...k.csproj => BraceCompletionImplMac.csproj} | 11 +++++++---- 11 files changed, 74 insertions(+), 58 deletions(-) delete mode 100644 src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj create mode 100644 src/Editor/FPF/PresentationCore/PresentationCoreMac.csproj rename src/Editor/FPF/PresentationFramework/{PresentationFrameworkGtk.csproj => PresentationFrameworkMac.csproj} (68%) rename src/Editor/FPF/WindowsBase/{WindowsBaseGtk.csproj => WindowsBaseMac.csproj} (50%) rename src/Editor/Text/Impl/BraceCompletion/{BraceCompletionImplGtk.csproj => BraceCompletionImplMac.csproj} (89%) diff --git a/build/Project.targets b/build/Project.targets index 3062665..348fc99 100644 --- a/build/Project.targets +++ b/build/Project.targets @@ -54,13 +54,13 @@ + Include="$(FPFRootPath)WindowsBase\WindowsBaseMac.csproj"/> + Include="$(FPFRootPath)PresentationCore\PresentationCoreMac.csproj"/> + Include="$(FPFRootPath)PresentationFramework\PresentationFrameworkMac.csproj"/> @@ -95,13 +95,13 @@ + Include="$(FPFRootPath)WindowsBase\WindowsBase.csproj"/> + Include="$(FPFRootPath)PresentationCore\PresentationCore.csproj"/> + Include="$(FPFRootPath)PresentationFramework\PresentationFramework.csproj"/> @@ -127,4 +127,4 @@
- \ No newline at end of file + diff --git a/src/Editor/FPF/PresentationCore/PresentationCore.csproj b/src/Editor/FPF/PresentationCore/PresentationCore.csproj index e8cefc0..94afd88 100644 --- a/src/Editor/FPF/PresentationCore/PresentationCore.csproj +++ b/src/Editor/FPF/PresentationCore/PresentationCore.csproj @@ -1,10 +1,21 @@ - + $(TargetFramework) + PresentationCore + PresentationCore + Debug;Release;Gnome + AnyCPU + + ..\..\..\..\libs\Xwt\Xwt.dll + - \ No newline at end of file + + + + + diff --git a/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj b/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj deleted file mode 100644 index f6727d5..0000000 --- a/src/Editor/FPF/PresentationCore/PresentationCoreGtk.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - $(TargetFramework) - PresentationCore - PresentationCore - - - - - - - ..\..\..\..\libs\Xwt\Xwt.dll - - - - - - - diff --git a/src/Editor/FPF/PresentationCore/PresentationCoreMac.csproj b/src/Editor/FPF/PresentationCore/PresentationCoreMac.csproj new file mode 100644 index 0000000..81c7e7c --- /dev/null +++ b/src/Editor/FPF/PresentationCore/PresentationCoreMac.csproj @@ -0,0 +1,12 @@ + + + $(TargetFramework) + Debug;Release;Gnome + AnyCPU + + + + + + + \ No newline at end of file diff --git a/src/Editor/FPF/PresentationFramework/PresentationFramework.csproj b/src/Editor/FPF/PresentationFramework/PresentationFramework.csproj index 90ae332..567b464 100644 --- a/src/Editor/FPF/PresentationFramework/PresentationFramework.csproj +++ b/src/Editor/FPF/PresentationFramework/PresentationFramework.csproj @@ -1,9 +1,13 @@  - + $(TargetFramework) + PresentationFramework + PresentationFramework + Debug;Release;Gnome + AnyCPU - - + + - + \ No newline at end of file diff --git a/src/Editor/FPF/PresentationFramework/PresentationFrameworkGtk.csproj b/src/Editor/FPF/PresentationFramework/PresentationFrameworkMac.csproj similarity index 68% rename from src/Editor/FPF/PresentationFramework/PresentationFrameworkGtk.csproj rename to src/Editor/FPF/PresentationFramework/PresentationFrameworkMac.csproj index 41ed3c6..03bb6ee 100644 --- a/src/Editor/FPF/PresentationFramework/PresentationFrameworkGtk.csproj +++ b/src/Editor/FPF/PresentationFramework/PresentationFrameworkMac.csproj @@ -1,11 +1,11 @@  - + $(TargetFramework) - PresentationFramework - PresentationFramework + Debug;Release;Gnome + AnyCPU - \ No newline at end of file + diff --git a/src/Editor/FPF/WindowsBase/WindowsBase.csproj b/src/Editor/FPF/WindowsBase/WindowsBase.csproj index dcd2c2d..5ca5915 100644 --- a/src/Editor/FPF/WindowsBase/WindowsBase.csproj +++ b/src/Editor/FPF/WindowsBase/WindowsBase.csproj @@ -1,14 +1,23 @@ - + 1699,67,618 true TRACE;NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM;MULTIPLEX_OS false false - $(TargetFramework) + WindowsBase + WindowsBase + Debug;Release;Gnome + AnyCPU + + ..\..\..\..\libs\Xwt\Xwt.dll + - \ No newline at end of file + + + + diff --git a/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj b/src/Editor/FPF/WindowsBase/WindowsBaseMac.csproj similarity index 50% rename from src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj rename to src/Editor/FPF/WindowsBase/WindowsBaseMac.csproj index 65a0685..3785132 100644 --- a/src/Editor/FPF/WindowsBase/WindowsBaseGtk.csproj +++ b/src/Editor/FPF/WindowsBase/WindowsBaseMac.csproj @@ -1,21 +1,16 @@ - + 1699,67,618 true TRACE;NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM;MULTIPLEX_OS false false - WindowsBase - WindowsBase + $(TargetFramework) + Debug;Release;Gnome + AnyCPU - - ..\..\..\..\libs\Xwt\Xwt.dll - - - - - + \ No newline at end of file diff --git a/src/Editor/Text/Def/TextUI/TextUI.csproj b/src/Editor/Text/Def/TextUI/TextUI.csproj index 54099f9..f8444b0 100644 --- a/src/Editor/Text/Def/TextUI/TextUI.csproj +++ b/src/Editor/Text/Def/TextUI/TextUI.csproj @@ -1,4 +1,4 @@ - + Microsoft.VisualStudio.Text.UI Microsoft.VisualStudio.Text.Editor @@ -14,7 +14,7 @@ - + diff --git a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj index 6e4f375..d8a7ef1 100644 --- a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj +++ b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImpl.csproj @@ -1,4 +1,4 @@ - + @@ -32,7 +32,7 @@ - + @@ -48,9 +48,10 @@ true Strings.resx + - \ No newline at end of file + diff --git a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplGtk.csproj b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplMac.csproj similarity index 89% rename from src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplGtk.csproj rename to src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplMac.csproj index 7ac8369..bd7a088 100644 --- a/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplGtk.csproj +++ b/src/Editor/Text/Impl/BraceCompletion/BraceCompletionImplMac.csproj @@ -1,5 +1,5 @@  - + @@ -16,6 +16,10 @@ bin\Debug\ + + + bin\Gnome\ + @@ -32,7 +36,7 @@ - + @@ -48,10 +52,9 @@ true Strings.resx - - + \ No newline at end of file From e0c6f2577232c686800bcd83184f9666690c18c9 Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 27 Apr 2020 18:25:52 +0200 Subject: [PATCH 14/27] rename *Gtk-proj-files to * & remove *Mac-proj-files in solution --- VSEditorCore.sln | 43 ++++--------------------------------------- 1 file changed, 4 insertions(+), 39 deletions(-) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index 3318781..b240403 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -21,20 +21,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Internal", "src\Editor\Text EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardClassification", "src\Editor\Language\Def\StandardClassification\StandardClassification.csproj", "{9A603430-A2C1-5599-AECB-1E1A5C229DFE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoa", "src\Editor\Text\Def\TextUICocoa\TextUICocoa.csproj", "{E75466D3-CC61-5625-99AC-278C0049BFFD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPF_Mac", "FPF_Mac", "{01986EB1-3128-5838-B09A-7754A44C22CE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsBase", "src\Editor\FPF\WindowsBase\WindowsBase.csproj", "{522016EE-7098-5C37-844E-297AEDDEE1B4}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationProvider", "src\Editor\FPF\UIAutomationProvider\UIAutomationProvider.csproj", "{A1D6A6EC-B9A2-518C-8358-298CD775D2B5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationTypes", "src\Editor\FPF\UIAutomationTypes\UIAutomationTypes.csproj", "{AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationCore", "src\Editor\FPF\PresentationCore\PresentationCore.csproj", "{0E73055E-9DCB-554A-935B-60C223D82B83}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationFramework", "src\Editor\FPF\PresentationFramework\PresentationFramework.csproj", "{1C53C421-EAB4-5104-BEA1-164D09E40C54}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UIAutomationClient", "src\Editor\FPF\UIAutomationClient\UIAutomationClient.csproj", "{F26AC124-3EB5-5DA2-AE13-51904AFBFB70}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextDataUtil", "src\Editor\Text\Util\TextDataUtil\TextDataUtil.csproj", "{2A67004F-832D-5D47-AA7D-26D1548EBB88}" @@ -45,8 +35,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreUtilityImpl", "src\Edit EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextLogicUtil", "src\Editor\Text\Util\TextLogicUtil\TextLogicUtil.csproj", "{4F556838-7D8A-542A-A886-3AF972665C3A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BraceCompletionImpl", "src\Editor\Text\Impl\BraceCompletion\BraceCompletionImpl.csproj", "{E6518A68-6309-5458-8E15-B65A391CE8A8}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextBufferUndoManagerImpl", "src\Editor\Text\Impl\TextBufferUndoManager\TextBufferUndoManagerImpl.csproj", "{D559AC50-50B5-5C97-8F18-CA5581B16266}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextSearchImpl", "src\Editor\Text\Impl\TextSearch\TextSearchImpl.csproj", "{B1374407-B888-5E5C-8413-79E4F3440D61}" @@ -83,19 +71,19 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Outlining", "src\Editor\Tex EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PatternMatchingImpl", "src\Editor\Text\Impl\PatternMatching\PatternMatchingImpl.csproj", "{E3E20ABF-9920-59BD-AA5B-96DC69D5382F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationCoreGtk", "src\Editor\FPF\PresentationCore\PresentationCoreGtk.csproj", "{92E649D2-BE16-4688-ACA5-61ACC5556CFF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationCoreGtk", "src\Editor\FPF\PresentationCore\PresentationCore.csproj", "{92E649D2-BE16-4688-ACA5-61ACC5556CFF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPF_Gtk", "FPF_Gtk", "{F2475C0D-E5DD-470D-8521-6796F503C021}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPF_Shared", "FPF_Shared", "{552D852C-5C72-44F8-9BA7-AE2A6D6EE586}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsBaseGtk", "src\Editor\FPF\WindowsBase\WindowsBaseGtk.csproj", "{48C412AD-19A4-4F88-9458-96A41102C133}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsBaseGtk", "src\Editor\FPF\WindowsBase\WindowsBase.csproj", "{48C412AD-19A4-4F88-9458-96A41102C133}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationFrameworkGtk", "src\Editor\FPF\PresentationFramework\PresentationFrameworkGtk.csproj", "{ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PresentationFrameworkGtk", "src\Editor\FPF\PresentationFramework\PresentationFramework.csproj", "{ED220B4F-68E7-4A71-A215-40BBEFBDA9B6}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUIGtk", "src\Editor\Text\Def\TextUIGtk\TextUIGtk.csproj", "{5E59E39C-6B80-4F63-9753-E872A10332AE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BraceCompletionImplGtk", "src\Editor\Text\Impl\BraceCompletion\BraceCompletionImplGtk.csproj", "{033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BraceCompletionImplGtk", "src\Editor\Text\Impl\BraceCompletion\BraceCompletionImpl.csproj", "{033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -161,14 +149,6 @@ Global {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Windows|Any CPU.Build.0 = Debug|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {9A603430-A2C1-5599-AECB-1E1A5C229DFE}.Gnome|Any CPU.Build.0 = Gnome|Any CPU - {E75466D3-CC61-5625-99AC-278C0049BFFD}.macOS|Any CPU.ActiveCfg = Debug|Any CPU - {E75466D3-CC61-5625-99AC-278C0049BFFD}.macOS|Any CPU.Build.0 = Debug|Any CPU - {E75466D3-CC61-5625-99AC-278C0049BFFD}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU - {E75466D3-CC61-5625-99AC-278C0049BFFD}.Gnome|Any CPU.Build.0 = Gnome|Any CPU - {522016EE-7098-5C37-844E-297AEDDEE1B4}.macOS|Any CPU.ActiveCfg = Debug|Any CPU - {522016EE-7098-5C37-844E-297AEDDEE1B4}.macOS|Any CPU.Build.0 = Debug|Any CPU - {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU - {522016EE-7098-5C37-844E-297AEDDEE1B4}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.macOS|Any CPU.Build.0 = Debug|Any CPU {A1D6A6EC-B9A2-518C-8358-298CD775D2B5}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU @@ -177,10 +157,6 @@ Global {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.macOS|Any CPU.Build.0 = Debug|Any CPU {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67}.Gnome|Any CPU.Build.0 = Gnome|Any CPU - {1C53C421-EAB4-5104-BEA1-164D09E40C54}.macOS|Any CPU.ActiveCfg = Debug|Any CPU - {1C53C421-EAB4-5104-BEA1-164D09E40C54}.macOS|Any CPU.Build.0 = Debug|Any CPU - {1C53C421-EAB4-5104-BEA1-164D09E40C54}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU - {1C53C421-EAB4-5104-BEA1-164D09E40C54}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.macOS|Any CPU.Build.0 = Debug|Any CPU {F26AC124-3EB5-5DA2-AE13-51904AFBFB70}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU @@ -209,12 +185,6 @@ Global {4F556838-7D8A-542A-A886-3AF972665C3A}.Windows|Any CPU.Build.0 = Debug|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {4F556838-7D8A-542A-A886-3AF972665C3A}.Gnome|Any CPU.Build.0 = Gnome|Any CPU - {E6518A68-6309-5458-8E15-B65A391CE8A8}.macOS|Any CPU.ActiveCfg = Debug|Any CPU - {E6518A68-6309-5458-8E15-B65A391CE8A8}.macOS|Any CPU.Build.0 = Debug|Any CPU - {E6518A68-6309-5458-8E15-B65A391CE8A8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU - {E6518A68-6309-5458-8E15-B65A391CE8A8}.Windows|Any CPU.Build.0 = Debug|Any CPU - {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU - {E6518A68-6309-5458-8E15-B65A391CE8A8}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.macOS|Any CPU.Build.0 = Debug|Any CPU {D559AC50-50B5-5C97-8F18-CA5581B16266}.Windows|Any CPU.ActiveCfg = Debug|Any CPU @@ -347,15 +317,10 @@ Global {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Windows|Any CPU.Build.0 = Debug|Any CPU {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gnome|Any CPU.Build.0 = Gnome|Any CPU - {0E73055E-9DCB-554A-935B-60C223D82B83}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU - {0E73055E-9DCB-554A-935B-60C223D82B83}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gnome|Any CPU.Build.0 = Gnome|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution - {522016EE-7098-5C37-844E-297AEDDEE1B4} = {01986EB1-3128-5838-B09A-7754A44C22CE} - {0E73055E-9DCB-554A-935B-60C223D82B83} = {01986EB1-3128-5838-B09A-7754A44C22CE} - {1C53C421-EAB4-5104-BEA1-164D09E40C54} = {01986EB1-3128-5838-B09A-7754A44C22CE} {92E649D2-BE16-4688-ACA5-61ACC5556CFF} = {F2475C0D-E5DD-470D-8521-6796F503C021} {AE3666FC-31FA-5EBF-8ED5-0CEF50186B67} = {552D852C-5C72-44F8-9BA7-AE2A6D6EE586} {A1D6A6EC-B9A2-518C-8358-298CD775D2B5} = {552D852C-5C72-44F8-9BA7-AE2A6D6EE586} From 943d731cd755b6d6bc5682e56f39814dfdcf03ff Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 27 Apr 2020 18:26:24 +0200 Subject: [PATCH 15/27] rename *Gtk-proj-files to * track changes in OpenSource.Impl.projitems --- src/OpenSource.Impl.projitems | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/OpenSource.Impl.projitems b/src/OpenSource.Impl.projitems index 8f5d661..c9ca91c 100644 --- a/src/OpenSource.Impl.projitems +++ b/src/OpenSource.Impl.projitems @@ -2,15 +2,15 @@ - + FPF $(ReferencesVSEditorCopyToOutput) - + FPF $(ReferencesVSEditorCopyToOutput) - + FPF $(ReferencesVSEditorCopyToOutput) @@ -29,15 +29,15 @@ - + FPF $(ReferencesVSEditorCopyToOutput) - + FPF $(ReferencesVSEditorCopyToOutput) - + FPF $(ReferencesVSEditorCopyToOutput) @@ -152,7 +152,7 @@ $(ReferencesVSEditorCopyToOutput) true - + $(ReferencesVSEditorCopyToOutput) true @@ -160,7 +160,7 @@ - + $(ReferencesVSEditorCopyToOutput) true From 0ee22028773022003f95125fc29c6a3422752132 Mon Sep 17 00:00:00 2001 From: lytico Date: Tue, 28 Apr 2020 02:53:29 +0200 Subject: [PATCH 16/27] Update README.md --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fc31ff4..afd995e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ +# WARNING! THIS BRANCH IS A STUB + +its indended to compile, NOT TO WORK at this time + +it contains Microsoft Visual Studio Editor API resolved over Mono.Xwt-Stubs + +# this is the original readme: + # Microsoft Visual Studio Editor API This repository contains the open source layers of the Microsoft Visual @@ -135,4 +143,4 @@ additional questions or comments. We are generally not accepting pull requests for this repository for the core editor code at this time. Please feel free to submit pull requests for -other content in this repository, including new samples. \ No newline at end of file +other content in this repository, including new samples. From 38319a5dfda274f896809cc2ca6463fb630d3ea8 Mon Sep 17 00:00:00 2001 From: lytico Date: Wed, 29 Apr 2020 03:56:11 +0200 Subject: [PATCH 17/27] extract TextUiCommon from TextUICocoa --- .../Text/Def/TextUICocoa/TextUICocoa.csproj | 4 +++ .../Text/Def/TextUIGtk/TextUIGtk.csproj | 1 + .../Editor/IViewSynchronizationManager.cs | 0 .../Extras/Find/FindCommandArgs.cs | 0 .../Extras/Find/IFindPresenter.cs | 0 .../Extras/Find/IFindPresenterFactory.cs | 0 .../Extras/GoToLine/GoToLineCommandArgs.cs | 0 .../Extras/GoToLine/IGoToLinePresenter.cs | 0 .../GoToLine/IGoToLinePresenterFactory.cs | 0 .../Extras/InfoBar/IInfoBarPresenter.cs | 0 .../InfoBar/IInfoBarPresenterFactory.cs | 0 .../Extras/InfoBar/InfoBarViewModel.cs | 0 .../GlyphMargin/IGlyphFactory.cs | 0 .../GlyphMargin/IGlyphTag.cs | 0 .../Imaging/Catalogs/LightBulbImageCatalog.cs | 0 .../Imaging/Catalogs/OverviewMarginCatalog.cs | 0 .../Catalogs/SignatureHelpImageCatalog.cs | 0 .../Imaging/IImageService.cs | 0 .../Imaging/ImageDescription.cs | 0 .../Imaging/ImageTags.cs | 0 .../Text/Def/TextUiCommon/TextUICommon.csproj | 33 +++++++++++++++++++ 21 files changed, 38 insertions(+) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Editor/IViewSynchronizationManager.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/Find/FindCommandArgs.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/Find/IFindPresenter.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/Find/IFindPresenterFactory.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/GoToLine/GoToLineCommandArgs.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/GoToLine/IGoToLinePresenter.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/GoToLine/IGoToLinePresenterFactory.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/InfoBar/IInfoBarPresenter.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/InfoBar/IInfoBarPresenterFactory.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Extras/InfoBar/InfoBarViewModel.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/GlyphMargin/IGlyphFactory.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/GlyphMargin/IGlyphTag.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Imaging/Catalogs/LightBulbImageCatalog.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Imaging/Catalogs/OverviewMarginCatalog.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Imaging/Catalogs/SignatureHelpImageCatalog.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Imaging/IImageService.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Imaging/ImageDescription.cs (100%) rename src/Editor/Text/Def/{TextUICocoa => TextUiCommon}/Imaging/ImageTags.cs (100%) create mode 100644 src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj diff --git a/src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj b/src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj index 920cc6b..24a0c3d 100644 --- a/src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj +++ b/src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj @@ -8,10 +8,14 @@ + + + + \ No newline at end of file diff --git a/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj b/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj index 969e1ab..4308134 100644 --- a/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj +++ b/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj @@ -25,6 +25,7 @@ + diff --git a/src/Editor/Text/Def/TextUICocoa/Editor/IViewSynchronizationManager.cs b/src/Editor/Text/Def/TextUiCommon/Editor/IViewSynchronizationManager.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Editor/IViewSynchronizationManager.cs rename to src/Editor/Text/Def/TextUiCommon/Editor/IViewSynchronizationManager.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/Find/FindCommandArgs.cs b/src/Editor/Text/Def/TextUiCommon/Extras/Find/FindCommandArgs.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/Find/FindCommandArgs.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/Find/FindCommandArgs.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/Find/IFindPresenter.cs b/src/Editor/Text/Def/TextUiCommon/Extras/Find/IFindPresenter.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/Find/IFindPresenter.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/Find/IFindPresenter.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/Find/IFindPresenterFactory.cs b/src/Editor/Text/Def/TextUiCommon/Extras/Find/IFindPresenterFactory.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/Find/IFindPresenterFactory.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/Find/IFindPresenterFactory.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/GoToLine/GoToLineCommandArgs.cs b/src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/GoToLineCommandArgs.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/GoToLine/GoToLineCommandArgs.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/GoToLineCommandArgs.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/GoToLine/IGoToLinePresenter.cs b/src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/IGoToLinePresenter.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/GoToLine/IGoToLinePresenter.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/IGoToLinePresenter.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/GoToLine/IGoToLinePresenterFactory.cs b/src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/IGoToLinePresenterFactory.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/GoToLine/IGoToLinePresenterFactory.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/IGoToLinePresenterFactory.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/InfoBar/IInfoBarPresenter.cs b/src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/IInfoBarPresenter.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/InfoBar/IInfoBarPresenter.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/IInfoBarPresenter.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/InfoBar/IInfoBarPresenterFactory.cs b/src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/IInfoBarPresenterFactory.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/InfoBar/IInfoBarPresenterFactory.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/IInfoBarPresenterFactory.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Extras/InfoBar/InfoBarViewModel.cs b/src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/InfoBarViewModel.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Extras/InfoBar/InfoBarViewModel.cs rename to src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/InfoBarViewModel.cs diff --git a/src/Editor/Text/Def/TextUICocoa/GlyphMargin/IGlyphFactory.cs b/src/Editor/Text/Def/TextUiCommon/GlyphMargin/IGlyphFactory.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/GlyphMargin/IGlyphFactory.cs rename to src/Editor/Text/Def/TextUiCommon/GlyphMargin/IGlyphFactory.cs diff --git a/src/Editor/Text/Def/TextUICocoa/GlyphMargin/IGlyphTag.cs b/src/Editor/Text/Def/TextUiCommon/GlyphMargin/IGlyphTag.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/GlyphMargin/IGlyphTag.cs rename to src/Editor/Text/Def/TextUiCommon/GlyphMargin/IGlyphTag.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Imaging/Catalogs/LightBulbImageCatalog.cs b/src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/LightBulbImageCatalog.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Imaging/Catalogs/LightBulbImageCatalog.cs rename to src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/LightBulbImageCatalog.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Imaging/Catalogs/OverviewMarginCatalog.cs b/src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/OverviewMarginCatalog.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Imaging/Catalogs/OverviewMarginCatalog.cs rename to src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/OverviewMarginCatalog.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Imaging/Catalogs/SignatureHelpImageCatalog.cs b/src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/SignatureHelpImageCatalog.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Imaging/Catalogs/SignatureHelpImageCatalog.cs rename to src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/SignatureHelpImageCatalog.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Imaging/IImageService.cs b/src/Editor/Text/Def/TextUiCommon/Imaging/IImageService.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Imaging/IImageService.cs rename to src/Editor/Text/Def/TextUiCommon/Imaging/IImageService.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Imaging/ImageDescription.cs b/src/Editor/Text/Def/TextUiCommon/Imaging/ImageDescription.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Imaging/ImageDescription.cs rename to src/Editor/Text/Def/TextUiCommon/Imaging/ImageDescription.cs diff --git a/src/Editor/Text/Def/TextUICocoa/Imaging/ImageTags.cs b/src/Editor/Text/Def/TextUiCommon/Imaging/ImageTags.cs similarity index 100% rename from src/Editor/Text/Def/TextUICocoa/Imaging/ImageTags.cs rename to src/Editor/Text/Def/TextUiCommon/Imaging/ImageTags.cs diff --git a/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj b/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj new file mode 100644 index 0000000..488d508 --- /dev/null +++ b/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj @@ -0,0 +1,33 @@ + + + + Microsoft.VisualStudio.Text.UI.Common + $(AssemblyName) + true + 649;436;8073;$(NoWarn) + true + $(TargetFramework) + + + bin\Debug\ + + + bin\Gnome\ + + + + + + + + + + + + + + + + + + From f09d4e6aff2325d2992e4b4b237d7011a7ac8acf Mon Sep 17 00:00:00 2001 From: lytico Date: Wed, 29 Apr 2020 12:31:11 +0200 Subject: [PATCH 18/27] TextUICommon.csproj: adjust configuration --- src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj b/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj index 488d508..0d84d35 100644 --- a/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj +++ b/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj @@ -1,4 +1,4 @@ - + Microsoft.VisualStudio.Text.UI.Common @@ -11,9 +11,6 @@ bin\Debug\ - - bin\Gnome\ - From 83bb72bdc966b2429f254c39e7ee0170179f621f Mon Sep 17 00:00:00 2001 From: lytico Date: Wed, 29 Apr 2020 14:37:50 +0200 Subject: [PATCH 19/27] adjust path to TextUICommon.csproj & add to OpenSource.Def.projitems --- VSEditorCore.sln | 14 ++++++++++++++ .../Editor/IViewSynchronizationManager.cs | 0 .../Extras/Find/FindCommandArgs.cs | 0 .../Extras/Find/IFindPresenter.cs | 0 .../Extras/Find/IFindPresenterFactory.cs | 0 .../Extras/GoToLine/GoToLineCommandArgs.cs | 0 .../Extras/GoToLine/IGoToLinePresenter.cs | 0 .../Extras/GoToLine/IGoToLinePresenterFactory.cs | 0 .../Extras/InfoBar/IInfoBarPresenter.cs | 0 .../Extras/InfoBar/IInfoBarPresenterFactory.cs | 0 .../Extras/InfoBar/InfoBarViewModel.cs | 0 .../GlyphMargin/IGlyphFactory.cs | 0 .../GlyphMargin/IGlyphTag.cs | 0 .../Imaging/Catalogs/LightBulbImageCatalog.cs | 0 .../Imaging/Catalogs/OverviewMarginCatalog.cs | 0 .../Imaging/Catalogs/SignatureHelpImageCatalog.cs | 0 .../Imaging/IImageService.cs | 0 .../Imaging/ImageDescription.cs | 0 .../Imaging/ImageTags.cs | 0 .../TextUICommon.csproj | 3 --- src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj | 2 +- src/OpenSource.Def.projitems | 3 +++ 22 files changed, 18 insertions(+), 4 deletions(-) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Editor/IViewSynchronizationManager.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/Find/FindCommandArgs.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/Find/IFindPresenter.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/Find/IFindPresenterFactory.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/GoToLine/GoToLineCommandArgs.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/GoToLine/IGoToLinePresenter.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/GoToLine/IGoToLinePresenterFactory.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/InfoBar/IInfoBarPresenter.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/InfoBar/IInfoBarPresenterFactory.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Extras/InfoBar/InfoBarViewModel.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/GlyphMargin/IGlyphFactory.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/GlyphMargin/IGlyphTag.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Imaging/Catalogs/LightBulbImageCatalog.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Imaging/Catalogs/OverviewMarginCatalog.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Imaging/Catalogs/SignatureHelpImageCatalog.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Imaging/IImageService.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Imaging/ImageDescription.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/Imaging/ImageTags.cs (100%) rename src/Editor/Text/Def/{TextUiCommon => TextUICommon}/TextUICommon.csproj (93%) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index b240403..e899502 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -85,6 +85,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUIGtk", "src\Editor\Tex EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BraceCompletionImplGtk", "src\Editor\Text\Impl\BraceCompletion\BraceCompletionImpl.csproj", "{033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICommon", "src\Editor\Text\Def\TextUICommon\TextUICommon.csproj", "{F163FDDD-6716-4B60-9221-5993256C7476}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU @@ -319,6 +321,18 @@ Global {033186E5-D2CB-4DA2-B34C-427BA8CFD5D8}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {5E59E39C-6B80-4F63-9753-E872A10332AE}.Gnome|Any CPU.Build.0 = Gnome|Any CPU + {F163FDDD-6716-4B60-9221-5993256C7476}.macOS|Any CPU.ActiveCfg = Debug|Any CPU + {F163FDDD-6716-4B60-9221-5993256C7476}.macOS|Any CPU.Build.0 = Debug|Any CPU + {F163FDDD-6716-4B60-9221-5993256C7476}.Windows|Any CPU.ActiveCfg = Debug|Any CPU + {F163FDDD-6716-4B60-9221-5993256C7476}.Windows|Any CPU.Build.0 = Debug|Any CPU + {F163FDDD-6716-4B60-9221-5993256C7476}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU + {F163FDDD-6716-4B60-9221-5993256C7476}.Gnome|Any CPU.Build.0 = Gnome|Any CPU + {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.macOS|Any CPU.ActiveCfg = Debug|Any CPU + {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.macOS|Any CPU.Build.0 = Debug|Any CPU + {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.Windows|Any CPU.ActiveCfg = Debug|Any CPU + {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.Windows|Any CPU.Build.0 = Debug|Any CPU + {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.Gnome|Any CPU.ActiveCfg = Debug|Any CPU + {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.Gnome|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {92E649D2-BE16-4688-ACA5-61ACC5556CFF} = {F2475C0D-E5DD-470D-8521-6796F503C021} diff --git a/src/Editor/Text/Def/TextUiCommon/Editor/IViewSynchronizationManager.cs b/src/Editor/Text/Def/TextUICommon/Editor/IViewSynchronizationManager.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Editor/IViewSynchronizationManager.cs rename to src/Editor/Text/Def/TextUICommon/Editor/IViewSynchronizationManager.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/Find/FindCommandArgs.cs b/src/Editor/Text/Def/TextUICommon/Extras/Find/FindCommandArgs.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/Find/FindCommandArgs.cs rename to src/Editor/Text/Def/TextUICommon/Extras/Find/FindCommandArgs.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/Find/IFindPresenter.cs b/src/Editor/Text/Def/TextUICommon/Extras/Find/IFindPresenter.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/Find/IFindPresenter.cs rename to src/Editor/Text/Def/TextUICommon/Extras/Find/IFindPresenter.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/Find/IFindPresenterFactory.cs b/src/Editor/Text/Def/TextUICommon/Extras/Find/IFindPresenterFactory.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/Find/IFindPresenterFactory.cs rename to src/Editor/Text/Def/TextUICommon/Extras/Find/IFindPresenterFactory.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/GoToLineCommandArgs.cs b/src/Editor/Text/Def/TextUICommon/Extras/GoToLine/GoToLineCommandArgs.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/GoToLineCommandArgs.cs rename to src/Editor/Text/Def/TextUICommon/Extras/GoToLine/GoToLineCommandArgs.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/IGoToLinePresenter.cs b/src/Editor/Text/Def/TextUICommon/Extras/GoToLine/IGoToLinePresenter.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/IGoToLinePresenter.cs rename to src/Editor/Text/Def/TextUICommon/Extras/GoToLine/IGoToLinePresenter.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/IGoToLinePresenterFactory.cs b/src/Editor/Text/Def/TextUICommon/Extras/GoToLine/IGoToLinePresenterFactory.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/GoToLine/IGoToLinePresenterFactory.cs rename to src/Editor/Text/Def/TextUICommon/Extras/GoToLine/IGoToLinePresenterFactory.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/IInfoBarPresenter.cs b/src/Editor/Text/Def/TextUICommon/Extras/InfoBar/IInfoBarPresenter.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/IInfoBarPresenter.cs rename to src/Editor/Text/Def/TextUICommon/Extras/InfoBar/IInfoBarPresenter.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/IInfoBarPresenterFactory.cs b/src/Editor/Text/Def/TextUICommon/Extras/InfoBar/IInfoBarPresenterFactory.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/IInfoBarPresenterFactory.cs rename to src/Editor/Text/Def/TextUICommon/Extras/InfoBar/IInfoBarPresenterFactory.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/InfoBarViewModel.cs b/src/Editor/Text/Def/TextUICommon/Extras/InfoBar/InfoBarViewModel.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Extras/InfoBar/InfoBarViewModel.cs rename to src/Editor/Text/Def/TextUICommon/Extras/InfoBar/InfoBarViewModel.cs diff --git a/src/Editor/Text/Def/TextUiCommon/GlyphMargin/IGlyphFactory.cs b/src/Editor/Text/Def/TextUICommon/GlyphMargin/IGlyphFactory.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/GlyphMargin/IGlyphFactory.cs rename to src/Editor/Text/Def/TextUICommon/GlyphMargin/IGlyphFactory.cs diff --git a/src/Editor/Text/Def/TextUiCommon/GlyphMargin/IGlyphTag.cs b/src/Editor/Text/Def/TextUICommon/GlyphMargin/IGlyphTag.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/GlyphMargin/IGlyphTag.cs rename to src/Editor/Text/Def/TextUICommon/GlyphMargin/IGlyphTag.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/LightBulbImageCatalog.cs b/src/Editor/Text/Def/TextUICommon/Imaging/Catalogs/LightBulbImageCatalog.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/LightBulbImageCatalog.cs rename to src/Editor/Text/Def/TextUICommon/Imaging/Catalogs/LightBulbImageCatalog.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/OverviewMarginCatalog.cs b/src/Editor/Text/Def/TextUICommon/Imaging/Catalogs/OverviewMarginCatalog.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/OverviewMarginCatalog.cs rename to src/Editor/Text/Def/TextUICommon/Imaging/Catalogs/OverviewMarginCatalog.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/SignatureHelpImageCatalog.cs b/src/Editor/Text/Def/TextUICommon/Imaging/Catalogs/SignatureHelpImageCatalog.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Imaging/Catalogs/SignatureHelpImageCatalog.cs rename to src/Editor/Text/Def/TextUICommon/Imaging/Catalogs/SignatureHelpImageCatalog.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Imaging/IImageService.cs b/src/Editor/Text/Def/TextUICommon/Imaging/IImageService.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Imaging/IImageService.cs rename to src/Editor/Text/Def/TextUICommon/Imaging/IImageService.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Imaging/ImageDescription.cs b/src/Editor/Text/Def/TextUICommon/Imaging/ImageDescription.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Imaging/ImageDescription.cs rename to src/Editor/Text/Def/TextUICommon/Imaging/ImageDescription.cs diff --git a/src/Editor/Text/Def/TextUiCommon/Imaging/ImageTags.cs b/src/Editor/Text/Def/TextUICommon/Imaging/ImageTags.cs similarity index 100% rename from src/Editor/Text/Def/TextUiCommon/Imaging/ImageTags.cs rename to src/Editor/Text/Def/TextUICommon/Imaging/ImageTags.cs diff --git a/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj b/src/Editor/Text/Def/TextUICommon/TextUICommon.csproj similarity index 93% rename from src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj rename to src/Editor/Text/Def/TextUICommon/TextUICommon.csproj index 0d84d35..bdccb23 100644 --- a/src/Editor/Text/Def/TextUiCommon/TextUICommon.csproj +++ b/src/Editor/Text/Def/TextUICommon/TextUICommon.csproj @@ -11,9 +11,6 @@ bin\Debug\ - - - diff --git a/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj b/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj index 4308134..6f32055 100644 --- a/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj +++ b/src/Editor/Text/Def/TextUIGtk/TextUIGtk.csproj @@ -25,7 +25,7 @@ - + diff --git a/src/OpenSource.Def.projitems b/src/OpenSource.Def.projitems index a48cdca..7fdbbc2 100644 --- a/src/OpenSource.Def.projitems +++ b/src/OpenSource.Def.projitems @@ -42,5 +42,8 @@ $(ReferencesVSEditorCopyToOutput) + + $(ReferencesVSEditorCopyToOutput) + From 440e301eb81626c032d929cebaa96ac329e50dfc Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 4 May 2020 20:15:18 +0200 Subject: [PATCH 20/27] TextUIGtk: adjust IXwtTextView & remove IViewSynchronizationManager (is already in TextUICommon) --- .../Editor/IViewSynchronizationManager.cs | 22 ------------------- .../Text/Def/TextUIGtk/Editor/IXwtTextView.cs | 2 +- 2 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 src/Editor/Text/Def/TextUIGtk/Editor/IViewSynchronizationManager.cs diff --git a/src/Editor/Text/Def/TextUIGtk/Editor/IViewSynchronizationManager.cs b/src/Editor/Text/Def/TextUIGtk/Editor/IViewSynchronizationManager.cs deleted file mode 100644 index 70eddaa..0000000 --- a/src/Editor/Text/Def/TextUIGtk/Editor/IViewSynchronizationManager.cs +++ /dev/null @@ -1,22 +0,0 @@ -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -namespace Microsoft.VisualStudio.Text.Formatting -{ - using Microsoft.VisualStudio.Text.Editor; - - /// - /// Manage the simultaneous layout to two . - /// - public interface IViewSynchronizationManager - { - ITextView GetSubordinateView(ITextView masterView); - - bool TryGetAnchorPointInSubordinateView(SnapshotPoint anchorPoint, out SnapshotPoint correspondingAnchorPoint); - - SnapshotPoint GetAnchorPointAboveInSubordinateView(SnapshotPoint anchorPoint); - - void WhichPairedLinesShouldBeDisplayed(SnapshotPoint masterAnchorPoint, SnapshotPoint subordinateAnchorPoint, out bool layoutMaster, out bool layoutSubordinate, bool goingUp); - } -} \ No newline at end of file diff --git a/src/Editor/Text/Def/TextUIGtk/Editor/IXwtTextView.cs b/src/Editor/Text/Def/TextUIGtk/Editor/IXwtTextView.cs index 6084746..90727f3 100644 --- a/src/Editor/Text/Def/TextUIGtk/Editor/IXwtTextView.cs +++ b/src/Editor/Text/Def/TextUIGtk/Editor/IXwtTextView.cs @@ -14,7 +14,7 @@ namespace Microsoft.VisualStudio.Text.Editor public interface IXwtTextView : ITextView2 { /// - /// Gets the that renders the view. + /// Gets the that renders the view. /// Widget VisualElement { get; } From 13df22b2e4b75ede5ae8500f97eba1d0dd9578ba Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 4 May 2020 21:20:48 +0200 Subject: [PATCH 21/27] add TextUICocoaUtil again --- VSEditorCore.sln | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index e899502..7c46af7 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -87,6 +87,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BraceCompletionImplGtk", "s EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICommon", "src\Editor\Text\Def\TextUICommon\TextUICommon.csproj", "{F163FDDD-6716-4B60-9221-5993256C7476}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoaUtil", "src\Editor\Text\Util\TextUICocoaUtil\TextUICocoaUtil.csproj", "{30EBE0A1-DE87-4250-B979-E60F994C846C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU @@ -327,12 +329,8 @@ Global {F163FDDD-6716-4B60-9221-5993256C7476}.Windows|Any CPU.Build.0 = Debug|Any CPU {F163FDDD-6716-4B60-9221-5993256C7476}.Gnome|Any CPU.ActiveCfg = Gnome|Any CPU {F163FDDD-6716-4B60-9221-5993256C7476}.Gnome|Any CPU.Build.0 = Gnome|Any CPU - {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.macOS|Any CPU.ActiveCfg = Debug|Any CPU - {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.macOS|Any CPU.Build.0 = Debug|Any CPU - {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.Windows|Any CPU.ActiveCfg = Debug|Any CPU - {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.Windows|Any CPU.Build.0 = Debug|Any CPU - {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.Gnome|Any CPU.ActiveCfg = Debug|Any CPU - {3C40BF0D-7C84-40D7-8335-67E0B2BADD18}.Gnome|Any CPU.Build.0 = Debug|Any CPU + {30EBE0A1-DE87-4250-B979-E60F994C846C}.macOS|Any CPU.ActiveCfg = Debug|Any CPU + {30EBE0A1-DE87-4250-B979-E60F994C846C}.macOS|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {92E649D2-BE16-4688-ACA5-61ACC5556CFF} = {F2475C0D-E5DD-470D-8521-6796F503C021} From c1a0f8cd5d8778ceb32e60ea820e08d3e74c82bd Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 4 May 2020 21:22:22 +0200 Subject: [PATCH 22/27] add TextUICocoa again --- VSEditorCore.sln | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/VSEditorCore.sln b/VSEditorCore.sln index 7c46af7..61550f2 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -89,6 +89,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICommon", "src\Editor\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoaUtil", "src\Editor\Text\Util\TextUICocoaUtil\TextUICocoaUtil.csproj", "{30EBE0A1-DE87-4250-B979-E60F994C846C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoa", "src\Editor\Text\Def\TextUICocoa\TextUICocoa.csproj", "{600ABC2F-3A1D-4167-A31F-586F3A319989}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU @@ -331,6 +333,8 @@ Global {F163FDDD-6716-4B60-9221-5993256C7476}.Gnome|Any CPU.Build.0 = Gnome|Any CPU {30EBE0A1-DE87-4250-B979-E60F994C846C}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {30EBE0A1-DE87-4250-B979-E60F994C846C}.macOS|Any CPU.Build.0 = Debug|Any CPU + {600ABC2F-3A1D-4167-A31F-586F3A319989}.macOS|Any CPU.ActiveCfg = Debug|Any CPU + {600ABC2F-3A1D-4167-A31F-586F3A319989}.macOS|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {92E649D2-BE16-4688-ACA5-61ACC5556CFF} = {F2475C0D-E5DD-470D-8521-6796F503C021} From 51fd27a3d965d10acc0ede7de0a5cc3605ad9743 Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 4 May 2020 21:48:18 +0200 Subject: [PATCH 23/27] TextUICocoa.csproj, TextUICommon.csproj: cleanup directory slack --- src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj | 3 --- src/Editor/Text/Def/TextUICommon/TextUICommon.csproj | 4 ---- 2 files changed, 7 deletions(-) diff --git a/src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj b/src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj index 24a0c3d..243b1d3 100644 --- a/src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj +++ b/src/Editor/Text/Def/TextUICocoa/TextUICocoa.csproj @@ -15,7 +15,4 @@ - - - \ No newline at end of file diff --git a/src/Editor/Text/Def/TextUICommon/TextUICommon.csproj b/src/Editor/Text/Def/TextUICommon/TextUICommon.csproj index bdccb23..555aa41 100644 --- a/src/Editor/Text/Def/TextUICommon/TextUICommon.csproj +++ b/src/Editor/Text/Def/TextUICommon/TextUICommon.csproj @@ -19,9 +19,5 @@ - - - - From bf48c6242bd02330f489fca1f05b8a60f5ccbce0 Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 4 May 2020 21:49:08 +0200 Subject: [PATCH 24/27] introduce TextUIGtkUtil --- VSEditorCore.sln | 4 + src/Editor/Text/Def/TextUI/AssemblyInfo.cs | 1 + .../Text/Util/TextUIGtkUtil/AssemblyInfo.cs | 48 ++++++ .../TextUIGtkUtil/DifferenceBrushManager.cs | 119 +++++++++++++++ .../TextUIGtkUtil/GtkTextViewZoomManager.cs | 62 ++++++++ .../TextUIGtkUtil/IDragDropMouseProcessor.cs | 27 ++++ .../Util/TextUIGtkUtil/TelemetryLogger.cs | 142 ++++++++++++++++++ .../Util/TextUIGtkUtil/TextUIGtkUtil.csproj | 27 ++++ 8 files changed, 430 insertions(+) create mode 100644 src/Editor/Text/Util/TextUIGtkUtil/AssemblyInfo.cs create mode 100644 src/Editor/Text/Util/TextUIGtkUtil/DifferenceBrushManager.cs create mode 100644 src/Editor/Text/Util/TextUIGtkUtil/GtkTextViewZoomManager.cs create mode 100644 src/Editor/Text/Util/TextUIGtkUtil/IDragDropMouseProcessor.cs create mode 100644 src/Editor/Text/Util/TextUIGtkUtil/TelemetryLogger.cs create mode 100644 src/Editor/Text/Util/TextUIGtkUtil/TextUIGtkUtil.csproj diff --git a/VSEditorCore.sln b/VSEditorCore.sln index 61550f2..bfebced 100644 --- a/VSEditorCore.sln +++ b/VSEditorCore.sln @@ -91,6 +91,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoaUtil", "src\Edit EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUICocoa", "src\Editor\Text\Def\TextUICocoa\TextUICocoa.csproj", "{600ABC2F-3A1D-4167-A31F-586F3A319989}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextUIGtkUtil", "src\Editor\Text\Util\TextUIGtkUtil\TextUIGtkUtil.csproj", "{4385E82C-782B-4CD2-9AB0-494B948DB51B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution macOS|Any CPU = macOS|Any CPU @@ -335,6 +337,8 @@ Global {30EBE0A1-DE87-4250-B979-E60F994C846C}.macOS|Any CPU.Build.0 = Debug|Any CPU {600ABC2F-3A1D-4167-A31F-586F3A319989}.macOS|Any CPU.ActiveCfg = Debug|Any CPU {600ABC2F-3A1D-4167-A31F-586F3A319989}.macOS|Any CPU.Build.0 = Debug|Any CPU + {4385E82C-782B-4CD2-9AB0-494B948DB51B}.Gnome|Any CPU.ActiveCfg = Debug|Any CPU + {4385E82C-782B-4CD2-9AB0-494B948DB51B}.Gnome|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {92E649D2-BE16-4688-ACA5-61ACC5556CFF} = {F2475C0D-E5DD-470D-8521-6796F503C021} diff --git a/src/Editor/Text/Def/TextUI/AssemblyInfo.cs b/src/Editor/Text/Def/TextUI/AssemblyInfo.cs index 174963d..e99e05d 100644 --- a/src/Editor/Text/Def/TextUI/AssemblyInfo.cs +++ b/src/Editor/Text/Def/TextUI/AssemblyInfo.cs @@ -25,6 +25,7 @@ [assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Cocoa.View.Implementation, PublicKey=" + ThisAssembly.PublicKey)] [assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.AdornmentLibrary.VisibleWhitespace.Implementation, PublicKey=" + ThisAssembly.PublicKey)] [assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.UI.Cocoa.Utilities, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.UI.Gtk.Utilities, PublicKey=" + ThisAssembly.PublicKey)] [assembly: InternalsVisibleTo("MonoDevelop.TextEditor, PublicKey=002400000c800000940000000602000000240000525341310004000001000100e1290d741888d13312c0cd1f72bb843236573c80158a286f11bb98de5ee8acc3142c9c97b472684e521ae45125d7414558f2e70ac56504f3e8fe80830da2cdb1cda8504e8d196150d05a214609234694ec0ebf4b37fc7537e09d877c3e65000f7467fa3adb6e62c82b10ada1af4a83651556c7d949959817fed97480839dd39b")] diff --git a/src/Editor/Text/Util/TextUIGtkUtil/AssemblyInfo.cs b/src/Editor/Text/Util/TextUIGtkUtil/AssemblyInfo.cs new file mode 100644 index 0000000..539b531 --- /dev/null +++ b/src/Editor/Text/Util/TextUIGtkUtil/AssemblyInfo.cs @@ -0,0 +1,48 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.ConstrainedExecution; +using System.Security.Permissions; + +[assembly: InternalsVisibleTo("EditorTestApp, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Language.Intellisense.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.DifferenceViewer.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.Differencing.DifferenceViewer.UnitTests, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.Editor.PrintingService.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.MultiCaret.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.MultiCaret.Implementation.UI, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.OverviewMargin.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.TextViewUnitTestHelper, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.UI.Utilities.UnitTests, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.AdornmentLibrary.TextMarker.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.AdornmentLibrary.ToolTip.Wpf.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Commanding.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Commanding.Implementation.UnitTests, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.CurrentLineHighlighter.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.TextMarkerAdornment.UnitTests, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.Classification.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.DragDrop.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.GlyphMargin.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.Input.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.Input.UnitTests, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.OverviewMargin.UnitTests, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.View.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.View.UnitTests, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Wpf.FileHealthIndicator.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Implementation, PublicKey=" + ThisAssembly.PublicKey)] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Text.UI.Utilities.UnitTests, PublicKey=" + ThisAssembly.PublicKey)] + +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.UI.Text.Gtk.View.Implementation, PublicKey=" + ThisAssembly.PublicKey)] + +// +// 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: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.Execution)] +[assembly: ReliabilityContract(Consistency.MayCorruptProcess, Cer.MayFail)] diff --git a/src/Editor/Text/Util/TextUIGtkUtil/DifferenceBrushManager.cs b/src/Editor/Text/Util/TextUIGtkUtil/DifferenceBrushManager.cs new file mode 100644 index 0000000..929e29c --- /dev/null +++ b/src/Editor/Text/Util/TextUIGtkUtil/DifferenceBrushManager.cs @@ -0,0 +1,119 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// This file contain implementations details that are subject to change without notice. +// Use at your own risk. +// +using System; +using System.Linq; +using System.Windows.Media; +using Microsoft.VisualStudio.Text.Classification; +using Microsoft.VisualStudio.Text.Editor; + +namespace Microsoft.VisualStudio.Text.Utilities +{ + class DifferenceBrushManager + { + public static DifferenceBrushManager GetBrushManager(ITextView view, IEditorFormatMapService formatMapService) + { + return view.Properties.GetOrCreateSingletonProperty(() => new DifferenceBrushManager(view, formatMapService.GetEditorFormatMap(view))); + } + + public static DifferenceBrushManager GetBrushManager(ITextView view, IEditorFormatMap formatMap) + { + return view.Properties.GetOrCreateSingletonProperty(() => new DifferenceBrushManager(view, formatMap)); + } + + // internal for unit testing + internal static readonly SolidColorBrush _defaultRemovedLineBrush = Brushes.PaleVioletRed; + internal static readonly SolidColorBrush _defaultAddedLineBrush = Brushes.LightYellow; + internal static readonly SolidColorBrush _defaultRemovedWordBrush = Brushes.Red; + internal static readonly SolidColorBrush _defaultAddedWordBrush = Brushes.Yellow; + + IEditorFormatMap _formatMap; + + #region Public properties (brushes) and changed event + + public Brush RemovedLineBrush { get; private set; } + public Brush AddedLineBrush { get; private set; } + + public Brush RemovedWordBrush { get; private set; } + public Brush RemovedWordForegroundBrush { get; private set; } + public Pen RemovedWordForegroundPen { get; private set; } + public Brush AddedWordBrush { get; private set; } + public Brush AddedWordForegroundBrush { get; private set; } + public Pen AddedWordForegroundPen { get; private set; } + + public Brush ViewportBrush { get; private set; } + public Pen ViewportPen { get; private set; } + public Brush OverviewBrush { get; private set; } + + public event EventHandler BrushesChanged; + + #endregion + + internal DifferenceBrushManager(ITextView view, IEditorFormatMap formatMap) + { + _formatMap = formatMap; + + InitializeBrushes(); + + _formatMap.FormatMappingChanged += FormatMapChanged; + view.Closed += (s, a) => { _formatMap.FormatMappingChanged -= FormatMapChanged; }; + } + + void InitializeBrushes() + { + RemovedLineBrush = GetBrushValue("deltadiff.remove.line", _defaultRemovedLineBrush); + RemovedWordBrush = GetBrushValue("deltadiff.remove.word", _defaultRemovedWordBrush); + RemovedWordForegroundBrush = GetBrushValue("deltadiff.remove.word", _defaultRemovedWordBrush, EditorFormatDefinition.ForegroundBrushId); + RemovedWordForegroundPen = new Pen(RemovedWordForegroundBrush, 2.0); + RemovedWordForegroundPen.Freeze(); + + AddedLineBrush = GetBrushValue("deltadiff.add.line", _defaultAddedLineBrush); + AddedWordBrush = GetBrushValue("deltadiff.add.word", _defaultAddedWordBrush); + AddedWordForegroundBrush = GetBrushValue("deltadiff.add.word", _defaultAddedWordBrush, EditorFormatDefinition.ForegroundBrushId); + AddedWordForegroundPen = new Pen(AddedWordForegroundBrush, 2.0); + AddedWordForegroundPen.Freeze(); + + ViewportBrush = GetBrushValue("deltadiff.overview.color", Brushes.DarkGray, EditorFormatDefinition.ForegroundBrushId); + ViewportPen = new Pen(ViewportBrush, 2.0); + ViewportPen.Freeze(); + + OverviewBrush = GetBrushValue("deltadiff.overview.color", Brushes.Gray); + + var temp = BrushesChanged; + if (temp != null) + temp(this, EventArgs.Empty); + } + + Brush GetBrushValue(string formatName, Brush defaultValue, string resource = EditorFormatDefinition.BackgroundBrushId) + { + var formatProperties = _formatMap.GetProperties(formatName); + if (formatProperties != null && formatProperties.Contains(resource)) + { + var brushValue = formatProperties[resource] as Brush; + if (brushValue != null) + return brushValue; + } + + return defaultValue; + } + + void FormatMapChanged(object sender, FormatItemsEventArgs e) + { + bool updateRequired = e.ChangedItems.Any(item => + string.Equals(item, "deltadiff.add.word", System.StringComparison.OrdinalIgnoreCase) || + string.Equals(item, "deltadiff.add.line", System.StringComparison.OrdinalIgnoreCase) || + string.Equals(item, "deltadiff.remove.word", System.StringComparison.OrdinalIgnoreCase) || + string.Equals(item, "deltadiff.remove.line", System.StringComparison.OrdinalIgnoreCase) || + string.Equals(item, "deltadiff.overview.color", System.StringComparison.OrdinalIgnoreCase)); + + if (updateRequired) + { + InitializeBrushes(); + } + } + } +} diff --git a/src/Editor/Text/Util/TextUIGtkUtil/GtkTextViewZoomManager.cs b/src/Editor/Text/Util/TextUIGtkUtil/GtkTextViewZoomManager.cs new file mode 100644 index 0000000..045888e --- /dev/null +++ b/src/Editor/Text/Util/TextUIGtkUtil/GtkTextViewZoomManager.cs @@ -0,0 +1,62 @@ + +using System; +using Microsoft.VisualStudio.Text.Editor; +using Microsoft.VisualStudio.Utilities; + +namespace Microsoft.VisualStudio.Text.Utilities +{ + [ExportImplementation(typeof(ITextViewZoomManager))] + [Name("Gtk zoom manager")] + [Order(Before = "default")] + internal class GtkTextViewZoomManager : ITextViewZoomManager + { + public double ZoomLevel(ITextView textView) => ((IXwtTextView)textView).ZoomLevel; + + public void ZoomIn(ITextView textView) + { + if (textView is null) + { + throw new ArgumentNullException(nameof(textView)); + } + + if (textView is IXwtTextView xwtTextView && xwtTextView.Roles.Contains(PredefinedTextViewRoles.Zoomable)) + { + double zoomLevel = xwtTextView.ZoomLevel * ZoomConstants.ScalingFactor; + if (zoomLevel < ZoomConstants.MaxZoom || Math.Abs(zoomLevel - ZoomConstants.MaxZoom) < 0.00001) + { + xwtTextView.Options.GlobalOptions.SetOptionValue(DefaultTextViewOptions.ZoomLevelId, zoomLevel); + } + } + } + + public void ZoomOut(ITextView textView) + { + if (textView is null) + { + throw new ArgumentNullException(nameof(textView)); + } + + if (textView is IXwtTextView xwtTextView && xwtTextView.Roles.Contains(PredefinedTextViewRoles.Zoomable)) + { + double zoomLevel = xwtTextView.ZoomLevel / ZoomConstants.ScalingFactor; + if (zoomLevel > ZoomConstants.MinZoom || Math.Abs(zoomLevel - ZoomConstants.MinZoom) < 0.00001) + { + xwtTextView.Options.GlobalOptions.SetOptionValue(DefaultTextViewOptions.ZoomLevelId, zoomLevel); + } + } + } + + public void ZoomTo(ITextView textView, double zoomLevel) + { + if (textView is null) + { + throw new ArgumentNullException(nameof(textView)); + } + + if (textView is IXwtTextView xwtTextView && xwtTextView.Roles.Contains(PredefinedTextViewRoles.Zoomable)) + { + xwtTextView.Options.GlobalOptions.SetOptionValue(DefaultTextViewOptions.ZoomLevelId, zoomLevel); + } + } + } +} diff --git a/src/Editor/Text/Util/TextUIGtkUtil/IDragDropMouseProcessor.cs b/src/Editor/Text/Util/TextUIGtkUtil/IDragDropMouseProcessor.cs new file mode 100644 index 0000000..185f0a8 --- /dev/null +++ b/src/Editor/Text/Util/TextUIGtkUtil/IDragDropMouseProcessor.cs @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +namespace Microsoft.VisualStudio.Text.Utilities +{ + using System.Windows; + using System.Windows.Input; + + /// + /// This interface is a used as an abstraction of the DragDropMouseProcessor so that it can be called from the left margin + /// to handle drag/drop. + /// + public interface IDragDropMouseProcessor + { + void DoPreprocessMouseLeftButtonDown(MouseButtonEventArgs e, Point position); + void DoPreprocessMouseLeftButtonUp(MouseButtonEventArgs e, Point position); + void DoPostprocessMouseLeftButtonUp(MouseButtonEventArgs e, Point position); + void DoPreprocessMouseMove(MouseEventArgs e, Point position); + void DoPreprocessDrop(DragEventArgs e, Point position); + void DoPreprocessDragEnter(DragEventArgs e, Point position); + void DoPreprocessDragLeave(DragEventArgs e); + void DoPreprocessDragOver(DragEventArgs e, Point position); + void DoPreprocessQueryContinueDrag(QueryContinueDragEventArgs e); + void DoPostprocessMouseLeave(MouseEventArgs e); + } +} \ No newline at end of file diff --git a/src/Editor/Text/Util/TextUIGtkUtil/TelemetryLogger.cs b/src/Editor/Text/Util/TextUIGtkUtil/TelemetryLogger.cs new file mode 100644 index 0000000..912930c --- /dev/null +++ b/src/Editor/Text/Util/TextUIGtkUtil/TelemetryLogger.cs @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +using System; +using System.ComponentModel.Composition; +using System.Windows.Threading; + +namespace Microsoft.VisualStudio.Text.Utilities +{ + [Export] + [PartCreationPolicy(CreationPolicy.Shared)] + internal sealed class TelemetryLogger + { + // This import may fail if we are running outside of VS, in scenarios such as CodeFlow. That is ok + // and this logging code should gracefully no-op in that case. + [Import(AllowDefault = true)] + private ILoggingServiceInternal LoggingService { get; set; } + + public const string VSEditorKey = "VS/Editor"; + + const string ExceptionEventName = VSEditorKey + "/Exception"; + + DispatcherTimer _touchZoomTimer = null; + DispatcherTimer _touchScrollTimer = null; + DispatcherTimer _zoomTimer = null; + DispatcherTimer _scrollTimer = null; + + uint _lastZoomLevel = 0; + readonly TimeSpan _timeout = TimeSpan.FromMilliseconds(1000.0); + + public void LogTouchZoom() + { + if (LoggingService != null) + { + if (_touchZoomTimer == null) + { + _touchZoomTimer = new DispatcherTimer(); + _touchZoomTimer.Interval = _timeout; + _touchZoomTimer.Tick += (s, e) => + { + _touchZoomTimer.Stop(); + LoggingService.AdjustCounter(TelemetryLogger.VSEditorKey, "TouchZoom", delta: 1); + }; + } + + // Restart timer + _touchZoomTimer.Stop(); + _touchZoomTimer.Start(); + } + } + + public void LogZoom(uint finalZoomLevel) + { + if (LoggingService != null) + { + if (_zoomTimer == null) + { + _zoomTimer = new DispatcherTimer(); + _zoomTimer.Interval = _timeout; + _zoomTimer.Tick += (s, e) => + { + _zoomTimer.Stop(); + LoggingService.PostEvent("VS/Editor/Zoom", "VS.Editor.Zoom.LastZoomLevel", _lastZoomLevel); + }; + } + + // Restart timer + _zoomTimer.Stop(); + + // Set _lastZoomLevel between stop and start out of paranoia regarding race conditions that shouldn't + // actually occur while using DispatcherTimer, since it runs all on the same thread. However, if the + // underlying timer get's changed, and this set were above the stop, there's a chance that we could + // occasionally log incorrect data if the set happened, and then tick occurred before the stop. + _lastZoomLevel = finalZoomLevel; + + _zoomTimer.Start(); + } + } + + public void LogTouchScroll() + { + if (LoggingService != null) + { + if (_touchScrollTimer == null) + { + _touchScrollTimer = new DispatcherTimer(); + _touchScrollTimer.Interval = _timeout; + _touchScrollTimer.Tick += (s, e) => + { + _touchScrollTimer.Stop(); + LoggingService.AdjustCounter(TelemetryLogger.VSEditorKey, "TouchScroll", delta: 1); + }; + } + + // Restart timer + _touchScrollTimer.Stop(); + _touchScrollTimer.Start(); + } + } + + public void LogScroll() + { + if (LoggingService != null) + { + if (_scrollTimer == null) + { + _scrollTimer = new DispatcherTimer(); + _scrollTimer.Interval = _timeout; + _scrollTimer.Tick += (s, e) => + { + _scrollTimer.Stop(); + LoggingService.AdjustCounter(TelemetryLogger.VSEditorKey, "Scroll", delta: 1); + }; + } + + // Restart timer + _scrollTimer.Stop(); + _scrollTimer.Start(); + } + } + + public void LogException( + Exception exception, + string description = "An unhandled exception occurred in the editor") + { + try + { + LoggingService?.PostFault( + ExceptionEventName, + description, + exception); + } + catch { } + } + + public void PostCounters() + { + LoggingService?.PostCounters(); + } + } +} \ No newline at end of file diff --git a/src/Editor/Text/Util/TextUIGtkUtil/TextUIGtkUtil.csproj b/src/Editor/Text/Util/TextUIGtkUtil/TextUIGtkUtil.csproj new file mode 100644 index 0000000..e386cb8 --- /dev/null +++ b/src/Editor/Text/Util/TextUIGtkUtil/TextUIGtkUtil.csproj @@ -0,0 +1,27 @@ + + + + Microsoft.VisualStudio.Text.UI.Gtk.Utilities + $(AssemblyName) + true + 649;436;8073;$(NoWarn) + true + $(TargetFramework) + + + + + + + + + + + + + + + + + + From a08a7f0f2141b6b535e7f6a704dffa105cbf99e5 Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 4 May 2020 23:03:52 +0200 Subject: [PATCH 25/27] add TextUIGtkUtil to OpenSource.Impl.projitems --- src/OpenSource.Impl.projitems | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/OpenSource.Impl.projitems b/src/OpenSource.Impl.projitems index c9ca91c..a1b803a 100644 --- a/src/OpenSource.Impl.projitems +++ b/src/OpenSource.Impl.projitems @@ -160,6 +160,10 @@ + + $(ReferencesVSEditorCopyToOutput) + true + $(ReferencesVSEditorCopyToOutput) true From fd52e7be2beb7bdb61c23059ed6fec6ce56da667 Mon Sep 17 00:00:00 2001 From: lytico Date: Mon, 7 Dec 2020 18:07:46 +0100 Subject: [PATCH 26/27] WindowsBase.csproj: adjust TargetFramework --- src/Editor/FPF/WindowsBase/WindowsBase.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Editor/FPF/WindowsBase/WindowsBase.csproj b/src/Editor/FPF/WindowsBase/WindowsBase.csproj index 5ca5915..c4c493b 100644 --- a/src/Editor/FPF/WindowsBase/WindowsBase.csproj +++ b/src/Editor/FPF/WindowsBase/WindowsBase.csproj @@ -1,5 +1,6 @@  + $(TargetFramework) 1699,67,618 true TRACE;NET_4_0;NET_4_5;NET_4_6;MONO;WIN_PLATFORM;MULTIPLEX_OS From e5f8d21c734da8e41123258450b82787e142765b Mon Sep 17 00:00:00 2001 From: lytico Date: Wed, 21 Apr 2021 22:09:32 +0200 Subject: [PATCH 27/27] Update packages.config System.Net.Http vulnerability found --- samples/AsyncCompletion/HelloWorldCompletion/packages.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/AsyncCompletion/HelloWorldCompletion/packages.config b/samples/AsyncCompletion/HelloWorldCompletion/packages.config index ee578ff..fc7b21a 100644 --- a/samples/AsyncCompletion/HelloWorldCompletion/packages.config +++ b/samples/AsyncCompletion/HelloWorldCompletion/packages.config @@ -97,7 +97,7 @@ - + @@ -119,4 +119,4 @@ - \ No newline at end of file +