diff --git a/.gitremotes b/.gitremotes index 5d34203..bd825d4 100644 --- a/.gitremotes +++ b/.gitremotes @@ -1,10 +1,2 @@ -FSI.Lib http://desiaugetc7-088:3000/FSI/FSI.Lib.git (fetch) -FSI.Lib http://desiaugetc7-088:3000/FSI/FSI.Lib.git (push) -NHotkey http://desiaugetc7-088:3000/FSI/NHotkey.git (fetch) -NHotkey http://desiaugetc7-088:3000/FSI/NHotkey.git (push) -NotifyIconWpf http://desiaugetc7-088:3000/FSI/NotifyIconWpf.git (fetch) -NotifyIconWpf http://desiaugetc7-088:3000/FSI/NotifyIconWpf.git (push) -RadialMenu http://desiaugetc7-088:3000/FSI/RadialMenu.git (fetch) -RadialMenu http://desiaugetc7-088:3000/FSI/RadialMenu.git (push) -origin http://desiaugetc7-088:3000/FSI/FSI.Tools.git (fetch) -origin http://desiaugetc7-088:3000/FSI/FSI.Tools.git (push) +origin https://git.stephanmaier.duckdns.org/FSI.BT.IR/FSI.BT.IR.Tools.git (fetch) +origin https://git.stephanmaier.duckdns.org/FSI.BT.IR/FSI.BT.IR.Tools.git (push) diff --git a/AutoCompleteTextBox/AutoCompleteTextBox.csproj b/AutoCompleteTextBox/AutoCompleteTextBox.csproj new file mode 100644 index 0000000..68125d9 --- /dev/null +++ b/AutoCompleteTextBox/AutoCompleteTextBox.csproj @@ -0,0 +1,18 @@ + + + + false + net6.0-windows + true + 1.6.0.0 + https://github.com/quicoli/WPF-AutoComplete-TextBox + + https://github.com/quicoli/WPF-AutoComplete-TextBox + wpf, autocomplete, usercontrol + true + + Better support for keyboard focus + + An auto complete textbox and combo box for WPF + + diff --git a/AutoCompleteTextBox/AutoCompleteTextBox.ico b/AutoCompleteTextBox/AutoCompleteTextBox.ico new file mode 100644 index 0000000..4cb9958 Binary files /dev/null and b/AutoCompleteTextBox/AutoCompleteTextBox.ico differ diff --git a/AutoCompleteTextBox/BindingEvaluator.cs b/AutoCompleteTextBox/BindingEvaluator.cs new file mode 100644 index 0000000..6b06a7c --- /dev/null +++ b/AutoCompleteTextBox/BindingEvaluator.cs @@ -0,0 +1,49 @@ +using System.Windows; +using System.Windows.Data; + +namespace AutoCompleteTextBox +{ + public class BindingEvaluator : FrameworkElement + { + + #region "Fields" + + + public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(string), typeof(BindingEvaluator), new FrameworkPropertyMetadata(string.Empty)); + + #endregion + + #region "Constructors" + + public BindingEvaluator(Binding binding) + { + ValueBinding = binding; + } + + #endregion + + #region "Properties" + + public string Value + { + get => (string)GetValue(ValueProperty); + + set => SetValue(ValueProperty, value); + } + + public Binding ValueBinding { get; set; } + + #endregion + + #region "Methods" + + public string Evaluate(object dataItem) + { + DataContext = dataItem; + SetBinding(ValueProperty, ValueBinding); + return Value; + } + + #endregion + } +} \ No newline at end of file diff --git a/AutoCompleteTextBox/Editors/AutoCompleteComboBox.cs b/AutoCompleteTextBox/Editors/AutoCompleteComboBox.cs new file mode 100644 index 0000000..2b65103 --- /dev/null +++ b/AutoCompleteTextBox/Editors/AutoCompleteComboBox.cs @@ -0,0 +1,612 @@ +using System; +using System.Collections; +using System.Threading; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Threading; + +namespace AutoCompleteTextBox.Editors +{ + [TemplatePart(Name = PartEditor, Type = typeof(TextBox))] + [TemplatePart(Name = PartPopup, Type = typeof(Popup))] + [TemplatePart(Name = PartSelector, Type = typeof(Selector))] + [TemplatePart(Name = PartExpander, Type = typeof(Expander))] + public class AutoCompleteComboBox : Control + { + + #region "Fields" + + public const string PartEditor = "PART_Editor"; + public const string PartPopup = "PART_Popup"; + + public const string PartSelector = "PART_Selector"; + public const string PartExpander = "PART_Expander"; + public static readonly DependencyProperty DelayProperty = DependencyProperty.Register("Delay", typeof(int), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(200)); + public static readonly DependencyProperty DisplayMemberProperty = DependencyProperty.Register("DisplayMember", typeof(string), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(string.Empty)); + public static readonly DependencyProperty IconPlacementProperty = DependencyProperty.Register("IconPlacement", typeof(IconPlacement), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(IconPlacement.Left)); + public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(object), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(null)); + public static readonly DependencyProperty IconVisibilityProperty = DependencyProperty.Register("IconVisibility", typeof(Visibility), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(Visibility.Visible)); + public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register("IsDropDownOpen", typeof(bool), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(false)); + public static readonly DependencyProperty IsLoadingProperty = DependencyProperty.Register("IsLoading", typeof(bool), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(false)); + public static readonly DependencyProperty IsReadOnlyProperty = DependencyProperty.Register("IsReadOnly", typeof(bool), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(false)); + public static readonly DependencyProperty ItemTemplateProperty = DependencyProperty.Register("ItemTemplate", typeof(DataTemplate), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(null)); + public static readonly DependencyProperty ItemTemplateSelectorProperty = DependencyProperty.Register("ItemTemplateSelector", typeof(DataTemplateSelector), typeof(AutoCompleteComboBox)); + public static readonly DependencyProperty LoadingContentProperty = DependencyProperty.Register("LoadingContent", typeof(object), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(null)); + public static readonly DependencyProperty ProviderProperty = DependencyProperty.Register("Provider", typeof(IComboSuggestionProvider), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(null)); + public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(object), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(null, OnSelectedItemChanged)); + public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(string.Empty, propertyChangedCallback: null, coerceValueCallback: null, isAnimationProhibited: false, defaultUpdateSourceTrigger: UpdateSourceTrigger.LostFocus, flags: FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + public static readonly DependencyProperty FilterProperty = DependencyProperty.Register("Filter", typeof(string), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(string.Empty)); + public static readonly DependencyProperty MaxLengthProperty = DependencyProperty.Register("MaxLength", typeof(int), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(0)); + public static readonly DependencyProperty CharacterCasingProperty = DependencyProperty.Register("CharacterCasing", typeof(CharacterCasing), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(CharacterCasing.Normal)); + public static readonly DependencyProperty MaxPopUpHeightProperty = DependencyProperty.Register("MaxPopUpHeight", typeof(int), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(600)); + public static readonly DependencyProperty MaxPopUpWidthProperty = DependencyProperty.Register("MaxPopUpWidth", typeof(int), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(2000)); + + public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(string), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(string.Empty)); + + public static readonly DependencyProperty SuggestionBackgroundProperty = DependencyProperty.Register("SuggestionBackground", typeof(Brush), typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(Brushes.White)); + private bool _isUpdatingText; + private bool _selectionCancelled; + + private SuggestionsAdapter _suggestionsAdapter; + + + #endregion + + #region "Constructors" + + static AutoCompleteComboBox() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(AutoCompleteComboBox), new FrameworkPropertyMetadata(typeof(AutoCompleteComboBox))); + } + + #endregion + + #region "Properties" + + + public int MaxPopupHeight + { + get => (int)GetValue(MaxPopUpHeightProperty); + set => SetValue(MaxPopUpHeightProperty, value); + } + public int MaxPopupWidth + { + get => (int)GetValue(MaxPopUpWidthProperty); + set => SetValue(MaxPopUpWidthProperty, value); + } + + + public BindingEvaluator BindingEvaluator { get; set; } + + public CharacterCasing CharacterCasing + { + get => (CharacterCasing)GetValue(CharacterCasingProperty); + set => SetValue(CharacterCasingProperty, value); + } + + public int MaxLength + { + get => (int)GetValue(MaxLengthProperty); + set => SetValue(MaxLengthProperty, value); + } + + public int Delay + { + get => (int)GetValue(DelayProperty); + + set => SetValue(DelayProperty, value); + } + + public string DisplayMember + { + get => (string)GetValue(DisplayMemberProperty); + + set => SetValue(DisplayMemberProperty, value); + } + + public TextBox Editor { get; set; } + public Expander Expander { get; set; } + + public DispatcherTimer FetchTimer { get; set; } + + public string Filter + { + get => (string)GetValue(FilterProperty); + + set => SetValue(FilterProperty, value); + } + + public object Icon + { + get => GetValue(IconProperty); + + set => SetValue(IconProperty, value); + } + + public IconPlacement IconPlacement + { + get => (IconPlacement)GetValue(IconPlacementProperty); + + set => SetValue(IconPlacementProperty, value); + } + + public Visibility IconVisibility + { + get => (Visibility)GetValue(IconVisibilityProperty); + + set => SetValue(IconVisibilityProperty, value); + } + + public bool IsDropDownOpen + { + get => (bool)GetValue(IsDropDownOpenProperty); + + set + { + this.Expander.IsExpanded = value; + SetValue(IsDropDownOpenProperty, value); + } + } + + public bool IsLoading + { + get => (bool)GetValue(IsLoadingProperty); + + set => SetValue(IsLoadingProperty, value); + } + + public bool IsReadOnly + { + get => (bool)GetValue(IsReadOnlyProperty); + + set => SetValue(IsReadOnlyProperty, value); + } + + public Selector ItemsSelector { get; set; } + + public DataTemplate ItemTemplate + { + get => (DataTemplate)GetValue(ItemTemplateProperty); + + set => SetValue(ItemTemplateProperty, value); + } + + public DataTemplateSelector ItemTemplateSelector + { + get => ((DataTemplateSelector)(GetValue(ItemTemplateSelectorProperty))); + set => SetValue(ItemTemplateSelectorProperty, value); + } + + public object LoadingContent + { + get => GetValue(LoadingContentProperty); + + set => SetValue(LoadingContentProperty, value); + } + + public Popup Popup { get; set; } + + public IComboSuggestionProvider Provider + { + get => (IComboSuggestionProvider)GetValue(ProviderProperty); + + set => SetValue(ProviderProperty, value); + } + + public object SelectedItem + { + get => GetValue(SelectedItemProperty); + + set => SetValue(SelectedItemProperty, value); + } + + public SelectionAdapter SelectionAdapter { get; set; } + + public string Text + { + get => (string)GetValue(TextProperty); + + set => SetValue(TextProperty, value); + } + + public string Watermark + { + get => (string)GetValue(WatermarkProperty); + + set => SetValue(WatermarkProperty, value); + } + public Brush SuggestionBackground + { + get => (Brush)GetValue(SuggestionBackgroundProperty); + + set => SetValue(SuggestionBackgroundProperty, value); + } + + #endregion + + #region "Methods" + + public static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + AutoCompleteComboBox act = null; + act = d as AutoCompleteComboBox; + if (act != null) + { + if (act.Editor != null & !act._isUpdatingText) + { + act._isUpdatingText = true; + act.Editor.Text = act.BindingEvaluator.Evaluate(e.NewValue); + act._isUpdatingText = false; + } + } + } + + private void ScrollToSelectedItem() + { + if (ItemsSelector is ListBox listBox && listBox.SelectedItem != null) + listBox.ScrollIntoView(listBox.SelectedItem); + } + + public new BindingExpressionBase SetBinding(DependencyProperty dp, BindingBase binding){ + var res = base.SetBinding(dp, binding); + CheckForParentTextBindingChange(); + return res; + } + public new BindingExpressionBase SetBinding(DependencyProperty dp, String path) { + var res = base.SetBinding(dp, path); + CheckForParentTextBindingChange(); + return res; + } + public new void ClearValue(DependencyPropertyKey key) { + base.ClearValue(key); + CheckForParentTextBindingChange(); + } + public new void ClearValue(DependencyProperty dp) { + base.ClearValue(dp); + CheckForParentTextBindingChange(); + } + private void CheckForParentTextBindingChange(bool force=false) { + var CurrentBindingMode = BindingOperations.GetBinding(this, TextProperty)?.UpdateSourceTrigger ?? UpdateSourceTrigger.Default; + if (CurrentBindingMode != UpdateSourceTrigger.PropertyChanged)//preventing going any less frequent than property changed + CurrentBindingMode = UpdateSourceTrigger.Default; + + + if (CurrentBindingMode == CurrentTextboxTextBindingUpdateMode && force == false) + return; + var binding = new Binding { + Mode = BindingMode.TwoWay, + UpdateSourceTrigger = CurrentBindingMode, + Path = new PropertyPath(nameof(Text)), + RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent), + }; + CurrentTextboxTextBindingUpdateMode = CurrentBindingMode; + Editor?.SetBinding(TextBox.TextProperty, binding); + } + + private UpdateSourceTrigger CurrentTextboxTextBindingUpdateMode; + + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + + Editor = Template.FindName(PartEditor, this) as TextBox; + Popup = Template.FindName(PartPopup, this) as Popup; + ItemsSelector = Template.FindName(PartSelector, this) as Selector; + Expander = Template.FindName(PartExpander, this) as Expander; + + BindingEvaluator = new BindingEvaluator(new Binding(DisplayMember)); + + if (Editor != null) + { + Editor.TextChanged += OnEditorTextChanged; + Editor.PreviewKeyDown += OnEditorKeyDown; + Editor.LostFocus += OnEditorLostFocus; + CheckForParentTextBindingChange(true); + + if (SelectedItem != null) + { + _isUpdatingText = true; + Editor.Text = BindingEvaluator.Evaluate(SelectedItem); + _isUpdatingText = false; + } + + } + if (Expander != null) + { + Expander.IsExpanded = false; + Expander.Collapsed += Expander_Expanded; + Expander.Expanded += Expander_Expanded; + } + + GotFocus += AutoCompleteComboBox_GotFocus; + + if (Popup != null) + { + Popup.StaysOpen = false; + Popup.Opened += OnPopupOpened; + Popup.Closed += OnPopupClosed; + } + if (ItemsSelector != null) + { + SelectionAdapter = new SelectionAdapter(ItemsSelector); + SelectionAdapter.Commit += OnSelectionAdapterCommit; + SelectionAdapter.Cancel += OnSelectionAdapterCancel; + SelectionAdapter.SelectionChanged += OnSelectionAdapterSelectionChanged; + ItemsSelector.PreviewMouseDown += ItemsSelector_PreviewMouseDown; + } + } + + private void Expander_Expanded(object sender, RoutedEventArgs e) + { + this.IsDropDownOpen = Expander.IsExpanded; + if (!this.IsDropDownOpen) + { + return; + } + if (_suggestionsAdapter == null) + { + _suggestionsAdapter = new SuggestionsAdapter(this); + } + if (SelectedItem != null || String.IsNullOrWhiteSpace(Editor.Text)) + _suggestionsAdapter.ShowFullCollection(); + + } + + private void ItemsSelector_PreviewMouseDown(object sender, MouseButtonEventArgs e) + { + if ((e.OriginalSource as FrameworkElement)?.DataContext == null) + return; + if (!ItemsSelector.Items.Contains(((FrameworkElement)e.OriginalSource)?.DataContext)) + return; + ItemsSelector.SelectedItem = ((FrameworkElement)e.OriginalSource)?.DataContext; + OnSelectionAdapterCommit(SelectionAdapter.EventCause.ItemClicked); + e.Handled = true; + } + private void AutoCompleteComboBox_GotFocus(object sender, RoutedEventArgs e) + { + Editor?.Focus(); + } + + private string GetDisplayText(object dataItem) + { + if (BindingEvaluator == null) + { + BindingEvaluator = new BindingEvaluator(new Binding(DisplayMember)); + } + if (dataItem == null) + { + return string.Empty; + } + if (string.IsNullOrEmpty(DisplayMember)) + { + return dataItem.ToString(); + } + return BindingEvaluator.Evaluate(dataItem); + } + + private void OnEditorKeyDown(object sender, KeyEventArgs e) + { + if (SelectionAdapter != null) + { + if (IsDropDownOpen) + SelectionAdapter.HandleKeyDown(e); + else + IsDropDownOpen = e.Key == Key.Down || e.Key == Key.Up; + } + } + + private void OnEditorLostFocus(object sender, RoutedEventArgs e) + { + if (!IsKeyboardFocusWithin) + { + IsDropDownOpen = false; + } + } + + private void OnEditorTextChanged(object sender, TextChangedEventArgs e) + { + Text = Editor.Text; + if (_isUpdatingText) + return; + if (FetchTimer == null) + { + FetchTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(Delay) }; + FetchTimer.Tick += OnFetchTimerTick; + } + FetchTimer.IsEnabled = false; + FetchTimer.Stop(); + SetSelectedItem(null); + if (Editor.Text.Length > 0) + { + FetchTimer.IsEnabled = true; + FetchTimer.Start(); + } + else + { + IsDropDownOpen = false; + } + } + + private void OnFetchTimerTick(object sender, EventArgs e) + { + FetchTimer.IsEnabled = false; + FetchTimer.Stop(); + if (Provider != null && ItemsSelector != null) + { + Filter = Editor.Text; + if (_suggestionsAdapter == null) + { + _suggestionsAdapter = new SuggestionsAdapter(this); + } + _suggestionsAdapter.GetSuggestions(Filter); + } + } + + private void OnPopupClosed(object sender, EventArgs e) + { + if (!_selectionCancelled) + { + OnSelectionAdapterCommit(SelectionAdapter.EventCause.PopupClosed); + } + } + + private void OnPopupOpened(object sender, EventArgs e) + { + _selectionCancelled = false; + ItemsSelector.SelectedItem = SelectedItem; + } + + public event EventHandler PreSelectionAdapterFinish; + private bool PreSelectionEventSomeoneHandled(SelectionAdapter.EventCause cause, bool is_cancel) { + if (PreSelectionAdapterFinish == null) + return false; + var args = new SelectionAdapter.PreSelectionAdapterFinishArgs { cause = cause, is_cancel = is_cancel }; + PreSelectionAdapterFinish?.Invoke(this, args); + return args.handled; + + } + private void OnSelectionAdapterCancel(SelectionAdapter.EventCause cause) + { + if (PreSelectionEventSomeoneHandled(cause, true)) + return; + _isUpdatingText = true; + Editor.Text = SelectedItem == null ? Filter : GetDisplayText(SelectedItem); + Editor.SelectionStart = Editor.Text.Length; + Editor.SelectionLength = 0; + _isUpdatingText = false; + IsDropDownOpen = false; + _selectionCancelled = true; + } + + private void OnSelectionAdapterCommit(SelectionAdapter.EventCause cause) + { + if (PreSelectionEventSomeoneHandled(cause, false)) + return; + + if (ItemsSelector.SelectedItem != null) + { + SelectedItem = ItemsSelector.SelectedItem; + _isUpdatingText = true; + Editor.Text = GetDisplayText(ItemsSelector.SelectedItem); + SetSelectedItem(ItemsSelector.SelectedItem); + _isUpdatingText = false; + IsDropDownOpen = false; + } + } + + private void OnSelectionAdapterSelectionChanged() + { + _isUpdatingText = true; + Editor.Text = ItemsSelector.SelectedItem == null ? Filter : GetDisplayText(ItemsSelector.SelectedItem); + Editor.SelectionStart = Editor.Text.Length; + Editor.SelectionLength = 0; + ScrollToSelectedItem(); + _isUpdatingText = false; + } + + private void SetSelectedItem(object item) + { + _isUpdatingText = true; + SelectedItem = item; + _isUpdatingText = false; + } + #endregion + + #region "Nested Types" + + private class SuggestionsAdapter + { + + #region "Fields" + + private readonly AutoCompleteComboBox _actb; + + private string _filter; + #endregion + + #region "Constructors" + + public SuggestionsAdapter(AutoCompleteComboBox actb) + { + _actb = actb; + } + + #endregion + + #region "Methods" + + public void GetSuggestions(string searchText) + { + _actb.IsLoading = true; + // Do not open drop down if control is not focused + if (_actb.IsKeyboardFocusWithin) + _actb.IsDropDownOpen = true; + _actb.ItemsSelector.ItemsSource = null; + ParameterizedThreadStart thInfo = GetSuggestionsAsync; + Thread th = new Thread(thInfo); + _filter = searchText; + th.Start(new object[] { searchText, _actb.Provider }); + } + public void ShowFullCollection() + { + _filter = string.Empty; + _actb.IsLoading = true; + // Do not open drop down if control is not focused + if (_actb.IsKeyboardFocusWithin) + _actb.IsDropDownOpen = true; + _actb.ItemsSelector.ItemsSource = null; + ParameterizedThreadStart thInfo = GetFullCollectionAsync; + Thread th = new Thread(thInfo); + th.Start(_actb.Provider); + } + + private void DisplaySuggestions(IEnumerable suggestions, string filter) + { + if (_filter != filter) + { + return; + } + _actb.IsLoading = false; + _actb.ItemsSelector.ItemsSource = suggestions; + // Close drop down if there are no items + if (_actb.IsDropDownOpen) + { + _actb.IsDropDownOpen = _actb.ItemsSelector.HasItems; + } + } + + private void GetSuggestionsAsync(object param) + { + if (param is object[] args) + { + string searchText = Convert.ToString(args[0]); + if (args[1] is IComboSuggestionProvider provider) + { + IEnumerable list = provider.GetSuggestions(searchText); + _actb.Dispatcher.BeginInvoke(new Action(DisplaySuggestions), DispatcherPriority.Background, list, searchText); + } + } + } + private void GetFullCollectionAsync(object param) + { + if (param is IComboSuggestionProvider provider) + { + IEnumerable list = provider.GetFullCollection(); + _actb.Dispatcher.BeginInvoke(new Action(DisplaySuggestions), DispatcherPriority.Background, list, string.Empty); + } + + } + + #endregion + + } + + #endregion + + } + +} diff --git a/AutoCompleteTextBox/Editors/AutoCompleteTextBox.cs b/AutoCompleteTextBox/Editors/AutoCompleteTextBox.cs new file mode 100644 index 0000000..c2f3665 --- /dev/null +++ b/AutoCompleteTextBox/Editors/AutoCompleteTextBox.cs @@ -0,0 +1,569 @@ +using System; +using System.Collections; +using System.Threading; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Threading; + +namespace AutoCompleteTextBox.Editors +{ + [TemplatePart(Name = PartEditor, Type = typeof(TextBox))] + [TemplatePart(Name = PartPopup, Type = typeof(Popup))] + [TemplatePart(Name = PartSelector, Type = typeof(Selector))] + public class AutoCompleteTextBox : Control + { + + #region "Fields" + + public const string PartEditor = "PART_Editor"; + public const string PartPopup = "PART_Popup"; + + public const string PartSelector = "PART_Selector"; + public static readonly DependencyProperty DelayProperty = DependencyProperty.Register("Delay", typeof(int), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(200)); + public static readonly DependencyProperty DisplayMemberProperty = DependencyProperty.Register("DisplayMember", typeof(string), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(string.Empty)); + public static readonly DependencyProperty IconPlacementProperty = DependencyProperty.Register("IconPlacement", typeof(IconPlacement), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(IconPlacement.Left)); + public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(object), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(null)); + public static readonly DependencyProperty IconVisibilityProperty = DependencyProperty.Register("IconVisibility", typeof(Visibility), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(Visibility.Visible)); + public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register("IsDropDownOpen", typeof(bool), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(false)); + public static readonly DependencyProperty IsLoadingProperty = DependencyProperty.Register("IsLoading", typeof(bool), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(false)); + public static readonly DependencyProperty IsReadOnlyProperty = DependencyProperty.Register("IsReadOnly", typeof(bool), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(false)); + public static readonly DependencyProperty ItemTemplateProperty = DependencyProperty.Register("ItemTemplate", typeof(DataTemplate), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(null)); + public static readonly DependencyProperty ItemTemplateSelectorProperty = DependencyProperty.Register("ItemTemplateSelector", typeof(DataTemplateSelector), typeof(AutoCompleteTextBox)); + public static readonly DependencyProperty LoadingContentProperty = DependencyProperty.Register("LoadingContent", typeof(object), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(null)); + public static readonly DependencyProperty ProviderProperty = DependencyProperty.Register("Provider", typeof(ISuggestionProvider), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(null)); + public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(object), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(null, OnSelectedItemChanged)); + public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(string.Empty, propertyChangedCallback:null,coerceValueCallback:null, isAnimationProhibited:false, defaultUpdateSourceTrigger: UpdateSourceTrigger.LostFocus, flags: FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + public static readonly DependencyProperty FilterProperty = DependencyProperty.Register("Filter", typeof(string), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(string.Empty)); + public static readonly DependencyProperty MaxLengthProperty = DependencyProperty.Register("MaxLength", typeof(int), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(0)); + public static readonly DependencyProperty CharacterCasingProperty = DependencyProperty.Register("CharacterCasing", typeof(CharacterCasing), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(CharacterCasing.Normal)); + public static readonly DependencyProperty MaxPopUpHeightProperty = DependencyProperty.Register("MaxPopUpHeight", typeof(int), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(600)); + public static readonly DependencyProperty MaxPopUpWidthProperty = DependencyProperty.Register("MaxPopUpWidth", typeof(int), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(2000)); + + public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register("Watermark", typeof(string), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(string.Empty)); + + public static readonly DependencyProperty SuggestionBackgroundProperty = DependencyProperty.Register("SuggestionBackground", typeof(Brush), typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(Brushes.White)); + private bool _isUpdatingText; + private bool _selectionCancelled; + + private SuggestionsAdapter _suggestionsAdapter; + + + #endregion + + #region "Constructors" + + static AutoCompleteTextBox() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(typeof(AutoCompleteTextBox))); + FocusableProperty.OverrideMetadata(typeof(AutoCompleteTextBox), new FrameworkPropertyMetadata(true)); + } + + #endregion + + #region "Properties" + + + public int MaxPopupHeight + { + get => (int)GetValue(MaxPopUpHeightProperty); + set => SetValue(MaxPopUpHeightProperty, value); + } + public int MaxPopupWidth + { + get => (int)GetValue(MaxPopUpWidthProperty); + set => SetValue(MaxPopUpWidthProperty, value); + } + + public BindingEvaluator BindingEvaluator { get; set; } + + public CharacterCasing CharacterCasing + { + get => (CharacterCasing)GetValue(CharacterCasingProperty); + set => SetValue(CharacterCasingProperty, value); + } + + public int MaxLength + { + get => (int)GetValue(MaxLengthProperty); + set => SetValue(MaxLengthProperty, value); + } + + public int Delay + { + get => (int)GetValue(DelayProperty); + + set => SetValue(DelayProperty, value); + } + + public string DisplayMember + { + get => (string)GetValue(DisplayMemberProperty); + + set => SetValue(DisplayMemberProperty, value); + } + + public TextBox Editor { get; set; } + + public DispatcherTimer FetchTimer { get; set; } + + public string Filter + { + get => (string)GetValue(FilterProperty); + + set => SetValue(FilterProperty, value); + } + + public object Icon + { + get => GetValue(IconProperty); + + set => SetValue(IconProperty, value); + } + + public IconPlacement IconPlacement + { + get => (IconPlacement)GetValue(IconPlacementProperty); + + set => SetValue(IconPlacementProperty, value); + } + + public Visibility IconVisibility + { + get => (Visibility)GetValue(IconVisibilityProperty); + + set => SetValue(IconVisibilityProperty, value); + } + + public bool IsDropDownOpen + { + get => (bool)GetValue(IsDropDownOpenProperty); + + set => SetValue(IsDropDownOpenProperty, value); + } + + public bool IsLoading + { + get => (bool)GetValue(IsLoadingProperty); + + set => SetValue(IsLoadingProperty, value); + } + + public bool IsReadOnly + { + get => (bool)GetValue(IsReadOnlyProperty); + + set => SetValue(IsReadOnlyProperty, value); + } + + public Selector ItemsSelector { get; set; } + + public DataTemplate ItemTemplate + { + get => (DataTemplate)GetValue(ItemTemplateProperty); + + set => SetValue(ItemTemplateProperty, value); + } + + public DataTemplateSelector ItemTemplateSelector + { + get => ((DataTemplateSelector)(GetValue(ItemTemplateSelectorProperty))); + set => SetValue(ItemTemplateSelectorProperty, value); + } + + public object LoadingContent + { + get => GetValue(LoadingContentProperty); + + set => SetValue(LoadingContentProperty, value); + } + + public Popup Popup { get; set; } + + public ISuggestionProvider Provider + { + get => (ISuggestionProvider)GetValue(ProviderProperty); + + set => SetValue(ProviderProperty, value); + } + + public object SelectedItem + { + get => GetValue(SelectedItemProperty); + + set => SetValue(SelectedItemProperty, value); + } + + public SelectionAdapter SelectionAdapter { get; set; } + + public string Text + { + get => (string)GetValue(TextProperty); + + set => SetValue(TextProperty, value); + } + + public string Watermark + { + get => (string)GetValue(WatermarkProperty); + + set => SetValue(WatermarkProperty, value); + } + public Brush SuggestionBackground + { + get => (Brush)GetValue(SuggestionBackgroundProperty); + + set => SetValue(SuggestionBackgroundProperty, value); + } + + #endregion + + #region "Methods" + + public static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + AutoCompleteTextBox act = null; + act = d as AutoCompleteTextBox; + if (act != null) + { + if (act.Editor != null & !act._isUpdatingText) + { + act._isUpdatingText = true; + act.Editor.Text = act.BindingEvaluator.Evaluate(e.NewValue); + act._isUpdatingText = false; + } + } + } + + private void ScrollToSelectedItem() + { + if (ItemsSelector is ListBox listBox && listBox.SelectedItem != null) + listBox.ScrollIntoView(listBox.SelectedItem); + } + + public new BindingExpressionBase SetBinding(DependencyProperty dp, BindingBase binding){ + var res = base.SetBinding(dp, binding); + CheckForParentTextBindingChange(); + return res; + } + public new BindingExpressionBase SetBinding(DependencyProperty dp, String path) { + var res = base.SetBinding(dp, path); + CheckForParentTextBindingChange(); + return res; + } + public new void ClearValue(DependencyPropertyKey key) { + base.ClearValue(key); + CheckForParentTextBindingChange(); + } + public new void ClearValue(DependencyProperty dp) { + base.ClearValue(dp); + CheckForParentTextBindingChange(); + } + private void CheckForParentTextBindingChange(bool force=false) { + var CurrentBindingMode = BindingOperations.GetBinding(this, TextProperty)?.UpdateSourceTrigger ?? UpdateSourceTrigger.Default; + if (CurrentBindingMode != UpdateSourceTrigger.PropertyChanged)//preventing going any less frequent than property changed + CurrentBindingMode = UpdateSourceTrigger.Default; + + + if (CurrentBindingMode == CurrentTextboxTextBindingUpdateMode && force == false) + return; + var binding = new Binding { + Mode = BindingMode.TwoWay, + UpdateSourceTrigger = CurrentBindingMode, + Path = new PropertyPath(nameof(Text)), + RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent), + }; + CurrentTextboxTextBindingUpdateMode = CurrentBindingMode; + Editor?.SetBinding(TextBox.TextProperty, binding); + } + + private UpdateSourceTrigger CurrentTextboxTextBindingUpdateMode; + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + + Editor = Template.FindName(PartEditor, this) as TextBox; + Editor.Focus(); + Popup = Template.FindName(PartPopup, this) as Popup; + ItemsSelector = Template.FindName(PartSelector, this) as Selector; + BindingEvaluator = new BindingEvaluator(new Binding(DisplayMember)); + + if (Editor != null) + { + Editor.TextChanged += OnEditorTextChanged; + Editor.PreviewKeyDown += OnEditorKeyDown; + Editor.LostFocus += OnEditorLostFocus; + CheckForParentTextBindingChange(true); + + if (SelectedItem != null) + { + _isUpdatingText = true; + Editor.Text = BindingEvaluator.Evaluate(SelectedItem); + _isUpdatingText = false; + } + + } + + GotFocus += AutoCompleteTextBox_GotFocus; + GotKeyboardFocus += AutoCompleteTextBox_GotKeyboardFocus; + + if (Popup != null) + { + Popup.StaysOpen = false; + Popup.Opened += OnPopupOpened; + Popup.Closed += OnPopupClosed; + } + if (ItemsSelector != null) + { + SelectionAdapter = new SelectionAdapter(ItemsSelector); + SelectionAdapter.Commit += OnSelectionAdapterCommit; + SelectionAdapter.Cancel += OnSelectionAdapterCancel; + SelectionAdapter.SelectionChanged += OnSelectionAdapterSelectionChanged; + ItemsSelector.PreviewMouseDown += ItemsSelector_PreviewMouseDown; + } + } + private void ItemsSelector_PreviewMouseDown(object sender, MouseButtonEventArgs e) + { + if ((e.OriginalSource as FrameworkElement)?.DataContext == null) + return; + if (!ItemsSelector.Items.Contains(((FrameworkElement)e.OriginalSource)?.DataContext)) + return; + ItemsSelector.SelectedItem = ((FrameworkElement)e.OriginalSource)?.DataContext; + OnSelectionAdapterCommit(SelectionAdapter.EventCause.MouseDown); + e.Handled = true; + } + private void AutoCompleteTextBox_GotFocus(object sender, RoutedEventArgs e) + { + Editor?.Focus(); + } + private void AutoCompleteTextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { + if (e.NewFocus != this) + return; + if (e.OldFocus == Editor) + MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous)); + + } + + private string GetDisplayText(object dataItem) + { + if (BindingEvaluator == null) + { + BindingEvaluator = new BindingEvaluator(new Binding(DisplayMember)); + } + if (dataItem == null) + { + return string.Empty; + } + if (string.IsNullOrEmpty(DisplayMember)) + { + return dataItem.ToString(); + } + return BindingEvaluator.Evaluate(dataItem); + } + + private void OnEditorKeyDown(object sender, KeyEventArgs e) + { + if (SelectionAdapter != null) + { + if (IsDropDownOpen) + SelectionAdapter.HandleKeyDown(e); + else + IsDropDownOpen = e.Key == Key.Down || e.Key == Key.Up; + } + } + + private void OnEditorLostFocus(object sender, RoutedEventArgs e) + { + if (!IsKeyboardFocusWithin) + { + IsDropDownOpen = false; + } + } + + private void OnEditorTextChanged(object sender, TextChangedEventArgs e) + { + Text = Editor.Text; + if (_isUpdatingText) + return; + if (FetchTimer == null) + { + FetchTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(Delay) }; + FetchTimer.Tick += OnFetchTimerTick; + } + FetchTimer.IsEnabled = false; + FetchTimer.Stop(); + SetSelectedItem(null); + if (Editor.Text.Length > 0) + { + FetchTimer.IsEnabled = true; + FetchTimer.Start(); + } + else + { + IsDropDownOpen = false; + } + } + + private void OnFetchTimerTick(object sender, EventArgs e) + { + FetchTimer.IsEnabled = false; + FetchTimer.Stop(); + if (Provider != null && ItemsSelector != null) + { + Filter = Editor.Text; + if (_suggestionsAdapter == null) + { + _suggestionsAdapter = new SuggestionsAdapter(this); + } + _suggestionsAdapter.GetSuggestions(Filter); + } + } + + private void OnPopupClosed(object sender, EventArgs e) + { + if (!_selectionCancelled) + { + OnSelectionAdapterCommit(SelectionAdapter.EventCause.PopupClosed); + } + } + + private void OnPopupOpened(object sender, EventArgs e) + { + _selectionCancelled = false; + ItemsSelector.SelectedItem = SelectedItem; + } + + private void OnSelectionAdapterCancel(SelectionAdapter.EventCause cause) + { + if (PreSelectionEventSomeoneHandled(cause, true)) + return; + + _isUpdatingText = true; + Editor.Text = SelectedItem == null ? Filter : GetDisplayText(SelectedItem); + Editor.SelectionStart = Editor.Text.Length; + Editor.SelectionLength = 0; + _isUpdatingText = false; + IsDropDownOpen = false; + _selectionCancelled = true; + + } + + public event EventHandler PreSelectionAdapterFinish; + private bool PreSelectionEventSomeoneHandled(SelectionAdapter.EventCause cause, bool is_cancel) { + if (PreSelectionAdapterFinish == null) + return false; + var args = new SelectionAdapter.PreSelectionAdapterFinishArgs { cause = cause, is_cancel = is_cancel }; + PreSelectionAdapterFinish?.Invoke(this, args); + return args.handled; + + } + private void OnSelectionAdapterCommit(SelectionAdapter.EventCause cause) + { + if (PreSelectionEventSomeoneHandled(cause, false)) + return; + + if (ItemsSelector.SelectedItem != null) + { + SelectedItem = ItemsSelector.SelectedItem; + _isUpdatingText = true; + Editor.Text = GetDisplayText(ItemsSelector.SelectedItem); + SetSelectedItem(ItemsSelector.SelectedItem); + _isUpdatingText = false; + IsDropDownOpen = false; + } + } + + private void OnSelectionAdapterSelectionChanged() + { + _isUpdatingText = true; + Editor.Text = ItemsSelector.SelectedItem == null ? Filter : GetDisplayText(ItemsSelector.SelectedItem); + Editor.SelectionStart = Editor.Text.Length; + Editor.SelectionLength = 0; + ScrollToSelectedItem(); + _isUpdatingText = false; + } + + private void SetSelectedItem(object item) + { + _isUpdatingText = true; + SelectedItem = item; + _isUpdatingText = false; + } + #endregion + + #region "Nested Types" + + private class SuggestionsAdapter + { + + #region "Fields" + + private readonly AutoCompleteTextBox _actb; + + private string _filter; + #endregion + + #region "Constructors" + + public SuggestionsAdapter(AutoCompleteTextBox actb) + { + _actb = actb; + } + + #endregion + + #region "Methods" + + public void GetSuggestions(string searchText) + { + _filter = searchText; + _actb.IsLoading = true; + // Do not open drop down if control is not focused + if (_actb.IsKeyboardFocusWithin) + _actb.IsDropDownOpen = true; + _actb.ItemsSelector.ItemsSource = null; + ParameterizedThreadStart thInfo = GetSuggestionsAsync; + Thread th = new Thread(thInfo); + th.Start(new object[] { searchText, _actb.Provider }); + } + + private void DisplaySuggestions(IEnumerable suggestions, string filter) + { + if (_filter != filter) + { + return; + } + _actb.IsLoading = false; + _actb.ItemsSelector.ItemsSource = suggestions; + // Close drop down if there are no items + if (_actb.IsDropDownOpen) + { + _actb.IsDropDownOpen = _actb.ItemsSelector.HasItems; + } + } + + private void GetSuggestionsAsync(object param) + { + if (param is object[] args) + { + string searchText = Convert.ToString(args[0]); + if (args[1] is ISuggestionProvider provider) + { + IEnumerable list = provider.GetSuggestions(searchText); + _actb.Dispatcher.BeginInvoke(new Action(DisplaySuggestions), DispatcherPriority.Background, list, searchText); + } + } + } + + #endregion + + } + + #endregion + + } + +} diff --git a/AutoCompleteTextBox/Editors/IComboSuggestionProvider.cs b/AutoCompleteTextBox/Editors/IComboSuggestionProvider.cs new file mode 100644 index 0000000..ca95d08 --- /dev/null +++ b/AutoCompleteTextBox/Editors/IComboSuggestionProvider.cs @@ -0,0 +1,16 @@ +using System.Collections; + + +namespace AutoCompleteTextBox.Editors +{ + public interface IComboSuggestionProvider + { + + #region Public Methods + + IEnumerable GetSuggestions(string filter); + IEnumerable GetFullCollection(); + + #endregion Public Methods + } +} diff --git a/AutoCompleteTextBox/Editors/ISuggestionProvider.cs b/AutoCompleteTextBox/Editors/ISuggestionProvider.cs new file mode 100644 index 0000000..7887021 --- /dev/null +++ b/AutoCompleteTextBox/Editors/ISuggestionProvider.cs @@ -0,0 +1,15 @@ +using System.Collections; + +namespace AutoCompleteTextBox.Editors +{ + public interface ISuggestionProvider + { + + #region Public Methods + + IEnumerable GetSuggestions(string filter); + + #endregion Public Methods + + } +} diff --git a/AutoCompleteTextBox/Editors/SelectionAdapter.cs b/AutoCompleteTextBox/Editors/SelectionAdapter.cs new file mode 100644 index 0000000..a95f0fc --- /dev/null +++ b/AutoCompleteTextBox/Editors/SelectionAdapter.cs @@ -0,0 +1,122 @@ +using System.Diagnostics; +using System.Windows.Controls.Primitives; +using System.Windows.Input; + +namespace AutoCompleteTextBox.Editors +{ + public class SelectionAdapter + { + public class PreSelectionAdapterFinishArgs { + public EventCause cause; + public bool is_cancel; + public bool handled; + } + + #region "Fields" + #endregion + + #region "Constructors" + + public SelectionAdapter(Selector selector) + { + SelectorControl = selector; + SelectorControl.PreviewMouseUp += OnSelectorMouseDown; + } + + #endregion + + #region "Events" + + public enum EventCause { Other, PopupClosed, ItemClicked, EnterPressed, EscapePressed, TabPressed, MouseDown} + public delegate void CancelEventHandler(EventCause cause); + + public delegate void CommitEventHandler(EventCause cause); + + public delegate void SelectionChangedEventHandler(); + + public event CancelEventHandler Cancel; + public event CommitEventHandler Commit; + public event SelectionChangedEventHandler SelectionChanged; + #endregion + + #region "Properties" + + public Selector SelectorControl { get; set; } + + #endregion + + #region "Methods" + + public void HandleKeyDown(KeyEventArgs key) + { + switch (key.Key) + { + case Key.Down: + IncrementSelection(); + break; + case Key.Up: + DecrementSelection(); + break; + case Key.Enter: + Commit?.Invoke(EventCause.EnterPressed); + + break; + case Key.Escape: + Cancel?.Invoke(EventCause.EscapePressed); + + break; + case Key.Tab: + Commit?.Invoke(EventCause.TabPressed); + + break; + default: + return; + } + key.Handled = true; + } + + private void DecrementSelection() + { + if (SelectorControl.SelectedIndex == -1) + { + SelectorControl.SelectedIndex = SelectorControl.Items.Count - 1; + } + else + { + SelectorControl.SelectedIndex -= 1; + } + + SelectionChanged?.Invoke(); + } + + private void IncrementSelection() + { + if (SelectorControl.SelectedIndex == SelectorControl.Items.Count - 1) + { + SelectorControl.SelectedIndex = -1; + } + else + { + SelectorControl.SelectedIndex += 1; + } + + SelectionChanged?.Invoke(); + } + + private void OnSelectorMouseDown(object sender, MouseButtonEventArgs e) + { + // If sender is the RepeatButton from the scrollbar we need to + // to skip this event otherwise focus get stuck in the RepeatButton + // and list is scrolled up or down til the end. + if (e.OriginalSource.GetType() != typeof(RepeatButton)) + { + Commit?.Invoke(EventCause.MouseDown); + e.Handled = true; + } + } + + #endregion + + } + +} \ No newline at end of file diff --git a/AutoCompleteTextBox/Editors/SuggestionProvider.cs b/AutoCompleteTextBox/Editors/SuggestionProvider.cs new file mode 100644 index 0000000..b63234f --- /dev/null +++ b/AutoCompleteTextBox/Editors/SuggestionProvider.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections; + +namespace AutoCompleteTextBox.Editors +{ + public class SuggestionProvider : ISuggestionProvider + { + + + #region Private Fields + + private readonly Func _method; + + #endregion Private Fields + + #region Public Constructors + + public SuggestionProvider(Func method) + { + _method = method ?? throw new ArgumentNullException(nameof(method)); + } + + #endregion Public Constructors + + #region Public Methods + + public IEnumerable GetSuggestions(string filter) + { + return _method(filter); + } + + #endregion Public Methods + + } +} \ No newline at end of file diff --git a/AutoCompleteTextBox/Editors/Themes/Generic.xaml b/AutoCompleteTextBox/Editors/Themes/Generic.xaml new file mode 100644 index 0000000..fe4d0f3 --- /dev/null +++ b/AutoCompleteTextBox/Editors/Themes/Generic.xaml @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + diff --git a/AutoCompleteTextBox/Enumerations.cs b/AutoCompleteTextBox/Enumerations.cs new file mode 100644 index 0000000..d5c0e1a --- /dev/null +++ b/AutoCompleteTextBox/Enumerations.cs @@ -0,0 +1,8 @@ +namespace AutoCompleteTextBox +{ + public enum IconPlacement + { + Left, + Right + } +} \ No newline at end of file diff --git a/AutoCompleteTextBox/Properties/AssemblyInfo.cs b/AutoCompleteTextBox/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..93c0d2c --- /dev/null +++ b/AutoCompleteTextBox/Properties/AssemblyInfo.cs @@ -0,0 +1,53 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows; +using System.Windows.Markup; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AutoCompleteTextBox")] +[assembly: AssemblyDescription("An autocomplete textbox for WPF")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AutoCompleteTextBox")] +[assembly: AssemblyCopyright("Copyright © 2019")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly:ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.1.1.0")] +[assembly: AssemblyFileVersion("1.1.1.0")] +[assembly: XmlnsDefinition("http://wpfcontrols.com/", "AutoCompleteTextBox")] +[assembly: XmlnsDefinition("http://wpfcontrols.com/", "AutoCompleteTextBox.Editors")] diff --git a/AutoCompleteTextBox/Properties/Resources.Designer.cs b/AutoCompleteTextBox/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2d4da73 --- /dev/null +++ b/AutoCompleteTextBox/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AutoCompleteTextBox.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AutoCompleteTextBox.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/AutoCompleteTextBox/Properties/Resources.resx b/AutoCompleteTextBox/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/AutoCompleteTextBox/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AutoCompleteTextBox/Properties/Settings.Designer.cs b/AutoCompleteTextBox/Properties/Settings.Designer.cs new file mode 100644 index 0000000..5bc23d8 --- /dev/null +++ b/AutoCompleteTextBox/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AutoCompleteTextBox.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/AutoCompleteTextBox/Properties/Settings.settings b/AutoCompleteTextBox/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/AutoCompleteTextBox/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/AutoCompleteTextBox/Themes/Generic.xaml b/AutoCompleteTextBox/Themes/Generic.xaml new file mode 100644 index 0000000..173cb11 --- /dev/null +++ b/AutoCompleteTextBox/Themes/Generic.xaml @@ -0,0 +1,6 @@ + + + + + diff --git a/Config.Net/Config.Net.csproj b/Config.Net/Config.Net.csproj new file mode 100644 index 0000000..2caface --- /dev/null +++ b/Config.Net/Config.Net.csproj @@ -0,0 +1,64 @@ + + + Copyright (c) 2015-2022 by Ivan Gavryliuk + Config.Net + Ivan Gavryliuk (@aloneguid) + Config.Net + Config.Net + 4.0.0.0 + 4.7.3.0 + 4.7.3 + Super simple configuration framework for .NET focused on developer ergonomics and strong typing. Supports multiple configuration sources such as .ini, .json, .xml files, as well as external providers pluggable by other NuGet packages. + true + + Apache-2.0 + + enable + latest + https://github.com/aloneguid/config + https://github.com/aloneguid/config + + + + + + + netstandard2.0;netstandard2.1;netcoreapp3.1;net5.0;net6.0 + + + + + netstandard2.0;netstandard2.1;netcoreapp3.1;net5.0;net6.0;net7.0 + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + \ No newline at end of file diff --git a/Config.Net/ConfigurationBuilder.cs b/Config.Net/ConfigurationBuilder.cs new file mode 100644 index 0000000..a946b58 --- /dev/null +++ b/Config.Net/ConfigurationBuilder.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; +using Castle.DynamicProxy; +using Config.Net.Core; + +namespace Config.Net +{ + public class ConfigurationBuilder where T : class + { + private readonly ProxyGenerator _generator = new ProxyGenerator(); + private List _stores = new List(); + private TimeSpan _cacheInterval = TimeSpan.Zero; + private readonly List _customParsers = new List(); + + public ConfigurationBuilder() + { + TypeInfo ti = typeof(T).GetTypeInfo(); + + if (!ti.IsInterface) throw new ArgumentException($"{ti.FullName} must be an interface", ti.FullName); + } + + /// + /// Creates an instance of the configuration interface + /// + /// + public T Build() + { + var valueHandler = new ValueHandler(_customParsers); + var ioHandler = new IoHandler(_stores, valueHandler, _cacheInterval); + + T instance = _generator.CreateInterfaceProxyWithoutTarget(new InterfaceInterceptor(typeof(T), ioHandler)); + + return instance; + } + + /// + /// Set to anything different from to add caching for values. By default + /// Config.Net doesn't cache any values + /// + /// + /// + public ConfigurationBuilder CacheFor(TimeSpan time) + { + _cacheInterval = time; + + return this; + } + + public ConfigurationBuilder UseConfigStore(IConfigStore store) + { + _stores.Add(store); + return this; + } + + /// + /// Adds a custom type parser + /// + public ConfigurationBuilder UseTypeParser(ITypeParser parser) + { + if (parser == null) + { + throw new ArgumentNullException(nameof(parser)); + } + + _customParsers.Add(parser); + + return this; + } + } +} diff --git a/Config.Net/ConfigurationExtensions.cs b/Config.Net/ConfigurationExtensions.cs new file mode 100644 index 0000000..72ab7e0 --- /dev/null +++ b/Config.Net/ConfigurationExtensions.cs @@ -0,0 +1,146 @@ +using System.Reflection; +using Config.Net.Stores; +using System.Collections.Generic; +using Config.Net.Stores.Impl.CommandLine; + +namespace Config.Net +{ + /// + /// Configuration extensions + /// + public static class ConfigurationExtensions + { + /// + /// In-memory dictionary. Optionally you can pass pre-created dictionary, otherwise it will be created internally as empty. + /// + public static ConfigurationBuilder UseInMemoryDictionary( + this ConfigurationBuilder builder, + IDictionary? container = null) where TInterface : class + { + builder.UseConfigStore(new DictionaryConfigStore(container)); + return builder; + } + + /// + /// Standard app.config (web.config) builder store. Read-only. + /// + public static ConfigurationBuilder UseAppConfig(this ConfigurationBuilder builder) where TInterface : class + { + builder.UseConfigStore(new AppConfigStore()); + return builder; + } + + /// + /// Reads builder from the .dll.config or .exe.config file. + /// + /// + /// Reference to the assembly to look for + /// + public static ConfigurationBuilder UseAssemblyConfig(this ConfigurationBuilder builder, Assembly assembly) where TInterface : class + { + builder.UseConfigStore(new AssemblyConfigStore(assembly)); + return builder; + } + + /// + /// Uses system environment variables + /// + public static ConfigurationBuilder UseEnvironmentVariables(this ConfigurationBuilder builder) where TInterface : class + { + builder.UseConfigStore(new EnvironmentVariablesStore()); + return builder; + } + + + /// + /// Simple INI storage. + /// + /// + /// File does not have to exist, however it will be created as soon as you try to write to it. + /// When true, inline comments are parsed. It is set to false by default so inline comments are considered a part of the value. + /// + public static ConfigurationBuilder UseIniFile(this ConfigurationBuilder builder, + string iniFilePath, + bool parseInlineComments = false) where TInterface : class + { + builder.UseConfigStore(new IniFileConfigStore(iniFilePath, true, parseInlineComments)); + return builder; + } + + /// + /// Simple INI storage. + /// + /// + /// File contents + /// When true, inline comments are parsed. It is set to false by default so inline comments are considered a part of the value + /// + public static ConfigurationBuilder UseIniString(this ConfigurationBuilder builder, + string iniString, + bool parseInlineComments = false) where TInterface : class + { + builder.UseConfigStore(new IniFileConfigStore(iniString, false, parseInlineComments)); + return builder; + } + + /// + /// Accepts builder from the command line arguments. This is not intended to replace a command line parsing framework but rather + /// complement it in a builder like way. Uses current process' command line parameters automatically + /// + /// Configuration object + /// When true argument names are case sensitive, false by default + /// Changed builder + public static ConfigurationBuilder UseCommandLineArgs(this ConfigurationBuilder builder, + bool isCaseSensitive = false, + params KeyValuePair[] parameterNameToPosition) + where TInterface : class + { + builder.UseConfigStore(new CommandLineConfigStore(null, isCaseSensitive, parameterNameToPosition)); + return builder; + } + + public static ConfigurationBuilder UseCommandLineArgs(this ConfigurationBuilder builder, + bool isCaseSensitive = false, + string[]? args = null, + params KeyValuePair[] parameterNameToPosition) + where TInterface : class + { + builder.UseConfigStore(new CommandLineConfigStore(args, isCaseSensitive, parameterNameToPosition)); + return builder; + } + + public static ConfigurationBuilder UseCommandLineArgs(this ConfigurationBuilder builder, + params KeyValuePair[] parameterNameToPosition) + where TInterface : class + { + builder.UseConfigStore(new CommandLineConfigStore(null, false, parameterNameToPosition)); + return builder; + } + + /// + /// Uses JSON file as a builder storage. + /// + /// Configuration object. + /// Full path to json storage file. + /// Changed builder. + /// Storage file does not have to exist, however it will be created as soon as first write performed. + public static ConfigurationBuilder UseJsonFile(this ConfigurationBuilder builder, string jsonFilePath) where TInterface : class + { + builder.UseConfigStore(new JsonConfigStore(jsonFilePath, true)); + return builder; + } + + /// + /// Uses JSON file as a builder storage. + /// + /// Configuration object. + /// Json document. + /// Changed builder. + /// Storage file does not have to exist, however it will be created as soon as first write performed. + public static ConfigurationBuilder UseJsonString(this ConfigurationBuilder builder, string jsonString) where TInterface : class + { + builder.UseConfigStore(new JsonConfigStore(jsonString, false)); + return builder; + } + + } +} diff --git a/Config.Net/Core/Box/BoxFactory.cs b/Config.Net/Core/Box/BoxFactory.cs new file mode 100644 index 0000000..6e99479 --- /dev/null +++ b/Config.Net/Core/Box/BoxFactory.cs @@ -0,0 +1,204 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Reflection; + +namespace Config.Net.Core.Box +{ + static class BoxFactory + { + public static Dictionary Discover(Type t, ValueHandler valueHandler, string? basePath) + { + var result = new Dictionary(); + + DiscoverProperties(t, valueHandler, result, basePath); + + DiscoverMethods(t, valueHandler, result); + + return result; + } + + private static void DiscoverProperties(Type t, ValueHandler valueHandler, Dictionary result, string? basePath) + { + IEnumerable properties = GetHierarchyPublicProperties(t); + + foreach (PropertyInfo pi in properties) + { + Type propertyType = pi.PropertyType; + ResultBox rbox; + bool isCollection = false; + + if(ResultBox.TryGetCollection(propertyType, out propertyType)) + { + if(pi.SetMethod != null) + { + throw new NotSupportedException($"Collection properties cannot have a setter. Detected at '{OptionPath.Combine(basePath, pi.Name)}'"); + } + + isCollection = true; + } + + if(propertyType.GetTypeInfo().IsInterface) + { + rbox = new ProxyResultBox(pi.Name, propertyType); + } + else + { + rbox = new PropertyResultBox(pi.Name, propertyType); + } + + ValidateSupportedType(rbox, valueHandler); + + AddAttributes(rbox, pi, valueHandler); + + //adjust to collection + if(isCollection) + { + rbox = new CollectionResultBox(pi.Name, rbox); + AddAttributes(rbox, pi, valueHandler); + } + + result[pi.Name] = rbox; + } + } + + private static void DiscoverMethods(Type t, ValueHandler valueHandler, Dictionary result) + { + TypeInfo ti = t.GetTypeInfo(); + + IEnumerable methods = ti.DeclaredMethods.Where(m => !m.IsSpecialName); + + foreach (MethodInfo method in methods) + { + var mbox = new MethodResultBox(method); + + AddAttributes(mbox, method, valueHandler); + + result[mbox.Name] = mbox; + } + } + + private static void ValidateSupportedType(ResultBox rb, ValueHandler valueHandler) + { + Type? t = null; + + if (rb is PropertyResultBox pbox) + t = rb.ResultBaseType; + + if (t != null && !valueHandler.IsSupported(t)) + { + throw new NotSupportedException($"type {t} on object '{rb.Name}' is not supported."); + } + } + + private static object? GetDefaultValue(Type t) + { + if (t.GetTypeInfo().IsValueType) return Activator.CreateInstance(t); + + return null; + } + + private static void AddAttributes(ResultBox box, PropertyInfo pi, ValueHandler valueHandler) + { + AddAttributes(box, valueHandler, + pi.GetCustomAttribute(), + pi.GetCustomAttribute()); + } + + private static void AddAttributes(ResultBox box, MethodInfo mi, ValueHandler valueHandler) + { + AddAttributes(box, valueHandler, mi.GetCustomAttribute(), mi.GetCustomAttribute()); + } + + + private static void AddAttributes(ResultBox box, ValueHandler valueHandler, params Attribute?[] attributes) + { + OptionAttribute? optionAttribute = attributes.OfType().FirstOrDefault(); + DefaultValueAttribute? defaultValueAttribute = attributes.OfType().FirstOrDefault(); + + if (optionAttribute?.Alias != null) + { + box.StoreByName = optionAttribute.Alias; + } + + box.DefaultResult = GetDefaultValue(optionAttribute?.DefaultValue, box, valueHandler) ?? + GetDefaultValue(defaultValueAttribute?.Value, box, valueHandler) ?? + GetDefaultValue(box.ResultType); + } + + private static object? GetDefaultValue(object? defaultValue, ResultBox box, ValueHandler valueHandler) + { + object? result = null; + if (defaultValue != null) + { + //validate that types for default value match + Type dvt = defaultValue.GetType(); + + if (dvt != box.ResultType && dvt != typeof(string)) + { + throw new InvalidCastException($"Default value for option {box.Name} is of type {dvt.FullName} whereas the property has type {box.ResultType.FullName}. To fix this, either set default value to type {box.ResultType.FullName} or a string parseable to the target type."); + } + + if (box.ResultType != typeof(string) && dvt == typeof(string)) + { + valueHandler.TryParse(box.ResultType, (string?)defaultValue, out result); + } + } + + if (result == null) + { + result = defaultValue; + } + + return result; + } + + private static PropertyInfo[] GetHierarchyPublicProperties(Type type) + { + var propertyInfos = new List(); + + var considered = new List(); + var queue = new Queue(); + considered.Add(type.GetTypeInfo()); + queue.Enqueue(type.GetTypeInfo()); + + while (queue.Count > 0) + { + TypeInfo typeInfo = queue.Dequeue(); + + //add base interfaces to the queue + foreach (Type subInterface in typeInfo.ImplementedInterfaces) + { + TypeInfo subInterfaceTypeInfo = subInterface.GetTypeInfo(); + + if (considered.Contains(subInterfaceTypeInfo)) continue; + + considered.Add(subInterfaceTypeInfo); + queue.Enqueue(subInterfaceTypeInfo); + } + + //add base classes to the queue + if (typeInfo.BaseType != null) + { + TypeInfo baseType = typeInfo.BaseType.GetTypeInfo(); + + if (!considered.Contains(baseType)) + { + considered.Add(baseType); + queue.Enqueue(baseType); + } + } + + + //get properties from the current type + IEnumerable newProperties = typeInfo.DeclaredProperties.Where(p => !propertyInfos.Contains(p)); + propertyInfos.InsertRange(0, newProperties); + } + + return propertyInfos.ToArray(); + } + + + } +} diff --git a/Config.Net/Core/Box/CollectionResultBox.cs b/Config.Net/Core/Box/CollectionResultBox.cs new file mode 100644 index 0000000..7f2f943 --- /dev/null +++ b/Config.Net/Core/Box/CollectionResultBox.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Config.Net.Core.Box +{ + class CollectionResultBox : ResultBox + { + private readonly ResultBox _elementResultBox; + private string? _basePath; + private DynamicReader? _reader; + + public CollectionResultBox(string name, ResultBox elementBox) : base(name, elementBox.ResultType, null) + { + _elementResultBox = elementBox; + } + + public ResultBox ElementResultBox => _elementResultBox; + + public bool IsInitialised { get; private set; } + + public IEnumerable? CollectionInstance { get; private set; } + + public void Initialise(string? basePath, int length, DynamicReader reader) + { + _basePath = basePath; + _reader = reader; + + CollectionInstance = CreateGenericEnumerable(length); + + IsInitialised = true; + } + + private IEnumerable? CreateGenericEnumerable(int count) + { + Type t = typeof(DynamicEnumerable<>); + t = t.MakeGenericType(ResultType); + + IEnumerable? instance = (IEnumerable?)Activator.CreateInstance(t, count, this); + + return instance; + } + + private object? ReadAt(int index) + { + return _reader?.Read(ElementResultBox, index); + } + + private class DynamicEnumerable : IEnumerable + { + private readonly int _count; + private readonly CollectionResultBox _parent; + + public DynamicEnumerable(int count, CollectionResultBox parent) + { + _count = count; + _parent = parent; + } + + public IEnumerator GetEnumerator() + { + return new DynamicEnumerator(_count, _parent); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new DynamicEnumerator(_count, _parent); + } + } + + private class DynamicEnumerator : IEnumerator + { + private int _index = -1; + private readonly int _count; + private readonly CollectionResultBox _parent; + private T? _current; + + public DynamicEnumerator(int count, CollectionResultBox parent) + { + _count = count; + _parent = parent; + } + +#pragma warning disable CS8603 // Possible null reference return. + public T Current => _current ?? default(T); + + object IEnumerator.Current => _current; +#pragma warning restore CS8603 // Possible null reference return. + + public void Dispose() + { + } + + public bool MoveNext() + { + _index += 1; + + _current = (T?)_parent.ReadAt(_index); + + return _index < _count; + } + + public void Reset() + { + _index = -1; + } + } + } +} diff --git a/Config.Net/Core/Box/MethodResultBox.cs b/Config.Net/Core/Box/MethodResultBox.cs new file mode 100644 index 0000000..adf29c3 --- /dev/null +++ b/Config.Net/Core/Box/MethodResultBox.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace Config.Net.Core.Box +{ + class MethodResultBox : ResultBox + { + public MethodResultBox(MethodInfo methodInfo) : base(GetName(methodInfo), GetReturnType(methodInfo), null) + { + StoreByName = GetStoreName(methodInfo); + IsGettter = IsGet(methodInfo); + } + + public bool IsGettter { get; private set; } + + /// + /// Composes a uniqueue method name using method name itself and parameter type names, separated by underscore + /// + public static string GetName(MethodInfo mi) + { + ParameterInfo[] parameters = mi.GetParameters(); + var sb = new StringBuilder(); + sb.Append(mi.Name); + foreach (ParameterInfo pi in parameters) + { + sb.Append("-"); + sb.Append(pi.ParameterType.ToString()); + } + return sb.ToString(); + } + + public string GetValuePath(object[] arguments) + { + var sb = new StringBuilder(); + sb.Append(StoreByName); + bool ignoreLast = !IsGettter; + + for (int i = 0; i < arguments.Length - (ignoreLast ? 1 : 0); i++) + { + object value = arguments[i]; + if (value == null) continue; + + if (sb.Length > 0) + { + sb.Append(OptionPath.Separator); + } + sb.Append(value.ToString()); + } + + return sb.ToString(); + } + + private static string GetStoreName(MethodInfo mi) + { + string name = mi.Name; + + if (name.StartsWith("get", StringComparison.OrdinalIgnoreCase) || + name.StartsWith("set", StringComparison.OrdinalIgnoreCase)) + { + name = name.Substring(3); + } + + return name; + } + + private static bool IsGet(MethodInfo mi) + { + return mi.ReturnType != typeof(void); + } + + private static Type GetReturnType(MethodInfo mi) + { + ParameterInfo[] parameters = mi.GetParameters(); + + if (parameters == null || parameters.Length == 0) + { + throw new InvalidOperationException($"method {mi.Name} must have at least one parameter"); + } + + Type returnType = IsGet(mi) ? mi.ReturnType : parameters[parameters.Length - 1].ParameterType; + + return returnType; + } + } +} diff --git a/Config.Net/Core/Box/PropertyResultBox.cs b/Config.Net/Core/Box/PropertyResultBox.cs new file mode 100644 index 0000000..0bef2c2 --- /dev/null +++ b/Config.Net/Core/Box/PropertyResultBox.cs @@ -0,0 +1,51 @@ +using System; +using System.Reflection; + +namespace Config.Net.Core.Box +{ + class PropertyResultBox : ResultBox + { + public PropertyResultBox(string name, Type resultType) : base(name, resultType, null) + { + } + + public static bool IsProperty(MethodInfo mi, out bool isGetter, out string? name) + { + if (mi.Name.StartsWith("get_")) + { + isGetter = true; + name = mi.Name.Substring(4); + return true; + } + + if (mi.Name.StartsWith("set_")) + { + isGetter = false; + name = mi.Name.Substring(4); + return true; + } + + isGetter = false; + name = null; + return false; + } + + public static bool IsProperty(MethodInfo mi, out string? name) + { + if (mi.Name.StartsWith("get_") || mi.Name.StartsWith("set_")) + { + name = mi.Name.Substring(4); + return true; + } + + name = null; + return false; + } + + public static bool IsGetProperty(MethodInfo mi) + { + return mi.Name.StartsWith("get_"); + } + + } +} diff --git a/Config.Net/Core/Box/ProxyResultBox.cs b/Config.Net/Core/Box/ProxyResultBox.cs new file mode 100644 index 0000000..cff7c5b --- /dev/null +++ b/Config.Net/Core/Box/ProxyResultBox.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using Castle.DynamicProxy; + +namespace Config.Net.Core.Box +{ + class ProxyResultBox : ResultBox + { + private static readonly ProxyGenerator ProxyGenerator = new ProxyGenerator(); + private readonly Dictionary _indexToProxyInstance = new Dictionary(); + + public ProxyResultBox(string name, Type interfaceType) : base(name, interfaceType, null) + { + } + + public bool IsInitialisedAt(int index) + { + return _indexToProxyInstance.ContainsKey(index); + } + + public object GetInstanceAt(int index) + { + return _indexToProxyInstance[index]; + } + + public void InitialiseAt(int index, IoHandler ioHandler, string prefix) + { + object instance = ProxyGenerator.CreateInterfaceProxyWithoutTarget(ResultBaseType, + new InterfaceInterceptor(ResultBaseType, ioHandler, prefix)); + + _indexToProxyInstance[index] = instance; + } + } +} diff --git a/Config.Net/Core/Box/ResultBox.cs b/Config.Net/Core/Box/ResultBox.cs new file mode 100644 index 0000000..bfd96b4 --- /dev/null +++ b/Config.Net/Core/Box/ResultBox.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace Config.Net.Core.Box +{ + abstract class ResultBox + { + private string? _storeByName; + + protected ResultBox(string name, Type resultType, object? defaultResult) + { + Name = name; + ResultType = resultType; + ResultBaseType = GetBaseType(resultType); + DefaultResult = defaultResult; + } + + public string Name { get; } + + public string StoreByName + { + get => _storeByName ?? Name; + set => _storeByName = value; + } + + public Type ResultType { get; } + + public Type ResultBaseType { get; } + + public object? DefaultResult { get; set; } + + #region [ Utility Methods ] + + private static Type GetBaseType(Type t) + { + TypeInfo ti = t.GetTypeInfo(); + if (ti.IsClass) + { + return t; + } + else + { + if (ti.IsGenericType && ti.GetGenericTypeDefinition() == typeof(Nullable<>)) + { + return ti.GenericTypeArguments[0]; + } + else + { + return t; + } + } + + } + + internal static bool TryGetCollection(Type t, out Type elementType) + { + TypeInfo ti = t.GetTypeInfo(); + + if(ti.IsGenericType && ti.GetGenericTypeDefinition() == typeof(IEnumerable<>)) + { + elementType = ti.GenericTypeArguments[0]; + return true; + } + + elementType = t; + return false; + } + + #endregion + } +} diff --git a/Config.Net/Core/DynamicReader.cs b/Config.Net/Core/DynamicReader.cs new file mode 100644 index 0000000..81674c9 --- /dev/null +++ b/Config.Net/Core/DynamicReader.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Config.Net.Core.Box; + +namespace Config.Net.Core +{ + class DynamicReader + { + private readonly string? _basePath; + private readonly IoHandler _ioHandler; + + public DynamicReader(string? basePath, IoHandler ioHandler) + { + _basePath = basePath; + _ioHandler = ioHandler; + } + + public object? Read(ResultBox rbox, int index = -1, params object[] arguments) + { + if (rbox is PropertyResultBox pbox) return ReadProperty(pbox, index); + + if (rbox is ProxyResultBox xbox) return ReadProxy(xbox, index); + + if (rbox is CollectionResultBox cbox) return ReadCollection(cbox, index); + + if (rbox is MethodResultBox mbox) return ReadMethod(mbox, arguments); + + throw new NotImplementedException($"don't know how to read {rbox.GetType()}"); + } + + private object? ReadProperty(PropertyResultBox pbox, int index) + { + string path = OptionPath.Combine(index, _basePath, pbox.StoreByName); + + return _ioHandler.Read(pbox.ResultBaseType, path, pbox.DefaultResult); + } + + private object ReadProxy(ProxyResultBox xbox, int index) + { + if (!xbox.IsInitialisedAt(index)) + { + string prefix = OptionPath.Combine(index, _basePath, xbox.StoreByName); + + xbox.InitialiseAt(index, _ioHandler, prefix); + } + + return xbox.GetInstanceAt(index); + } + + private object? ReadCollection(CollectionResultBox cbox, int index) + { + string lengthPath = OptionPath.Combine(index, _basePath, cbox.StoreByName); + lengthPath = OptionPath.AddLength(lengthPath); + + if (!cbox.IsInitialised) + { + int length = (int?)_ioHandler.Read(typeof(int), lengthPath, 0) ?? 0; + + cbox.Initialise(_basePath, length, this); + } + + return cbox.CollectionInstance; + } + + private object? ReadMethod(MethodResultBox mbox, object[] arguments) + { + string path = mbox.GetValuePath(arguments); + path = OptionPath.Combine(_basePath, path); + + return _ioHandler.Read(mbox.ResultBaseType, path, mbox.DefaultResult); + } + } +} diff --git a/Config.Net/Core/DynamicWriter.cs b/Config.Net/Core/DynamicWriter.cs new file mode 100644 index 0000000..18039a8 --- /dev/null +++ b/Config.Net/Core/DynamicWriter.cs @@ -0,0 +1,48 @@ +using System; +using Config.Net.Core.Box; + +namespace Config.Net.Core +{ + class DynamicWriter + { + private readonly string? _basePath; + private readonly IoHandler _ioHandler; + + public DynamicWriter(string? basePath, IoHandler ioHandler) + { + _basePath = basePath; + _ioHandler = ioHandler; + } + + public void Write(ResultBox rbox, object[] arguments) + { + if (rbox is PropertyResultBox pbox) WriteProperty(pbox, arguments); + + else if (rbox is MethodResultBox mbox) WriteMethod(mbox, arguments); + + else if (rbox is ProxyResultBox xbox) WriteProxy(xbox, arguments); + + else throw new NotImplementedException($"don't know how to write {rbox.GetType()}"); + } + + private void WriteProperty(PropertyResultBox pbox, object[] arguments) + { + string path = OptionPath.Combine(_basePath, pbox.StoreByName); + + _ioHandler.Write(pbox.ResultBaseType, path, arguments[0]); + } + + private void WriteMethod(MethodResultBox mbox, object[] arguments) + { + object value = arguments[arguments.Length - 1]; + string path = mbox.GetValuePath(arguments); + + _ioHandler.Write(mbox.ResultBaseType, path, value); + } + + private void WriteProxy(ProxyResultBox xbox, object[] arguments) + { + throw new NotSupportedException("cannot assign values to interface properties"); + } + } +} diff --git a/Config.Net/Core/Extensions.cs b/Config.Net/Core/Extensions.cs new file mode 100644 index 0000000..646d92e --- /dev/null +++ b/Config.Net/Core/Extensions.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; + +namespace Config.Net.Core +{ + static class Extensions + { + public static TValue? GetValueOrDefaultInternal(this IDictionary dictionary, TKey key) + where TKey: notnull + where TValue: class + { + if (!dictionary.TryGetValue(key, out TValue? value)) return default(TValue); + + return value; + } + } +} diff --git a/Config.Net/Core/FlatArrays.cs b/Config.Net/Core/FlatArrays.cs new file mode 100644 index 0000000..e22bf56 --- /dev/null +++ b/Config.Net/Core/FlatArrays.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Config.Net.Core; +using Config.Net.TypeParsers; + +namespace Config.Net.Core +{ + /// + /// Helper class to implement flat arrays + /// + public static class FlatArrays + { + public static bool IsArrayLength(string? key, Func getValue, out int length) + { + if (!OptionPath.TryStripLength(key, out key)) + { + length = 0; + return false; + } + + string? value = key == null ? null : getValue(key); + if (value == null) + { + length = 0; + return false; + } + + if (!StringArrayParser.TryParse(value, out string[]? ar)) + { + length = 0; + return false; + } + + length = ar?.Length ?? 0; + return true; + } + + public static bool IsArrayElement(string? key, Func getValue, out string? value) + { + if(!OptionPath.TryStripIndex(key, out key, out int index)) + { + value = null; + return false; + } + + string? arrayString = key == null ? null : getValue(key); + if (!StringArrayParser.TryParse(arrayString, out string[]? array) || index >= array?.Length) + { + value = null; + return false; + } + + value = array?[index] ?? null; + return true; + } + } +} diff --git a/Config.Net/Core/InterfaceInterceptor.cs b/Config.Net/Core/InterfaceInterceptor.cs new file mode 100644 index 0000000..b02d3b3 --- /dev/null +++ b/Config.Net/Core/InterfaceInterceptor.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Reflection; +using System.Text; +using Castle.DynamicProxy; +using Config.Net.Core.Box; + +namespace Config.Net.Core +{ + class InterfaceInterceptor : IInterceptor + { + private readonly Dictionary _boxes; + private IoHandler _ioHandler; + private readonly string? _prefix; + private readonly DynamicReader _reader; + private readonly DynamicWriter _writer; + private readonly bool _isInpc; + private PropertyChangedEventHandler? _inpcHandler; + + public InterfaceInterceptor(Type interfaceType, IoHandler ioHandler, string? prefix = null) + { + _boxes = BoxFactory.Discover(interfaceType, ioHandler.ValueHandler, prefix); + _ioHandler = ioHandler; + _prefix = prefix; + _reader = new DynamicReader(prefix, ioHandler); + _writer = new DynamicWriter(prefix, ioHandler); + _isInpc = interfaceType.GetInterface(nameof(INotifyPropertyChanged)) != null; + } + + private ResultBox FindBox(IInvocation invocation) + { + if (PropertyResultBox.IsProperty(invocation.Method, out string? propertyName) && propertyName != null) + { + return _boxes[propertyName]; + } + else //method + { + string name = MethodResultBox.GetName(invocation.Method); + return _boxes[name]; + } + } + + public void Intercept(IInvocation invocation) + { + if (TryInterceptInpc(invocation)) return; + + ResultBox rbox = FindBox(invocation); + + bool isRead = + (rbox is PropertyResultBox && PropertyResultBox.IsGetProperty(invocation.Method)) || + (rbox is ProxyResultBox && PropertyResultBox.IsGetProperty(invocation.Method)) || + (rbox is MethodResultBox mbox && mbox.IsGettter) || + (rbox is CollectionResultBox); + + if(isRead) + { + invocation.ReturnValue = _reader.Read(rbox, -1, invocation.Arguments); + return; + } + else + { + _writer.Write(rbox, invocation.Arguments); + + TryNotifyInpc(invocation, rbox); + } + } + + private bool TryInterceptInpc(IInvocation invocation) + { + if (!_isInpc) return false; + + if (invocation.Method.Name == "add_PropertyChanged") + { + invocation.ReturnValue = + _inpcHandler = + (PropertyChangedEventHandler)Delegate.Combine(_inpcHandler, (Delegate)invocation.Arguments[0]); + return true; + } + else if(invocation.Method.Name == "remove_PropertyChanged") + { + invocation.ReturnValue = + _inpcHandler = + (PropertyChangedEventHandler?)Delegate.Remove(_inpcHandler, (Delegate)invocation.Arguments[0]); + return true; + } + + return false; + } + + private void TryNotifyInpc(IInvocation invocation, ResultBox rbox) + { + if (_inpcHandler == null || rbox is MethodResultBox) return; + + _inpcHandler.Invoke(invocation.InvocationTarget, new PropertyChangedEventArgs(rbox.Name)); + if(rbox.Name != rbox.StoreByName) + { + //notify on StoreByName as well + _inpcHandler.Invoke(invocation.InvocationTarget, new PropertyChangedEventArgs(rbox.StoreByName)); + } + } + } +} diff --git a/Config.Net/Core/IoHandler.cs b/Config.Net/Core/IoHandler.cs new file mode 100644 index 0000000..0d8e0e2 --- /dev/null +++ b/Config.Net/Core/IoHandler.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; + +namespace Config.Net.Core +{ + class IoHandler + { + private readonly IEnumerable _stores; + private readonly ValueHandler _valueHandler; + private readonly TimeSpan _cacheInterval; + private readonly ConcurrentDictionary> _keyToValue = new ConcurrentDictionary>(); + + public IoHandler(IEnumerable stores, ValueHandler valueHandler, TimeSpan cacheInterval) + { + _stores = stores ?? throw new ArgumentNullException(nameof(stores)); + _valueHandler = valueHandler ?? throw new ArgumentNullException(nameof(valueHandler)); + _cacheInterval = cacheInterval; + } + + public ValueHandler ValueHandler => _valueHandler; + + public object? Read(Type baseType, string path, object? defaultValue) + { + if(!_keyToValue.TryGetValue(path, out _)) + { + var v = new LazyVar(_cacheInterval, () => ReadNonCached(baseType, path, defaultValue)); + _keyToValue[path] = v; + return v.GetValue(); + } + + return _keyToValue[path].GetValue(); + } + + public void Write(Type baseType, string path, object? value) + { + string? valueToWrite = _valueHandler.ConvertValue(baseType, value); + + foreach (IConfigStore store in _stores.Where(s => s.CanWrite)) + { + store.Write(path, valueToWrite); + } + } + + private object? ReadNonCached(Type baseType, string path, object? defaultValue) + { + string? rawValue = ReadFirstValue(path); + + return _valueHandler.ParseValue(baseType, rawValue, defaultValue); + } + + private string? ReadFirstValue(string key) + { + foreach (IConfigStore store in _stores) + { + if (store.CanRead) + { + string? value = store.Read(key); + + if (value != null) return value; + } + } + return null; + } + + + + } +} diff --git a/Config.Net/Core/LazyVar.cs b/Config.Net/Core/LazyVar.cs new file mode 100644 index 0000000..202f800 --- /dev/null +++ b/Config.Net/Core/LazyVar.cs @@ -0,0 +1,96 @@ +using System; +using System.Threading.Tasks; + +namespace Config.Net.Core +{ + /// + /// Implements a lazy value i.e. that can expire in future + /// + /// + class LazyVar where T : class + { + private readonly Func>? _renewFuncAsync; + private readonly Func? _renewFunc; + private DateTime _lastRenewed = DateTime.MinValue; + private readonly TimeSpan _timeToLive; + private T? _value; + + /// + /// Creates an instance of a lazy variable with time-to-live value + /// + /// Time to live. Setting to disables caching completely + /// + public LazyVar(TimeSpan timeToLive, Func> renewFunc) + { + _timeToLive = timeToLive; + _renewFuncAsync = renewFunc ?? throw new ArgumentNullException(nameof(renewFunc)); + _renewFunc = null; + } + + /// + /// Creates an instance of a lazy variable with time-to-live value + /// + /// Time to live. Setting to disables caching completely + /// + public LazyVar(TimeSpan timeToLive, Func renewFunc) + { + _timeToLive = timeToLive; + _renewFuncAsync = null; + _renewFunc = renewFunc ?? throw new ArgumentNullException(nameof(renewFunc)); + } + + /// + /// Gets the values, renewing it if necessary + /// + /// Value + public async Task GetValueAsync() + { + if (_renewFuncAsync == null) + { + throw new InvalidOperationException("cannot renew value, async delegate is not specified"); + } + + if (_timeToLive == TimeSpan.Zero) + { + return await _renewFuncAsync(); + } + + bool expired = (DateTime.UtcNow - _lastRenewed) > _timeToLive; + + if (expired) + { + _value = await _renewFuncAsync(); + _lastRenewed = DateTime.UtcNow; + } + + return _value; + } + + /// + /// Gets the values, renewing it if necessary + /// + /// Value + public T? GetValue() + { + if (_renewFunc == null) + { + throw new InvalidOperationException("cannot renew value, synchronous delegate is not specified"); + } + + if (_timeToLive == TimeSpan.Zero) + { + return _renewFunc(); + } + + bool expired = (DateTime.UtcNow - _lastRenewed) > _timeToLive; + + if (expired) + { + _value = _renewFunc(); + _lastRenewed = DateTime.UtcNow; + } + + return _value; + } + } +} diff --git a/Config.Net/Core/OptionPath.cs b/Config.Net/Core/OptionPath.cs new file mode 100644 index 0000000..ff1a02f --- /dev/null +++ b/Config.Net/Core/OptionPath.cs @@ -0,0 +1,88 @@ +namespace Config.Net.Core +{ + public static class OptionPath + { + public const string Separator = "."; + private const string IndexOpen = "["; + private const string IndexClose = "]"; + public const string LengthFunction = ".$l"; + + public static string Combine(params string?[] parts) + { + return Combine(-1, parts); + } + + public static string AddLength(string path) + { + return path + LengthFunction; + } + + public static bool TryStripLength(string? path, out string? noLengthPath) + { + if (path == null) + { + noLengthPath = path; + return false; + } + + if (!path.EndsWith(LengthFunction)) + { + noLengthPath = path; + return false; + } + + noLengthPath = path.Substring(0, path.Length - LengthFunction.Length); + return true; + } + + /// + /// For indexed paths like "creds[1]" strips index part so it becomes: + /// - noIndexPath: "creds" + /// - index: 1 + /// + /// If path is not indexed returns false and noIndexPath is equal to path itself + /// + public static bool TryStripIndex(string? path, out string? noIndexPath, out int index) + { + if (path == null) + { + index = 0; + noIndexPath = path; + return false; + } + + int openIdx = path.IndexOf(IndexOpen); + int closeIdx = path.IndexOf(IndexClose); + + if (openIdx == -1 || closeIdx == -1 || openIdx > closeIdx || closeIdx != path.Length - 1) + { + noIndexPath = path; + index = 0; + return false; + } + + noIndexPath = path.Substring(0, openIdx); + int.TryParse(path.Substring(openIdx + 1, closeIdx - openIdx - 1), out index); + return true; + } + + public static string Combine(int index, params string?[] parts) + { + string s = string.Empty; + + for (int i = 0; i < parts.Length; i++) + { + if (s.Length > 0) s += Separator; + + if (!string.IsNullOrEmpty(parts[i])) s += parts[i]; + } + + if (index != -1) + { + s = $"{s}{IndexOpen}{index}{IndexClose}"; + } + + return s; + } + } +} \ No newline at end of file diff --git a/Config.Net/Core/ValueHandler.cs b/Config.Net/Core/ValueHandler.cs new file mode 100644 index 0000000..56be158 --- /dev/null +++ b/Config.Net/Core/ValueHandler.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using Config.Net.TypeParsers; + +namespace Config.Net.Core +{ + class ValueHandler + { + private readonly DefaultParser _defaultParser = new DefaultParser(); + private readonly ConcurrentDictionary _allParsers = new ConcurrentDictionary(); + private readonly HashSet _supportedTypes = new HashSet(); + + private static readonly ValueHandler _default = new ValueHandler(); + + public ValueHandler(IEnumerable? customParsers = null) + { + foreach (ITypeParser pc in GetBuiltInParsers()) + { + AddParser(pc); + } + + if(customParsers != null) + { + foreach(ITypeParser pc in customParsers) + { + AddParser(pc); + } + } + } + + public void AddParser(ITypeParser parser) + { + if (parser == null) + { + throw new ArgumentNullException(nameof(parser)); + } + + foreach (Type t in parser.SupportedTypes) + { + _allParsers[t] = parser; + _supportedTypes.Add(t); + } + } + + public bool IsSupported(Type t) + { + return _supportedTypes.Contains(t) || _defaultParser.IsSupported(t); + } + + public object? ParseValue(Type baseType, string? rawValue, object? defaultValue) + { + object? result; + + if (rawValue == null) + { + result = defaultValue; + } + else + { + if(!TryParse(baseType, rawValue, out result)) + { + result = defaultValue; + } + } + + return result; + } + + public bool TryParse(Type propertyType, string? rawValue, out object? result) + { + if (_defaultParser.IsSupported(propertyType)) //type here must be a non-nullable one + { + if (!_defaultParser.TryParse(rawValue, propertyType, out result)) + { + return false; + } + } + else + { + ITypeParser? typeParser = GetParser(propertyType); + if (typeParser == null) + { + result = null; + return false; + } + if (!typeParser.TryParse(rawValue, propertyType, out result)) + { + return false; + } + } + + return true; + } + + public string? ConvertValue(Type baseType, object? value) + { + string? str; + + if (value == null) + { + str = null; + } + else + { + if (_defaultParser.IsSupported(baseType)) + { + str = _defaultParser.ToRawString(value); + } + else + { + ITypeParser? parser = GetParser(value.GetType()); + str = parser?.ToRawString(value); + } + } + + return str; + } + + private ITypeParser? GetParser(Type t) + { + ITypeParser? result; + _allParsers.TryGetValue(t, out result); + return result; + } + + /// + /// Scans assembly for types implementing and builds Type => instance dictionary. + /// Not sure if I should use reflection here, however the assembly is small and this shouldn't cause any + /// performance issues + /// + /// + private static IEnumerable GetBuiltInParsers() + { + return new ITypeParser[] + { + new FloatParser(), + new DoubleParser(), + new DecimalParser(), + new SByteParser(), + new ShortParser(), + new IntParser(), + new LongParser(), + new ByteParser(), + new UShortParser(), + new UIntParser(), + new ULongParser(), + new StringArrayParser(), + new StringParser(), + new TimeSpanParser(), + new CoreParsers(), + new NetworkCredentialParser() + }; + } + + } +} diff --git a/Config.Net/IConfigStore.cs b/Config.Net/IConfigStore.cs new file mode 100644 index 0000000..de1d949 --- /dev/null +++ b/Config.Net/IConfigStore.cs @@ -0,0 +1,35 @@ +using System; + +namespace Config.Net +{ + /// + /// Configuration store interface + /// + public interface IConfigStore : IDisposable + { + /// + /// Returns true if store supports read operation. + /// + bool CanRead { get; } + + /// + /// Returns true if store supports write operation. + /// + bool CanWrite { get; } + + /// + /// Reads a key from the store. + /// + /// Key name. + /// If key exists in the store returns the value, othwise returns null. + string? Read(string key); + + /// + /// Writes a key to the store. + /// + /// Key name + /// Key value. Value of NULL usually means the key will be deleted, at least + /// this is the recomendation for the custom store implementers. + void Write(string key, string? value); + } +} diff --git a/Config.Net/ITypeParser.cs b/Config.Net/ITypeParser.cs new file mode 100644 index 0000000..6793e0a --- /dev/null +++ b/Config.Net/ITypeParser.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace Config.Net +{ + /// + /// Type parser interface + /// + public interface ITypeParser + { + /// + /// Returns the list of supported types this type parser handles + /// + IEnumerable SupportedTypes { get; } + + /// + /// Tries to parse a value from string + /// + /// + /// + /// + /// + bool TryParse(string? value, Type t, out object? result); + + /// + /// Converts value to a string to store in a backed store + /// + /// + /// + string? ToRawString(object? value); + } +} diff --git a/Config.Net/OptionAttribute.cs b/Config.Net/OptionAttribute.cs new file mode 100644 index 0000000..4fc11b5 --- /dev/null +++ b/Config.Net/OptionAttribute.cs @@ -0,0 +1,19 @@ +using System; + +namespace Config.Net +{ + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false)] + public class OptionAttribute : Attribute + { + /// + /// Alias is used to override option name if it's stored by a different name in external stores + /// + public string? Alias { get; set; } + + /// + /// Set to override the default value if option is not found in any stores + /// + public object? DefaultValue { get; set; } + + } +} diff --git a/Config.Net/Properties/AssemblyInfo.cs b/Config.Net/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a746705 --- /dev/null +++ b/Config.Net/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Config.Net.Tests")] \ No newline at end of file diff --git a/Config.Net/SettingsContainer.cs b/Config.Net/SettingsContainer.cs new file mode 100644 index 0000000..2fdad37 --- /dev/null +++ b/Config.Net/SettingsContainer.cs @@ -0,0 +1,313 @@ +/*using System; +using System.Reflection; +using System.Collections.Concurrent; +using Config.Net.TypeParsers; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; + +namespace Config.Net +{ + /// + /// Generic container for test settings + /// + public abstract class SettingsContainer + { + private readonly IConfigConfiguration _config = new ContainerConfiguration(); + + private readonly ConcurrentDictionary _nameToOption = + new ConcurrentDictionary(); + + private readonly ConcurrentDictionary _nameToOptionValue = + new ConcurrentDictionary(); + + private static readonly DefaultParser DefaultParser = new DefaultParser(); + + private readonly string _namespace; + private bool _isConfigured; + + /// + /// Constructs the container in default namespace + /// + protected SettingsContainer() : this(null) + { + } + + /// + /// Constructs the container allowing to specify a custom namespace + /// + /// + protected SettingsContainer(string namespaceName) + { + _namespace = namespaceName; + + DiscoverProperties(); + } + + /// + /// Reads the option value + /// + /// Option type + /// Option reference + /// Option value + public T Read(Option option) + { + CheckConfigured(); + + CheckCanParse(option.NonNullableType); + + OptionValue optionValue; + _nameToOptionValue.TryGetValue(option.Name, out optionValue); + + if (!optionValue.IsExpired(_config.CacheTimeout)) + { + return (T) optionValue.RawValue; + } + + string value = ReadFirstValue(option.Name); + if (value == null) + { + optionValue.RawValue = option.DefaultValue; + } + else if (DefaultParser.IsSupported(option.NonNullableType)) + { + object resultObject; + if (DefaultParser.TryParse(value, option.NonNullableType, out resultObject)) + { + optionValue.Update((T) resultObject); + } + else + { + optionValue.Update(option.DefaultValue); + } + } + else + { + ITypeParser typeParser = _config.GetParser(option.NonNullableType); + object result; + typeParser.TryParse(value, option.NonNullableType, out result); + optionValue.Update((T) result); + } + + OnReadOption(option, optionValue.RawValue); + + return (T) optionValue.RawValue; + } + + /// + /// Writes a new value to the option + /// + /// Option type + /// Option reference + /// New value + public void Write(Option option, T value) + { + CheckConfigured(); + + CheckCanParse(option.NonNullableType); + + OptionValue optionValue; + _nameToOptionValue.TryGetValue(option.Name, out optionValue); + + foreach (IConfigStore store in _config.Stores) + { + if (store.CanWrite) + { + string rawValue = AreEqual(value, option.DefaultValue) ? null : GetRawStringValue(option, value); + store.Write(option.Name, rawValue); + break; + } + } + + optionValue.Update(value); + OnWriteOption(option, value); + } + + /// + /// This method is called internally before containers is ready for use. You can specify + /// configuration stores or any other options here. + /// + /// + protected abstract void OnConfigure(IConfigConfiguration configuration); + + /// + /// Called after any value is read + /// + /// Optiond that is read + /// Option value read from a store + protected virtual void OnReadOption(Option option, object value) + { + } + + /// + /// Called before any value is written + /// + /// Option that is written + /// Option value to write + protected virtual void OnWriteOption(Option option, object value) + { + } + + private void CheckConfigured() + { + if (_isConfigured) return; + + OnConfigure(_config); + + _isConfigured = true; + } + + [Ignore] + private void DiscoverProperties() + { + Type t = this.GetType(); + Type optionType = typeof(Option); + + IEnumerable properties = t.GetRuntimeProperties() + .Where(f => f.PropertyType.GetTypeInfo().IsSubclassOf(optionType) && f.GetCustomAttribute() == null).ToList(); + // Only include fields that have not already been added as properties + IEnumerable fields = t.GetRuntimeFields() + .Where(f => f.IsPublic && f.FieldType.GetTypeInfo().IsSubclassOf(optionType)).ToList(); + + foreach (PropertyInfo pi in properties) + { + AssignOption(pi.GetValue(this), pi, pi.PropertyType.GetTypeInfo(), pi.CanWrite, v => pi.SetValue(this, v)); + } + foreach (FieldInfo fi in fields) + { + if (properties.Any(p => p.Name == fi.Name)) + throw new ArgumentException( + $"Field '{fi.Name}' has already been defined as a property."); + + var methInfo = fi.FieldType.GetTypeInfo(); + if (!methInfo.IsSubclassOf(optionType)) continue; + AssignOption(fi.GetValue(this), fi, methInfo, true, v => fi.SetValue(this, v)); + } + } + + private void AssignOption(object objValue, MemberInfo pi, TypeInfo propInfo, bool writeable, + Action setter) + { + { + //check if it has the value + if (objValue == null) + { + // Throw an exception if it's impossible to assign a default value to a read-only property with no default object assigned + if (!writeable) + throw new ArgumentException( + $"Property/Field '{pi.Name}' must either be settable or be pre-initialised with an Option<> object as a property, or marked as readonly if a field"); + + //create default instance if it doesn't exist + var nt = typeof(Option<>); + Type[] ntArgs = propInfo.GetGenericArguments(); + Type ntGen = nt.MakeGenericType(ntArgs); + objValue = Activator.CreateInstance(ntGen); + + //set the instance value back to the container + setter(objValue); + } + + Option value = (Option) objValue; + if (string.IsNullOrEmpty(value.Name)) value.Name = pi.Name; + value.Name = GetFullKeyName(value.Name); + value._parent = this; + value.NonNullableType = Nullable.GetUnderlyingType(value.ValueType); + value.IsNullable = value.NonNullableType != null; + if (value.NonNullableType == null) value.NonNullableType = value.ValueType; + + _nameToOption[value.Name] = value; + _nameToOptionValue[value.Name] = new OptionValue(); + } + } + + private string GetFullKeyName(string name) + { + if (string.IsNullOrEmpty(_namespace)) return name; + + return _namespace + "." + name; + } + + private bool CanParse(Type t) + { + return _config.HasParser(t) || DefaultParser.IsSupported(t); + } + + private string ReadFirstValue(string key) + { + foreach (IConfigStore store in _config.Stores) + { + if (store.CanRead) + { + string value = store.Read(key); + + if (value != null) return value; + } + } + return null; + } + + private void CheckCanParse(Type t) + { + if (!CanParse(t)) + { + throw new ArgumentException("value parser for " + t.FullName + + " is not registered and not supported by default parser"); + } + } + + private bool AreEqual(object value1, object value2) + { + if (value1 == null && value2 == null) return true; + + if (value1 != null && value2 != null) + { + Type t1 = value1.GetType(); + Type t2 = value2.GetType(); + + if (t1.IsArray && t2.IsArray) + { + return AreEqual((Array) value1, (Array) value2); + } + } + + return value1 != null && value1.Equals(value2); + } + + private bool AreEqual(Array a, Array b) + { + if (a == null && b == null) return true; + + if (a == null || b == null) return false; + + if (a.Length != b.Length) return false; + + for (int i = 0; i < a.Length; i++) + { + object obj1 = a.GetValue(i); + object obj2 = b.GetValue(i); + + if (!AreEqual(obj1, obj2)) return false; + } + + return true; + } + + private string GetRawStringValue(Option option, T value) + { + string stringValue = null; + ITypeParser typeParser = _config.GetParser(option.NonNullableType); + if (typeParser != null) + { + stringValue = typeParser.ToRawString(value); + } + else + { + if (DefaultParser.IsSupported(typeof(T))) + { + stringValue = DefaultParser.ToRawString(value); + } + } + return stringValue; + } + } +}*/ \ No newline at end of file diff --git a/Config.Net/Stores/AppConfigStore.cs b/Config.Net/Stores/AppConfigStore.cs new file mode 100644 index 0000000..2394436 --- /dev/null +++ b/Config.Net/Stores/AppConfigStore.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Specialized; +using System.Configuration; + +namespace Config.Net.Stores +{ + /// + /// Standard app.config (web.config) configuration store. Read-only. + /// + class AppConfigStore : IConfigStore + { + public string Name => "App.config"; + + public bool CanRead => true; + + public bool CanWrite => false; + + public string? Read(string key) + { + if(key == null) return null; + + //first, look at appsettings and connection strings + string? value = ConfigurationManager.AppSettings[key] ?? ConfigurationManager.ConnectionStrings[key]?.ConnectionString; + + if(value == null) + { + int idx = key.IndexOf('.'); + if(idx != -1) + { + string sectionName = key.Substring(0, idx); + if(ConfigurationManager.GetSection(sectionName) is NameValueCollection nvsc) + { + string keyName = key.Substring(idx + 1); + value = nvsc[keyName]; + } + } + } + + return value; + } + + public void Write(string key, string? value) => throw new NotSupportedException(); + + public void Dispose() + { + } + } +} \ No newline at end of file diff --git a/Config.Net/Stores/AssemblyConfigStore.cs b/Config.Net/Stores/AssemblyConfigStore.cs new file mode 100644 index 0000000..ea8f5f8 --- /dev/null +++ b/Config.Net/Stores/AssemblyConfigStore.cs @@ -0,0 +1,61 @@ +using System; +using System.Configuration; +using System.IO; +using System.Reflection; + +namespace Config.Net.Stores +{ + /// + /// Reads configuration from the .dll.config or .exe.config file. + /// + class AssemblyConfigStore : IConfigStore + { + private readonly Configuration _configuration; + + /// + /// Creates a new instance of assembly configuration store (.dll.config files) + /// + /// reference to the assembly to look for + public AssemblyConfigStore(Assembly assembly) + { + _configuration = ConfigurationManager.OpenExeConfiguration(assembly.Location); + } + + /// + /// Store name + /// + public string Name => Path.GetFileName(_configuration.FilePath); + + /// + /// Store is readable + /// + public bool CanRead => true; + + /// + /// Store is not writeable + /// + public bool CanWrite => false; + + /// + /// Reads the value by key + /// + public string? Read(string key) + { + KeyValueConfigurationElement element = _configuration.AppSettings.Settings[key]; + + return element?.Value; + } + + /// + /// Writing is not supported + /// + public void Write(string key, string? value) => throw new NotSupportedException(); + + /// + /// Nothing to dispose + /// + public void Dispose() + { + } + } +} \ No newline at end of file diff --git a/Config.Net/Stores/DictionaryConfigStore.cs b/Config.Net/Stores/DictionaryConfigStore.cs new file mode 100644 index 0000000..7d1245e --- /dev/null +++ b/Config.Net/Stores/DictionaryConfigStore.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using Config.Net.Core; + +namespace Config.Net.Stores +{ + class DictionaryConfigStore : IConfigStore + { + private readonly IDictionary _container; + + public DictionaryConfigStore(IDictionary? container = null) + { + _container = new Dictionary(StringComparer.InvariantCultureIgnoreCase); + + if(container != null) + { + foreach(KeyValuePair item in container) + { + _container[item.Key] = item.Value; + } + } + } + + public bool CanRead => true; + + public bool CanWrite => true; + + public void Dispose() + { + + } + + public string? Read(string key) + { + if (key == null) return null; + + if (FlatArrays.IsArrayLength(key, k => _container.GetValueOrDefaultInternal(k), out int length)) + { + return length.ToString(); + } + + if (FlatArrays.IsArrayElement(key, k => _container.GetValueOrDefaultInternal(k), out string? element)) + { + return element; + } + + return _container.GetValueOrDefaultInternal(key); + } + + public void Write(string key, string? value) + { + if (key == null) return; + + if (value == null) + { + _container.Remove(key); + } + else + { + _container[key] = value; + } + } + } +} diff --git a/Config.Net/Stores/EnvironmentVariablesStore.cs b/Config.Net/Stores/EnvironmentVariablesStore.cs new file mode 100644 index 0000000..3a03475 --- /dev/null +++ b/Config.Net/Stores/EnvironmentVariablesStore.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using Config.Net.Core; + +namespace Config.Net.Stores +{ + /// + /// Uses system environment variables + /// + class EnvironmentVariablesStore : IConfigStore + { + /// + /// Readable + /// + public bool CanRead => true; + + /// + /// Writeable + /// + public bool CanWrite => true; + + /// + /// Store name + /// + public string Name => "System Environment"; + + /// + /// Reads value by key + /// + public string? Read(string key) + { + if (key == null) return null; + + foreach(string variant in GetAllKeyVariants(key)) + { + if (FlatArrays.IsArrayLength(variant, k => Environment.GetEnvironmentVariable(k), out int length)) + { + return length.ToString(); + } + + if (FlatArrays.IsArrayElement(variant, k => Environment.GetEnvironmentVariable(k), out string? element)) + { + return element; + } + + string? value = Environment.GetEnvironmentVariable(variant); + if (value != null) return value; + } + + return null; + } + + /// + /// Writes value by key + /// + public void Write(string key, string? value) + { + Environment.SetEnvironmentVariable(key, value); + } + + private IEnumerable GetAllKeyVariants(string key) + { + var result = new List(); + result.Add(key); + result.Add(key.ToUpper().Replace(".", "_")); + return result; + } + + /// + /// Nothing to dispose + /// + public void Dispose() + { + } + } +} \ No newline at end of file diff --git a/Config.Net/Stores/Formats/Ini/IniComment.cs b/Config.Net/Stores/Formats/Ini/IniComment.cs new file mode 100644 index 0000000..0e83091 --- /dev/null +++ b/Config.Net/Stores/Formats/Ini/IniComment.cs @@ -0,0 +1,21 @@ +namespace Config.Net.Stores.Formats.Ini +{ + class IniComment : IniEntity + { + public const string CommentSeparator = ";"; + + public IniComment(string value) + { + Value = value; + } + + public string Value { get; set; } + + public string EscapedValue + { + get { return Value.Replace("\r", @"\r").Replace("\n", @"\n"); } + } + + public override string ToString() => Value; + } +} diff --git a/Config.Net/Stores/Formats/Ini/IniEntity.cs b/Config.Net/Stores/Formats/Ini/IniEntity.cs new file mode 100644 index 0000000..420a44e --- /dev/null +++ b/Config.Net/Stores/Formats/Ini/IniEntity.cs @@ -0,0 +1,6 @@ +namespace Config.Net.Stores.Formats.Ini +{ + abstract class IniEntity + { + } +} diff --git a/Config.Net/Stores/Formats/Ini/IniKeyValue.cs b/Config.Net/Stores/Formats/Ini/IniKeyValue.cs new file mode 100644 index 0000000..c290d7c --- /dev/null +++ b/Config.Net/Stores/Formats/Ini/IniKeyValue.cs @@ -0,0 +1,72 @@ +using System; + +namespace Config.Net.Stores.Formats.Ini +{ + internal class IniKeyValue : IniEntity + { + public const string KeyValueSeparator = "="; + + public IniKeyValue(string key, string value, string? comment) + { + if(key == null) throw new ArgumentNullException(nameof(key)); + Key = key; + Value = value; + Comment = comment == null ? null : new IniComment(comment); + } + + public string Key { get; } + + public string Value { get; set; } + + public string EscapedKey + { + get { return Key.Replace("\r", @"\r").Replace("\n", @"\n"); } + } + + public string EscapedValue + { + get { return Value.Replace("\r", @"\r").Replace("\n", @"\n"); } + } + + public IniComment? Comment { get; } + + public static IniKeyValue? FromLine(string line, bool parseInlineComments, bool unescapeNewLines = false) + { + int idx = line.IndexOf(KeyValueSeparator, StringComparison.CurrentCulture); + if(idx == -1) return null; + + string key = line.Substring(0, idx).Trim(); + string value = line.Substring(idx + 1).Trim(); + string? comment = null; + + if (parseInlineComments) + { + idx = value.LastIndexOf(IniComment.CommentSeparator, StringComparison.CurrentCulture); + if (idx != -1) + { + comment = value.Substring(idx + 1).Trim(); + value = value.Substring(0, idx).Trim(); + } + } + + if(unescapeNewLines) + { + key = UnescapeString(key); + value = UnescapeString(value); + comment = (comment != null) ? UnescapeString(comment) : null; + } + + return new IniKeyValue(key, value, comment); + } + + private static string UnescapeString(string key) + { + return key.Replace(@"\r", "\r").Replace(@"\n", "\n"); + } + + public override string ToString() + { + return $"{Value}"; + } + } +} diff --git a/Config.Net/Stores/Formats/Ini/IniSection.cs b/Config.Net/Stores/Formats/Ini/IniSection.cs new file mode 100644 index 0000000..d5074ff --- /dev/null +++ b/Config.Net/Stores/Formats/Ini/IniSection.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace Config.Net.Stores.Formats.Ini +{ + class IniSection + { + public const string SectionKeySeparator = "."; + + private readonly List _entities = new List(); + private readonly Dictionary _keyToValue = new Dictionary(); + + /// + /// Section name + /// + public string? Name { get; set; } + + /// + /// + /// + /// Pass null to work with global section + public IniSection(string? name) + { + if(name != null) + { + if (name.StartsWith("[")) name = name.Substring(1); + if (name.EndsWith("]")) name = name.Substring(0, name.Length - 1); + } + + Name = name; + } + + public void Add(IniEntity entity) + { + _entities.Add(entity); + + IniKeyValue? ikv = entity as IniKeyValue; + if(ikv != null) + { + _keyToValue[ikv.Key] = ikv; + } + } + + public IniKeyValue? Set(string key, string? value) + { + if(value == null) + { + IniKeyValue? ikv; + if(_keyToValue.TryGetValue(key, out ikv)) + { + _keyToValue.Remove(key); + return ikv; + } + return null; + } + else + { + IniKeyValue? ikv; + if(_keyToValue.TryGetValue(key, out ikv)) + { + ikv.Value = value; + } + else + { + ikv = new IniKeyValue(key, value, null); + Add(ikv); + } + return ikv; + } + } + + public static void SplitKey(string fullKey, out string? sectionName, out string keyName) + { + int idx = fullKey.IndexOf(SectionKeySeparator, StringComparison.CurrentCulture); + + if(idx == -1) + { + sectionName = null; + keyName = fullKey; + } + else + { + sectionName = fullKey.Substring(0, idx); + keyName = fullKey.Substring(idx + 1); + } + } + + public void WriteTo(StreamWriter writer) + { + foreach(IniEntity entity in _entities) + { + IniKeyValue? ikv = entity as IniKeyValue; + if(ikv != null) + { + writer.Write($"{ikv.EscapedKey}{IniKeyValue.KeyValueSeparator}{ikv.EscapedValue}"); + if(ikv.Comment != null) + { + writer.Write(" "); + writer.Write(IniComment.CommentSeparator); + writer.Write(ikv.Comment.EscapedValue); + } + writer.WriteLine(); + continue; + } + + IniComment? comment = entity as IniComment; + if(comment != null) + { + writer.Write(IniComment.CommentSeparator); + writer.WriteLine(comment.Value); + } + } + } + + public override string ToString() + { + return Name ?? string.Empty; + } + } +} diff --git a/Config.Net/Stores/Formats/Ini/StructuredIniFile.cs b/Config.Net/Stores/Formats/Ini/StructuredIniFile.cs new file mode 100644 index 0000000..3b72f61 --- /dev/null +++ b/Config.Net/Stores/Formats/Ini/StructuredIniFile.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace Config.Net.Stores.Formats.Ini +{ + class StructuredIniFile + { + private const string _sectionBegin = "["; + private const string _sectionEnd = "]"; + private static readonly char[] _sectionTrims = {'[', ']'}; + + private readonly IniSection _globalSection; + private readonly List _sections = new List(); + private readonly Dictionary _fullKeyNameToValue = new Dictionary(StringComparer.InvariantCultureIgnoreCase); + + public StructuredIniFile() + { + _globalSection = new IniSection(null); + _sections.Add(_globalSection); + } + + public string? this[string key] + { + get + { + if(key == null) return null; + + IniKeyValue? value; + return !_fullKeyNameToValue.TryGetValue(key, out value) ? null : value.Value; + } + set + { + if(key == null) return; + + IniSection.SplitKey(key, out string? sectionName, out string keyName); + IniSection? section = sectionName == null + ? _globalSection + : _sections.FirstOrDefault(s => s.Name == sectionName); + if(section == null) + { + section = new IniSection(sectionName); + _sections.Add(section); + } + IniKeyValue? ikv = section.Set(keyName, value); + + //update the local cache + if(ikv != null) + { + if(value == null) + { + _fullKeyNameToValue.Remove(key); + } + else + { + _fullKeyNameToValue[key] = ikv; + } + } + } + } + + public static StructuredIniFile ReadFrom(Stream inputStream, bool parseInlineComments, bool unescapeNewLines = false) + { + if(inputStream == null) throw new ArgumentNullException(nameof(inputStream)); + + var file = new StructuredIniFile(); + + using(var reader = new StreamReader(inputStream)) + { + IniSection section = file._globalSection; + + string? line; + while((line = reader.ReadLine()) != null) + { + line = line.Trim(); + + if(line.StartsWith(_sectionBegin)) + { + //start new section + line = line.Trim(); + section = new IniSection(line); + file._sections.Add(section); + } + else if(line.StartsWith(IniComment.CommentSeparator)) + { + //whole line is a comment + string comment = line.Substring(1).Trim(); + section.Add(new IniComment(comment)); + } + else + { + IniKeyValue? ikv = IniKeyValue.FromLine(line, parseInlineComments, unescapeNewLines); + if(ikv == null) continue; + + section.Add(ikv); + string fullKey = section.Name == null + ? ikv.Key + : $"{section.Name}{IniSection.SectionKeySeparator}{ikv.Key}"; + file._fullKeyNameToValue[fullKey] = ikv; + + } + } + } + + return file; + } + + public void WriteTo(Stream outputStream) + { + if(outputStream == null) throw new ArgumentNullException(nameof(outputStream)); + + using(var writer = new StreamWriter(outputStream)) + { + foreach(IniSection section in _sections) + { + if(section.Name != null) + { + writer.WriteLine(); + writer.WriteLine($"{_sectionBegin}{section.Name}{_sectionEnd}"); + } + + section.WriteTo(writer); + } + } + } + + //private static + } +} diff --git a/Config.Net/Stores/Impl/CommandLine/CommandLineConfigStore.cs b/Config.Net/Stores/Impl/CommandLine/CommandLineConfigStore.cs new file mode 100644 index 0000000..6b25708 --- /dev/null +++ b/Config.Net/Stores/Impl/CommandLine/CommandLineConfigStore.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using Config.Net.Core; +using Config.Net.TypeParsers; + +namespace Config.Net.Stores.Impl.CommandLine +{ + class CommandLineConfigStore : IConfigStore + { + private readonly Dictionary _nameToValue; + private static readonly char[] ArgPrefixes = new[] { '-', '/' }; + private static readonly string[] ArgDelimiters = new[] { "=", ":" }; + private readonly bool _isCaseSensitive; + + public bool CanRead => true; + + public bool CanWrite => false; + + public CommandLineConfigStore(string[]? args = null, bool isCaseSensitive = false, IEnumerable>? nameToPosition = null) + { + _isCaseSensitive = isCaseSensitive; + + _nameToValue = new Dictionary(_isCaseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase); + + Parse(args ?? Environment.GetCommandLineArgs(), nameToPosition); + } + + public void Dispose() + { + } + + public string? Read(string key) + { + if (key == null) return null; + + if(FlatArrays.IsArrayLength(key, k => _nameToValue.GetValueOrDefaultInternal(k), out int length)) + { + return length.ToString(); + } + + if(FlatArrays.IsArrayElement(key, k => _nameToValue.GetValueOrDefaultInternal(k), out string? element)) + { + return element; + } + + string? value; + _nameToValue.TryGetValue(key, out value); + return value; + } + + private string[]? GetAsArray(string key) + { + if (!_nameToValue.TryGetValue(key, out string? allString)) return null; + + if (!StringArrayParser.TryParse(allString, out string[]? ar)) return null; + return ar; + } + + public void Write(string key, string? value) + { + throw new NotSupportedException("command line cannot be written to"); + } + + private void Parse(string[] args, IEnumerable>? nameToPosition) + { + _nameToValue.Clear(); + + var posToName = new Dictionary(); + if (nameToPosition != null) + { + foreach(KeyValuePair p in nameToPosition) + { + if (p.Key != null) + { + posToName[p.Value] = p.Key; + } + } + } + + if (args == null) return; + + for (int i = 0; i < args.Length; i++) + { + string? name; + string? value; + + Tuple? nameValue = Utils.SplitByDelimiter(args[i], ArgDelimiters); + name = nameValue?.Item1.TrimStart(ArgPrefixes); + value = nameValue?.Item2; + + if (name != null && value != null) + { + _nameToValue[name] = value; + } + else if(name != null && posToName.TryGetValue(i, out string? ptnName)) + { + _nameToValue[ptnName] = args[i]; + } + } + } + } +} \ No newline at end of file diff --git a/Config.Net/Stores/IniFileConfigStore.cs b/Config.Net/Stores/IniFileConfigStore.cs new file mode 100644 index 0000000..8d16976 --- /dev/null +++ b/Config.Net/Stores/IniFileConfigStore.cs @@ -0,0 +1,120 @@ +using System; +using System.IO; +using System.Text; +using Config.Net.Core; +using Config.Net.Stores.Formats.Ini; + +namespace Config.Net.Stores +{ + /// + /// Simple INI storage. + /// + class IniFileConfigStore : IConfigStore + { + private readonly string? _fullName; + private readonly StructuredIniFile _iniFile; + + /// + /// + /// r + /// File does not have to exist, however it will be created as soon as you + /// try to write to it + public IniFileConfigStore(string name, bool isFilePath, bool parseInlineComments, bool unescapeNewLines = false) + { + if (name == null) throw new ArgumentNullException(nameof(name)); + + if (isFilePath) + { + _fullName = Path.GetFullPath(name); // Allow relative path to INI file + + string? parentDirPath = Path.GetDirectoryName(_fullName); + if (string.IsNullOrEmpty(parentDirPath)) throw new IOException("the provided directory path is not valid"); + if (!Directory.Exists(parentDirPath)) + { + Directory.CreateDirectory(parentDirPath); + } + + _iniFile = ReadIniFile(_fullName, parseInlineComments, unescapeNewLines); + + CanWrite = true; + } + else + { + _iniFile = ReadIniContent(name, parseInlineComments, unescapeNewLines); + + CanWrite = false; + } + + CanRead = true; + } + + public string Name => ".ini"; + + public bool CanRead { get; } + + public bool CanWrite { get; } + + public string? Read(string key) + { + if (FlatArrays.IsArrayLength(key, k => _iniFile[k], out int length)) + { + return length.ToString(); + } + + if (FlatArrays.IsArrayElement(key, k => _iniFile[k], out string? element)) + { + return element; + } + + return _iniFile[key]; + } + + public void Write(string key, string? value) + { + if (!CanWrite) return; + + _iniFile[key] = value; + + WriteIniFile(); + } + + private static StructuredIniFile ReadIniFile(string fullName, bool parseInlineComments, bool unescapeNewLines = false) + { + FileInfo iniFile = new FileInfo(fullName); + if(iniFile.Exists) + { + using(FileStream stream = iniFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + return StructuredIniFile.ReadFrom(stream, parseInlineComments, unescapeNewLines); + } + } + else + { + return new StructuredIniFile(); + } + } + + private static StructuredIniFile ReadIniContent(string content, bool parseInlineComments, bool unescapeNewLines = false) + { + using (Stream input = new MemoryStream(Encoding.UTF8.GetBytes(content))) + { + return StructuredIniFile.ReadFrom(input, parseInlineComments, unescapeNewLines); + } + } + + private void WriteIniFile() + { + if (_fullName == null) return; + + using(FileStream stream = File.Create(_fullName)) + { + _iniFile.WriteTo(stream); + } + } + + public void Dispose() + { + //nothing to dispose + } + } +} diff --git a/Config.Net/Stores/JsonConfigStore.cs b/Config.Net/Stores/JsonConfigStore.cs new file mode 100644 index 0000000..adb9326 --- /dev/null +++ b/Config.Net/Stores/JsonConfigStore.cs @@ -0,0 +1,165 @@ +using System; +using System.IO; +using System.Runtime.InteropServices.ComTypes; +using System.Text.Json; +using System.Text.Json.Nodes; +using Config.Net.Core; + +namespace Config.Net.Stores +{ + /// + /// Simple JSON storage using System.Text.Json + /// + public class JsonConfigStore : IConfigStore + { + private readonly string? _pathName; + private JsonNode? _j; + + /// + /// Create JSON storage in the file specified in . + /// + /// Name of the file, either path to JSON storage file, or json file content. + /// Set to true if specifies file name, otherwise false. + /// is null. + /// Provided path is not valid. + /// Storage file does not have to exist, however it will be created as soon as first write performed. + public JsonConfigStore(string name, bool isFilePath) + { + if (name == null) throw new ArgumentNullException(nameof(name)); + + if (isFilePath) + { + _pathName = Path.GetFullPath(name); // Allow relative path to JSON file + _j = ReadJsonFile(_pathName); + } + else + { + _j = ReadJsonString(name); + } + } + + public void Dispose() + { + // nothing to dispose. + } + + public static string Name => "json"; + + public bool CanRead => true; + + public bool CanWrite => _pathName != null; + + public string? Read(string rawKey) + { + if (string.IsNullOrEmpty(rawKey) || _j == null) return null; + + bool isLength = OptionPath.TryStripLength(rawKey, out string? key); + if (key == null) return null; + + string[] parts = key.Split('.'); + if (parts.Length == 0) return null; + + JsonNode? node = _j; + foreach (string rawPart in parts) + { + bool isIndex = OptionPath.TryStripIndex(rawPart, out string? part, out int partIndex); + if (part == null) return null; + + node = node![part]; + if (node == null) return null; + + if (isIndex) + { + if (node is not JsonArray ja) return null; + + if (partIndex < ja.Count) + { + node = ja[partIndex]; + } + else + return null; + } + } + + if (isLength) + return node is JsonArray ja ? ja.Count.ToString() : null; + + return node!.ToString(); + } + + public void Write(string key, string? value) + { + if (string.IsNullOrEmpty(_pathName)) + throw new InvalidOperationException("please specify file name for writeable config"); + + if (_j == null) _j = new JsonObject(); + + // navigate to target element, create if needed + string[] parts = key.Split('.'); + if (parts.Length == 0) return; + + JsonNode? node = _j; + string? lastPart = null; + foreach (string rawPart in parts) + { + bool isIndex = OptionPath.TryStripIndex(rawPart, out string? part, out int partIndex); + if (part == null) return; + lastPart = part; + + JsonNode? nextNode = node[part]; + + if (isIndex) + { + throw new NotImplementedException(); + } + else + { + if (nextNode == null) + { + //create missing node + nextNode = new JsonObject(); + node[part] = nextNode; + } + } + + node = nextNode; + + } + + JsonObject? parent = node.Parent as JsonObject; + parent!.Remove(lastPart!); + parent![lastPart!] = JsonValue.Create(value); + + string js = _j.ToJsonString(new JsonSerializerOptions { WriteIndented = true }); + + FileInfo file = new(_pathName); + + if (file is not null) + { + if (file.Directory is not null) + { + file.Directory.Create(); + } + } + + File.WriteAllText(_pathName, js); + + } + + private static JsonNode? ReadJsonFile(string fileName) + { + if (File.Exists(fileName)) + { + string json = File.ReadAllText(fileName); + return ReadJsonString(json); + } + + return null; + } + + private static JsonNode? ReadJsonString(string jsonString) + { + return JsonNode.Parse(jsonString); + } + } +} \ No newline at end of file diff --git a/Config.Net/TypeParsers/ByteParser.cs b/Config.Net/TypeParsers/ByteParser.cs new file mode 100644 index 0000000..b6a228b --- /dev/null +++ b/Config.Net/TypeParsers/ByteParser.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Config.Net.TypeParsers +{ + class ByteParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(byte) }; + + public bool TryParse(string? value, Type t, out object? result) + { + if(value == null) + { + result = false; + return false; + } + + byte ir; + bool parsed; + if (value.StartsWith("0x")) + { + parsed = byte.TryParse(value.Substring(2), NumberStyles.HexNumber, TypeParserSettings.DefaultCulture, out ir); + } + else + { + parsed = byte.TryParse(value, NumberStyles.Integer, TypeParserSettings.DefaultCulture, out ir); + } + result = ir; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((byte?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/CoreParsers.cs b/Config.Net/TypeParsers/CoreParsers.cs new file mode 100644 index 0000000..3fa65ac --- /dev/null +++ b/Config.Net/TypeParsers/CoreParsers.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +namespace Config.Net.TypeParsers +{ + /// + /// Container for core types. Eventually all simple parsers will merge into this class. + /// + class CoreParsers : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(Uri), typeof(bool), typeof(Guid), typeof(DateTime) }; + + private static readonly Dictionary BooleanTrueValues = + new Dictionary(StringComparer.OrdinalIgnoreCase) + { + {"true", true}, + {"yes", true}, + {"1", true}, + }; + + + public string? ToRawString(object? value) + { + if (value == null) return null; + + Type t = value.GetType(); + + if(t == typeof(Uri)) + return value.ToString(); + + if(t == typeof(bool)) + return value?.ToString()?.ToLowerInvariant(); + + if (t == typeof(Guid)) + return value.ToString(); + + if(t == typeof(DateTime)) + return ((DateTime)value).ToUniversalTime().ToString("u"); + + return null; + } + + public bool TryParse(string? value, Type t, out object? result) + { + if(value == null) + { + result = null; + return false; + } + + if(t == typeof(Uri)) + { + Uri uri = new Uri(value); + result = uri; + return true; + } + + if(t == typeof(bool)) + { + if(BooleanTrueValues.ContainsKey(value)) + { + result = true; + return true; + } + + result = false; + return true; + } + + if(t == typeof(Guid)) + { + if(Guid.TryParse(value, out Guid tg)) + { + result = tg; + return true; + } + + result = null; + return false; + } + + if(t == typeof(DateTime)) + { + DateTime dateResult; + bool parsed = DateTime.TryParse(value, TypeParserSettings.DefaultCulture, DateTimeStyles.None, out dateResult); + result = dateResult; + return parsed; + } + + result = null; + return false; + } + } +} diff --git a/Config.Net/TypeParsers/DecimalParser.cs b/Config.Net/TypeParsers/DecimalParser.cs new file mode 100644 index 0000000..ecf3e75 --- /dev/null +++ b/Config.Net/TypeParsers/DecimalParser.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Config.Net.TypeParsers +{ + class DecimalParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(decimal) }; + + public bool TryParse(string? value, Type t, out object? result) + { + decimal dr; + bool parsed = decimal.TryParse(value, NumberStyles.Float, TypeParserSettings.DefaultCulture, out dr); + result = dr; + return parsed; + + } + + public string? ToRawString(object? value) + { + return ((decimal?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/DefaultParser.cs b/Config.Net/TypeParsers/DefaultParser.cs new file mode 100644 index 0000000..15e9929 --- /dev/null +++ b/Config.Net/TypeParsers/DefaultParser.cs @@ -0,0 +1,69 @@ +using System; +using System.Reflection; + +namespace Config.Net.TypeParsers +{ + class DefaultParser + { + public bool TryParse(string? value, Type t, out object? result) + { + if(IsEnum(t)) + { + if(value == null) + { + result = null; + return false; + } + + try + { + result = Enum.Parse(t, value, true); + return true; + } + catch(ArgumentException) + { + + } + catch(OverflowException) + { + + } + + result = null; + return false; + } + + throw new NotSupportedException(); + } + + public bool IsSupported(Type t) + { + return IsEnum(t); + } + + public string? ToRawString(object? value) + { + if(value == null) return null; + + Type t = value.GetType(); + + if(IsEnum(t)) + { + return value.ToString(); + } + + throw new NotSupportedException(); + } + + static bool IsEnum(Type t) + { + if(t == null) return false; + + //try to get the underlying type if this is a nullable type + Type? nullable = Nullable.GetUnderlyingType(t); + if(nullable != null) t = nullable; + + return t.GetTypeInfo().IsEnum; + } + } +} diff --git a/Config.Net/TypeParsers/DoubleParser.cs b/Config.Net/TypeParsers/DoubleParser.cs new file mode 100644 index 0000000..2e4178d --- /dev/null +++ b/Config.Net/TypeParsers/DoubleParser.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +namespace Config.Net.TypeParsers +{ + class DoubleParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(double) }; + + public bool TryParse(string? value, Type t, out object? result) + { + double dr; + bool parsed = double.TryParse(value, NumberStyles.Float, TypeParserSettings.DefaultCulture, out dr); + result = dr; + return parsed; + + } + + public string? ToRawString(object? value) + { + return ((double?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/FloatParser.cs b/Config.Net/TypeParsers/FloatParser.cs new file mode 100644 index 0000000..3f48724 --- /dev/null +++ b/Config.Net/TypeParsers/FloatParser.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Config.Net.TypeParsers +{ + class FloatParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(float) }; + + public bool TryParse(string? value, Type t, out object? result) + { + float dr; + bool parsed = float.TryParse(value, NumberStyles.Float, TypeParserSettings.DefaultCulture, out dr); + result = dr; + return parsed; + + } + + public string? ToRawString(object? value) + { + return ((float?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/IntParser.cs b/Config.Net/TypeParsers/IntParser.cs new file mode 100644 index 0000000..a89a4dc --- /dev/null +++ b/Config.Net/TypeParsers/IntParser.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +namespace Config.Net.TypeParsers +{ + class IntParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(int) }; + + public bool TryParse(string? value, Type t, out object? result) + { + int ir; + bool parsed = int.TryParse(value, NumberStyles.Integer, TypeParserSettings.DefaultCulture, out ir); + result = ir; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((int?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/LongParser.cs b/Config.Net/TypeParsers/LongParser.cs new file mode 100644 index 0000000..f576a83 --- /dev/null +++ b/Config.Net/TypeParsers/LongParser.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +namespace Config.Net.TypeParsers +{ + class LongParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(long) }; + + public bool TryParse(string? value, Type t, out object? result) + { + long lr; + bool parsed = long.TryParse(value, NumberStyles.Integer, TypeParserSettings.DefaultCulture, out lr); + result = lr; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((long?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/NetworkCredentialParser.cs b/Config.Net/TypeParsers/NetworkCredentialParser.cs new file mode 100644 index 0000000..f3c30be --- /dev/null +++ b/Config.Net/TypeParsers/NetworkCredentialParser.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Net; + +namespace Config.Net.TypeParsers +{ + class NetworkCredentialParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(NetworkCredential) }; + + public string? ToRawString(object? value) + { + NetworkCredential? nc = value as NetworkCredential; + return Utils.ToFriendlyString(nc); + } + + public bool TryParse(string? value, Type t, out object? result) + { + NetworkCredential? nc = value.ToNetworkCredential(); + result = nc; + return true; + } + } +} diff --git a/Config.Net/TypeParsers/SByteParser.cs b/Config.Net/TypeParsers/SByteParser.cs new file mode 100644 index 0000000..4a38631 --- /dev/null +++ b/Config.Net/TypeParsers/SByteParser.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Config.Net.TypeParsers +{ + class SByteParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(sbyte) }; + + public bool TryParse(string? value, Type t, out object? result) + { + sbyte ir; + bool parsed = sbyte.TryParse(value, NumberStyles.Integer, TypeParserSettings.DefaultCulture, out ir); + result = ir; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((sbyte?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/ShortParser.cs b/Config.Net/TypeParsers/ShortParser.cs new file mode 100644 index 0000000..8048fdf --- /dev/null +++ b/Config.Net/TypeParsers/ShortParser.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Config.Net.TypeParsers +{ + class ShortParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(short) }; + + public bool TryParse(string? value, Type t, out object? result) + { + short ir; + bool parsed = short.TryParse(value, NumberStyles.Integer, TypeParserSettings.DefaultCulture, out ir); + result = ir; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((short?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/StringArrayParser.cs b/Config.Net/TypeParsers/StringArrayParser.cs new file mode 100644 index 0000000..e7fdb57 --- /dev/null +++ b/Config.Net/TypeParsers/StringArrayParser.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Config.Net.TypeParsers +{ + class StringArrayParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(string[]) }; + + public bool TryParse(string? value, Type t, out object? result) + { + if (value == null) + { + result = null; + return false; + } + + result = ParseAsArray(value); + return true; + } + + public static bool TryParse(string? value, out string[]? result) + { + if(value == null) + { + result = null; + return false; + } + + result = ParseAsArray(value); + return true; + } + + public string? ToRawString(object? value) + { + string[]? arv = (string[]?)value; + + if (arv == null || arv.Length == 0) return null; + + return string.Join(" ", arv.Select(Escape)); + } + + private static string Escape(string s) + { + string s1 = s.Replace("\"", "\"\""); + + return (s == s1 && !s.Contains(" ")) + ? s + : $"\"{s1}\""; + } + + private static string[] ParseAsArray(string s) + { + var a = new List(); + string v = string.Empty; + + int state = 0; + for(int i = 0; i < s.Length;) + { + char ch = s[i]; + + switch(state) + { + case 0: //default + if (ch == '\"') + { + state = 2; + } + else if(ch == ' ') + { + //skip spaces in default mode + } + else + { + v += ch; + state = 1; + } + i++; + break; + case 1: //reading unquoted value + if (ch == ' ') + { + a.Add(v); + v = string.Empty; + state = 0; + } + else + { + v += ch; + } + i++; + break; + case 2: //reading quoted value + if(ch == '\"') + { + state = 3; + } + else + { + v += ch; + } + i++; + break; + + case 3: //after quote in quoted mode + if (ch == '\"') + { + v += ch; + state = 2; + } + else + { + a.Add(v); + v = string.Empty; + state = 0; + } + i++; + break; + } + } + + if(!string.IsNullOrEmpty(v)) + { + a.Add(v); + } + + return a.ToArray(); + } + } +} diff --git a/Config.Net/TypeParsers/StringParser.cs b/Config.Net/TypeParsers/StringParser.cs new file mode 100644 index 0000000..10320f5 --- /dev/null +++ b/Config.Net/TypeParsers/StringParser.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + +namespace Config.Net.TypeParsers +{ + class StringParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(string) }; + + public bool TryParse(string? value, Type t, out object? result) + { + result = value; + return value != null; + } + + public string? ToRawString(object? value) + { + return value as string; + } + } +} diff --git a/Config.Net/TypeParsers/TimeSpanParser.cs b/Config.Net/TypeParsers/TimeSpanParser.cs new file mode 100644 index 0000000..bd2dccc --- /dev/null +++ b/Config.Net/TypeParsers/TimeSpanParser.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; + +namespace Config.Net.TypeParsers +{ + class TimeSpanParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(TimeSpan) }; + + public bool TryParse(string? value, Type t, out object? result) + { + TimeSpan ts; + bool parsed = TimeSpan.TryParse(value, TypeParserSettings.DefaultCulture, out ts); + result = ts; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((TimeSpan?)value)?.ToString(null, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/TypeParserSettings.cs b/Config.Net/TypeParsers/TypeParserSettings.cs new file mode 100644 index 0000000..7e22b9b --- /dev/null +++ b/Config.Net/TypeParsers/TypeParserSettings.cs @@ -0,0 +1,11 @@ +using System.Globalization; + +namespace Config.Net.TypeParsers +{ + internal static class TypeParserSettings + { + public const string DefaultNumericFormat = "G"; + + public static readonly CultureInfo DefaultCulture = CultureInfo.InvariantCulture; + } +} diff --git a/Config.Net/TypeParsers/UIntParser.cs b/Config.Net/TypeParsers/UIntParser.cs new file mode 100644 index 0000000..0b0fb0d --- /dev/null +++ b/Config.Net/TypeParsers/UIntParser.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Config.Net.TypeParsers +{ + class UIntParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(uint) }; + + public bool TryParse(string? value, Type t, out object? result) + { + uint ir; + bool parsed = uint.TryParse(value, NumberStyles.Integer, TypeParserSettings.DefaultCulture, out ir); + result = ir; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((uint?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/ULongParser.cs b/Config.Net/TypeParsers/ULongParser.cs new file mode 100644 index 0000000..4bfb40e --- /dev/null +++ b/Config.Net/TypeParsers/ULongParser.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Config.Net.TypeParsers +{ + class ULongParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(ulong) }; + + public bool TryParse(string? value, Type t, out object? result) + { + ulong ir; + bool parsed = ulong.TryParse(value, NumberStyles.Integer, TypeParserSettings.DefaultCulture, out ir); + result = ir; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((ulong?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/TypeParsers/UShortParser.cs b/Config.Net/TypeParsers/UShortParser.cs new file mode 100644 index 0000000..92ebeea --- /dev/null +++ b/Config.Net/TypeParsers/UShortParser.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Config.Net.TypeParsers +{ + class UShortParser : ITypeParser + { + public IEnumerable SupportedTypes => new[] { typeof(ushort) }; + + public bool TryParse(string? value, Type t, out object? result) + { + ushort ir; + bool parsed = ushort.TryParse(value, NumberStyles.Integer, TypeParserSettings.DefaultCulture, out ir); + result = ir; + return parsed; + } + + public string? ToRawString(object? value) + { + return ((ushort?)value)?.ToString(TypeParserSettings.DefaultNumericFormat, TypeParserSettings.DefaultCulture); + } + } +} diff --git a/Config.Net/Utils.cs b/Config.Net/Utils.cs new file mode 100644 index 0000000..f171539 --- /dev/null +++ b/Config.Net/Utils.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; + +namespace Config.Net +{ + static class Utils + { + public static NetworkCredential? ToNetworkCredential(this string? s) + { + if (s == null) return null; + + Tuple? credsAndDomain = SplitByDelimiter(s, "@"); + string? creds = credsAndDomain?.Item1; + string? domain = credsAndDomain?.Item2; + + Tuple? usernameAndPassword = SplitByDelimiter(creds, ":"); + string? username = usernameAndPassword?.Item1; + string? password = usernameAndPassword?.Item2; + + return new NetworkCredential(username, password, domain); + } + + public static string? ToFriendlyString(NetworkCredential? credential) + { + if (credential == null) return null; + + string usernameAndPassword; + + if (string.IsNullOrEmpty(credential.UserName) && string.IsNullOrEmpty(credential.Password)) + { + usernameAndPassword = string.Empty; + } + else if (string.IsNullOrEmpty(credential.UserName)) + { + usernameAndPassword = $":{credential.Password}"; + } + else if (string.IsNullOrEmpty(credential.Password)) + { + usernameAndPassword = credential.UserName; + } + else + { + usernameAndPassword = $"{credential.UserName}:{credential.Password}"; + } + + return string.IsNullOrEmpty(credential.Domain) + ? usernameAndPassword + : $"{usernameAndPassword}@{credential.Domain}"; + } + + public static Tuple? SplitByDelimiter(string? s, params string[] delimiter) + { + if (s == null) return null; + + string key; + string? value; + + if (delimiter == null || delimiter.Length == 0) + { + key = s.Trim(); + value = null; + } + else + { + + List indexes = delimiter.Where(d => d != null).Select(d => s.IndexOf(d)).Where(d => d != -1).ToList(); + + if (indexes.Count == 0) + { + key = s.Trim(); + value = null; + } + else + { + int idx = indexes.OrderBy(i => i).First(); + key = s.Substring(0, idx); + value = s.Substring(idx + 1); + } + } + + return new Tuple(key, value); + } + } +} diff --git a/FSI.BT.Tools.sln b/FSI.BT.Tools.sln index 159134b..3612c05 100644 --- a/FSI.BT.Tools.sln +++ b/FSI.BT.Tools.sln @@ -3,15 +3,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.32112.339 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSI.BT.Tools", "FSI.BT.Tools\FSI.BT.Tools.csproj", "{21041032-87C5-4842-B540-9EB3ACD8A16D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSI.BT.Tools", "FSI.BT.Tools\FSI.BT.Tools.csproj", "{49AC17F0-02B1-4972-A07E-C413233803BF}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSI.Lib", "FSI.Lib\FSI.Lib\FSI.Lib.csproj", "{3232DF9C-FAAC-4429-8E7D-E3E9F266118F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoCompleteTextBox", "AutoCompleteTextBox\AutoCompleteTextBox.csproj", "{A9F40DCC-0B40-4F5D-A639-0DFB89EB4657}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotifyIconWpf", "NotifyIconWpf\NotifyIconWpf\NotifyIconWpf.csproj", "{C60282E9-2046-4D76-86F8-0B5CBFDE6D26}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Config.Net", "Config.Net\Config.Net.csproj", "{88E60518-EABA-433D-85C1-B257BCF6408A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHotkey.Wpf", "NHotkey\NHotkey.Wpf\NHotkey.Wpf.csproj", "{B2E18BB7-BB05-4E5E-B6E0-C05EF98F5287}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSI.Lib", "FSI.Lib\FSI.Lib\FSI.Lib.csproj", "{D6E8C3B6-822A-4491-8D52-79E451A105F6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RadialMenu", "RadialMenu\RadialMenu.csproj", "{9DF116EE-45B1-4297-BE75-0F6B78B33689}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RoboSharp", "RoboSharp\RoboSharp.csproj", "{CDC46BAE-640C-4758-91F6-AB79B6A118C1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RadialMenu", "RadialMenu\RadialMenu.csproj", "{42B3BF54-1903-4213-A536-44F60D46B1F0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpClipboard", "SharpClipboard\SharpClipboard\SharpClipboard.csproj", "{AB011A1E-03C0-4A12-86C2-4CEC2099FEEF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tulpep.NotificationWindow", "Notification-Popup-Window\Tulpep.NotificationWindow\Tulpep.NotificationWindow.csproj", "{605006EB-D4E6-4312-A293-3A43FAC43240}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -19,31 +25,43 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {21041032-87C5-4842-B540-9EB3ACD8A16D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21041032-87C5-4842-B540-9EB3ACD8A16D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21041032-87C5-4842-B540-9EB3ACD8A16D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21041032-87C5-4842-B540-9EB3ACD8A16D}.Release|Any CPU.Build.0 = Release|Any CPU - {3232DF9C-FAAC-4429-8E7D-E3E9F266118F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3232DF9C-FAAC-4429-8E7D-E3E9F266118F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3232DF9C-FAAC-4429-8E7D-E3E9F266118F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3232DF9C-FAAC-4429-8E7D-E3E9F266118F}.Release|Any CPU.Build.0 = Release|Any CPU - {C60282E9-2046-4D76-86F8-0B5CBFDE6D26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C60282E9-2046-4D76-86F8-0B5CBFDE6D26}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C60282E9-2046-4D76-86F8-0B5CBFDE6D26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C60282E9-2046-4D76-86F8-0B5CBFDE6D26}.Release|Any CPU.Build.0 = Release|Any CPU - {B2E18BB7-BB05-4E5E-B6E0-C05EF98F5287}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2E18BB7-BB05-4E5E-B6E0-C05EF98F5287}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2E18BB7-BB05-4E5E-B6E0-C05EF98F5287}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2E18BB7-BB05-4E5E-B6E0-C05EF98F5287}.Release|Any CPU.Build.0 = Release|Any CPU - {9DF116EE-45B1-4297-BE75-0F6B78B33689}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DF116EE-45B1-4297-BE75-0F6B78B33689}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DF116EE-45B1-4297-BE75-0F6B78B33689}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DF116EE-45B1-4297-BE75-0F6B78B33689}.Release|Any CPU.Build.0 = Release|Any CPU + {49AC17F0-02B1-4972-A07E-C413233803BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {49AC17F0-02B1-4972-A07E-C413233803BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {49AC17F0-02B1-4972-A07E-C413233803BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {49AC17F0-02B1-4972-A07E-C413233803BF}.Release|Any CPU.Build.0 = Release|Any CPU + {A9F40DCC-0B40-4F5D-A639-0DFB89EB4657}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9F40DCC-0B40-4F5D-A639-0DFB89EB4657}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9F40DCC-0B40-4F5D-A639-0DFB89EB4657}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9F40DCC-0B40-4F5D-A639-0DFB89EB4657}.Release|Any CPU.Build.0 = Release|Any CPU + {88E60518-EABA-433D-85C1-B257BCF6408A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {88E60518-EABA-433D-85C1-B257BCF6408A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {88E60518-EABA-433D-85C1-B257BCF6408A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {88E60518-EABA-433D-85C1-B257BCF6408A}.Release|Any CPU.Build.0 = Release|Any CPU + {D6E8C3B6-822A-4491-8D52-79E451A105F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6E8C3B6-822A-4491-8D52-79E451A105F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6E8C3B6-822A-4491-8D52-79E451A105F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6E8C3B6-822A-4491-8D52-79E451A105F6}.Release|Any CPU.Build.0 = Release|Any CPU + {CDC46BAE-640C-4758-91F6-AB79B6A118C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDC46BAE-640C-4758-91F6-AB79B6A118C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDC46BAE-640C-4758-91F6-AB79B6A118C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDC46BAE-640C-4758-91F6-AB79B6A118C1}.Release|Any CPU.Build.0 = Release|Any CPU + {42B3BF54-1903-4213-A536-44F60D46B1F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42B3BF54-1903-4213-A536-44F60D46B1F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42B3BF54-1903-4213-A536-44F60D46B1F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42B3BF54-1903-4213-A536-44F60D46B1F0}.Release|Any CPU.Build.0 = Release|Any CPU + {AB011A1E-03C0-4A12-86C2-4CEC2099FEEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB011A1E-03C0-4A12-86C2-4CEC2099FEEF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB011A1E-03C0-4A12-86C2-4CEC2099FEEF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB011A1E-03C0-4A12-86C2-4CEC2099FEEF}.Release|Any CPU.Build.0 = Release|Any CPU + {605006EB-D4E6-4312-A293-3A43FAC43240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {605006EB-D4E6-4312-A293-3A43FAC43240}.Debug|Any CPU.Build.0 = Debug|Any CPU + {605006EB-D4E6-4312-A293-3A43FAC43240}.Release|Any CPU.ActiveCfg = Release|Any CPU + {605006EB-D4E6-4312-A293-3A43FAC43240}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E7CCC9AB-E9BE-4414-B73F-8387EDFEEB2D} + SolutionGuid = {42ABEA59-E385-4B30-B81F-8F18064A368D} EndGlobalSection EndGlobal diff --git a/FSI.BT.Tools/Admin.cs b/FSI.BT.Tools/Admin.cs deleted file mode 100644 index bf72525..0000000 --- a/FSI.BT.Tools/Admin.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Collections.Generic; -using FSI.Lib.Helpers; - -namespace FSI.BT.Tools -{ - internal class Admin - { - public static bool CheckSuperAdminRight() - { - if (Global.Settings.SuperAdmin == null) - { - return false; - } - - System.Security.Principal.WindowsIdentity windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent(); - - if (string.Equals(Global.Settings.SuperAdmin, windowsIdentity.ShortName(), StringComparison.OrdinalIgnoreCase)) - return true; - - return false; - } - - public static bool CheckAdminRight() - { - if (Global.Settings.Admins == null) - { - return false; - } - - List admins = new List(Global.Settings.Admins); - - System.Security.Principal.WindowsIdentity windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent(); - - foreach (string admin in admins) - { - if (string.Equals(admin, windowsIdentity.ShortName(), StringComparison.OrdinalIgnoreCase)) - return true; - } - - return false; - } - - public static bool CheckUserRight() - { - if (Global.Settings.Users == null) - { - return false; - } - - List users = new List(Global.Settings.Users); - - System.Security.Principal.WindowsIdentity windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent(); - - foreach (string user in users) - { - if (string.Equals(user, windowsIdentity.ShortName(), StringComparison.OrdinalIgnoreCase)) - return true; - } - - return false; - } - } -} diff --git a/FSI.BT.Tools/App.xaml b/FSI.BT.Tools/App.xaml deleted file mode 100644 index f841c3b..0000000 --- a/FSI.BT.Tools/App.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - diff --git a/FSI.BT.Tools/App.xaml.cs b/FSI.BT.Tools/App.xaml.cs deleted file mode 100644 index 26bdd63..0000000 --- a/FSI.BT.Tools/App.xaml.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Hardcodet.Wpf.TaskbarNotification; -using NHotkey; -using NHotkey.Wpf; -using System.Windows; -using System.Windows.Input; - -namespace FSI.BT.Tools -{ - /// - /// Interaction logic for App.xaml - /// - public partial class App : System.Windows.Application - { - private static readonly KeyGesture RadialMenu = new(Key.OemBackslash, ModifierKeys.Control); - private static readonly KeyGesture TimeStamp = new(Key.C, ModifierKeys.Control | ModifierKeys.Alt); - - public void Application_Startup(object sender, StartupEventArgs e) - { - - Global.Settings = new AppSettings(GetType().Namespace.ToString() + ".xml"); - Global.Settings.Load(); - - - Global.TaskbarIcon = (TaskbarIcon)FindResource("FSINotifyIcon"); - - Global.AdminRights = Admin.CheckAdminRight(); - Global.SuperAdminRights = Admin.CheckSuperAdminRight(); - Global.UserRights = Admin.CheckUserRight(); - - HotkeyManager.Current.AddOrReplace("RadialMenu", RadialMenu, ShowRadialMenu); - - HotkeyManager.Current.AddOrReplace("TimeStampToClipboard", TimeStamp, TimeStampToClipboard); - - Global.FrmRadialMenu = new(); - } - - private void ShowRadialMenu(object sender, HotkeyEventArgs e) - { - var cmd = new Commands.RadialMenuCommand(); - - if (cmd.CanExecute(null)) - cmd.Execute(null); - - e.Handled = true; - } - - private void TimeStampToClipboard(object sender, HotkeyEventArgs e) - { - var cmd = new Commands.TimeStampToClipboardCommand(); - cmd.Execute(null); - - e.Handled = true; - } - - private void Application_Exit(object sender, ExitEventArgs e) - { - Global.Settings.Save(); - } - } -} \ No newline at end of file diff --git a/FSI.BT.Tools/AppSettings.cs b/FSI.BT.Tools/AppSettings.cs deleted file mode 100644 index 1bb85f8..0000000 --- a/FSI.BT.Tools/AppSettings.cs +++ /dev/null @@ -1,59 +0,0 @@ -using FSI.Lib.WinSettings; - -namespace FSI.BT.Tools -{ - public class AppSettings : XmlSettings - { - - public AppSettings(string fileName) : base(fileName) - { - TimeStampFormat = "_yyyyMMdd_HHmmss"; - EplArguments = "/Variant:\"Electric P8\""; - SuperAdmin = "maier_s"; - } - - [EncryptedSetting] - public string[]? Users { get; set; } - [EncryptedSetting] - public string[]? Admins{ get; set; } - public string? SuperAdmin{ get; set; } - public string? TimeStampFormat { get; set; } - public string[]? SieSimaticManagerExe { get; set; } - public string[]? SieTiaV13Exe { get; set; } - public string[]? SieTiaV14Exe { get; set; } - public string[]? SieTiaV15Exe { get; set; } - public string[]? SieTiaV16Exe { get; set; } - public string[]? SieTiaV17Exe { get; set; } - public string[]? SieTiaVStarterExe { get; set; } - public string[]? EplExe { get; set; } - public string? EplArguments { get; set; } - public string[]? NppExe { get; set; } - public string[]? TotalCmdExe { get; set; } - public string[]? TeXstudioExe { get; set; } - public string[]? TeXstudioPath { get; set; } - public string[]? VsExe { get; set; } - public string[]? VsCodeExe { get; set; } - public string[]? RdpExe { get; set; } - public string[]? OutlookExe { get; set; } - public string[]? TeamsExe { get; set; } - public string? TeamsArg { get; set; } - public string[]? ExcelExe { get; set; } - public string[]? WordExe { get; set; } - public string[]? PaintNetExe { get; set; } - public string[]? GimpExe { get; set; } - public string[]? VncExe { get; set; } - public string[]? VncAdrBookExe { get; set; } - public string? ZentralWebUrl { get; set; } - public string? SchichtbuchUrl { get; set; } - public string? SPSUrl { get; set; } - public string? Pl1PlsUrl { get; set; } - public string? Pl2PlsUrl { get; set; } - public string? Pl2Als { get; set; } - public string? Pl3PlsUrl { get; set; } - public string? GiteaUrl { get; set; } - public string? WikiUrl { get; set; } - public string? ErpUrl { get; set; } - public string? EplPdfPath { get; set; } - public string? EplPrjPath { get; set; } - } -} diff --git a/FSI.BT.Tools/ClipboardMgt/Buisness/App.cs b/FSI.BT.Tools/ClipboardMgt/Buisness/App.cs new file mode 100644 index 0000000..39cb8a0 --- /dev/null +++ b/FSI.BT.Tools/ClipboardMgt/Buisness/App.cs @@ -0,0 +1,44 @@ +namespace FSI.BT.Tools.ClipboardMgt +{ + using System; + using FSI.BT.Tools.Global.Utilities; + using FSI.BT.Tools.RadialMenu.Business; + using Microsoft.Win32; + using WK.Libraries.SharpClipboardNS; + + /// + /// App contains the notifyicon, the taskbarform and the menus. + /// + internal class App : IDisposable + { + SharpClipboard _clipBoard; + public App() + { + + AppRestart.BeforeRestarting += Dispose; + SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; + + + _clipBoard = new SharpClipboard(); + _clipBoard.ObservableFormats.Texts = true; + _clipBoard.ClipboardChanged += Clipboard_ClipboardChanged; + } + + private void Clipboard_ClipboardChanged(object sender, SharpClipboard.ClipboardChangedEventArgs e) + { + var test = e.Content.ToString(); + if (e.Content.ToString().StartsWith("\"") && e.Content.ToString().EndsWith("\"")) + System.Windows.Forms.Clipboard.SetDataObject(e.Content.ToString().Substring(1, e.Content.ToString().Length - 2)); + } + + public void Dispose() + { + + } + + private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Commands/OpenAppCommand.cs b/FSI.BT.Tools/Commands/OpenAppCommand.cs deleted file mode 100644 index e532dc0..0000000 --- a/FSI.BT.Tools/Commands/OpenAppCommand.cs +++ /dev/null @@ -1,401 +0,0 @@ -using FSI.Lib; -using System; -using System.Diagnostics; -using System.IO; -using System.Windows; - -namespace FSI.BT.Tools.Commands -{ - /// - /// Shows the main window. - /// - public class OpenAppCommand : CommandBase - { - public override void Execute(object parameter) - { - string[] files = new string[] { }; - string[] pathes = new string[] { }; - string arguments = string.Empty; - - switch ((string)parameter) - { - case "SimaticManager": - files = Global.Settings.SieSimaticManagerExe; - break; - - case "TIAv13": - files = Global.Settings.SieTiaV13Exe; - break; - - case "TIAv14": - files = Global.Settings.SieTiaV14Exe; - break; - - case "TIAv15": - files = Global.Settings.SieTiaV13Exe; - break; - - case "TIAv16": - files = Global.Settings.SieTiaV16Exe; - break; - - case "TIAv17": - files = Global.Settings.SieTiaV17Exe; - break; - - case "Starter": - files = Global.Settings.SieTiaVStarterExe; - break; - - case "Epl": - files = Global.Settings.EplExe; - arguments = Global.Settings.EplArguments; - break; - - case "EplPrj": - Lib.Guis.Prj.Mgt.FrmMain frmMainEplPrj = new() - { - ShowPdf = false, - CloseAtLostFocus = true, - WindowStartupLocation = WindowStartupLocation.CenterOwner, - Path = Global.Settings.EplPrjPath, - EplExes = Global.Settings.EplExe, - }; - frmMainEplPrj.Show(); - return; - - case "EplPdf": - Lib.Guis.Prj.Mgt.FrmMain frmMainEplPdf = new() - { - ShowPdf = true, - CloseAtLostFocus = true, - WindowStartupLocation = WindowStartupLocation.CenterOwner, - Path = Global.Settings.EplPdfPath, - }; - frmMainEplPdf.Show(); - return; - - case "EplPdfMgt": - Lib.Guis.Pdf.Mgt.FrmMain frmMainEplPdfMgt = new() - { - CloseAtLostFocus = true - }; - frmMainEplPdfMgt.Show(); - return; - - case "Npp": - files = Global.Settings.NppExe; - break; - - case "TotalCmd": - files = Global.Settings.TotalCmdExe; - break; - - case "TeXstudio": - files = Global.Settings.TeXstudioExe; - pathes = Global.Settings.TeXstudioPath; - break; - - case "VS": - files = Global.Settings.VsExe; - break; - - case "VS.Code": - files = Global.Settings.VsCodeExe; - break; - - - case "Rdp": - files = Global.Settings.RdpExe; - break; - - case "DeEncrypt": - Lib.Guis.DeEncryptMessage.FrmMain frmMainDeEnCrypt = new() - { - Password = GetType().Namespace.ToString(), - CloseAtLostFocus = true, - WindowStartupLocation = WindowStartupLocation.CenterOwner, - }; - frmMainDeEnCrypt.Show(); - return; - - case "StarterCsvExporter": - Lib.Guis.SieStarterCsvExporter.FrmMain frmMain = new(); - frmMain.Show(); - return; - - case "Admin": - Gui.FrmAdmin frmAdmin = new() - { - Admins = Global.Settings.Admins, - Users = Global.Settings.Users, - }; - frmAdmin.ShowDialog(); - - if (frmAdmin.DialogResult.HasValue && frmAdmin.DialogResult.Value) - { - Global.Settings.Admins = frmAdmin.Admins; - Global.Settings.Users = frmAdmin.Users; - } - return; - - case "Outlook": - files = Global.Settings.OutlookExe; - break; - - case "Teams": - files = Global.Settings.TeamsExe; - arguments = Global.Settings.TeamsArg; - break; - - case "Excel": - files = Global.Settings.ExcelExe; - break; - - case "Word": - files = Global.Settings.WordExe; - break; - - case "PaintNet": - files = Global.Settings.PaintNetExe; - break; - - case "Gimp": - files = Global.Settings.GimpExe; - break; - - case "Vnc": - files = Global.Settings.VncExe; - break; - - case "VncAdrBook": - files = Global.Settings.VncAdrBookExe; - break; - - } - - string fileName = string.Empty; - string path = string.Empty; - - for (int i = 0; i <= files.Length - 1; i++) - { - if (File.Exists(Environment.ExpandEnvironmentVariables(files[i].Trim()))) - { - fileName = Environment.ExpandEnvironmentVariables(files[i].Trim()); - } - - if (pathes.Length == 0) - { - path = Path.GetDirectoryName(fileName); - } - else - { - path = Environment.ExpandEnvironmentVariables(pathes[i].Trim()); - } - } - - if (ProgramIsRunning(fileName)) - { - ProgramToFront(fileName); - } - else - { - Process process = new(); - process.StartInfo.FileName = fileName; - process.StartInfo.WorkingDirectory = path; - process.StartInfo.Arguments = arguments; - - try - { - process.Start(); - } - catch (System.ComponentModel.Win32Exception ex) when (ex.NativeErrorCode == 740) - { - try - { - process.StartInfo.UseShellExecute = true; - process.StartInfo.Verb = "runas"; - process.Start(); - } - catch { } - } - } - } - - public override bool CanExecute(object parameter) - { - string[] files = new string[] { }; - switch ((string)parameter) - { - case "SimaticManager": - files = Global.Settings.SieSimaticManagerExe; - break; - - case "TIAv13": - files = Global.Settings.SieTiaV13Exe; - break; - - case "TIAv14": - files = Global.Settings.SieTiaV14Exe; - break; - - case "TIAv15": - files = Global.Settings.SieTiaV13Exe; - break; - - case "TIAv16": - files = Global.Settings.SieTiaV16Exe; - break; - - case "TIAv17": - files = Global.Settings.SieTiaV17Exe; - break; - - case "Starter": - files = Global.Settings.SieTiaVStarterExe; - break; - - case "Epl": - files = Global.Settings.EplExe; - break; - - case "EplPrj": - return true; - - case "EplPdf": - return true; - - case "EplPdfMgt": - return Global.AdminRights; - - case "Npp": - files = Global.Settings.NppExe; - break; - - case "TotalCmd": - files = Global.Settings.TotalCmdExe; - break; - - case "TeXstudio": - files = Global.Settings.TeXstudioExe; - break; - - case "VS": - files = Global.Settings.VsExe; - break; - - case "VS.Code": - files = Global.Settings.VsCodeExe; - break; - - - case "Rdp": - files = Global.Settings.RdpExe; - break; - - case "DeEncrypt": - return Global.AdminRights; - - case "StarterCsvExporter": - return Global.AdminRights; - - case "Admin": - return Global.SuperAdminRights; - - case "Outlook": - files = Global.Settings.OutlookExe; - break; - - case "Teams": - files = Global.Settings.TeamsExe; - break; - - case "Excel": - files = Global.Settings.ExcelExe; - break; - - case "Word": - files = Global.Settings.WordExe; - break; - - case "PaintNet": - files = Global.Settings.PaintNetExe; - break; - - case "Gimp": - files = Global.Settings.GimpExe; - break; - - case "Vnc": - files = Global.Settings.VncExe; - break; - - case "VncAdrBook": - files = Global.Settings.VncAdrBookExe; - break; - - default: return false; - - } - - foreach (string file in files) - { - if (File.Exists(Environment.ExpandEnvironmentVariables(file.Trim()))) - { - return true; - } - } - - return false; - } - - private bool ProgramIsRunning(string FullPath) - { - string FilePath = Path.GetDirectoryName(FullPath); - string FileName = Path.GetFileNameWithoutExtension(FullPath).ToLower(); - bool isRunning = false; - - Process[] pList = Process.GetProcessesByName(FileName); - - foreach (Process p in pList) - { - if (p.MainModule.FileName.StartsWith(FilePath, StringComparison.InvariantCultureIgnoreCase)) - { - isRunning = true; - break; - } - } - - return isRunning; - } - - [System.Runtime.InteropServices.DllImport("User32.dll")] - private static extern bool SetForegroundWindow(IntPtr handle); - [System.Runtime.InteropServices.DllImport("User32.dll")] - private static extern bool ShowWindow(IntPtr handle, int nCmdShow); - [System.Runtime.InteropServices.DllImport("User32.dll")] - private static extern bool IsIconic(IntPtr handle); - - private void ProgramToFront(string FullPath) - { - string FilePath = Path.GetDirectoryName(FullPath); - string FileName = Path.GetFileNameWithoutExtension(FullPath).ToLower(); - - Process[] pList = Process.GetProcessesByName(FileName); - - foreach (Process p in pList) - { - if (p.MainModule.FileName.StartsWith(FilePath, StringComparison.InvariantCultureIgnoreCase)) - { - IntPtr handle = p.MainWindowHandle; - if (IsIconic(handle)) - { - ShowWindow(handle, 9); - } - SetForegroundWindow(handle); - break; - } - } - } - } -} \ No newline at end of file diff --git a/FSI.BT.Tools/Commands/OpenLinkCommand.cs b/FSI.BT.Tools/Commands/OpenLinkCommand.cs deleted file mode 100644 index cdfc4ba..0000000 --- a/FSI.BT.Tools/Commands/OpenLinkCommand.cs +++ /dev/null @@ -1,82 +0,0 @@ -using FSI.Lib; -using System; -using System.Diagnostics; - -namespace FSI.BT.Tools.Commands -{ - /// - /// Shows the main window. - /// - public class OpenLinkCommand : CommandBase - { - public override void Execute(object parameter) - { - string url = String.Empty; - - switch ((string)parameter) - { - case "ZentralWeb": - url = Global.Settings.ZentralWebUrl; - break; - - case "Schichtbuch": - url = Global.Settings.SchichtbuchUrl; - break; - - case "SPS": - url = Global.Settings.SPSUrl; - break; - - case "PL1.Pls": - url = Global.Settings.Pl1PlsUrl; - break; - - case "PL2.Pls": - url = Global.Settings.Pl2PlsUrl; - break; - - case "PL2.Als": - url = Global.Settings.Pl2Als; - break; - - case "PL3.Pls": - url = Global.Settings.Pl3PlsUrl; - break; - - case "FSI.Gitea": - url = Global.Settings.GiteaUrl; - break; - - case "FSI.Wiki": - url = Global.Settings.WikiUrl; - break; - - case "Erp": - url = Global.Settings.ErpUrl; - break; - } - - if (url == String.Empty) - return; - - url = url.Replace("&", "^&"); - Process.Start(new ProcessStartInfo(url) { UseShellExecute = true }); - } - - public override bool CanExecute(object parameter) - { - string url = String.Empty; - switch ((string)parameter) - { - case "FSI.Gitea": - return Global.AdminRights; - - case "FSI.Wiki": - return Global.AdminRights; - - default: - return true; - } - } - } -} \ No newline at end of file diff --git a/FSI.BT.Tools/Commands/RadialMenuCommand.cs b/FSI.BT.Tools/Commands/RadialMenuCommand.cs deleted file mode 100644 index d6267de..0000000 --- a/FSI.BT.Tools/Commands/RadialMenuCommand.cs +++ /dev/null @@ -1,37 +0,0 @@ -using FSI.Lib.Wpf.ExtensionMethods; -using System.Windows; - -namespace FSI.BT.Tools.Commands -{ - /// - /// Shows the main window. - /// - public class RadialMenuCommand : CommandBase - { - public override void Execute(object parameter) - { - if (Global.FrmRadialMenu.Visibility == Visibility.Collapsed) - { - Global.FrmRadialMenu.ShowCenteredToMouse(); - Global.FrmRadialMenu.ActivateCenteredToMouse(); - return; - } - - if (Global.FrmRadialMenu.Visibility == Visibility.Hidden) - { - Global.FrmRadialMenu.Visibility = Visibility.Visible; - } - else - { - Global.FrmRadialMenu.Visibility = Visibility.Hidden; - } - - Global.FrmRadialMenu.ActivateCenteredToMouse(); - } - - public override bool CanExecute(object parameter) - { - return Global.AdminRights || Global.UserRights; - } - } -} \ No newline at end of file diff --git a/FSI.BT.Tools/Commands/TimeStampToClipboardCommand.cs b/FSI.BT.Tools/Commands/TimeStampToClipboardCommand.cs deleted file mode 100644 index 855ce65..0000000 --- a/FSI.BT.Tools/Commands/TimeStampToClipboardCommand.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Windows.Controls.Primitives; - -namespace FSI.BT.Tools.Commands -{ - /// - /// Shows the main window. - /// - public class TimeStampToClipboardCommand : CommandBase - { - public override void Execute(object parameter) - { - System.Windows.Forms.Clipboard.SetDataObject(DateTime.Now.ToString(Global.Settings.TimeStampFormat)); - var balloon = new ToolTip() - { - BalloonText = "Zeitstempel", - BalloonDesc = "Der aktuelle Zeitstempel wurde in die Zwischenablage kopiert." - }; - Global.TaskbarIcon.ShowCustomBalloon(balloon, PopupAnimation.Slide, 2000); - } - - public override bool CanExecute(object parameter) - { - return true; - } - } -} \ No newline at end of file diff --git a/FSI.BT.Tools/ExtTools/AudioSwitch.zip b/FSI.BT.Tools/ExtTools/AudioSwitch.zip new file mode 100644 index 0000000..a4926ef Binary files /dev/null and b/FSI.BT.Tools/ExtTools/AudioSwitch.zip differ diff --git a/FSI.BT.Tools/ExtTools/SmartSystemMenu_v2.21.2.zip b/FSI.BT.Tools/ExtTools/SmartSystemMenu_v2.21.2.zip new file mode 100644 index 0000000..68ec318 Binary files /dev/null and b/FSI.BT.Tools/ExtTools/SmartSystemMenu_v2.21.2.zip differ diff --git a/FSI.BT.Tools/ExtTools/kalk.zip b/FSI.BT.Tools/ExtTools/kalk.zip new file mode 100644 index 0000000..bcc31d6 Binary files /dev/null and b/FSI.BT.Tools/ExtTools/kalk.zip differ diff --git a/FSI.BT.Tools/FSI.BT.Tools.csproj b/FSI.BT.Tools/FSI.BT.Tools.csproj index e0c5057..0b29795 100644 --- a/FSI.BT.Tools/FSI.BT.Tools.csproj +++ b/FSI.BT.Tools/FSI.BT.Tools.csproj @@ -1,106 +1,181 @@  - WinExe - net6.0-windows - WinExe - enable + net6.0-windows10.0.22000.0 + win-x64 true - true - Icons\FondiumU.ico - 1.1 + true + x64 + WinExe + false + x64;x86;AnyCPU + Debug;Release;ReleasePackage + + + Global\Icons\FondiumU.ico + + + True + + + True + + + True + + + False + + + False + + + False + + + FSI.BT.Tools.Program + full + 10.0.17763.0 + true + + + True + + + True + + + True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B} + 1 + 0 + 0 + tlbimp + False + True + + + {50A7E9B0-70EF-11D1-B75A-00A0C90564FE} + 1 + 0 + 0 + tlbimp + False + True + + + + + + + + + + + + - - - - + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + False + FSI.BT.Tools.Global\ThirdParty\Clearcove.Logging.dll + + + + + + + + + + + + - - PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always - + diff --git a/FSI.BT.Tools/FSI.BT.Tools.xml b/FSI.BT.Tools/FSI.BT.Tools.xml deleted file mode 100644 index 4857dc0..0000000 --- a/FSI.BT.Tools/FSI.BT.Tools.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - +I945AMzKKYBAAAAB21haWVyX3M= - e+Dt7FRUDDoBAAAAB21haWVyX3M= - maier_s - _yyyyMMdd_HHmmss - C:\Program Files (x86)\Siemens\Step7\S7BIN\S7tgtopx.exe - C:\Program Files (x86)\Siemens\Automation\Portal V13\Bin\Siemens.Automation.Portal.exe - C:\Program Files\Siemens\Automation\Portal V14\Bin\Siemens.Automation.Portal.exe - C:\Program Files\Siemens\Automation\Portal V15\Bin\Siemens.Automation.Portal.exe,c:\Program Files\Siemens\Automation\Portal V15_1\Bin\Siemens.Automation.Portal.exe - C:\Program Files\Siemens\Automation\Portal V16\Bin\Siemens.Automation.Portal.exe - C:\Program Files\Siemens\Automation\Portal V17\Bin\Siemens.Automation.Portal.exe - C:\Program Files (x86)\Siemens\Step7\S7BIN\u7wdrfax.exe - C:\Program Files\EPLAN\Platform\2.9.4\Bin\EPLAN.exe,C:\Program Files\EPLAN\Platform\2022.0.3\Bin\Eplan.exe - /Variant:"Electric P8" - C:\Windows\system32\notepad.exe,c:\Program Files\Notepad++\notepad++.exe - C:\Program Files\totalcmd\TOTALCMD.EXE,C:\Program Files\totalcmd\TOTALCMD64.EXE,C:\totalcmd\TOTALCMD64.EXE,C:\totalcmd\TOTALCMD.EXE - C:\Program Files\texstudio\texstudio.exe - C:\Program Files\texstudio\dictionaries - C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe - %USERPROFILE%\AppData\Local\Programs\Microsoft VS Code\Code.exe - %windir%\system32\mstsc.exe - C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE - C:\Users\maier_s\AppData\Local\Microsoft\Teams\Update.exe - --processStart ""Teams.exe"" - C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE - C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE - C:\Program Files\paint.net\paintdotnet.exe - C:\Program Files\GIMP 2\bin\gimp-2.10.exe - C:\Program Files\RealVNC\VNC Viewer\vncviewer.exe,c:\Users\maier_s\OneDrive - Fondium Group GmbH\Documents\Apps\VNC-Viewer-6.20.113-Windows-64bit.exe - C:\Program Files\RealVNC\VNC Viewer\vncaddrbook.exe - http://desiaugetwf/web/?AspxAutoDetectCookieSupport=1 - http://10.10.1.42/SKSchichtbuchWeb/de-DE/Plugin/ShiftBook/ShiftBook/IR - http://10.10.1.42/SKChangeTrackerWeb/de-DE/Plugin/ChangeTracker - http://10.10.200.2/SKPL1Web/index.aspx - http://10.10.213.4/SKPL2Web/index.aspx - http://10.10.213.234:84/emb_1/index.html - http://10.10.202.10/SKPL3Web/index.aspx - http://desiaugetc7-088:3000/ - http://desiaugetc7-088:3001/en/home - https://mingle-portal.eu1.inforcloudsuite.com/FONDIUM_prd - \\10.10.1.40\Betriebstechnik\Eplan - \\fondium.org\DESI$\AUG_Abteilung\Betriebstechnik\EPL\P8\Data\Projekte\FSI\ - \ No newline at end of file diff --git a/FSI.BT.Tools/FrmRadialMenu.xaml.cs b/FSI.BT.Tools/FrmRadialMenu.xaml.cs deleted file mode 100644 index c613733..0000000 --- a/FSI.BT.Tools/FrmRadialMenu.xaml.cs +++ /dev/null @@ -1,267 +0,0 @@ -using System; -using System.ComponentModel; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Windows; -using System.Windows.Forms; -using System.Windows.Input; - -namespace FSI.BT.Tools -{ - /// - /// Interaction logic for MainWindow.xaml - /// - public partial class FrmRadialMenu : Window, INotifyPropertyChanged - { - - public FrmRadialMenu() - { - InitializeComponent(); - DataContext = this; - _isOpenHome = true; - tbversion.Text = "v" + Assembly.GetExecutingAssembly().GetName().Version.Major + "." + Assembly.GetExecutingAssembly().GetName().Version.Minor; - } - - #region Home - private bool _isOpenHome = true; - public bool IsOpenHome - { - get - { - return _isOpenHome; - } - set - { - _isOpenHome = value; - RaisePropertyChanged(); - } - } - - public ICommand CloseRadialMenuHome - { - get - { - return new RelayCommand(() => Visibility = Visibility.Hidden); - } - } - - public ICommand OpenRadialMenuHome - { - get - { - return new RelayCommand(() => - { - IsOpenHome = true; - IsOpenEpl = - IsOpenTools = - IsOpenSie = - IsOpenApps = - IsOpenLinks = false; - }); - } - } - #endregion - - #region Epl - - private bool _isOpenEpl = false; - public bool IsOpenEpl - { - get - { - return _isOpenEpl; - } - set - { - _isOpenEpl = value; - RaisePropertyChanged(); - } - } - - public ICommand OpenRadialMenuEpl - { - get - { - return new RelayCommand(() => - { - IsOpenEpl = true; - IsOpenHome = false; - }); - } - } - - #endregion - - #region Tools - - private bool _isOpenTools = false; - public bool IsOpenTools - { - get - { - return _isOpenTools; - } - set - { - _isOpenTools = value; - RaisePropertyChanged(); - } - } - - public ICommand OpenRadialMenuTools - { - get - { - return new RelayCommand(() => - { - IsOpenTools = true; - IsOpenHome = false; - }); - } - } - - #endregion - - #region Siemens - - private bool _isOpenSie = false; - public bool IsOpenSie - { - get - { - return _isOpenSie; - } - set - { - _isOpenSie = value; - RaisePropertyChanged(); - } - } - - public ICommand OpenRadialMenuSie - { - get - { - return new RelayCommand(() => - { - IsOpenSie = true; - IsOpenHome = false; - }); - } - } - - #endregion - - #region Links - - private bool _isOpenLinks = false; - public bool IsOpenLinks - { - get - { - return _isOpenLinks; - } - set - { - _isOpenLinks = value; - RaisePropertyChanged(); - } - } - - public ICommand OpenRadialMenuLinks - { - get - { - return new RelayCommand(() => - { - IsOpenLinks = true; - IsOpenPlantLinks = - IsOpenHome = false; - }); - } - } - - #endregion - - #region Anlagen Links - - private bool _isOpenPlantLinks = false; - public bool IsOpenPlantLinks - { - get - { - return _isOpenPlantLinks; - } - set - { - _isOpenPlantLinks = value; - RaisePropertyChanged(); - } - } - - public ICommand OpenRadialMenuPlantLinks - { - get - { - return new RelayCommand(() => - { - IsOpenPlantLinks = true; - IsOpenLinks = false; - }); - } - } - - #endregion - - #region Apps - - private bool _isOpenApps = false; - public bool IsOpenApps - { - get - { - return _isOpenApps; - } - set - { - _isOpenApps = value; - RaisePropertyChanged(); - } - } - - public ICommand OpenRadialMenuApps - { - get - { - return new RelayCommand(() => - { - IsOpenApps = true; - IsOpenHome = false; - }); - } - } - - #endregion - - public event PropertyChangedEventHandler PropertyChanged; - - void RaisePropertyChanged([CallerMemberName] string? propertyName = null) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } - - private void Window_Deactivated(object sender, EventArgs e) - { - Visibility = Visibility.Hidden; - - IsOpenHome = true; - IsOpenEpl = - IsOpenTools = - IsOpenSie = - IsOpenLinks = - IsOpenApps = - IsOpenPlantLinks = false; - } - } -} diff --git a/FSI.BT.Tools/Global.cs b/FSI.BT.Tools/Global.cs deleted file mode 100644 index 1f76397..0000000 --- a/FSI.BT.Tools/Global.cs +++ /dev/null @@ -1,21 +0,0 @@ -using FSI.Lib.WinSettings; -using Hardcodet.Wpf.TaskbarNotification; - -namespace FSI.BT.Tools -{ - internal static class Global - { - - public static FrmRadialMenu? FrmRadialMenu { get; set; } - - public static TaskbarIcon? TaskbarIcon { get; set; } - - public static AppSettings? Settings { get; set; } - public static bool UserRights { get; set; } - - public static bool AdminRights { get; set; } - public static bool SuperAdminRights { get; set; } - - - } -} diff --git a/FSI.BT.Tools/Global.json b/FSI.BT.Tools/Global.json new file mode 100644 index 0000000..4e4d31c --- /dev/null +++ b/FSI.BT.Tools/Global.json @@ -0,0 +1,536 @@ +{ + "SuperAdmin": "QlYbjwG0MLE49l71iEav9DnCfzBlWYFtURfS4px/PB1kcePPLtByt4U7hHOPCcaLf4XhzfAz/KJ2Ud7iexbD/w==", + "Admins": [ + { + "Value": "0AZTYgTy5qkhLFmi9O9taw==" + } + ], + "USers": [ + { + "Value": "0AZTYgTy5qkhLFmi9O9taw==" + } + ], + "TimeStampFormat": { + "Value": "_yyyyMMdd_HHmmss" + }, + "Cmds": [ + { + "Cmd": "StartUp", + "Urls": [ + "https://www.rockantenne.de/webradio/80er-rock?utm_id=streams&utm_medium=webplayer&utm_campaign=streamlist&utm_term=mountpoint-80er-rock&utm_content=alias-80er-rock", + "http://desiaugetwf/web/?AspxAutoDetectCookieSupport=1", + "http://10.10.1.42/SKSchichtbuchWeb/de-DE/Plugin/ShiftBook/ShiftBook/IR", + "http://10.10.1.42/SKChangeTrackerWeb/de-DE/Plugin/ChangeTracker" + ] + }, + { + "Cmd": "S7", + "Exe": [ + { + "ExePath": "C:\\Program Files (x86)\\Siemens\\STEP7\\S7BIN\\S7tgtopx.exe" + } + ] + }, + { + "Cmd": "TiaV13", + "Exe": [ + { + "ExePath": "C:\\Program Files (x86)\\Siemens\\Automation\\Portal V13\\Bin\\Siemens.Automation.Portal.exe" + }, + { + "ExePath": "C:\\Program Files (x86)\\Portal V13\\Bin\\Siemens.Automation.Portal.exe" + } + ] + }, + { + "Cmd": "TiaV14", + "Exe": [ + { + "ExePath": "C:\\Program Files\\Siemens\\Automation\\Portal V14\\Bin\\Siemens.Automation.Portal.exe" + }, + { + "ExePath": "C:\\Program Files\\Portal V14\\Bin\\Siemens.Automation.Portal.exe" + } + ] + }, + { + "Cmd": "TiaV15", + "Exe": [ + { + "ExePath": "C:\\Program Files\\Siemens\\Automation\\Portal V15\\Bin\\Siemens.Automation.Portal.exe" + }, + { + "ExePath": "c:\\Program Files\\Siemens\\Automation\\Portal V15_1\\Bin\\Siemens.Automation.Portal.exe" + }, + { + "ExePath": "C:\\Program Files\\Portal V15_1\\Bin\\Siemens.Automation.Portal.exe" + } + ] + }, + { + "Cmd": "TiaV16", + "Exe": [ + { + "ExePath": "C:\\Program Files\\Siemens\\Automation\\Portal V16\\Bin\\Siemens.Automation.Portal.exe" + }, + { + "ExePath": "C:\\Program Files\\Portal V16\\Bin\\Siemens.Automation.Portal.exe" + } + ] + }, + { + "Cmd": "TiaV17", + "Exe": [ + { + "ExePath": "C:\\Program Files\\Siemens\\Automation\\Portal V17\\Bin\\Siemens.Automation.Portal.exe" + } + ] + }, + { + "Cmd": "Starter", + "Exe": [ + { + "ExePath": "C:\\Program Files (x86)\\Siemens\\Step7\\S7BIN\\u7wdrfax.exe" + } + ] + }, + { + "Cmd": "Epl", + "Exe": [ + { + "ExePath": "C:\\Program Files\\EPLAN\\Platform\\2.9.4\\Bin\\EPLAN.exe", + "Arguments": "/Variant:\"Electric P8\"" + }, + { + "ExePath": "C:\\Program Files\\EPLAN\\Platform\\2022.0.3\\Bin\\Eplan.exe", + "Arguments": "/Variant:\"Electric P8\"" + } + ] + }, + { + "Cmd": "NPP", + "Exe": [ + { + "ExePath": "C:\\Windows\\system32\\notepad.exe" + }, + { + "ExePath": "c:\\Program Files\\Notepad++\\notepad++.exe" + } + ] + }, + { + "Cmd": "Epl", + "Exe": [ + { + "ExePath": "C:\\Program Files\\EPLAN\\Platform\\2.9.4\\Bin\\EPLAN.exe", + "Arguments": "/Variant:\"Electric P8\"" + }, + { + "ExePath": "C:\\Program Files\\EPLAN\\Platform\\2022.0.3\\Bin\\Eplan.exe", + "Arguments": "/Variant:\"Electric P8\"" + } + ] + }, + { + "Cmd": "TotalCmd", + "Exe": [ + { + "ExePath": "C:\\Program Files\\totalcmd\\TOTALCMD.EXE" + }, + { + "ExePath": "C:\\Program Files\\totalcmd\\TOTALCMD64.EXE" + }, + { + "ExePath": "C:\\totalcmd\\TOTALCMD64.EXE" + }, + { + "ExePath": "C:\\totalcmd\\TOTALCMD.EXE" + } + ] + }, + { + "Cmd": "TeXstudio", + "Exe": [ + { + "ExePath": "C:\\Program Files\\texstudio\\texstudio.exe" + } + ] + }, + { + "Cmd": "VS", + "Exe": [ + { + "ExePath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\devenv.exe" + } + ] + }, + { + "Cmd": "VsCode", + "Exe": [ + { + "ExePath": "%USERPROFILE%\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe" + } + ] + }, + { + "Cmd": "Rdp", + "Exe": [ + { + "ExePath": "%windir%\\system32\\mstsc.exe" + } + ] + }, + { + "Cmd": "Outlook", + "Exe": [ + { + "ExePath": "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\OUTLOOK.EXE" + } + + ] + }, + { + "Cmd": "Teams", + "Exe": [ + { + "ExePath": "C:\\Users\\maier_s\\AppData\\Local\\Microsoft\\Teams\\Update.exe", + "Arguments": "--processStart \"Teams.exe\"" + } + ] + }, + { + "Cmd": "Excel", + "Exe": [ + { + "ExePath": "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\EXCEL.EXE" + } + ] + }, + { + "Cmd": "Word", + "Exe": [ + { + "ExePath": "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\WINWORD.EXE" + } + ] + }, + { + "Cmd": "PaintNet", + "Exe": [ + { + "ExePath": "C:\\Program Files\\paint.net\\paintdotnet.exe" + } + ] + }, + { + "Cmd": "Gimp", + "Exe": [ + { + "ExePath": "C:\\Program Files\\GIMP 2\\bin\\gimp-2.10.exe" + } + ] + }, + { + "Cmd": "Vnc", + "Exe": [ + { + "ExePath": "C:\\Program Files\\RealVNC\\VNC Viewer\\vncviewer.exe" + }, + { + "ExePath": "c:\\Users\\maier_s\\OneDrive - Fondium Group GmbH\\Documents\\Apps\\VNC-Viewer-6.20.113-Windows-64bit.exe" + } + ] + }, + { + "Cmd": "VncAdrBook", + "Exe": [ + { + "ExePath": "C:\\Program Files\\RealVNC\\VNC Viewer\\vncaddrbook.exe" + } + + ] + }, + { + "Cmd": "IbaAnalyzer", + "Exe": [ + { + "ExePath": "C:\\Program Files\\iba\\ibaAnalyzer\\ibaAnalyzer.exe" + } + ] + }, + { + "Cmd": "ZtrlWeb", + "Urls": [ + "http://desiaugetwf/web/?AspxAutoDetectCookieSupport=1" + ] + }, + { + "Cmd": "Schichtbuch", + "Urls": [ + "http://10.10.1.42/SKSchichtbuchWeb/de-DE/Plugin/ShiftBook/ShiftBook/IR" + ] + }, + { + "Cmd": "SPS", + "Urls": [ + "http://10.10.1.42/SKChangeTrackerWeb/de-DE/Plugin/ChangeTracker" + ] + }, + { + "Cmd": "Pl1.Pls", + "Urls": [ + "http://10.10.200.2/SKPL1Web/index.aspx" + ] + }, + { + "Cmd": "Pl1.Lst", + "Urls": [ + "http://desiaugetwf.fondium.org/web/Seiten/Leistungsdaten_FuG.aspx?Fkt=PL1" + ] + }, + { + "Cmd": "Pl2.Als", + "Urls": [ + "http://10.10.213.234:84/emb_1/index.html" + ] + }, + { + "Cmd": "Pl2.Pls", + "Urls": [ + "http://10.10.213.4/SKPL2Web/index.aspx" + ] + }, + { + "Cmd": "Pl2.Lst", + "Urls": [ + "http://desiaugetwf/web/Seiten/Leistungsdaten_PL2.aspx" + ] + }, + { + "Cmd": "Pl2.Nc", + "Urls": [ + "http://10.10.213.4/SKPL2Web/Seiten/Taktzeiten_PopUp.aspx" + ] + }, + { + "Cmd": "Pl2.Key", + "Urls": [ + "http://10.10.213.4/skkeymanager-pl2" + ] + }, + { + "Cmd": "Pl2.Alg", + "Urls": [ + "http://10.10.213.4/SKPL2Web/index.aspx", + "http://10.10.213.234:84/emb_1/index.html", + "http://desiaugetwf/web/Seiten/Leistungsdaten_PL2.aspx" + ] + }, + { + "Cmd": "Pl3.Pls", + "Urls": [ + "http://10.10.202.10/SKPL3Web/index.asp" + ] + }, + { + "Cmd": "Pl3.Lst", + "Urls": [ + "http://desiaugetwf.fondium.org/web/Seiten/Leistungsdaten_FuG.aspx?Fkt=PL3" + ] + }, + { + "Cmd": "Gitea", + "Urls": [ + "http://desiaugetwf/web/?AspxAutoDetectCookieSupport=1" + ] + }, + { + "Cmd": "Wiki", + "Urls": [ + "http://desiaugetc7-088:3001/en/home" + ] + }, + { + "Cmd": "Erp", + "Urls": [ + "https://mingle-portal.eu1.inforcloudsuite.com/FONDIUM_prd" + ] + }, + { + "Cmd": "Epl.Pdf" + }, + { + "Cmd": "Epl.Prj" + }, + { + "Cmd": "Rdp.Mgt" + }, + { + "Cmd": "Epl.PdfMgt" + }, + { + "Cmd": "WebRadio" + }, + { + "Cmd": "Calc", + "Exe": [ + { + "ExePath": "ExtTools\\kalk\\net6.0\\kalk.exe" + } + ] + }, + { + "Cmd": "Iba.Pda", + "Exe": [ + { + "ExePath": "C:\\Program Files (x86)\\iba\\ibaPDA\\Client\\ibaPda.exe" + } + ] + }, + { + "Cmd": "Trilium", + "Exe": [ + { + "ExePath": "c:\\Users\\maier_s\\OneDrive - Fondium Group GmbH\\Documents\\Apps\\trilium-windows-x64\\trilium-portable.bat" + } + ] + }, + { + "Cmd": "SmartSystemMenu", + "Exe": [ + { + "ExePath": "ExtTools\\SmartSystemMenu_v2.21.2\\SmartSystemMenu.exe" + } + ] + } + ], + "Folders": [ + { + "Plant": "Alg", + "SubPlant": "Alg", + "Name": "Wrkdir", + "Description": "Arbeitsverzeichnis", + "Path": "d:\\WrkDir" + }, + { + "Plant": "Alg", + "SubPlant": "Alg", + "Name": "EplPdf", + "Description": "Eplan PDF Ablage", + "Path": "\\\\10.10.1.40\\Betriebstechnik\\Eplan" + }, + { + "Plant": "Alg", + "SubPlant": "Alg", + "Name": "EplPrj", + "Description": "Eplan Projekt Ablage", + "Path": "\\\\fondium.org\\DESI$\\AUG_Abteilung\\Betriebstechnik\\EPL\\P8\\Data\\Projekte\\FSI\\" + }, + { + "Plant": "PL1", + "SubPlant": "Alg", + "Description": "PL1 Backupverzeichnis", + "Path": "\\\\10.10.1.40\\Betriebstechnik\\Datensicherung\\1_IuR_Giesserei\\PL1" + }, + { + "Plant": "PL2", + "SubPlant": "Alg", + "Description": "Backupverzeichnis", + "Path": "\\\\10.10.1.40\\Betriebstechnik\\Datensicherung\\1_IuR_Giesserei\\PL2" + }, + { + "Plant": "PL2", + "SubPlant": "SA", + "Description": "Backupverzeichnis", + "Path": "\\\\10.10.1.40\\Betriebstechnik\\Datensicherung\\1_IuR_Giesserei\\PL2\\SA" + }, + { + "Plant": "PL2", + "SubPlant": "FA", + "Description": "Backupverzeichnis", + "Path": "\\\\10.10.1.40\\Betriebstechnik\\Datensicherung\\1_IuR_Giesserei\\PL2\\FA" + }, + { + "Plant": "PL3", + "SubPlant": "Alg", + "Description": "Backupverzeichnis", + "Path": "\\\\10.10.1.40\\Betriebstechnik\\Datensicherung\\1_IuR_Giesserei\\PL3" + } + ], + "TxtToClip": [ + { + "Plant": "Alg", + "SubPlant": "Alg", + "Description": "Siehe Prg.-Änderungen", + "Txt": "Siehe Prg.-Änderungen" + }, + { + "Plant": "Alg", + "SubPlant": "Alg", + "Description": "Eplan Projekt Ablage", + "Txt": "\\\\fondium.org\\DESI$\\AUG_Abteilung\\Betriebstechnik\\EPL\\P8\\Data\\Projekte\\FSI\\" + } + ], + "Rdps": [ + { + "Plant": "PL1", + "SubPlant": "Alg", + "Description": "Programmier PC", + "Host": "DESIAUGETC8-028" + }, + { + "Plant": "PL2", + "SubPlant": "Alg", + "Description": "Programmier PC", + "Host": "DESIAUGETD5-029" + }, + { + "Plant": "PL2", + "SubPlant": "FA", + "Description": "Programmier PC (HWS)", + "Host": "DESIAUGETD5-030" + }, + { + "Plant": "PL2", + "SubPlant": "ENS", + "Description": "Programmier PC", + "Host": "DESIAUGETD5-020" + }, + { + "Plant": "Alg", + "SubPlant": "Alg", + "Description": "IBA PC PL1", + "Host": "DESIAUGETC7-046" + }, + { + "Plant": "Alg", + "SubPlant": "Alg", + "Description": "IBA PC PL2", + "Host": "DESIAUGETC7-047" + }, + { + "Plant": "Alg", + "SubPlant": "Alg", + "Description": "Programmier Maier St.", + "Host": "10.10.199.92" + } + ], + "WebRadioUrls": [ + { + "Name": "Rock Antenne 80ger", + "Url": "http://stream.rockantenne.de/70er-rock/stream/mp3" + } + ], + "WinCC": { + "AutoStart": false, + "UpdateIntervall": 10, + "WindowsName": "", + "WindowsClassName": "#32770", + "ButtonName": "Zur Kenntnis genommen" + }, + "IbaDirSync": { + "AutoStart": false, + "Source": "d:\\tmp", + "Destination": "c:\\tmp" + } +} diff --git a/FSI.BT.Tools/Global/Commands/CmdCommand.cs b/FSI.BT.Tools/Global/Commands/CmdCommand.cs new file mode 100644 index 0000000..1926b69 --- /dev/null +++ b/FSI.BT.Tools/Global/Commands/CmdCommand.cs @@ -0,0 +1,364 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading; +using System.Windows; +using static FSI.BT.Tools.Global.Settings.Cmd; +using static FSI.BT.Tools.Global.Settings.Exe; + +namespace FSI.BT.Tools.Global.Commands +{ + /// + /// Shows the main window. + /// + public class CmdCommand : CommandBase + { + public override void Execute(object parameter) + { + if (parameter is not string) + { + Global.Vars.Log.Error("Parameter ist kein String"); + return; + } + + var cmds = Vars.GlobalSettings.Cmds.ToList(); + ICmd selectedCmd = null; + + + + switch ((string)parameter) + { + + case "DarkMode": + RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", true); + + if (key.GetValue("AppsUseLightTheme") != null) + { + if (Convert.ToInt32(key.GetValue("AppsUseLightTheme")) == 0) + key.SetValue("AppsUseLightTheme", 1); //sets 'someData' in 'someValue' + else + key.SetValue("AppsUseLightTheme", 0); //sets 'someData' in 'someValue' + key.Close(); + } + + return; + + + case "Epl.Prj": + Lib.Guis.Prj.Mgt.FrmMain frmMainEplPrj = new() + { + ShowPdf = false, + CloseAtLostFocus = true, + WindowStartupLocation = WindowStartupLocation.CenterScreen, + Path = Helpers.GetFolderByName.Get(Vars.GlobalSettings.Folders, "EplPrj").path, + EplExe = GetExeByCmdName("Epl").ExePath, + }; + frmMainEplPrj.Show(); + return; + + case "Epl.Pdf": + Lib.Guis.Prj.Mgt.FrmMain frmMainEplPdf = new() + { + ShowPdf = true, + CloseAtLostFocus = true, + WindowStartupLocation = WindowStartupLocation.CenterScreen, + Path = Helpers.GetFolderByName.Get(Vars.GlobalSettings.Folders, "EplPdf").path + }; + frmMainEplPdf.Show(); + return; + + case "Epl.PdfMgt": + Lib.Guis.Pdf.Mgt.FrmMain frmMainEplPdfMgt = new() + { + CloseAtLostFocus = true + }; + frmMainEplPdfMgt.Show(); + return; + + case "DeEncrypt": + Lib.Guis.DeEncryptMessage.FrmMain frmMainDeEnCrypt = new() + { + Password = AppDomain.CurrentDomain.FriendlyName, + CloseAtLostFocus = true, + WindowStartupLocation = WindowStartupLocation.CenterScreen, + }; + frmMainDeEnCrypt.Show(); + return; + + case "StarterCsvExporter": + Lib.Guis.SieStarterCsvExporter.FrmMain frmMain = new(); + frmMain.Show(); + return; + + case "Folder": + Lib.Guis.Folder.Mgt.FrmMain frmFolderMgtMain = new() + { + CloseAtLostFocus = true, + Data = Global.Vars.GlobalSettings.Folders + }; + frmFolderMgtMain.Show(); + return; + + //case "TxtToClip": + // Lib.Guis.TxtToClip.Mgt.FrmMain frmTxtToClipMain = new() + // { + // CloseAtLostFocus = true, + // InputData = Global.AppSettings.TxtToClip + // }; + // frmTxtToClipMain.Show(); + // return; + + case "Rdp.Mgt": + Lib.Guis.Rdp.Mgt.FrmMain frmRdpMain = new() + { + CloseAtLostFocus = true, + InputData = Global.Vars.GlobalSettings.Rdps, + Exe = GetExeByCmdName("Rdp").ExePath, + FrmTitle = "Remotedesktopverbindungen", + }; + frmRdpMain.Show(); + break; + + case "WebRadio": + //Lib.Guis.WebRadio.FrmMain frmWebRadio = new() + //{ + // CloseAtLostFocus = false, + // InputData = Global.AppSettings.WebRadioUrls, + //}; + //frmWebRadio.Show(); + break; + + default: + foreach (ICmd cmd in cmds) + { + if (String.Equals(parameter.ToString(), cmd.Cmd)) + selectedCmd = cmd; + } + break; + } + + if (selectedCmd == null) + return; + + OpenExe(selectedCmd); + OpenUrl(selectedCmd); + } + + public override bool CanExecute(object parameter) + { + if (parameter == null) + return false; + + var cmds = Global.Vars.GlobalSettings.Cmds.ToList(); + ICmd selectedCmd = null; + + switch ((string)parameter) + { + case "DarkMode": + return Vars.AdminRights; + + case "Epl.Prj": + return true; + + case "Epl.Pdf": + return true; + + case "Epl.PdfMgt": + return Vars.AdminRights; + + case "DeEncrypt": + return Vars.AdminRights; + + case "StarterCsvExporter": + return Vars.AdminRights; + + case "Folder": + return Vars.GlobalSettings.Folders != null; + + //case "TxtToClip": + // return Vars.GlobalSettings.TxtToClip != null; + + case "Rdp.Mgt": + return Vars.GlobalSettings.Rdps != null; + + case "WebRadio": + return false;// Global.AppSettings.WebRadioUrls != null; + + default: + foreach (ICmd cmd in cmds) + { + if (String.Equals(parameter.ToString(), cmd.Cmd)) + selectedCmd = cmd; + } + break; + } + + if (selectedCmd == null) + return false; + + foreach (var file in selectedCmd.Exe.ToList()) + { + + if (File.Exists(Environment.ExpandEnvironmentVariables(file.ExePath.Trim()))) + return true; + else if (File.Exists(Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), file.ExePath.Trim()))) + return true; + } + + foreach (var url in selectedCmd.Urls) + { + if (url != String.Empty) + return true; + } + + return false; + } + + private static void OpenExe(ICmd selectedCmd) + { + IExe selectedFile = GetApp(selectedCmd.Exe); + + if (selectedFile == null) + return; + + if (selectedFile.ExePath == String.Empty) + return; + + if (ProgramIsRunning(selectedFile.ExePath)) + { + ProgramToFront(selectedFile.ExePath); + Vars.Log.Info("Anwendung \"{0}\" wurde in den Vordergrund gebracht", selectedFile.ExePath); + } + else + { + var selectedFileExePath = string.Empty; + if (File.Exists(Environment.ExpandEnvironmentVariables(selectedFile.ExePath.Trim()))) + selectedFileExePath = Environment.ExpandEnvironmentVariables(selectedFile.ExePath.Trim()); + if (File.Exists(Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), selectedFile.ExePath.Trim()))) + selectedFileExePath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), selectedFile.ExePath.Trim()); + + var abc = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), selectedFileExePath.Trim()); + Process process = new(); + process.StartInfo.FileName = selectedFileExePath; + process.StartInfo.WorkingDirectory = selectedFile.Path ?? Path.GetDirectoryName(selectedFileExePath); + process.StartInfo.Arguments = selectedFile.Arguments ?? string.Empty; + + try + { + + process.Start(); + Vars.Log.Info("Anwendung \"{0}\" wurde gestartet", selectedFile.ExePath); + } + catch (System.ComponentModel.Win32Exception ex) when (ex.NativeErrorCode == 740) + { + try + { + process.StartInfo.UseShellExecute = true; + process.StartInfo.Verb = "runas"; + process.Start(); + Vars.Log.Info("Anwendung \"{0}\" wurde als Admin gestartet", selectedFile.ExePath); + } + catch (Exception ex2) + { + Vars.Log.Info("Anwendung konnte durch folgenden Fehler \"{0}\" nicht gestartet werden.", ex2.Message); + } + } + } + } + + private static void OpenUrl(ICmd selectedCmd) + { + + foreach (var url in selectedCmd.Urls) + { + + if (url == String.Empty) + return; + + Process.Start(new ProcessStartInfo(url.Replace("&", "^&")) { UseShellExecute = true }); + Vars.Log.Info("Link \"{0}\" wurde geföffnet.", url.Replace("&", "^&")); + Thread.Sleep(100); + } + } + + private static IExe GetExeByCmdName(string cmdName) + { + foreach (var cmd in Vars.GlobalSettings.Cmds) + { + if (string.Equals(cmd.Cmd, cmdName, StringComparison.InvariantCultureIgnoreCase)) + return GetApp(cmd.Exe); + } + + return null; + } + + private static bool ProgramIsRunning(string FullPath) + { + string FilePath = Path.GetDirectoryName(FullPath); + string FileName = Path.GetFileNameWithoutExtension(FullPath).ToLower(); + bool isRunning = false; + + Process[] pList = Process.GetProcessesByName(FileName); + + foreach (Process p in pList) + { + if (p.MainModule.FileName.StartsWith(FilePath, StringComparison.InvariantCultureIgnoreCase)) + { + isRunning = true; + break; + } + } + + return isRunning; + } + + private static IExe GetApp(IEnumerable files) + { + if (files.ToList().Count == 0) + return null; + + var selectedFile = files.ToList()[0]; + + foreach (var file in files.ToList()) + { + if (File.Exists(Environment.ExpandEnvironmentVariables(file.ExePath.Trim()))) + selectedFile = (IExe)file; + else + continue; + } + + return selectedFile; + } + + [System.Runtime.InteropServices.DllImport("User32.dll")] + private static extern bool SetForegroundWindow(IntPtr handle); + [System.Runtime.InteropServices.DllImport("User32.dll")] + private static extern bool ShowWindow(IntPtr handle, int nCmdShow); + [System.Runtime.InteropServices.DllImport("User32.dll")] + private static extern bool IsIconic(IntPtr handle); + + private static void ProgramToFront(string FullPath) + { + string FilePath = Path.GetDirectoryName(FullPath); + string FileName = Path.GetFileNameWithoutExtension(FullPath).ToLower(); + + Process[] pList = Process.GetProcessesByName(FileName); + + foreach (Process p in pList) + { + if (p.MainModule.FileName.StartsWith(FilePath, StringComparison.InvariantCultureIgnoreCase)) + { + IntPtr handle = p.MainWindowHandle; + if (IsIconic(handle)) + ShowWindow(handle, 9); + + SetForegroundWindow(handle); + break; + } + } + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Commands/CommandBase.cs b/FSI.BT.Tools/Global/Commands/CommandBase.cs similarity index 82% rename from FSI.BT.Tools/Commands/CommandBase.cs rename to FSI.BT.Tools/Global/Commands/CommandBase.cs index c17b044..98b6f94 100644 --- a/FSI.BT.Tools/Commands/CommandBase.cs +++ b/FSI.BT.Tools/Global/Commands/CommandBase.cs @@ -4,9 +4,9 @@ using System.Windows; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; -using Hardcodet.Wpf.TaskbarNotification; +//using Hardcodet.Wpf.TaskbarNotification; -namespace FSI.BT.Tools.Commands +namespace FSI.BT.Tools.Global.Commands { /// /// Basic implementation of the @@ -19,7 +19,7 @@ namespace FSI.BT.Tools.Commands /// /// A singleton instance. /// - private static T? command; + private static T command; /// /// Gets a shared command instance. @@ -78,20 +78,20 @@ namespace FSI.BT.Tools.Commands } - /// - /// Resolves the window that owns the TaskbarIcon class. - /// - /// - /// Window - protected Window? GetTaskbarWindow(object commandParameter) - { - if (IsDesignMode) - return null; + ///// + ///// Resolves the window that owns the TaskbarIcon class. + ///// + ///// + ///// Window + //protected Window GetTaskbarWindow(object commandParameter) + //{ + // if (IsDesignMode) + // return null; - // get the showcase window off the taskbar icon - var tb = commandParameter as TaskbarIcon; - return tb == null ? null : TryFindParent(tb); - } + // // get the showcase window off the taskbar icon + // var tb = commandParameter as TaskbarIcon; + // return tb == null ? null : TryFindParent(tb); + //} #region TryFindParent helper @@ -104,7 +104,7 @@ namespace FSI.BT.Tools.Commands /// The first parent item that matches the submitted /// type parameter. If not matching item can be found, a null /// reference is being returned. - public static TParent? TryFindParent(DependencyObject child) where TParent : DependencyObject + public static TParent TryFindParent(DependencyObject child) where TParent : DependencyObject { //get parent item DependencyObject parentObject = GetParentObject(child); @@ -131,7 +131,7 @@ namespace FSI.BT.Tools.Commands /// The item to be processed. /// The submitted item's parent, if available. Otherwise /// null. - public static DependencyObject? GetParentObject(DependencyObject child) + public static DependencyObject GetParentObject(DependencyObject child) { if (child == null) return null; @@ -140,7 +140,7 @@ namespace FSI.BT.Tools.Commands DependencyObject parent = ContentOperations.GetParent(contentElement); if (parent != null) return parent; - FrameworkContentElement? fce = contentElement as FrameworkContentElement; + FrameworkContentElement fce = contentElement as FrameworkContentElement; return fce?.Parent; } diff --git a/FSI.BT.Tools/Commands/ExitCommand.cs b/FSI.BT.Tools/Global/Commands/ExitCommand.cs similarity index 80% rename from FSI.BT.Tools/Commands/ExitCommand.cs rename to FSI.BT.Tools/Global/Commands/ExitCommand.cs index faa9524..ec0fe7b 100644 --- a/FSI.BT.Tools/Commands/ExitCommand.cs +++ b/FSI.BT.Tools/Global/Commands/ExitCommand.cs @@ -1,6 +1,6 @@ using System.Windows; -namespace FSI.BT.Tools.Commands +namespace FSI.BT.Tools.Global.Commands { /// /// Shows the main window. @@ -9,6 +9,7 @@ namespace FSI.BT.Tools.Commands { public override void Execute(object parameter) { + Vars.Log.Info("Anwendung wurde beendet!"); Application.Current.Shutdown(); } diff --git a/FSI.BT.Tools/Commands/LoginCommand.cs b/FSI.BT.Tools/Global/Commands/LoginCommand.cs similarity index 53% rename from FSI.BT.Tools/Commands/LoginCommand.cs rename to FSI.BT.Tools/Global/Commands/LoginCommand.cs index 762eea4..e46d88b 100644 --- a/FSI.BT.Tools/Commands/LoginCommand.cs +++ b/FSI.BT.Tools/Global/Commands/LoginCommand.cs @@ -1,6 +1,6 @@ using System.Windows; -namespace FSI.BT.Tools.Commands +namespace FSI.BT.Tools.Global.Commands { /// /// Shows the main window. @@ -9,15 +9,24 @@ namespace FSI.BT.Tools.Commands { public override void Execute(object parameter) { - Lib.Guis.AutoPw.FrmMain frmMain = new() + Lib.Guis.AutoPw.FrmMain frmMain = new Lib.Guis.AutoPw.FrmMain() { CloseAtLostFocus = false, - WindowStartupLocation = WindowStartupLocation.CenterOwner, + WindowStartupLocation = WindowStartupLocation.CenterScreen, }; frmMain.ShowDialog(); - Global.UserRights = - Global.AdminRights = frmMain.PwOk; + Global.Vars.UserRights = + Vars.AdminRights = frmMain.PwOk; + + if (frmMain.PwOk) + { + Vars.Log.Info("Admin-Passowrt wurde korrekt eingegben."); + } + else + { + Vars.Log.Info("Anmeldung wurde vom Benutzer abgebrochen."); + } } public override bool CanExecute(object parameter) diff --git a/FSI.BT.Tools/Global/Commands/ProcessCommand.cs b/FSI.BT.Tools/Global/Commands/ProcessCommand.cs new file mode 100644 index 0000000..61f1a81 --- /dev/null +++ b/FSI.BT.Tools/Global/Commands/ProcessCommand.cs @@ -0,0 +1,24 @@ +namespace FSI.BT.Tools.Global.Commands +{ + /// + /// Shows the main window. + /// + public class ProcessCommand : CommandBase + { + public override void Execute(object parameter) + { + RadialMenu.UserInterface.FrmProcesses frm = new RadialMenu.UserInterface.FrmProcesses() + { + WinCC = Vars.WinCC + }; + + frm.Iba = Vars.Iba; + frm.ShowDialog(); + } + + public override bool CanExecute(object parameter) + { + return Vars.AdminRights; + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Global/DllImport/BringWindowToTop.cs b/FSI.BT.Tools/Global/DllImport/BringWindowToTop.cs new file mode 100644 index 0000000..d6ec530 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/BringWindowToTop.cs @@ -0,0 +1,68 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + private const int SwRestore = 9; + + public static void ForceForegroundWindow(IntPtr hWnd) + { + uint foreThread = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero); + uint appThread = GetCurrentThreadId(); + const int SW_SHOW = 5; + + int cmdShow = SW_SHOW; + + if (IsIconic(hWnd)) + { + cmdShow = SwRestore; + } + + if (foreThread != appThread) + { + AttachThreadInput(foreThread, appThread, true); + BringWindowToTop(hWnd); + ShowWindow(hWnd, cmdShow); + AttachThreadInput(foreThread, appThread, false); + } + else + { + BringWindowToTop(hWnd); + ShowWindow(hWnd, cmdShow); + } + } + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern bool IsIconic(IntPtr hWnd); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr processId); + + [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern uint GetCurrentThreadId(); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern bool BringWindowToTop(IntPtr hWnd); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/CreatePopupMenu.cs b/FSI.BT.Tools/Global/DllImport/CreatePopupMenu.cs new file mode 100644 index 0000000..07dfbf2 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/CreatePopupMenu.cs @@ -0,0 +1,25 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static IntPtr User32CreatePopupMenu() + { + return CreatePopupMenu(); + } + + // The CreatePopupMenu function creates a drop-down menu, submenu, or shortcut menu. The menu is initially empty. You can insert or append menu items by using the InsertMenuItem function. You can also use the InsertMenu function to insert menu items and the AppendMenu function to append menu items. + [DllImport("user32", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern IntPtr CreatePopupMenu(); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/CreateRoundRectRgn.cs b/FSI.BT.Tools/Global/DllImport/CreateRoundRectRgn.cs new file mode 100644 index 0000000..87e07ce --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/CreateRoundRectRgn.cs @@ -0,0 +1,40 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static bool GetRegionRoundCorners(int width, int height, int widthEllipse, int heightEllipse, out System.Drawing.Region region) + { + bool success = false; + region = null; + + IntPtr handle = CreateRoundRectRgn(0, 0, width, height, widthEllipse, heightEllipse); + if (handle != IntPtr.Zero) + { + region = System.Drawing.Region.FromHrgn(handle); + _ = DeleteObject(handle); + success = true; + } + + return success; + } + + [DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn", SetLastError = true, CharSet = CharSet.Unicode)] + private static extern IntPtr CreateRoundRectRgn( + int nLeftRect, // x-coordinate of upper-left corner + int nTopRect, // y-coordinate of upper-left corner + int nRightRect, // x-coordinate of lower-right corner + int nBottomRect, // y-coordinate of lower-right corner + int nWidthEllipse, // width of ellipse + int nHeightEllipse); // height of ellipse + } +} diff --git a/FSI.BT.Tools/Global/DllImport/DeleteObject.cs b/FSI.BT.Tools/Global/DllImport/DeleteObject.cs new file mode 100644 index 0000000..2d96a9e --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/DeleteObject.cs @@ -0,0 +1,19 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + [DllImport("gdi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int DeleteObject(IntPtr hIcon); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/DestroyIcon.cs b/FSI.BT.Tools/Global/DllImport/DestroyIcon.cs new file mode 100644 index 0000000..8839d1c --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/DestroyIcon.cs @@ -0,0 +1,24 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static void User32DestroyIcon(IntPtr hIcon) + { + _ = DestroyIcon(hIcon); + } + + [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int DestroyIcon(IntPtr hIcon); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/DestroyMenu.cs b/FSI.BT.Tools/Global/DllImport/DestroyMenu.cs new file mode 100644 index 0000000..e6e99cd --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/DestroyMenu.cs @@ -0,0 +1,25 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static bool User32DestroyMenu(IntPtr hMenu) + { + return DestroyMenu(hMenu); + } + + // The DestroyMenu function destroys the specified menu and frees any memory that the menu occupies. + [DllImport("user32", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern bool DestroyMenu(IntPtr hMenu); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/FindExecuteable.cs b/FSI.BT.Tools/Global/DllImport/FindExecuteable.cs new file mode 100644 index 0000000..99d89d6 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/FindExecuteable.cs @@ -0,0 +1,24 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System.Runtime.InteropServices; + using System.Text; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static void Shell32FindExecutable(string lpFile, string lpDirectory, [Out] StringBuilder lpResult) + { + _ = FindExecutable(lpFile, lpDirectory, lpResult); + } + + [DllImport("shell32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int FindExecutable(string lpFile, string lpDirectory, [Out] StringBuilder lpResult); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/FindWindow.cs b/FSI.BT.Tools/Global/DllImport/FindWindow.cs new file mode 100644 index 0000000..58837d1 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/FindWindow.cs @@ -0,0 +1,24 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static IntPtr User32FindWindow(string lpClassName, string lpWindowName) + { + return FindWindow(lpClassName, lpWindowName); + } + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/GetIcon.cs b/FSI.BT.Tools/Global/DllImport/GetIcon.cs new file mode 100644 index 0000000..721041c --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/GetIcon.cs @@ -0,0 +1,39 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public const uint ShgfiIcon = 0x000000100; // get icon + public const uint ShgfiSYSICONINDEX = 0x000004000; // get system icon index + public const uint ShgfiLINKOVERLAY = 0x000008000; // put a link overlay on icon + public const uint ShgfiLARGEICON = 0x000000000; // get large icon + public const uint ShgfiSMALLICON = 0x000000001; // get small icon + public const uint ShgfiOPENICON = 0x000000002; // get open icon + public const uint FileAttributeDirectory = 0x00000010; + public const uint FileAttributeNormal = 0x00000080; + public const int IldTransparent = 0x00000001; + + /// + /// comctl32 ImageList_GetIcon(IntPtr himl, int i, int flags). + /// + /// himl. + /// i. + /// flags. + /// IntPtr. + [DllImport("comctl32", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + internal static extern IntPtr ImageList_GetIcon( + IntPtr himl, + int i, + int flags); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/IsTouchEnabled.cs b/FSI.BT.Tools/Global/DllImport/IsTouchEnabled.cs new file mode 100644 index 0000000..49c1ba6 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/IsTouchEnabled.cs @@ -0,0 +1,26 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static bool IsTouchEnabled() + { + const int MAXTOUCHES_INDEX = 95; + int maxTouches = GetSystemMetrics(MAXTOUCHES_INDEX); + + return maxTouches > 0; + } + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int GetSystemMetrics(int nIndex); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/RegisterHotKey.cs b/FSI.BT.Tools/Global/DllImport/RegisterHotKey.cs new file mode 100644 index 0000000..b816d10 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/RegisterHotKey.cs @@ -0,0 +1,54 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + using System.Text; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static bool User32RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk) + { + return RegisterHotKey(hWnd, id, fsModifiers, vk); + } + + public static bool User32UnregisterHotKey(IntPtr hWnd, int id) + { + return UnregisterHotKey(hWnd, id); + } + + public static uint User32MapVirtualKey(uint uCode, uint uMapType) + { + return MapVirtualKey(uCode, uMapType); + } + + public static int User32GetKeyNameText(uint lParam, [Out] StringBuilder lpString, int nSize) + { + return GetKeyNameText(lParam, lpString, nSize); + } + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint virtualKeyCode); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [return: MarshalAs(UnmanagedType.Bool)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern bool UnregisterHotKey(IntPtr hWnd, int id); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern uint MapVirtualKey(uint uCode, uint uMapType); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int GetKeyNameText(uint lParam, [Out] StringBuilder lpString, int nSize); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/SHAppBarMessage.cs b/FSI.BT.Tools/Global/DllImport/SHAppBarMessage.cs new file mode 100644 index 0000000..434135b --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/SHAppBarMessage.cs @@ -0,0 +1,73 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + internal enum ABM : uint + { + New = 0x00000000, + Remove = 0x00000001, + QueryPos = 0x00000002, + SetPos = 0x00000003, + GetState = 0x00000004, + GetTaskbarPos = 0x00000005, + Activate = 0x00000006, + GetAutoHideBar = 0x00000007, + SetAutoHideBar = 0x00000008, + WindowPosChanged = 0x00000009, + SetState = 0x0000000A, + } + + internal enum ABE : uint + { + Left = 0, + Top = 1, + Right = 2, + Bottom = 3, + } + + internal static IntPtr Shell32SHAppBarMessage(ABM dwMessage, [In] ref APPBARDATA pData) + { + return SHAppBarMessage(dwMessage, ref pData); + } + + [DllImport("shell32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern IntPtr SHAppBarMessage(ABM dwMessage, [In] ref APPBARDATA pData); + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct APPBARDATA + { + public uint cbSize; + public IntPtr hWnd; + public uint uCallbackMessage; + public ABE uEdge; + public RECT rc; + public int lParam; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct RECT + { + public int left; + public int top; + public int right; + public int bottom; + } + + internal static class ABS + { + public const int Autohide = 0x0000001; + public const int AlwaysOnTop = 0x0000002; + } + } +} diff --git a/FSI.BT.Tools/Global/DllImport/SHGetDesktopFolder.cs b/FSI.BT.Tools/Global/DllImport/SHGetDesktopFolder.cs new file mode 100644 index 0000000..a898f8a --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/SHGetDesktopFolder.cs @@ -0,0 +1,25 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static int Shell32SHGetDesktopFolder(out IntPtr ppshf) + { + return SHGetDesktopFolder(out ppshf); + } + + // Retrieves the IShellFolder interface for the desktop folder, which is the root of the Shell's namespace. + [DllImport("shell32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int SHGetDesktopFolder(out IntPtr ppshf); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/SHGetFileInfo.cs b/FSI.BT.Tools/Global/DllImport/SHGetFileInfo.cs new file mode 100644 index 0000000..01bfcc8 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/SHGetFileInfo.cs @@ -0,0 +1,55 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + private const int maxPath = 256; + + internal static IntPtr Shell32SHGetFileInfo( + string pszPath, + uint dwFileAttributes, + ref SHFILEINFO psfi, + uint cbFileInfo, + uint uFlags) + { + return SHGetFileInfo( + pszPath, + dwFileAttributes, + ref psfi, + cbFileInfo, + uFlags); + } + + [DllImport("Shell32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern IntPtr SHGetFileInfo( + string pszPath, + uint dwFileAttributes, + ref SHFILEINFO psfi, + uint cbFileInfo, + uint uFlags); + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + + internal struct SHFILEINFO + { + public const int NAMESIZE = 80; + public IntPtr hIcon; + public int iIcon; + public uint dwAttributes; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = maxPath)] + public string szDisplayName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NAMESIZE)] + public string szTypeName; + } + } +} diff --git a/FSI.BT.Tools/Global/DllImport/SHGetFolderPath.cs b/FSI.BT.Tools/Global/DllImport/SHGetFolderPath.cs new file mode 100644 index 0000000..5d3a520 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/SHGetFolderPath.cs @@ -0,0 +1,25 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + using System.Text; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static int ShfolderSHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath) + { + return SHGetFolderPath(hwndOwner, nFolder, hToken, dwFlags, lpszPath); + } + + [DllImport("shfolder.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/ShowInactiveTopmost.cs b/FSI.BT.Tools/Global/DllImport/ShowInactiveTopmost.cs new file mode 100644 index 0000000..ba272ad --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/ShowInactiveTopmost.cs @@ -0,0 +1,46 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System.Runtime.InteropServices; + using System.Windows.Forms; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + private const int SW_SHOWNOACTIVATE = 4; + private const int HWND_TOPMOST = -1; + private const uint SWP_NOACTIVATE = 0x0010; + + public static void User32ShowInactiveTopmost(Form form) + { + if (form != null) + { + _ = ShowWindow(form.Handle, SW_SHOWNOACTIVATE); + SetWindowPos( + form.Handle.ToInt32(), + HWND_TOPMOST, + form.Left, + form.Top, + form.Width, + form.Height, + SWP_NOACTIVATE); + } + } + + [DllImport("user32.dll", EntryPoint = "SetWindowPos", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern bool SetWindowPos( + int hWnd, // Window handle + int hWndInsertAfter, // Placement-order handle + int X, // Horizontal position + int Y, // Vertical position + int cx, // Width + int cy, // Height + uint uFlags); // Window positioning flags + } +} diff --git a/FSI.BT.Tools/Global/DllImport/ShowWindow.cs b/FSI.BT.Tools/Global/DllImport/ShowWindow.cs new file mode 100644 index 0000000..77ac9c2 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/ShowWindow.cs @@ -0,0 +1,19 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/StrCmpLogicalW.cs b/FSI.BT.Tools/Global/DllImport/StrCmpLogicalW.cs new file mode 100644 index 0000000..a60c384 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/StrCmpLogicalW.cs @@ -0,0 +1,23 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static int ShlwapiStrCmpLogicalW(string x, string y) + { + return StrCmpLogicalW(x, y); + } + + [DllImport("shlwapi.dll", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int StrCmpLogicalW(string x, string y); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/StrRetToBuf.cs b/FSI.BT.Tools/Global/DllImport/StrRetToBuf.cs new file mode 100644 index 0000000..dc6d186 --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/StrRetToBuf.cs @@ -0,0 +1,26 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + using System.Text; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + public static int ShlwapiStrRetToBuf(IntPtr pstr, IntPtr pidl, StringBuilder pszBuf, int cchBuf) + { + return StrRetToBuf(pstr, pidl, pszBuf, cchBuf); + } + + // Takes a STRRET structure returned by IShellFolder::GetDisplayNameOf, converts it to a string, and places the result in a buffer. + [DllImport("shlwapi.dll", EntryPoint = "StrRetToBuf", ExactSpelling = false, SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern int StrRetToBuf(IntPtr pstr, IntPtr pidl, StringBuilder pszBuf, int cchBuf); + } +} diff --git a/FSI.BT.Tools/Global/DllImport/TrackPopupMenuEx.cs b/FSI.BT.Tools/Global/DllImport/TrackPopupMenuEx.cs new file mode 100644 index 0000000..be9a95e --- /dev/null +++ b/FSI.BT.Tools/Global/DllImport/TrackPopupMenuEx.cs @@ -0,0 +1,59 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.DllImports +{ + using System; + using System.Runtime.InteropServices; + + /// + /// wraps the methodcalls to native windows dll's. + /// + public static partial class NativeMethods + { + /// + /// Specifies how TrackPopupMenuEx positions the shortcut menu horizontally. + /// + [Flags] + internal enum TPM : uint + { + LEFTBUTTON = 0x0000, // LEFTALIGN = 0x0000, // TOPALIGN = 0x0000, // HORIZONTAL = 0x0000, + RIGHTBUTTON = 0x0002, + CENTERALIGN = 0x0004, + RIGHTALIGN = 0x0008, + VCENTERALIGN = 0x0010, + BOTTOMALIGN = 0x0020, + VERTICAL = 0x0040, + NONOTIFY = 0x0080, + RETURNCMD = 0x0100, + RECURSE = 0x0001, + HORPOSANIMATION = 0x0400, + HORNEGANIMATION = 0x0800, + VERPOSANIMATION = 0x1000, + VERNEGANIMATION = 0x2000, + NOANIMATION = 0x4000, + LAYOUTRTL = 0x8000, + } + + /// + /// user32 TrackPopupMenuEx. + /// + /// hmenu. + /// flags. + /// x. + /// y. + /// hwnd. + /// lptpm. + /// uint. + internal static uint User32TrackPopupMenuEx(IntPtr hmenu, TPM flags, int x, int y, IntPtr hwnd, IntPtr lptpm) + { + return TrackPopupMenuEx(hmenu, flags, x, y, hwnd, lptpm); + } + + // The TrackPopupMenuEx function displays a shortcut menu at the specified location and tracks the selection of items on the shortcut menu. The shortcut menu can appear anywhere on the screen. + [DllImport("user32.dll", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + private static extern uint TrackPopupMenuEx(IntPtr hmenu, TPM flags, int x, int y, IntPtr hwnd, IntPtr lptpm); + } +} diff --git a/FSI.BT.Tools/Global/Globals.cs b/FSI.BT.Tools/Global/Globals.cs new file mode 100644 index 0000000..cbd2e1c --- /dev/null +++ b/FSI.BT.Tools/Global/Globals.cs @@ -0,0 +1,29 @@ +using NLog; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.Global +{ + internal static class Vars + { + public static Logger Log = LogManager.GetCurrentClassLogger(); + + public static Global.Settings.Interface.IInterface GlobalSettings { get; set; } + public static RadialMenu.Settings.Interface.IInterface RadialMenuSettings { get; set; } + public static SystemTrayMenu.Settings.Interface.IInterface SystemTrayMenuSettings { get; set; } + public static TimeStampToClipboard.Settings.Interface.IInterface TimeStampSettings { get; set; } + + public static bool UserRights { get; set; } + public static bool AdminRights { get; set; } + public static bool SuperAdminRights { get; set; } + + public static Lib.Guis.IbaDirSync.ViewModel Iba { get; set; } + public static Lib.Guis.SieTiaWinCCMsgMgt.ViewModel WinCC { get; set; } + + + } + +} diff --git a/FSI.BT.Tools/Global/Helpers/GetFolderByName.cs b/FSI.BT.Tools/Global/Helpers/GetFolderByName.cs new file mode 100644 index 0000000..d7a6bab --- /dev/null +++ b/FSI.BT.Tools/Global/Helpers/GetFolderByName.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; + +namespace FSI.BT.Tools.Global.Helpers +{ + internal class GetFolderByName + { + internal static (string path, string description) Get(IEnumerable folders, string name) + { + foreach (var folder in folders) + { + if (folder.Name.Equals(name)) + { + return (folder.Path, folder.Description); + } + } + + return (null, null); + } + } +} diff --git a/FSI.BT.Tools/RelayCommand.cs b/FSI.BT.Tools/Global/Helpers/RelayCommand.cs similarity index 96% rename from FSI.BT.Tools/RelayCommand.cs rename to FSI.BT.Tools/Global/Helpers/RelayCommand.cs index 3ddc443..d8e35d7 100644 --- a/FSI.BT.Tools/RelayCommand.cs +++ b/FSI.BT.Tools/Global/Helpers/RelayCommand.cs @@ -1,7 +1,7 @@ using System; using System.Windows.Input; -namespace FSI.BT.Tools +namespace FSI.BT.Tools.Global.Helpers { public class RelayCommand : ICommand { diff --git a/FSI.BT.Tools/Icons/1087815.png b/FSI.BT.Tools/Global/Icons/1087815.png similarity index 100% rename from FSI.BT.Tools/Icons/1087815.png rename to FSI.BT.Tools/Global/Icons/1087815.png diff --git a/FSI.BT.Tools/Icons/Admin.jpg b/FSI.BT.Tools/Global/Icons/Admin.jpg similarity index 100% rename from FSI.BT.Tools/Icons/Admin.jpg rename to FSI.BT.Tools/Global/Icons/Admin.jpg diff --git a/FSI.BT.Tools/Icons/Apps.png b/FSI.BT.Tools/Global/Icons/Apps.png similarity index 100% rename from FSI.BT.Tools/Icons/Apps.png rename to FSI.BT.Tools/Global/Icons/Apps.png diff --git a/FSI.BT.Tools/Icons/Circuit.png b/FSI.BT.Tools/Global/Icons/Circuit.png similarity index 100% rename from FSI.BT.Tools/Icons/Circuit.png rename to FSI.BT.Tools/Global/Icons/Circuit.png diff --git a/FSI.BT.Tools/Icons/Close.png b/FSI.BT.Tools/Global/Icons/Close.png similarity index 100% rename from FSI.BT.Tools/Icons/Close.png rename to FSI.BT.Tools/Global/Icons/Close.png diff --git a/FSI.BT.Tools/Icons/Crypt.jpg b/FSI.BT.Tools/Global/Icons/Crypt.jpg similarity index 100% rename from FSI.BT.Tools/Icons/Crypt.jpg rename to FSI.BT.Tools/Global/Icons/Crypt.jpg diff --git a/FSI.BT.Tools/Icons/EplP8.png b/FSI.BT.Tools/Global/Icons/EplP8.png similarity index 100% rename from FSI.BT.Tools/Icons/EplP8.png rename to FSI.BT.Tools/Global/Icons/EplP8.png diff --git a/FSI.BT.Tools/Icons/Erp.png b/FSI.BT.Tools/Global/Icons/Erp.png similarity index 100% rename from FSI.BT.Tools/Icons/Erp.png rename to FSI.BT.Tools/Global/Icons/Erp.png diff --git a/FSI.BT.Tools/Icons/Excel.png b/FSI.BT.Tools/Global/Icons/Excel.png similarity index 100% rename from FSI.BT.Tools/Icons/Excel.png rename to FSI.BT.Tools/Global/Icons/Excel.png diff --git a/FSI.BT.Tools/Icons/FU.png b/FSI.BT.Tools/Global/Icons/FU.png similarity index 100% rename from FSI.BT.Tools/Icons/FU.png rename to FSI.BT.Tools/Global/Icons/FU.png diff --git a/FSI.BT.Tools/Global/Icons/Folders.png b/FSI.BT.Tools/Global/Icons/Folders.png new file mode 100644 index 0000000..54d7955 Binary files /dev/null and b/FSI.BT.Tools/Global/Icons/Folders.png differ diff --git a/FSI.BT.Tools/Icons/FondiumU.ico b/FSI.BT.Tools/Global/Icons/FondiumU.ico similarity index 100% rename from FSI.BT.Tools/Icons/FondiumU.ico rename to FSI.BT.Tools/Global/Icons/FondiumU.ico diff --git a/FSI.BT.Tools/Icons/Gimp.png b/FSI.BT.Tools/Global/Icons/Gimp.png similarity index 100% rename from FSI.BT.Tools/Icons/Gimp.png rename to FSI.BT.Tools/Global/Icons/Gimp.png diff --git a/FSI.BT.Tools/Icons/Gitea.png b/FSI.BT.Tools/Global/Icons/Gitea.png similarity index 100% rename from FSI.BT.Tools/Icons/Gitea.png rename to FSI.BT.Tools/Global/Icons/Gitea.png diff --git a/FSI.BT.Tools/Global/Icons/Iba.jpg b/FSI.BT.Tools/Global/Icons/Iba.jpg new file mode 100644 index 0000000..3b955b7 Binary files /dev/null and b/FSI.BT.Tools/Global/Icons/Iba.jpg differ diff --git a/FSI.BT.Tools/Icons/Info.png b/FSI.BT.Tools/Global/Icons/Info.png similarity index 100% rename from FSI.BT.Tools/Icons/Info.png rename to FSI.BT.Tools/Global/Icons/Info.png diff --git a/FSI.BT.Tools/Icons/Links.png b/FSI.BT.Tools/Global/Icons/Links.png similarity index 100% rename from FSI.BT.Tools/Icons/Links.png rename to FSI.BT.Tools/Global/Icons/Links.png diff --git a/FSI.BT.Tools/Icons/NPP.png b/FSI.BT.Tools/Global/Icons/NPP.png similarity index 100% rename from FSI.BT.Tools/Icons/NPP.png rename to FSI.BT.Tools/Global/Icons/NPP.png diff --git a/FSI.BT.Tools/Icons/Outlook.png b/FSI.BT.Tools/Global/Icons/Outlook.png similarity index 100% rename from FSI.BT.Tools/Icons/Outlook.png rename to FSI.BT.Tools/Global/Icons/Outlook.png diff --git a/FSI.BT.Tools/Icons/Paint.png b/FSI.BT.Tools/Global/Icons/Paint.png similarity index 100% rename from FSI.BT.Tools/Icons/Paint.png rename to FSI.BT.Tools/Global/Icons/Paint.png diff --git a/FSI.BT.Tools/Icons/Pdf.png b/FSI.BT.Tools/Global/Icons/Pdf.png similarity index 100% rename from FSI.BT.Tools/Icons/Pdf.png rename to FSI.BT.Tools/Global/Icons/Pdf.png diff --git a/FSI.BT.Tools/Icons/Plc.jpg b/FSI.BT.Tools/Global/Icons/Plc.jpg similarity index 100% rename from FSI.BT.Tools/Icons/Plc.jpg rename to FSI.BT.Tools/Global/Icons/Plc.jpg diff --git a/FSI.BT.Tools/Icons/Rdp.png b/FSI.BT.Tools/Global/Icons/Rdp.png similarity index 100% rename from FSI.BT.Tools/Icons/Rdp.png rename to FSI.BT.Tools/Global/Icons/Rdp.png diff --git a/FSI.BT.Tools/Icons/SIE.png b/FSI.BT.Tools/Global/Icons/SIE.png similarity index 100% rename from FSI.BT.Tools/Icons/SIE.png rename to FSI.BT.Tools/Global/Icons/SIE.png diff --git a/FSI.BT.Tools/Icons/STEP7.png b/FSI.BT.Tools/Global/Icons/STEP7.png similarity index 100% rename from FSI.BT.Tools/Icons/STEP7.png rename to FSI.BT.Tools/Global/Icons/STEP7.png diff --git a/FSI.BT.Tools/Icons/TIAv13.jpg b/FSI.BT.Tools/Global/Icons/TIAv13.jpg similarity index 100% rename from FSI.BT.Tools/Icons/TIAv13.jpg rename to FSI.BT.Tools/Global/Icons/TIAv13.jpg diff --git a/FSI.BT.Tools/Icons/TIAv14.jpg b/FSI.BT.Tools/Global/Icons/TIAv14.jpg similarity index 100% rename from FSI.BT.Tools/Icons/TIAv14.jpg rename to FSI.BT.Tools/Global/Icons/TIAv14.jpg diff --git a/FSI.BT.Tools/Icons/TIAv15.jpg b/FSI.BT.Tools/Global/Icons/TIAv15.jpg similarity index 100% rename from FSI.BT.Tools/Icons/TIAv15.jpg rename to FSI.BT.Tools/Global/Icons/TIAv15.jpg diff --git a/FSI.BT.Tools/Icons/TIAv16.jpg b/FSI.BT.Tools/Global/Icons/TIAv16.jpg similarity index 100% rename from FSI.BT.Tools/Icons/TIAv16.jpg rename to FSI.BT.Tools/Global/Icons/TIAv16.jpg diff --git a/FSI.BT.Tools/Icons/TIAv17.jpg b/FSI.BT.Tools/Global/Icons/TIAv17.jpg similarity index 100% rename from FSI.BT.Tools/Icons/TIAv17.jpg rename to FSI.BT.Tools/Global/Icons/TIAv17.jpg diff --git a/FSI.BT.Tools/Icons/TeXstudio.png b/FSI.BT.Tools/Global/Icons/TeXstudio.png similarity index 100% rename from FSI.BT.Tools/Icons/TeXstudio.png rename to FSI.BT.Tools/Global/Icons/TeXstudio.png diff --git a/FSI.BT.Tools/Icons/Teams.png b/FSI.BT.Tools/Global/Icons/Teams.png similarity index 100% rename from FSI.BT.Tools/Icons/Teams.png rename to FSI.BT.Tools/Global/Icons/Teams.png diff --git a/FSI.BT.Tools/Icons/Tools.png b/FSI.BT.Tools/Global/Icons/Tools.png similarity index 100% rename from FSI.BT.Tools/Icons/Tools.png rename to FSI.BT.Tools/Global/Icons/Tools.png diff --git a/FSI.BT.Tools/Icons/TotalCmd.jfif b/FSI.BT.Tools/Global/Icons/TotalCmd.jfif similarity index 100% rename from FSI.BT.Tools/Icons/TotalCmd.jfif rename to FSI.BT.Tools/Global/Icons/TotalCmd.jfif diff --git a/FSI.BT.Tools/Icons/Vnc.png b/FSI.BT.Tools/Global/Icons/Vnc.png similarity index 100% rename from FSI.BT.Tools/Icons/Vnc.png rename to FSI.BT.Tools/Global/Icons/Vnc.png diff --git a/FSI.BT.Tools/Icons/VncAdrBook.png b/FSI.BT.Tools/Global/Icons/VncAdrBook.png similarity index 100% rename from FSI.BT.Tools/Icons/VncAdrBook.png rename to FSI.BT.Tools/Global/Icons/VncAdrBook.png diff --git a/FSI.BT.Tools/Global/Icons/VolDown.png b/FSI.BT.Tools/Global/Icons/VolDown.png new file mode 100644 index 0000000..e1924f9 Binary files /dev/null and b/FSI.BT.Tools/Global/Icons/VolDown.png differ diff --git a/FSI.BT.Tools/Global/Icons/VolOff.png b/FSI.BT.Tools/Global/Icons/VolOff.png new file mode 100644 index 0000000..934cebe Binary files /dev/null and b/FSI.BT.Tools/Global/Icons/VolOff.png differ diff --git a/FSI.BT.Tools/Global/Icons/VolOn.png b/FSI.BT.Tools/Global/Icons/VolOn.png new file mode 100644 index 0000000..611bc45 Binary files /dev/null and b/FSI.BT.Tools/Global/Icons/VolOn.png differ diff --git a/FSI.BT.Tools/Global/Icons/VolUp.png b/FSI.BT.Tools/Global/Icons/VolUp.png new file mode 100644 index 0000000..a3f5a6b Binary files /dev/null and b/FSI.BT.Tools/Global/Icons/VolUp.png differ diff --git a/FSI.BT.Tools/Icons/Vs.png b/FSI.BT.Tools/Global/Icons/Vs.png similarity index 100% rename from FSI.BT.Tools/Icons/Vs.png rename to FSI.BT.Tools/Global/Icons/Vs.png diff --git a/FSI.BT.Tools/Icons/VsCode.png b/FSI.BT.Tools/Global/Icons/VsCode.png similarity index 100% rename from FSI.BT.Tools/Icons/VsCode.png rename to FSI.BT.Tools/Global/Icons/VsCode.png diff --git a/FSI.BT.Tools/Icons/Word.png b/FSI.BT.Tools/Global/Icons/Word.png similarity index 100% rename from FSI.BT.Tools/Icons/Word.png rename to FSI.BT.Tools/Global/Icons/Word.png diff --git a/FSI.BT.Tools/Global/Icons/txt.png b/FSI.BT.Tools/Global/Icons/txt.png new file mode 100644 index 0000000..0ca1de9 Binary files /dev/null and b/FSI.BT.Tools/Global/Icons/txt.png differ diff --git a/FSI.BT.Tools/Global/Resources/Languages/lang.de.resx b/FSI.BT.Tools/Global/Resources/Languages/lang.de.resx new file mode 100644 index 0000000..39ddb98 --- /dev/null +++ b/FSI.BT.Tools/Global/Resources/Languages/lang.de.resx @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Über SystemTrayMenu + + + OK + + + App-Start + + + App beenden + + + Verzeichnis + + + Verzeichnis leer + + + Einzelheiten + + + Systeminformationen + + + Verzeichnis unzugänglich + + + Sprache + + + Logdatei + + + Neu starten + + + Der Hotkey konnte nicht registriert werden. + + + Abbrechen + + + Allgemein + + + Hotkey + + + Starte mit Windows + + + Einstellungen + + + Häufig gestellte Fragen + + + Lesen Sie die FAQ und wählen Sie dann ein Stammverzeichnis für SystemTrayMenu. + + + Verzeichnis auswählen + + + Ihr Stammverzeichnis für die App existiert nicht oder ist leer! Ändern Sie das Stammverzeichnis oder legen Sie einige Dateien, Verzeichnisse oder Verknüpfungen in das Stammverzeichnis. + + + Sie haben keinen Zugriff auf das Stammverzeichnis der App. Gewähren Sie Zugriff auf das Verzeichnis oder ändern Sie das Stammverzeichnis. + + + Klicken Sie einmal, um ein Element zu öffnen + + + Farbschema dunkel immer aktiv + + + Fortschrittlich + + + An der Mausposition + + + Verzeichnis wechseln + + + Klicken + + + Anpassen + + + Standard + + + Wenn der Fokus verloren geht und sich die Maus noch im Menü befindet + + + Millisekunden, bis sich ein Menü öffnet, wenn die Maus darauf ist + + + Millisekunden bis zum Schließen des Menüs, wenn die Maus anschließend das Menü verlässt + + + Maximale Menübreite + + + Menü bleibt geöffnet + + + Zeit bis sich ein Menü öffnet + + + Wenn ein Element angeklickt wurde + + + Hintergrund + + + Geöffnetes Verzeichnis + + + Rahmen des geöffneten Verzeichnisses + + + Suchfeld + + + Ausgewähltes Element + + + Rahmen des ausgewählten Elements + + + Relatives Verzeichnis + + + Konfigurationsdatei im Anwendungsverzeichnis speichern + + + Konfigurations- und Protokolldateien + + + Anwendungsverzeichnis öffnen + + + Maximale Menühöhe + + + Pfeil + + + Pfeil beim Klicken + + + Pfeil, während die Maus darüber schwebt + + + Hintergrund des Pfeils beim Klicken + + + Hintergrund des Pfeils, während die Maus darüber schwebt + + + Farbschema dunkel + + + Farbschema hell + + + App-Menü + + + Scrollleiste + + + Schieberegler + + + Schieberegler beim Ziehen + + + Schieberegler, während die Maus darüber schwebt 1 + + + Schieberegler, während die Maus darüber schwebt 2 + + + Verwenden Sie das Symbol aus dem Verzeichnis + + + Größen in Prozent + + + Rand des Menüs + + + Symbole + + + Per Kontextmenü einstellen + + + Als Verzeichnis festlegen + + + Wird geladen + + + Problem mit Shortcut-Link + + + Das Element, auf das sich diese Verknüpfung bezieht, wurde geändert oder verschoben, sodass diese Verknüpfung nicht mehr ordnungsgemäß funktioniert. + + + Verzeichnis öffnen + + + Taskmanager + + + Deaktiviert + + + Aktiviert + + + Experte + + + Wenn der Fokus verloren geht und die Eingabetaste gedrückt wurde + + + Millisekunden bis zum Schließen des Menüs, wenn das Menü nicht erneut aktiviert wird + + + In Taskleiste anzeigen + + + Verzeichnis hinzufügen + + + Inhalt des Verzeichnisses zum Stammverzeichnis hinzufügen + + + Verzeichnispfade + + + Verzeichnisse + + + Rekursiv + + + Verzeichnis entfernen + + + Nur Dateien + + + Cache löschen, wenn mehr als diese Anzahl von Elementen vorhanden ist + + + Beispielverzeichnis 'Startmenü' hinzufügen + + + Zeilenhöhe + + + Runde Ecken + + + Aussehen + + + Unten links + + + Unten rechts + + + Hauptmenü erscheint + + + Mausposition (über dem Taskleistensymbol) + + + Benutzerdefiniert (an die entsprechende Position ziehen) + + + Element + + + Elemente + + + Generieren Sie Laufwerksverknüpfungen beim Start + + + Zwischenspeicher + + + Immer anzeigen + + + Versteckte Dateien und Verzeichnisse + + + Niemals zeigen + + + Größe und Lage + + + Betriebssystemeinstellungen verwenden + + + Nur als Suchergebnis anzeigen + + + Klicken Sie einmal, um ein Verzeichnis zu öffnen + + + Gamepad unterstützen + + + Neben dem vorherigen + + + Pixelweise versetzt + + + Überlappend + + + Untermenü erscheint + + + Symbolgröße + + + SystemTrayMenu unterstützen + + + Fading + + + Hotkey an andere Instanz senden + + + Sortiert nach Datum + + + Sortiert nach Namen + + + Sortierung + + + Zeilenelement per Drag and Drop kopieren + + + Ziehen + + + Per Wischen scrollen + + + Menü nach Dateityp filtern, z. B.: *.exe|*.dll + + + Anzahl der Elemente anzeigen + + + Verzeichnistitel oben anzeigen + + + Funktionstaste 'Ordner öffnen' anzeigen + + + Funktionstaste 'Pin-Menü' anzeigen + + + Funktionstaste 'Einstellungen' anzeigen + + + Funktionstaste 'Neustart' anzeigen + + + Suchleiste anzeigen + + + Protokolldatei im Anwendungsverzeichnis speichern + + + Link-Overlay anzeigen + + + Verzeichnis der Internet-Verknüpfungssymbole + + + Sortiert nach Typ (Ordner oder Datei) und Datum + + + Sortiert nach Typ (Ordner oder Datei) und Name + + + Auf Updates prüfen + + + Gehen Sie zur Download-Seite + + + Neueste verfügbare Version: + + + Neue Version verfügbar! + + + Sie haben die neueste Version von SystemTrayMenu! + + + Anwendungsgröße + + + Optionale Funktionen + + + Verknüpfungen zu Ordnern auflösen und Inhalte anzeigen + + + Sortiert nach Dateiendung und Name + + \ No newline at end of file diff --git a/FSI.BT.Tools/Global/Resources/Languages/lang.resx b/FSI.BT.Tools/Global/Resources/Languages/lang.resx new file mode 100644 index 0000000..6fabde1 --- /dev/null +++ b/FSI.BT.Tools/Global/Resources/Languages/lang.resx @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + About SystemTrayMenu + + + OK + + + Autostart + + + Exit app + + + Directory + + + Directory empty + + + Details + + + System Info + + + Directory inaccessible + + + Language + + + Log File + + + Restart + + + Could not register the hot key. + + + Cancel + + + General + + + Hotkey + + + Start with Windows + + + Settings + + + Frequently Asked Questions + + + Read the FAQ and then choose a root directory for SystemTrayMenu. + + + Select directory + + + Your root directory for the app does not exist or is empty! Change the root directory or put some files, directories or shortcuts into the root directory. + + + You have no access to the root directory of the app. Grant access to the directory or change the root directory. + + + Single click to open an element + + + Color scheme dark always active + + + Advanced + + + At mouse location + + + Change the directory + + + Click + + + Customize + + + Default + + + If the focus is lost and the mouse is still on the menu + + + Milliseconds until a menu opens when the mouse is on it + + + Milliseconds until the menu closes if the mouse then leaves the menu + + + Maximum menu width + + + Menu stays open + + + Time until a menu opens + + + If an element was clicked + + + Background + + + Opened directory + + + Border of opened directory + + + Search field + + + Selected element + + + Border of selected element + + + Relative directory + + + Save configuration file in application directory + + + Configuration and log files + + + Open application directory + + + Maximum menu height + + + Arrow + + + Arrow when clicking + + + Arrow while mouse hovers over it + + + Background of arrow when clicking + + + Background of arrow while mouse hovers over it + + + Color scheme dark + + + Color scheme bright + + + App menu + + + Scrollbar + + + Slider + + + Slider while dragging + + + Slider while mouse hovers over it 1 + + + Slider while mouse hovers over it 2 + + + Use icon from directory + + + Sizes in percent + + + Border of menu + + + Icons + + + Set by context menu + + + Set as directory + + + loading + + + Problem with Shortcut + + + The item that this shortcut refers to has been changed or moved, so this shortcut will no longer work properly. + + + Open directory + + + Task Manager + + + Deactivated + + + Activated + + + Expert + + + If the focus is lost and the Enter key was pressed + + + Milliseconds until the menu closes if the menu is not reactivated + + + Show in Taskbar + + + Add directory + + + Add content of directory to root directory + + + Directory paths + + + Directories + + + Recursive + + + Remove directory + + + Only Files + + + Clear cache if more than this number of items + + + Add sample directory 'Start Menu' + + + Row height + + + Round corners + + + Appearance + + + Bottom left + + + Bottom right + + + Main menu appears + + + Mouse location (above Taskbar icon) + + + Custom (drag it to the appropriate position) + + + item + + + items + + + Generate shortcuts to drives + + + Cache + + + Always show + + + Hidden files and directories + + + Never show + + + Size and location + + + Use operating system settings + + + Show only as search result + + + Single click to open a directory + + + Support Gamepad + + + Next to the previous one + + + Offset by pixels + + + Overlapping + + + Sub menu appears + + + Icon size + + + Support SystemTrayMenu + + + Fading + + + Send hotkey to other instance + + + Sorted by date + + + Sorted by name + + + Sorting + + + Copy row item via drag and drop + + + Drag + + + Scroll via swipe + + + Filter menu by file type e.g.: *.exe|*.dll + + + Show number of items + + + Show directory title at top + + + Show function key 'Open Folder' + + + Show function key 'Pin menu' + + + Show function key 'Settings' + + + Show function key 'Restart' + + + Show search bar + + + Save log file in application directory + + + Show link overlay + + + Directory of Internet Shortcut Icons + + + Sorted by type (folder or file) and date + + + Sorted by type (folder or file) and name + + + Check for updates + + + Go to download page + + + Latest available version: + + + New version available! + + + You have the latest version of SystemTrayMenu! + + + Application size + + + Optional Features + + + Resolve links to folders and show content + + + Sorted by file extension and name + + \ No newline at end of file diff --git a/FSI.BT.Tools/Global/Resources/app.manifest b/FSI.BT.Tools/Global/Resources/app.manifest new file mode 100644 index 0000000..5ffb86e --- /dev/null +++ b/FSI.BT.Tools/Global/Resources/app.manifest @@ -0,0 +1,12 @@ + + + + + + + PerMonitor + true + + + + diff --git a/FSI.BT.Tools/Global/Settings/ICmd.cs b/FSI.BT.Tools/Global/Settings/ICmd.cs new file mode 100644 index 0000000..b1dbec5 --- /dev/null +++ b/FSI.BT.Tools/Global/Settings/ICmd.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.Global.Settings +{ + public class Cmd + { + public interface ICmd + { + string Cmd { get; set; } + + IEnumerable Exe { get; } + IEnumerable Urls { get; } + } + + } +} diff --git a/FSI.BT.Tools/Global/Settings/IExe.cs b/FSI.BT.Tools/Global/Settings/IExe.cs new file mode 100644 index 0000000..69c631b --- /dev/null +++ b/FSI.BT.Tools/Global/Settings/IExe.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.Global.Settings +{ + public class Exe + { + public interface IExe + { + string ExePath { get; set; } + string Path { get; set; } + string Arguments { get; set; } + } + } +} diff --git a/FSI.BT.Tools/Global/Settings/IFolder.cs b/FSI.BT.Tools/Global/Settings/IFolder.cs new file mode 100644 index 0000000..234f6b9 --- /dev/null +++ b/FSI.BT.Tools/Global/Settings/IFolder.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.Global.Settings +{ + public class Folder + { + public interface IFolder : Lib.Guis.Folder.Mgt.IInterface { } + } +} diff --git a/FSI.BT.Tools/Global/Settings/IInterface.cs b/FSI.BT.Tools/Global/Settings/IInterface.cs new file mode 100644 index 0000000..5b64956 --- /dev/null +++ b/FSI.BT.Tools/Global/Settings/IInterface.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.Global.Settings +{ + public class Interface + { + public interface IInterface + { + string HotKey { get; set; } + + IEnumerable Users { get; } + IEnumerable Admins { get; } + + string SuperAdmin { get; } + + StringValue.IStringValue Pw { get; set; } + + StringValue.IStringValue TimeStampFormat { get; set; } + + IEnumerable Cmds { get; } + + IEnumerable Folders { get; } + + IEnumerable Rdps { get; } + //IEnumerable WebRadioUrls { get; } + + Lib.Guis.SieTiaWinCCMsgMgt.IInterface WinCC { get; set; } + + Lib.Guis.IbaDirSync.IInterface IbaDirSync { get; set; } + + } + } +} diff --git a/FSI.BT.Tools/Global/Settings/IStringValue.cs b/FSI.BT.Tools/Global/Settings/IStringValue.cs new file mode 100644 index 0000000..61b0ec3 --- /dev/null +++ b/FSI.BT.Tools/Global/Settings/IStringValue.cs @@ -0,0 +1,16 @@ +namespace FSI.BT.Tools.Global.Settings +{ + public class StringValue + { + public interface IStringValue + { + string Value { get; set; } + } + + public interface IStringValueCrypt + { + string Value { get; set; } + string ValueDeCrypt { get; set; } + } + } +} diff --git a/FSI.BT.Tools/Global/Settings/RdpMgt.cs b/FSI.BT.Tools/Global/Settings/RdpMgt.cs new file mode 100644 index 0000000..6a28765 --- /dev/null +++ b/FSI.BT.Tools/Global/Settings/RdpMgt.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.Global.Settings +{ + public class RdpMgt + { + public interface IRdp : Lib.Guis.Rdp.Mgt.IInterface { } + } +} diff --git a/FSI.BT.Tools/Global/ThirdParty/Clearcove.Logging.dll b/FSI.BT.Tools/Global/ThirdParty/Clearcove.Logging.dll new file mode 100644 index 0000000..269e609 Binary files /dev/null and b/FSI.BT.Tools/Global/ThirdParty/Clearcove.Logging.dll differ diff --git a/FSI.BT.Tools/Global/UserInterface/AboutBox.Designer.cs b/FSI.BT.Tools/Global/UserInterface/AboutBox.Designer.cs new file mode 100644 index 0000000..f99caa6 --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/AboutBox.Designer.cs @@ -0,0 +1,510 @@ +namespace FSI.BT.Tools.Global.UserInterface +{ + internal partial class AboutBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); + this.buttonDetails = new System.Windows.Forms.Button(); + this.ImagePictureBox = new System.Windows.Forms.PictureBox(); + this.AppDateLabel = new System.Windows.Forms.Label(); + this.buttonSystemInfo = new System.Windows.Forms.Button(); + this.AppCopyrightLabel = new System.Windows.Forms.Label(); + this.AppVersionLabel = new System.Windows.Forms.Label(); + this.AppDescriptionLabel = new System.Windows.Forms.Label(); + this.GroupBox1 = new System.Windows.Forms.GroupBox(); + this.AppTitleLabel = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.MoreRichTextBox = new System.Windows.Forms.RichTextBox(); + this.TabPanelDetails = new System.Windows.Forms.TabControl(); + this.TabPageApplication = new System.Windows.Forms.TabPage(); + this.AppInfoListView = new System.Windows.Forms.ListView(); + this.colKey = new System.Windows.Forms.ColumnHeader(); + this.colValue = new System.Windows.Forms.ColumnHeader(); + this.TabPageAssemblies = new System.Windows.Forms.TabPage(); + this.AssemblyInfoListView = new System.Windows.Forms.ListView(); + this.colAssemblyName = new System.Windows.Forms.ColumnHeader(); + this.colAssemblyVersion = new System.Windows.Forms.ColumnHeader(); + this.colAssemblyBuilt = new System.Windows.Forms.ColumnHeader(); + this.colAssemblyCodeBase = new System.Windows.Forms.ColumnHeader(); + this.TabPageAssemblyDetails = new System.Windows.Forms.TabPage(); + this.AssemblyDetailsListView = new System.Windows.Forms.ListView(); + this.ColumnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.ColumnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.AssemblyNamesComboBox = new System.Windows.Forms.ComboBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.ImagePictureBox)).BeginInit(); + this.TabPanelDetails.SuspendLayout(); + this.TabPageApplication.SuspendLayout(); + this.TabPageAssemblies.SuspendLayout(); + this.TabPageAssemblyDetails.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.tableLayoutPanel4.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.SuspendLayout(); + // + // buttonDetails + // + this.buttonDetails.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDetails.AutoSize = true; + this.buttonDetails.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonDetails.Location = new System.Drawing.Point(88, 3); + this.buttonDetails.MinimumSize = new System.Drawing.Size(76, 23); + this.buttonDetails.Name = "buttonDetails"; + this.buttonDetails.Size = new System.Drawing.Size(76, 25); + this.buttonDetails.TabIndex = 25; + this.buttonDetails.Text = "Details"; + this.buttonDetails.Click += new System.EventHandler(this.DetailsButton_Click); + // + // ImagePictureBox + // + this.ImagePictureBox.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("ImagePictureBox.BackgroundImage"))); + this.ImagePictureBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ImagePictureBox.Location = new System.Drawing.Point(3, 3); + this.ImagePictureBox.Name = "ImagePictureBox"; + this.ImagePictureBox.Size = new System.Drawing.Size(36, 36); + this.ImagePictureBox.TabIndex = 24; + this.ImagePictureBox.TabStop = false; + // + // AppDateLabel + // + this.AppDateLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AppDateLabel.AutoSize = true; + this.AppDateLabel.Location = new System.Drawing.Point(3, 82); + this.AppDateLabel.Margin = new System.Windows.Forms.Padding(3); + this.AppDateLabel.Name = "AppDateLabel"; + this.AppDateLabel.Size = new System.Drawing.Size(383, 15); + this.AppDateLabel.TabIndex = 23; + this.AppDateLabel.Text = "Built on %builddate%"; + // + // buttonSystemInfo + // + this.buttonSystemInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonSystemInfo.AutoSize = true; + this.buttonSystemInfo.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonSystemInfo.Location = new System.Drawing.Point(3, 3); + this.buttonSystemInfo.MinimumSize = new System.Drawing.Size(76, 23); + this.buttonSystemInfo.Name = "buttonSystemInfo"; + this.buttonSystemInfo.Size = new System.Drawing.Size(79, 25); + this.buttonSystemInfo.TabIndex = 22; + this.buttonSystemInfo.Text = "System Info"; + this.buttonSystemInfo.Visible = false; + this.buttonSystemInfo.Click += new System.EventHandler(this.SysInfoButton_Click); + // + // AppCopyrightLabel + // + this.AppCopyrightLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AppCopyrightLabel.AutoSize = true; + this.AppCopyrightLabel.Location = new System.Drawing.Point(3, 103); + this.AppCopyrightLabel.Margin = new System.Windows.Forms.Padding(3); + this.AppCopyrightLabel.Name = "AppCopyrightLabel"; + this.AppCopyrightLabel.Size = new System.Drawing.Size(383, 15); + this.AppCopyrightLabel.TabIndex = 21; + this.AppCopyrightLabel.Text = "Copyright © %year%, %company%"; + // + // AppVersionLabel + // + this.AppVersionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AppVersionLabel.AutoSize = true; + this.AppVersionLabel.Location = new System.Drawing.Point(3, 61); + this.AppVersionLabel.Margin = new System.Windows.Forms.Padding(3); + this.AppVersionLabel.Name = "AppVersionLabel"; + this.AppVersionLabel.Size = new System.Drawing.Size(383, 15); + this.AppVersionLabel.TabIndex = 20; + this.AppVersionLabel.Text = "Version %version%"; + // + // AppDescriptionLabel + // + this.AppDescriptionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AppDescriptionLabel.AutoSize = true; + this.AppDescriptionLabel.Location = new System.Drawing.Point(3, 24); + this.AppDescriptionLabel.Margin = new System.Windows.Forms.Padding(3); + this.AppDescriptionLabel.Name = "AppDescriptionLabel"; + this.AppDescriptionLabel.Size = new System.Drawing.Size(86, 15); + this.AppDescriptionLabel.TabIndex = 19; + this.AppDescriptionLabel.Text = "%description%"; + // + // GroupBox1 + // + this.GroupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.GroupBox1.Location = new System.Drawing.Point(3, 53); + this.GroupBox1.Name = "GroupBox1"; + this.GroupBox1.Size = new System.Drawing.Size(383, 2); + this.GroupBox1.TabIndex = 18; + this.GroupBox1.TabStop = false; + this.GroupBox1.Text = "GroupBox1"; + // + // AppTitleLabel + // + this.AppTitleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AppTitleLabel.AutoSize = true; + this.AppTitleLabel.Location = new System.Drawing.Point(3, 3); + this.AppTitleLabel.Margin = new System.Windows.Forms.Padding(3); + this.AppTitleLabel.Name = "AppTitleLabel"; + this.AppTitleLabel.Size = new System.Drawing.Size(86, 15); + this.AppTitleLabel.TabIndex = 17; + this.AppTitleLabel.Text = "%title%"; + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.AutoSize = true; + this.buttonOk.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonOk.Location = new System.Drawing.Point(170, 3); + this.buttonOk.MinimumSize = new System.Drawing.Size(76, 23); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(76, 25); + this.buttonOk.TabIndex = 16; + this.buttonOk.Text = "OK"; + // + // MoreRichTextBox + // + this.MoreRichTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MoreRichTextBox.BackColor = System.Drawing.SystemColors.ControlLight; + this.MoreRichTextBox.Location = new System.Drawing.Point(3, 124); + this.MoreRichTextBox.Name = "MoreRichTextBox"; + this.MoreRichTextBox.ReadOnly = true; + this.MoreRichTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.MoreRichTextBox.Size = new System.Drawing.Size(383, 122); + this.MoreRichTextBox.TabIndex = 26; + this.MoreRichTextBox.Text = "%product% is %copyright%, %trademark%"; + this.MoreRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.MoreRichTextBox_LinkClicked); + // + // TabPanelDetails + // + this.TabPanelDetails.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TabPanelDetails.Controls.Add(this.TabPageApplication); + this.TabPanelDetails.Controls.Add(this.TabPageAssemblies); + this.TabPanelDetails.Controls.Add(this.TabPageAssemblyDetails); + this.TabPanelDetails.Location = new System.Drawing.Point(3, 252); + this.TabPanelDetails.Name = "TabPanelDetails"; + this.TabPanelDetails.SelectedIndex = 0; + this.TabPanelDetails.Size = new System.Drawing.Size(383, 149); + this.TabPanelDetails.TabIndex = 27; + this.TabPanelDetails.Visible = false; + this.TabPanelDetails.SelectedIndexChanged += new System.EventHandler(this.TabPanelDetails_SelectedIndexChanged); + // + // TabPageApplication + // + this.TabPageApplication.Controls.Add(this.AppInfoListView); + this.TabPageApplication.Location = new System.Drawing.Point(4, 24); + this.TabPageApplication.Name = "TabPageApplication"; + this.TabPageApplication.Size = new System.Drawing.Size(375, 121); + this.TabPageApplication.TabIndex = 0; + this.TabPageApplication.Text = "Application"; + // + // AppInfoListView + // + this.AppInfoListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.colKey, + this.colValue}); + this.AppInfoListView.Dock = System.Windows.Forms.DockStyle.Fill; + this.AppInfoListView.FullRowSelect = true; + this.AppInfoListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.AppInfoListView.Location = new System.Drawing.Point(0, 0); + this.AppInfoListView.Name = "AppInfoListView"; + this.AppInfoListView.Size = new System.Drawing.Size(375, 121); + this.AppInfoListView.TabIndex = 16; + this.AppInfoListView.UseCompatibleStateImageBehavior = false; + this.AppInfoListView.View = System.Windows.Forms.View.Details; + // + // colKey + // + this.colKey.Text = "Application Key"; + this.colKey.Width = 120; + // + // colValue + // + this.colValue.Text = "Value"; + this.colValue.Width = 700; + // + // TabPageAssemblies + // + this.TabPageAssemblies.Controls.Add(this.AssemblyInfoListView); + this.TabPageAssemblies.Location = new System.Drawing.Point(4, 24); + this.TabPageAssemblies.Name = "TabPageAssemblies"; + this.TabPageAssemblies.Size = new System.Drawing.Size(375, 109); + this.TabPageAssemblies.TabIndex = 1; + this.TabPageAssemblies.Text = "Assemblies"; + // + // AssemblyInfoListView + // + this.AssemblyInfoListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.colAssemblyName, + this.colAssemblyVersion, + this.colAssemblyBuilt, + this.colAssemblyCodeBase}); + this.AssemblyInfoListView.Dock = System.Windows.Forms.DockStyle.Fill; + this.AssemblyInfoListView.FullRowSelect = true; + this.AssemblyInfoListView.Location = new System.Drawing.Point(0, 0); + this.AssemblyInfoListView.MultiSelect = false; + this.AssemblyInfoListView.Name = "AssemblyInfoListView"; + this.AssemblyInfoListView.Size = new System.Drawing.Size(375, 109); + this.AssemblyInfoListView.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.AssemblyInfoListView.TabIndex = 13; + this.AssemblyInfoListView.UseCompatibleStateImageBehavior = false; + this.AssemblyInfoListView.View = System.Windows.Forms.View.Details; + this.AssemblyInfoListView.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.AssemblyInfoListView_ColumnClick); + this.AssemblyInfoListView.DoubleClick += new System.EventHandler(this.AssemblyInfoListView_DoubleClick); + // + // colAssemblyName + // + this.colAssemblyName.Text = "Assembly"; + this.colAssemblyName.Width = 123; + // + // colAssemblyVersion + // + this.colAssemblyVersion.Text = "Version"; + this.colAssemblyVersion.Width = 100; + // + // colAssemblyBuilt + // + this.colAssemblyBuilt.Text = "Built"; + this.colAssemblyBuilt.Width = 130; + // + // colAssemblyCodeBase + // + this.colAssemblyCodeBase.Text = "CodeBase"; + this.colAssemblyCodeBase.Width = 750; + // + // TabPageAssemblyDetails + // + this.TabPageAssemblyDetails.Controls.Add(this.AssemblyDetailsListView); + this.TabPageAssemblyDetails.Controls.Add(this.AssemblyNamesComboBox); + this.TabPageAssemblyDetails.Location = new System.Drawing.Point(4, 24); + this.TabPageAssemblyDetails.Name = "TabPageAssemblyDetails"; + this.TabPageAssemblyDetails.Size = new System.Drawing.Size(375, 109); + this.TabPageAssemblyDetails.TabIndex = 2; + this.TabPageAssemblyDetails.Text = "Assembly Details"; + // + // AssemblyDetailsListView + // + this.AssemblyDetailsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.ColumnHeader1, + this.ColumnHeader2}); + this.AssemblyDetailsListView.Dock = System.Windows.Forms.DockStyle.Fill; + this.AssemblyDetailsListView.FullRowSelect = true; + this.AssemblyDetailsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.AssemblyDetailsListView.Location = new System.Drawing.Point(0, 23); + this.AssemblyDetailsListView.Name = "AssemblyDetailsListView"; + this.AssemblyDetailsListView.Size = new System.Drawing.Size(375, 86); + this.AssemblyDetailsListView.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.AssemblyDetailsListView.TabIndex = 19; + this.AssemblyDetailsListView.UseCompatibleStateImageBehavior = false; + this.AssemblyDetailsListView.View = System.Windows.Forms.View.Details; + // + // ColumnHeader1 + // + this.ColumnHeader1.Text = "Assembly Key"; + this.ColumnHeader1.Width = 120; + // + // ColumnHeader2 + // + this.ColumnHeader2.Text = "Value"; + this.ColumnHeader2.Width = 700; + // + // AssemblyNamesComboBox + // + this.AssemblyNamesComboBox.Dock = System.Windows.Forms.DockStyle.Top; + this.AssemblyNamesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.AssemblyNamesComboBox.Location = new System.Drawing.Point(0, 0); + this.AssemblyNamesComboBox.Name = "AssemblyNamesComboBox"; + this.AssemblyNamesComboBox.Size = new System.Drawing.Size(375, 23); + this.AssemblyNamesComboBox.Sorted = true; + this.AssemblyNamesComboBox.TabIndex = 18; + this.AssemblyNamesComboBox.SelectedIndexChanged += new System.EventHandler(this.AssemblyNamesComboBox_SelectedIndexChanged); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel4, 0, 8); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.AppCopyrightLabel, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.AppDateLabel, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.GroupBox1, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.TabPanelDetails, 0, 7); + this.tableLayoutPanel1.Controls.Add(this.MoreRichTextBox, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.AppVersionLabel, 0, 2); + this.tableLayoutPanel1.Location = new System.Drawing.Point(9, 7); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 9; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(389, 439); + this.tableLayoutPanel1.TabIndex = 28; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.AutoSize = true; + this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel4.ColumnCount = 3; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.Controls.Add(this.buttonSystemInfo, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.buttonDetails, 1, 0); + this.tableLayoutPanel4.Controls.Add(this.buttonOk, 2, 0); + this.tableLayoutPanel4.Location = new System.Drawing.Point(2, 406); + this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(2); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 1; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(249, 31); + this.tableLayoutPanel4.TabIndex = 29; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.AutoSize = true; + this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 313F)); + this.tableLayoutPanel2.Controls.Add(this.ImagePictureBox, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 1, 0); + this.tableLayoutPanel2.Location = new System.Drawing.Point(2, 2); + this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(2); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.Size = new System.Drawing.Size(355, 46); + this.tableLayoutPanel2.TabIndex = 29; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.AutoSize = true; + this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel3.ColumnCount = 1; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.Controls.Add(this.AppTitleLabel, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.AppDescriptionLabel, 0, 1); + this.tableLayoutPanel3.Location = new System.Drawing.Point(44, 2); + this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(2); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 2; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.Size = new System.Drawing.Size(92, 42); + this.tableLayoutPanel3.TabIndex = 25; + // + // AboutBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.buttonOk; + this.ClientSize = new System.Drawing.Size(402, 492); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutBox"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "About %title%"; + this.Load += new System.EventHandler(this.AboutBox_Load); + this.Paint += new System.Windows.Forms.PaintEventHandler(this.AboutBox_Paint); + ((System.ComponentModel.ISupportInitialize)(this.ImagePictureBox)).EndInit(); + this.TabPanelDetails.ResumeLayout(false); + this.TabPageApplication.ResumeLayout(false); + this.TabPageAssemblies.ResumeLayout(false); + this.TabPageAssemblyDetails.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonDetails; + private System.Windows.Forms.PictureBox ImagePictureBox; + private System.Windows.Forms.Label AppDateLabel; + private System.Windows.Forms.Button buttonSystemInfo; + private System.Windows.Forms.Label AppCopyrightLabel; + private System.Windows.Forms.Label AppVersionLabel; + private System.Windows.Forms.Label AppDescriptionLabel; + private System.Windows.Forms.GroupBox GroupBox1; + private System.Windows.Forms.Label AppTitleLabel; + private System.Windows.Forms.Button buttonOk; + internal System.Windows.Forms.RichTextBox MoreRichTextBox; + internal System.Windows.Forms.TabControl TabPanelDetails; + internal System.Windows.Forms.TabPage TabPageApplication; + internal System.Windows.Forms.ListView AppInfoListView; + internal System.Windows.Forms.ColumnHeader colKey; + internal System.Windows.Forms.ColumnHeader colValue; + internal System.Windows.Forms.TabPage TabPageAssemblies; + internal System.Windows.Forms.ListView AssemblyInfoListView; + internal System.Windows.Forms.ColumnHeader colAssemblyName; + internal System.Windows.Forms.ColumnHeader colAssemblyVersion; + internal System.Windows.Forms.ColumnHeader colAssemblyBuilt; + internal System.Windows.Forms.ColumnHeader colAssemblyCodeBase; + internal System.Windows.Forms.TabPage TabPageAssemblyDetails; + internal System.Windows.Forms.ListView AssemblyDetailsListView; + internal System.Windows.Forms.ColumnHeader ColumnHeader1; + internal System.Windows.Forms.ColumnHeader ColumnHeader2; + internal System.Windows.Forms.ComboBox AssemblyNamesComboBox; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Global/UserInterface/AboutBox.cs b/FSI.BT.Tools/Global/UserInterface/AboutBox.cs new file mode 100644 index 0000000..eca3f7b --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/AboutBox.cs @@ -0,0 +1,810 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.UserInterface +{ + using System; + using System.Collections.Specialized; + using System.Drawing; + using System.Globalization; + using System.IO; + using System.Reflection; + using System.Text.RegularExpressions; + using System.Windows.Forms; + using Microsoft.Win32; + using FSI.BT.Tools.SystemTrayMenu.Utilities; + using FSI.BT.Tools.Global.Utilities; + + /// + /// Generic, self-contained About Box dialog. + /// + /// + /// Jeff Atwood + /// http://www.codinghorror.com + /// converted to C# by Scott Ferguson + /// http://www.forestmoon.com + /// . + /// + internal partial class AboutBox : Form + { + private bool isPainted; + private string entryAssemblyName; + private string callingAssemblyName; + private string executingAssemblyName; + private NameValueCollection entryAssemblyAttribCollection; + + public AboutBox() + { + InitializeComponent(); + buttonOk.Text = Global.Utilities.Translator.GetText("OK"); + buttonDetails.Text = Global.Utilities.Translator.GetText("Details"); + buttonSystemInfo.Text = Global.Utilities.Translator.GetText("System Info"); + Text = Global.Utilities.Translator.GetText("About FSI.BT.Tools"); + } + + // + // returns the entry assembly for the current application domain + // + // + // This is usually read-only, but in some weird cases (Smart Client apps) + // you won't have an entry assembly, so you may want to set this manually. + // + public Assembly AppEntryAssembly { get; set; } + + // + // single line of text to show in the application title section of the about box dialog + // + // + // defaults to "%title%" + // %title% = Assembly: AssemblyTitle + // + public string AppTitle + { + get => AppTitleLabel.Text; + set => AppTitleLabel.Text = value; + } + + // + // single line of text to show in the description section of the about box dialog + // + // + // defaults to "%description%" + // %description% = Assembly: AssemblyDescription + // + public string AppDescription + { + get => AppDescriptionLabel.Text; + set + { + if (string.IsNullOrEmpty(value)) + { + AppDescriptionLabel.Visible = false; + } + else + { + AppDescriptionLabel.Visible = true; + AppDescriptionLabel.Text = value; + } + } + } + + // + // single line of text to show in the version section of the about dialog + // + // + // defaults to "Version %version%" + // %version% = Assembly: AssemblyVersion + // + public string AppVersion + { + get => AppVersionLabel.Text; + set + { + if (string.IsNullOrEmpty(value)) + { + AppVersionLabel.Visible = false; + } + else + { + AppVersionLabel.Visible = true; + AppVersionLabel.Text = value; + } + } + } + + // + // single line of text to show in the copyright section of the about dialog + // + // + // defaults to "Copyright © %year%, %company%" + // %company% = Assembly: AssemblyCompany + // %year% = current 4-digit year + // + public string AppCopyright + { + get => AppCopyrightLabel.Text; + set + { + if (string.IsNullOrEmpty(value)) + { + AppCopyrightLabel.Visible = false; + } + else + { + AppCopyrightLabel.Visible = true; + AppCopyrightLabel.Text = value; + } + } + } + + // + // intended for the default 32x32 application icon to appear in the upper left of the about dialog + // + // + // if you open this form using .ShowDialog(Owner), the icon can be derived from the owning form + // + public Image AppImage + { + get => ImagePictureBox.Image; + set => ImagePictureBox.Image = value; + } + + // + // multiple lines of miscellaneous text to show in rich text box + // + // + // defaults to "%product% is %copyright%, %trademark%" + // %product% = Assembly: AssemblyProduct + // %copyright% = Assembly: AssemblyCopyright + // %trademark% = Assembly: AssemblyTrademark + // + public string AppMoreInfo + { + get => MoreRichTextBox.Text; + set + { + if (string.IsNullOrEmpty(value)) + { + MoreRichTextBox.Visible = false; + } + else + { + MoreRichTextBox.Visible = true; + MoreRichTextBox.Text = value; + } + } + } + + // + // determines if the "Details" (advanced assembly details) button is shown + // + public bool AppDetailsButton + { + get => buttonDetails.Visible; + set => buttonDetails.Visible = value; + } + + // + // exception-safe retrieval of LastWriteTime for this assembly. + // + // File.GetLastWriteTime, or DateTime.MaxValue if exception was encountered. + private static DateTime AssemblyLastWriteTime(Assembly a) + { + DateTime assemblyLastWriteTime = DateTime.MaxValue; + + // Location property not available for dynamic assemblies + if (!a.IsDynamic) + { + if (!string.IsNullOrEmpty(a.Location)) + { + assemblyLastWriteTime = File.GetLastWriteTime(a.Location); + } + } + + return assemblyLastWriteTime; + } + + // + // returns DateTime this Assembly was last built. Will attempt to calculate from build number, if possible. + // If not, the actual LastWriteTime on the assembly file will be returned. + // + // Assembly to get build date for + // Don't attempt to use the build number to calculate the date + // DateTime this assembly was last built + private static DateTime AssemblyBuildDate(Assembly a, bool forceFileDate) + { + Version assemblyVersion = a.GetName().Version; + DateTime dt; + + if (forceFileDate) + { + dt = AssemblyLastWriteTime(a); + } + else + { + dt = DateTime.Parse("01/01/2000", CultureInfo.InvariantCulture).AddDays(assemblyVersion.Build).AddSeconds(assemblyVersion.Revision * 2); +#pragma warning disable CS0618 + if (TimeZone.IsDaylightSavingTime(dt, TimeZone.CurrentTimeZone.GetDaylightChanges(dt.Year))) +#pragma warning restore CS0618 + { + dt = dt.AddHours(1); + } + + if (dt > DateTime.Now || assemblyVersion.Build < 730 || assemblyVersion.Revision == 0) + { + dt = AssemblyLastWriteTime(a); + } + } + + return dt; + } + + // + // returns string name / string value pair of all attribs + // for specified assembly + // + // + // note that Assembly* values are pulled from AssemblyInfo file in project folder + // + // Trademark = AssemblyTrademark string + // Debuggable = true + // GUID = 7FDF68D5-8C6F-44C9-B391-117B5AFB5467 + // CLSCompliant = true + // Product = AssemblyProduct string + // Copyright = AssemblyCopyright string + // Company = AssemblyCompany string + // Description = AssemblyDescription string + // Title = AssemblyTitle string + // + private static NameValueCollection AssemblyAttribs(Assembly a) + { + string typeName; + string name; + string value; + NameValueCollection nvc = new(); + Regex r = new(@"(\.Assembly|\.)(?[^.]*)Attribute$", RegexOptions.IgnoreCase); + + foreach (object attrib in a.GetCustomAttributes(false)) + { + typeName = attrib.GetType().ToString(); + name = r.Match(typeName).Groups["Name"].ToString(); + value = string.Empty; + switch (typeName) + { + case "System.CLSCompliantAttribute": + value = ((CLSCompliantAttribute)attrib).IsCompliant.ToString(CultureInfo.InvariantCulture); break; + case "System.Diagnostics.DebuggableAttribute": + value = ((System.Diagnostics.DebuggableAttribute)attrib).IsJITTrackingEnabled.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyCompanyAttribute": + value = ((AssemblyCompanyAttribute)attrib).Company.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyConfigurationAttribute": + value = ((AssemblyConfigurationAttribute)attrib).Configuration.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyCopyrightAttribute": + value = ((AssemblyCopyrightAttribute)attrib).Copyright.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyDefaultAliasAttribute": + value = ((AssemblyDefaultAliasAttribute)attrib).DefaultAlias.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyDelaySignAttribute": + value = ((AssemblyDelaySignAttribute)attrib).DelaySign.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyDescriptionAttribute": + value = ((AssemblyDescriptionAttribute)attrib).Description.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyInformationalVersionAttribute": + value = ((AssemblyInformationalVersionAttribute)attrib).InformationalVersion.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyKeyFileAttribute": + value = ((AssemblyKeyFileAttribute)attrib).KeyFile.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyProductAttribute": + value = ((AssemblyProductAttribute)attrib).Product.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyTrademarkAttribute": + value = ((AssemblyTrademarkAttribute)attrib).Trademark.ToString(CultureInfo.InvariantCulture); break; + case "System.Reflection.AssemblyTitleAttribute": + value = ((AssemblyTitleAttribute)attrib).Title.ToString(CultureInfo.InvariantCulture); break; + case "System.Resources.NeutralResourcesLanguageAttribute": + value = ((System.Resources.NeutralResourcesLanguageAttribute)attrib).CultureName.ToString(CultureInfo.InvariantCulture); break; + case "System.Resources.SatelliteContractVersionAttribute": + value = ((System.Resources.SatelliteContractVersionAttribute)attrib).Version.ToString(CultureInfo.InvariantCulture); break; + case "System.Runtime.InteropServices.ComCompatibleVersionAttribute": + { + System.Runtime.InteropServices.ComCompatibleVersionAttribute x; + x = (System.Runtime.InteropServices.ComCompatibleVersionAttribute)attrib; + value = x.MajorVersion + "." + x.MinorVersion + "." + x.RevisionNumber + "." + x.BuildNumber; + break; + } + + case "System.Runtime.InteropServices.ComVisibleAttribute": + value = ((System.Runtime.InteropServices.ComVisibleAttribute)attrib).Value.ToString(CultureInfo.InvariantCulture); break; + case "System.Runtime.InteropServices.GuidAttribute": + value = ((System.Runtime.InteropServices.GuidAttribute)attrib).Value.ToString(CultureInfo.InvariantCulture); break; + case "System.Runtime.InteropServices.TypeLibVersionAttribute": + { + System.Runtime.InteropServices.TypeLibVersionAttribute x; + x = (System.Runtime.InteropServices.TypeLibVersionAttribute)attrib; + value = x.MajorVersion + "." + x.MinorVersion; + break; + } + + case "System.Security.AllowPartiallyTrustedCallersAttribute": + value = "(Present)"; break; + default: + // debug.writeline("** unknown assembly attribute '" + TypeName + "'") + value = typeName; break; + } + + if (nvc[name] == null) + { + nvc.Add(name, value); + } + } + + // add some extra values that are not in the AssemblyInfo, but nice to have + // codebase + try + { + if (!a.IsDynamic) + { + nvc.Add("CodeBase", a.Location.Replace("file:///", string.Empty, StringComparison.InvariantCulture)); + } + } + catch (NotSupportedException) + { + nvc.Add("CodeBase", "(not supported)"); + } + + // build date + DateTime dt = AssemblyBuildDate(a, false); + if (dt == DateTime.MaxValue) + { + nvc.Add("BuildDate", "(unknown)"); + } + else + { + nvc.Add("BuildDate", dt.ToString("yyyy-MM-dd hh:mm tt", CultureInfo.InvariantCulture)); + } + + // location + try + { + if (!a.IsDynamic) + { + nvc.Add("Location", a.Location); + } + } + catch (NotSupportedException) + { + nvc.Add("Location", "(not supported)"); + } + + string version = "(unknown)"; + AssemblyName assemblyName = a.GetName(); + if (assemblyName.Version != null && + (assemblyName.Version.Major != 0 || assemblyName.Version.Minor != 0)) + { + if (!a.IsDynamic) + { + version = a.GetName().Version.ToString(); + } + } + + nvc.Add("Version", version); + + if (!a.IsDynamic) + { + nvc.Add("FullName", a.FullName); + } + + return nvc; + } + + // + // reads an HKLM Windows Registry key value + // + private static string RegistryHklmValue(string keyName, string subKeyRef) + { + string strSysInfoPath = string.Empty; + try + { + RegistryKey rk = Registry.LocalMachine.OpenSubKey(keyName); + strSysInfoPath = (string)rk.GetValue(subKeyRef, string.Empty); + } + catch (Exception ex) + { + Log.Warn($"KeyName:'{keyName}' SubKeyRef:'{subKeyRef}'", ex); + } + + return strSysInfoPath; + } + + // + // populate a listview with the specified key and value strings + // + private static void Populate(ListView lvw, string key, string value) + { + if (!string.IsNullOrEmpty(value)) + { + ListViewItem lvi = new() + { + Text = key, + }; + lvi.SubItems.Add(value); + lvw.Items.Add(lvi); + } + } + + // + // populate details for a single assembly + // + private static void PopulateAssemblyDetails(Assembly a, ListView lvw) + { + lvw.Items.Clear(); + + Populate(lvw, "Image Runtime Version", a.ImageRuntimeVersion); + + NameValueCollection nvc = AssemblyAttribs(a); + foreach (string strKey in nvc) + { + Populate(lvw, strKey, nvc[strKey]); + } + } + + // + // matches assembly by Assembly.GetName.Name; returns nothing if no match + // + private static Assembly MatchAssemblyByName(string assemblyName) + { + foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) + { + if (a.GetName().Name == assemblyName) + { + return a; + } + } + + return null; + } + + private void TabPanelDetails_SelectedIndexChanged(object sender, EventArgs e) + { + if (TabPanelDetails.SelectedTab == TabPageAssemblyDetails) + { + AssemblyNamesComboBox.Focus(); + } + } + + // + // launch the MSInfo "system information" application (works on XP, 2003, and Vista) + // + private void ShowSysInfo() + { + string strSysInfoPath = RegistryHklmValue(@"SOFTWARE\Microsoft\Shared Tools Location", "MSINFO"); + if (string.IsNullOrEmpty(strSysInfoPath)) + { + strSysInfoPath = RegistryHklmValue(@"SOFTWARE\Microsoft\Shared Tools\MSINFO", "PATH"); + } + + if (string.IsNullOrEmpty(strSysInfoPath)) + { + MessageBox.Show( + "System Information is unavailable at this time." + + Environment.NewLine + Environment.NewLine + + "(couldn't find path for Microsoft System Information Tool in the registry.)", + Text, + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + return; + } + + Log.ProcessStart(strSysInfoPath); + } + + // + // populates the Application Information listview + // + private void PopulateAppInfo() + { + AppDomain d = AppDomain.CurrentDomain; + Populate(AppInfoListView, "Application Name", Assembly.GetEntryAssembly().GetName().Name); + Populate(AppInfoListView, "Application Base", d.SetupInformation.ApplicationBase); + Populate(AppInfoListView, "Friendly Name", d.FriendlyName); + Populate(AppInfoListView, " ", " "); + Populate(AppInfoListView, "Entry Assembly", entryAssemblyName); + Populate(AppInfoListView, "Executing Assembly", executingAssemblyName); + Populate(AppInfoListView, "Calling Assembly", callingAssemblyName); + } + + // + // populate Assembly Information listview with ALL assemblies + // + private void PopulateAssemblies() + { + foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) + { + PopulateAssemblySummary(a); + } + + AssemblyNamesComboBox.SelectedIndex = AssemblyNamesComboBox.FindStringExact(entryAssemblyName); + } + + // + // populate Assembly Information listview with summary view for a specific assembly + // + private void PopulateAssemblySummary(Assembly a) + { + NameValueCollection nvc = AssemblyAttribs(a); + + string strAssemblyName = a.GetName().Name; + + ListViewItem lvi = new() + { + Text = strAssemblyName, + Tag = strAssemblyName, + }; + if (strAssemblyName == callingAssemblyName) + { + lvi.Text += " (calling)"; + } + + if (strAssemblyName == executingAssemblyName) + { + lvi.Text += " (executing)"; + } + + if (strAssemblyName == entryAssemblyName) + { + lvi.Text += " (entry)"; + } + + lvi.SubItems.Add(nvc["version"]); + lvi.SubItems.Add(nvc["builddate"]); + lvi.SubItems.Add(nvc["codebase"]); + AssemblyInfoListView.Items.Add(lvi); + AssemblyNamesComboBox.Items.Add(strAssemblyName); + } + + // + // retrieves a cached value from the entry assembly attribute lookup collection + // + private string EntryAssemblyAttrib(string strName) + { + if (entryAssemblyAttribCollection[strName] == null) + { + return ""; + } + else + { + return entryAssemblyAttribCollection[strName].ToString(CultureInfo.InvariantCulture); + } + } + + // + // Populate all the form labels with tokenized text + // + private void PopulateLabels() + { + // get entry assembly attribs + entryAssemblyAttribCollection = AssemblyAttribs(AppEntryAssembly); + + // set icon from parent, if present + if (Owner != null) + { + Icon = Owner.Icon; + ImagePictureBox.Image = Icon.ToBitmap(); + } + + // replace all labels and window title + Text = ReplaceTokens(Text); + AppTitleLabel.Text = ReplaceTokens(AppTitleLabel.Text); + if (AppDescriptionLabel.Visible) + { + AppDescriptionLabel.Text = ReplaceTokens(AppDescriptionLabel.Text); + } + + if (AppCopyrightLabel.Visible) + { + AppCopyrightLabel.Text = ReplaceTokens(AppCopyrightLabel.Text); + } + + if (AppVersionLabel.Visible) + { + AppVersionLabel.Text = ReplaceTokens(AppVersionLabel.Text); + } + + if (AppDateLabel.Visible) + { + AppDateLabel.Text = ReplaceTokens(AppDateLabel.Text); + } + + if (MoreRichTextBox.Visible) + { + MoreRichTextBox.Text = ReplaceTokens(MoreRichTextBox.Text); + } + } + + // + // perform assemblyinfo to string replacements on labels + // + private string ReplaceTokens(string s) + { + s = s.Replace("%title%", EntryAssemblyAttrib("title"), StringComparison.InvariantCulture); + s = s.Replace("%copyright%", EntryAssemblyAttrib("copyright"), StringComparison.InvariantCulture); + s = s.Replace("%description%", EntryAssemblyAttrib("description"), StringComparison.InvariantCulture); + s = s.Replace("%company%", EntryAssemblyAttrib("company"), StringComparison.InvariantCulture); + s = s.Replace("%product%", EntryAssemblyAttrib("product"), StringComparison.InvariantCulture); + s = s.Replace("%trademark%", EntryAssemblyAttrib("trademark"), StringComparison.InvariantCulture); + s = s.Replace("%year%", DateTime.Now.Year.ToString(CultureInfo.InvariantCulture), StringComparison.InvariantCulture); + s = s.Replace("%version%", EntryAssemblyAttrib("version"), StringComparison.InvariantCulture); + s = s.Replace("%builddate%", EntryAssemblyAttrib("builddate"), StringComparison.InvariantCulture); + return s; + } + + // + // things to do when form is loaded + // + private void AboutBox_Load(object sender, EventArgs e) + { + // if the user didn't provide an assembly, try to guess which one is the entry assembly + if (AppEntryAssembly == null) + { + AppEntryAssembly = Assembly.GetEntryAssembly(); + } + + if (AppEntryAssembly == null) + { + AppEntryAssembly = Assembly.GetExecutingAssembly(); + } + + executingAssemblyName = Assembly.GetExecutingAssembly().GetName().Name; + callingAssemblyName = Assembly.GetCallingAssembly().GetName().Name; + + // for web hosted apps, GetEntryAssembly = nothing + entryAssemblyName = Assembly.GetEntryAssembly().GetName().Name; + + TabPanelDetails.Visible = false; + if (!MoreRichTextBox.Visible) + { + Height -= MoreRichTextBox.Height; + } + } + + // + // things to do when form is FIRST painted + // + private void AboutBox_Paint(object sender, PaintEventArgs e) + { + if (!isPainted) + { + isPainted = true; + Application.DoEvents(); + Cursor.Current = Cursors.WaitCursor; + PopulateLabels(); + Cursor.Current = Cursors.Default; + } + } + + // + // expand about dialog to show additional advanced details + // + private void DetailsButton_Click(object sender, EventArgs e) + { + Cursor.Current = Cursors.WaitCursor; + buttonDetails.Visible = false; + SuspendLayout(); + MaximizeBox = true; + FormBorderStyle = FormBorderStyle.Sizable; + TabPanelDetails.Dock = DockStyle.Fill; + tableLayoutPanel1.Dock = DockStyle.Fill; + AutoSize = false; + SizeGripStyle = SizeGripStyle.Show; + Size = new Size(580, Size.Height); + MoreRichTextBox.Visible = false; + TabPanelDetails.Visible = true; + buttonSystemInfo.Visible = true; + PopulateAssemblies(); + PopulateAppInfo(); + CenterToParent(); + ResumeLayout(); + Cursor.Current = Cursors.Default; + } + + // + // for detailed system info, launch the external Microsoft system info app + // + private void SysInfoButton_Click(object sender, EventArgs e) + { + ShowSysInfo(); + } + + // + // if an assembly is double-clicked, go to the detail page for that assembly + // + private void AssemblyInfoListView_DoubleClick(object sender, EventArgs e) + { + string strAssemblyName; + if (AssemblyInfoListView.SelectedItems.Count > 0) + { + strAssemblyName = Convert.ToString(AssemblyInfoListView.SelectedItems[0].Tag, CultureInfo.InvariantCulture); + AssemblyNamesComboBox.SelectedIndex = AssemblyNamesComboBox.FindStringExact(strAssemblyName); + TabPanelDetails.SelectedTab = TabPageAssemblyDetails; + } + } + + // + // if a new assembly is selected from the combo box, show details for that assembly + // + private void AssemblyNamesComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + string strAssemblyName = Convert.ToString(AssemblyNamesComboBox.SelectedItem, CultureInfo.InvariantCulture); + PopulateAssemblyDetails(MatchAssemblyByName(strAssemblyName), AssemblyDetailsListView); + } + + // + // sort the assembly list by column + // + private void AssemblyInfoListView_ColumnClick(object sender, ColumnClickEventArgs e) + { + int intTargetCol = e.Column + 1; + + if (AssemblyInfoListView.Tag != null) + { + if (Math.Abs(Convert.ToInt32(AssemblyInfoListView.Tag, CultureInfo.InvariantCulture)) == intTargetCol) + { + intTargetCol = -Convert.ToInt32(AssemblyInfoListView.Tag, CultureInfo.InvariantCulture); + } + } + + AssemblyInfoListView.Tag = intTargetCol; + AssemblyInfoListView.ListViewItemSorter = new ListViewItemComparer(intTargetCol, true); + } + + // + // launch any http:// or mailto: links clicked in the body of the rich text box + // + private void MoreRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e) + { + Log.ProcessStart(e.LinkText); + } + + // + // things to do when the selected tab is changed + // + private class ListViewItemComparer : System.Collections.IComparer + { + private readonly int intCol; + private readonly bool isAscending = true; + + public ListViewItemComparer() + { + intCol = 0; + isAscending = true; + } + + public ListViewItemComparer(int column, bool ascending) + { + if (column < 0) + { + isAscending = false; + } + else + { + isAscending = ascending; + } + + intCol = Math.Abs(column) - 1; + } + + public int Compare(object x, object y) + { + int intResult = string.Compare( + ((ListViewItem)x).SubItems[intCol].Text, + ((ListViewItem)y).SubItems[intCol].Text, + StringComparison.Ordinal); + if (isAscending) + { + return intResult; + } + else + { + return -intResult; + } + } + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Global/UserInterface/AboutBox.resx b/FSI.BT.Tools/Global/UserInterface/AboutBox.resx new file mode 100644 index 0000000..52e60fc --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/AboutBox.resx @@ -0,0 +1,3354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAoAEBAAAAEAIABoBAAApgAAABgYAAABACAAiAkAAA4FAAAgIAAAAQAgAKgQAACWDgAAMDAAAAEA + IACoJQAAPh8AAEBAAAABACAAKEIAAOZEAABISAAAAQAgAIhUAAAOhwAAUFAAAAEAIADoZwAAltsAAGBg + AAABACAAqJQAAH5DAQCAgAAAAQAgACgIAQAm2AEAAAAAAAEAIABEFAAATuACACgAAAAQAAAAIAAAAAEA + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKAikqChQpKgonKSoKNSkqCkApKgpIKSoKTSkq + Ck8pKgpPKSoKTSkqCkgpKgpAKSoKNSkqCicpKgoUKSoKAikqCmgpKgrPKSoK5ikqCu8pKgr0KSoK+Ckq + CvopKgr7KSoK+ykqCvopKgr4KSoK9CkqCu8pKgrmKSoKzykqCmgpKgrEKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrEKSoK4CkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK4CkqCvApKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvApKgr6KSoK/ykq + Cv8pKgr///////////8pKgr/KSoK////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr6KSoK/ikq + Cv8pKgr/KSoK/ykqCv///////////ykqCv8pKgr///////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ikq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK////////////KSoK/ykqCv///////////ykqCv8pKgr/KSoK/ykq + Cv4pKgr6KSoK/ykqCv8pKgr/KSoK////////////KSoK/ykqCv///////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr6KSoK8CkqCv8pKgr/KSoK////////////KSoK/ykqCv///////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK8CkqCuApKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCuApKgrEKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgrEKSoKaCkqCs8pKgrmKSoK7ykqCvQpKgr4KSoK+ikqCvspKgr7KSoK+ikq + CvgpKgr0KSoK7ykqCuYpKgrPKSoKaCkqCgIpKgoUKSoKJykqCjUpKgpAKSoKSCkqCk0pKgpPKSoKTykq + Ck0pKgpIKSoKQCkqCjUpKgonKSoKFCkqCgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AACgAAAAYAAAAMAAAAAEAIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKBCkqChYpKgopKSoKOCkqCkcpKgpTKSoKXSkq + CmQpKgpqKSoKbSkqCm8pKgpvKSoKbSkqCmopKgpkKSoKXSkqClMpKgpHKSoKOCkqCikpKgoWKSoKBP8A + AAApKgomKSoKnCkqCtApKgrkKSoK8CkqCvUpKgr5KSoK/CkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr+KSoK/CkqCvkpKgr1KSoK8CkqCuQpKgrQKSoKnCkqCiYpKgp4KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCngpKgqpKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCqkpKgrJKSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCskpKgrdKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Ct0pKgrrKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuspKgr1KSoK/ykqCv8pKgr/KSoK/ykq + Cv///f3///////////8pKgr/KSoK/ykqCv////////39//////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvUpKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///7+////////////KSoK/ykq + Cv8pKgr////////+/v//////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvspKgr+KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK///9/f///////////ykqCv8pKgr/KSoK/////////f3//////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////8pKgr/KSoK/ykqCv////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv4pKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK///9/f///////////ykqCv8pKgr/KSoK//// + /////f3//////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvspKgr1KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///7+////////////KSoK/ykqCv8pKgr////////+/v//////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvUpKgrrKSoK/ykqCv8pKgr/KSoK/ykqCv///f3///////////8pKgr/KSoK/ykq + Cv////////39//////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuspKgrdKSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCt0pKgrJKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CskpKgqpKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCqkpKgp4KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCngpKgomKSoKnCkqCtApKgrkKSoK8CkqCvUpKgr5KSoK/CkqCv4pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr+KSoK/CkqCvkpKgr1KSoK8CkqCuQpKgrQKSoKnCkqCib/AAAAKSoKBCkq + ChYpKgopKSoKOCkqCkcpKgpTKSoKXSkqCmQpKgpqKSoKbSkqCm8pKgpvKSoKbSkqCmopKgpkKSoKXSkq + ClMpKgpHKSoKOCkqCikpKgoWKSoKBP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///8A////AIAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAEA////AP///wAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoHKSoKGCkqCispKgo6KSoKSikqClkpKgpmKSoKcSkq + CnopKgqBKSoKhykqCospKgqOKSoKjykqCo8pKgqOKSoKiykqCocpKgqBKSoKeikqCnEpKgpmKSoKWSkq + CkopKgo6KSoKKykqChgpKgoH/wAAAP8AAAApKgoHKSoKWykqCqspKgrOKSoK4SkqCu8pKgr2KSoK+Skq + CvwpKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikq + CvwpKgr5KSoK9ikqCu8pKgrhKSoKzikqCqspKgpbKSoKBykqCjQpKgrgKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuApKgo0KSoKZikqCvgpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+CkqCmYpKgqPKSoK/ikq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoKjykq + Cq8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgqvKSoKxSkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCsUpKgrXKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK1ykqCuUpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////ykqCv8pKgr/KSoK/ykqCv//////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrlKSoK7ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr//////////////////////ykqCv8pKgr/KSoK/ykqCv//////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCu8pKgr3KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr//////////////////////ykqCv8pKgr/KSoK/ykqCv////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK9ykqCvwpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr//////////////////////ykqCv8pKgr/KSoK/ykq + Cv//////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr8KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr//////////////////////ykq + Cv8pKgr/KSoK/ykqCv//////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + ////////KSoK/ykqCv8pKgr/KSoK//////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////ykqCv8pKgr/KSoK/ykqCv//////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr8KSoK9ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////8pKgr/KSoK/ykqCv8pKgr//////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvcpKgrvKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv//////////////////////KSoK/ykqCv8pKgr/KSoK//////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK7ykqCuUpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr//////////////////////ykqCv8pKgr/KSoK/ykqCv//////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrlKSoK1ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCtcpKgrFKSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoKxSkq + Cq8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgqvKSoKjykqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ikqCo8pKgpmKSoK+CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr4KSoKZikqCjQpKgrgKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuApKgo0KSoKBykqClspKgqrKSoKzikqCuEpKgrvKSoK9ikq + CvkpKgr8KSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv4pKgr8KSoK+SkqCvYpKgrvKSoK4SkqCs4pKgqrKSoKWykqCgf/AAAA/wAAACkqCgcpKgoYKSoKKykq + CjopKgpKKSoKWSkqCmYpKgpxKSoKeikqCoEpKgqHKSoKiykqCo4pKgqPKSoKjykqCo4pKgqLKSoKhykq + CoEpKgp6KSoKcSkqCmYpKgpZKSoKSikqCjopKgorKSoKGCkqCgf/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///////////////8AAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADAAAAD////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoBKSoKAykqCgUpKgoHKSoKCSkqCgspKgoMKSoKDSkq + Cg4pKgoPKSoKDykqChApKgoQKSoKECkqChApKgoQKSoKECkqCg8pKgoPKSoKDikqCg0pKgoMKSoKCykq + CgkpKgoHKSoKBSkqCgMpKgoB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAACkqCgIpKgoLKSoKHikqCjEpKgpAKSoKTikqCl4pKgpuKSoKfCkqCokpKgqUKSoKnikq + CqcpKgquKSoKtSkqCropKgq/KSoKwikqCsUpKgrHKSoKyCkqCsgpKgrHKSoKxSkqCsIpKgq/KSoKuikq + CrUpKgquKSoKpykqCp4pKgqUKSoKiSkqCnwpKgpuKSoKXikqCk4pKgpAKSoKMSkqCh4pKgoLKSoKAv8A + AAD/AAAA/wAAAP8AAAApKgoLKSoKQSkqCoEpKgqtKSoKxikqCtkpKgroKSoK9SkqCvspKgr8KSoK/Skq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCv0pKgr8KSoK+ykqCvUpKgroKSoK2Skq + CsYpKgqtKSoKgSkqCkEpKgoL/wAAAP8AAAApKgpYKSoK5SkqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCuUpKgpY/wAAACkqCgspKgqiKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgqiKSoKCykqCiMpKgrMKSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrMKSoKIykq + CkQpKgrgKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgrgKSoKRCkqCmEpKgrvKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgrvKSoKYSkqCnspKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr7KSoKeykqCpMpKgr+KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoKkykqCqgpKgr+KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoKqCkq + CrspKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr+KSoKuykqCsspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoKyykqCtgpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK2CkqCuMpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK4ykqCu0pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK7Skq + CvQpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK9CkqCvkpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK+SkqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/SkqCvkpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK+SkqCvQpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK9CkqCu0pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK7SkqCuMpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK4ykq + CtgpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK2CkqCsspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoKyykqCrspKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoKuykqCqgpKgr+KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoKqCkqCpMpKgr+KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoKkykq + CnspKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr7KSoKeykqCmEpKgrvKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgrvKSoKYSkqCkQpKgrgKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrgKSoKRCkqCiMpKgrMKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrMKSoKIykqCgspKgqiKSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgqiKSoKC/8A + AAApKgpYKSoK5SkqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/Skq + CuUpKgpY/wAAAP8AAAApKgoLKSoKQSkqCoEpKgqtKSoKxikqCtkpKgroKSoK9SkqCvspKgr8KSoK/Skq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCv0pKgr8KSoK+ykqCvUpKgroKSoK2Skq + CsYpKgqtKSoKgSkqCkEpKgoL/wAAAP8AAAD/AAAA/wAAACkqCgIpKgoLKSoKHikqCjEpKgpAKSoKTikq + Cl4pKgpuKSoKfCkqCokpKgqUKSoKnikqCqcpKgquKSoKtSkqCropKgq/KSoKwikqCsUpKgrHKSoKyCkq + CsgpKgrHKSoKxSkqCsIpKgq/KSoKuikqCrUpKgquKSoKpykqCp4pKgqUKSoKiSkqCnwpKgpuKSoKXikq + Ck4pKgpAKSoKMSkqCh4pKgoLKSoKAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAApKgoBKSoKAykqCgUpKgoHKSoKCSkqCgspKgoMKSoKDSkqCg4pKgoPKSoKDykq + ChApKgoQKSoKECkqChApKgoQKSoKECkqCg8pKgoPKSoKDikqCg0pKgoMKSoKCykqCgkpKgoHKSoKBSkq + CgMpKgoB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP// + /////wAA/8AAAAP/AADgAAAAAAcAAIAAAAAAAQAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAB + AACAAAAAAAEAAOAAAAAABwAA/8AAAAP/AAD///////8AAP///////wAA////////AAD///////8AACgA + AABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAApKgoBKSoKCCkqCg4pKgoTKSoKGCkqCh0pKgohKSoKJCkqCigpKgorKSoKLikqCjApKgoyKSoKNCkq + CjYpKgo3KSoKOCkqCjkpKgo5KSoKOSkqCjkpKgo5KSoKOSkqCjgpKgo3KSoKNikqCjQpKgoyKSoKMCkq + Ci4pKgorKSoKKCkqCiQpKgohKSoKHSkqChgpKgoTKSoKDikqCggpKgoB/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoDKSoKEikq + CiYpKgo5KSoKSCkqClcpKgpkKSoKcikqCoApKgqNKSoKmSkqCqQpKgqtKSoKtikqCr4pKgrFKSoKzCkq + CtIpKgrXKSoK3CkqCuApKgrjKSoK5ykqCukpKgrqKSoK6ykqCuwpKgrsKSoK6ykqCuopKgrpKSoK5ykq + CuMpKgrgKSoK3CkqCtcpKgrSKSoKzCkqCsUpKgq+KSoKtikqCq0pKgqkKSoKmSkqCo0pKgqAKSoKcikq + CmQpKgpXKSoKSCkqCjkpKgomKSoKEikqCgP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKCSkq + CikpKgpgKSoKiikqCqgpKgq9KSoKzykqCt8pKgrtKSoK+SkqCv4pKgr+KSoK/ikqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr+KSoK/ikqCv4pKgr5KSoK7SkqCt8pKgrPKSoKvSkqCqgpKgqKKSoKYCkqCikpKgoJ/wAAAP8A + AAD/AAAAKSoKCSkqCm4pKgrLKSoK6ikqCvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/Ckq + CuopKgrLKSoKbikqCgn/AAAA/wAAACkqCjApKgrIKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCsgpKgow/wAAAP8AAAApKgpdKSoK6ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrrKSoKXf8AAAApKgoHKSoKhCkq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikq + CoQpKgoHKSoKGykqCqQpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgqkKSoKGykqCi4pKgq+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoKvikqCi4pKgo/KSoK1ikqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCtYpKgo/KSoKTykq + CukpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgrpKSoKTykqCmMpKgrzKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK8ykqCmMpKgp6KSoK9SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvUpKgp6KSoKjykqCvcpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr3KSoKjykq + CqEpKgr4KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK+CkqCqEpKgqyKSoK+SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvkpKgqyKSoKwSkqCvopKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr6KSoKwSkqCs0pKgr7KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykq + Cs0pKgrYKSoK/CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvwpKgrYKSoK4ikqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr9KSoK4ikqCuspKgr9KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCuspKgryKSoK/ikq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv4pKgryKSoK9ykqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr+KSoK9ykqCvspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvspKgr9KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr9KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv///////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr9KSoK+ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykq + CvcpKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ikqCvcpKgryKSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgryKSoK6ykqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv///////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr9KSoK6ykqCuIpKgr9KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv///////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/Skq + CuIpKgrYKSoK/CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvwpKgrYKSoKzSkqCvspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv///////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr7KSoKzSkqCsEpKgr6KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ikqCsEpKgqyKSoK+Skq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv///////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvkpKgqyKSoKoSkqCvgpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr4KSoKoSkqCo8pKgr3KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK9ykqCo8pKgp6KSoK9SkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvUpKgp6KSoKYykq + CvMpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgrzKSoKYykqCk8pKgrpKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK6SkqCk8pKgo/KSoK1ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCtYpKgo/KSoKLikqCr4pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgq+KSoKLikq + ChspKgqkKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoKpCkqChspKgoHKSoKhCkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCoQpKgoH/wAAACkqCl0pKgrrKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuspKgpd/wAAAP8AAAApKgowKSoKyCkq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrIKSoKMP8A + AAD/AAAAKSoKCSkqCm4pKgrLKSoK6ikqCvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/Ckq + CuopKgrLKSoKbikqCgn/AAAA/wAAAP8AAAApKgoJKSoKKSkqCmApKgqKKSoKqCkqCr0pKgrPKSoK3ykq + Cu0pKgr5KSoK/ikqCv4pKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr+KSoK/ikqCvkpKgrtKSoK3ykq + Cs8pKgq9KSoKqCkqCoopKgpgKSoKKSkqCgn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKAykq + ChIpKgomKSoKOSkqCkgpKgpXKSoKZCkqCnIpKgqAKSoKjSkqCpkpKgqkKSoKrSkqCrYpKgq+KSoKxSkq + CswpKgrSKSoK1ykqCtwpKgrgKSoK4ykqCucpKgrpKSoK6ikqCuspKgrsKSoK7CkqCuspKgrqKSoK6Skq + CucpKgrjKSoK4CkqCtwpKgrXKSoK0ikqCswpKgrFKSoKvikqCrYpKgqtKSoKpCkqCpkpKgqNKSoKgCkq + CnIpKgpkKSoKVykqCkgpKgo5KSoKJikqChIpKgoD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoBKSoKCCkqCg4pKgoTKSoKGCkq + Ch0pKgohKSoKJCkqCigpKgorKSoKLikqCjApKgoyKSoKNCkqCjYpKgo3KSoKOCkqCjkpKgo5KSoKOSkq + CjkpKgo5KSoKOSkqCjgpKgo3KSoKNikqCjQpKgoyKSoKMCkqCi4pKgorKSoKKCkqCiQpKgohKSoKHSkq + ChgpKgoTKSoKDikqCggpKgoB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////// + //////////////////////////////////////////AAAAAAD//4AAAAAAAAH8AAAAAAAAADgAAAAAAA + AAGAAAAAAAAAAYAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAAAAAABgAAAAAAA + AAHAAAAAAAAAA/gAAAAAAAAf//AAAAAAD/////////////////////////////////////////////// + //////////////////8oAAAASAAAAJAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoIKSoKECkqChcpKgoeKSoKJSkqCiopKgowKSoKNCkq + CjkpKgo9KSoKQSkqCkQpKgpHKSoKSikqCkwpKgpOKSoKUCkqClIpKgpTKSoKVCkqClQpKgpVKSoKVSkq + ClQpKgpUKSoKUykqClIpKgpQKSoKTikqCkwpKgpKKSoKRykqCkQpKgpBKSoKPSkqCjkpKgo0KSoKMCkq + CiopKgolKSoKHikqChcpKgoQKSoKCP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKBCkqChYpKgorKSoKPSkq + Ck0pKgpbKSoKaCkqCnUpKgqCKSoKjikqCpkpKgqkKSoKrSkqCrYpKgq+KSoKxSkqCswpKgrSKSoK2Ckq + Ct0pKgriKSoK5ikqCuopKgrtKSoK8CkqCvIpKgr0KSoK9SkqCvYpKgr2KSoK9ikqCvYpKgr1KSoK9Ckq + CvIpKgrwKSoK7SkqCuopKgrmKSoK4ikqCt0pKgrYKSoK0ikqCswpKgrFKSoKvikqCrYpKgqtKSoKpCkq + CpkpKgqOKSoKgikqCnUpKgpoKSoKWykqCk0pKgo9KSoKKykqChYpKgoE/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAApKgoCKSoKECkqCjopKgpoKSoKiSkqCqQpKgq4KSoKyikqCtopKgroKSoK9Skq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv4pKgr1KSoK6CkqCtopKgrKKSoKuCkqCqQpKgqJKSoKaCkqCjopKgoQKSoKAv8AAAD/AAAA/wAAAP8A + AAApKgo4KSoKmikqCswpKgrpKSoK/SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr9KSoK6SkqCswpKgqaKSoKOP8AAAD/AAAA/wAAACkqChIpKgqLKSoK+ikq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr6KSoKiykqChL/AAAA/wAAACkqCjEpKgrDKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoKwykqCjH/AAAA/wAAACkqClApKgroKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK6Ckq + ClD/AAAAKSoKCSkqCnEpKgr4KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+CkqCnEpKgoJKSoKGCkq + CpEpKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykqCpEpKgoYKSoKJikqCq0pKgr9KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCq0pKgomKSoKMikqCscpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCscpKgoyKSoKPikqCtwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CtwpKgo+KSoKTykqCukpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCukpKgpPKSoKZikq + CuwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuwpKgpmKSoKeykqCu8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCu8pKgp7KSoKjikqCvEpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvEpKgqOKSoKnykqCvMpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvMpKgqfKSoKrykqCvUpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv///////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvUpKgqvKSoKvSkq + CvcpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvcpKgq9KSoKySkqCvgpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvgpKgrJKSoK1CkqCvopKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvopKgrUKSoK3ikqCvspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv///////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvspKgreKSoK5ikqCvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvwpKgrmKSoK7Skq + Cv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv///////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv0pKgrtKSoK8ykqCv4pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgrzKSoK+CkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv4pKgr4KSoK+ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr7KSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv///////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr+KSoK+ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr7KSoK+CkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr4KSoK8ykq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgrzKSoK7SkqCv0pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv///////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv0pKgrtKSoK5ikqCvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvwpKgrmKSoK3ikqCvspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv///////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvspKgreKSoK1CkqCvopKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv///////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvopKgrUKSoKySkq + CvgpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvgpKgrJKSoKvSkqCvcpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv///////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvcpKgq9KSoKrykqCvUpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvUpKgqvKSoKnykqCvMpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvMpKgqfKSoKjikqCvEpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvEpKgqOKSoKeykq + Cu8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCu8pKgp7KSoKZikqCuwpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuwpKgpmKSoKTykqCukpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCukpKgpPKSoKPikqCtwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CtwpKgo+KSoKMikqCscpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCscpKgoyKSoKJikq + Cq0pKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCq0pKgomKSoKGCkqCpEpKgr7KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykqCpEpKgoYKSoKCSkqCnEpKgr4KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK+CkqCnEpKgoJ/wAAACkqClApKgroKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK6Ckq + ClD/AAAA/wAAACkqCjEpKgrDKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoKwykqCjH/AAAA/wAAACkq + ChIpKgqLKSoK+ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr6KSoKiykqChL/AAAA/wAAAP8AAAApKgo4KSoKmikq + CswpKgrpKSoK/SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr9KSoK6SkqCswpKgqaKSoKOP8AAAD/AAAA/wAAAP8AAAApKgoCKSoKECkqCjopKgpoKSoKiSkq + CqQpKgq4KSoKyikqCtopKgroKSoK9SkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr1KSoK6CkqCtopKgrKKSoKuCkqCqQpKgqJKSoKaCkq + CjopKgoQKSoKAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKBCkqChYpKgorKSoKPSkq + Ck0pKgpbKSoKaCkqCnUpKgqCKSoKjikqCpkpKgqkKSoKrSkqCrYpKgq+KSoKxSkqCswpKgrSKSoK2Ckq + Ct0pKgriKSoK5ikqCuopKgrtKSoK8CkqCvIpKgr0KSoK9SkqCvYpKgr2KSoK9ikqCvYpKgr1KSoK9Ckq + CvIpKgrwKSoK7SkqCuopKgrmKSoK4ikqCt0pKgrYKSoK0ikqCswpKgrFKSoKvikqCrYpKgqtKSoKpCkq + CpkpKgqOKSoKgikqCnUpKgpoKSoKWykqCk0pKgo9KSoKKykqChYpKgoE/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAApKgoIKSoKECkqChcpKgoeKSoKJSkqCiopKgowKSoKNCkqCjkpKgo9KSoKQSkqCkQpKgpHKSoKSikq + CkwpKgpOKSoKUCkqClIpKgpTKSoKVCkqClQpKgpVKSoKVSkqClQpKgpUKSoKUykqClIpKgpQKSoKTikq + CkwpKgpKKSoKRykqCkQpKgpBKSoKPSkqCjkpKgo0KSoKMCkqCiopKgolKSoKHikqChcpKgoQKSoKCP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AAAA////////////AAAA//////// + ////AAAA////////////AAAA////////////AAAA////////////AAAA////////////AAAA//wAAAAA + AD//AAAA/AAAAAAAAAA/AAAAwAAAAAAAAAADAAAAwAAAAAAAAAADAAAAgAAAAAAAAAABAAAAgAAAAAAA + AAABAAAAgAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAgAAAAAAAAAABAAAAgAAAAAAAAAABAAAAgAAAAAAAAAABAAAAwAAAAAAAAAADAAAAwAAAAAAA + AAADAAAA/AAAAAAAAAA/AAAA//wAAAAAAD//AAAA////////////AAAA////////////AAAA//////// + ////AAAA////////////AAAA////////////AAAA////////////AAAA////////////AAAAKAAAAFAA + AACgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAApKgoHKSoKESkqChopKgojKSoKKikqCjIpKgo5KSoKPykqCkUpKgpKKSoKTykq + ClQpKgpZKSoKXCkqCmApKgpjKSoKZikqCmgpKgprKSoKbSkqCm4pKgpwKSoKcCkqCnEpKgpxKSoKcSkq + CnEpKgpwKSoKcCkqCm4pKgptKSoKaykqCmgpKgpmKSoKYykqCmApKgpcKSoKWSkqClQpKgpPKSoKSikq + CkUpKgo/KSoKOSkqCjIpKgoqKSoKIykqChopKgoRKSoKB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAApKgoIKSoKGykqCi8pKgpBKSoKUSkqCl8pKgpsKSoKeSkqCoUpKgqQKSoKmikqCqQpKgqtKSoKtSkq + Cr0pKgrEKSoKyykqCtEpKgrXKSoK3CkqCuEpKgrlKSoK6SkqCu0pKgrwKSoK8ykqCvYpKgr4KSoK+ikq + CvspKgr8KSoK/SkqCv0pKgr9KSoK/SkqCvwpKgr7KSoK+ikqCvgpKgr2KSoK8ykqCvApKgrtKSoK6Skq + CuUpKgrhKSoK3CkqCtcpKgrRKSoKyykqCsQpKgq9KSoKtSkqCq0pKgqkKSoKmikqCpApKgqFKSoKeSkq + CmwpKgpfKSoKUSkqCkEpKgovKSoKGykqCgj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAAKSoKBCkqChwpKgpIKSoKaykqCogpKgqgKSoKsykqCsUpKgrVKSoK4ykqCvApKgr8KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr8KSoK8CkqCuMpKgrVKSoKxSkqCrMpKgqgKSoKiCkqCmspKgpIKSoKHCkq + CgT/AAAA/wAAAP8AAAD/AAAA/wAAACkqChYpKgpmKSoKoikqCswpKgrrKSoK/SkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr9KSoK6ykqCswpKgqiKSoKZikqChb/AAAA/wAAAP8AAAApKgoFKSoKUCkqCtkpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrZKSoKUCkqCgX/AAAA/wAAACkq + ChcpKgqOKSoK9ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvYpKgqOKSoKF/8AAAD/AAAAKSoKKSkqCr8pKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCr8pKgop/wAAAP8AAAApKgpCKSoK4CkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK4CkqCkL/AAAAKSoKCikq + CmIpKgrsKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgrsKSoKYikqCgopKgoVKSoKgikqCvIpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvIpKgqCKSoKFSkqCh4pKgqeKSoK9ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK9ykqCp4pKgoeKSoKJykq + CrcpKgr8KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr8KSoKtykqCicpKgovKSoKzSkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrNKSoKLykqCj4pKgrcKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCtwpKgo+KSoKVCkq + CuEpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK4SkqClQpKgppKSoK5SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrlKSoKaSkqCnwpKgroKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCugpKgp8KSoKjikq + CuspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK6ykqCo4pKgqeKSoK7ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgruKSoKnikqCq0pKgrwKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvApKgqtKSoKuikq + CvMpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK8ykqCropKgrGKSoK9SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr1KSoKxikqCtApKgr3KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvcpKgrQKSoK2ikq + CvgpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK+CkqCtopKgriKSoK+ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr6KSoK4ikqCukpKgr7KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvspKgrpKSoK8Ckq + CvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/CkqCvApKgr1KSoK/SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr9KSoK9SkqCvkpKgr+KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr5KSoK/Ckq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ikqCvwpKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCvwpKgr+KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr8KSoK+Skq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ikqCvkpKgr1KSoK/SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr9KSoK9SkqCvApKgr8KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvwpKgrwKSoK6Skq + CvspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK+ykqCukpKgriKSoK+ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr6KSoK4ikqCtopKgr4KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvgpKgraKSoK0Ckq + CvcpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK9ykqCtApKgrGKSoK9SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr1KSoKxikqCropKgrzKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvMpKgq6KSoKrSkq + CvApKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK8CkqCq0pKgqeKSoK7ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgruKSoKnikqCo4pKgrrKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuspKgqOKSoKfCkq + CugpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK6CkqCnwpKgppKSoK5SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrlKSoKaSkqClQpKgrhKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuEpKgpUKSoKPikq + CtwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK3CkqCj4pKgovKSoKzSkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrNKSoKLykqCicpKgq3KSoK/CkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/CkqCrcpKgonKSoKHikq + Cp4pKgr3KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr3KSoKnikqCh4pKgoVKSoKgikqCvIpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvIpKgqCKSoKFSkqCgopKgpiKSoK7CkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK7CkqCmIpKgoK/wAAACkq + CkIpKgrgKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgrgKSoKQv8AAAD/AAAAKSoKKSkqCr8pKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCr8pKgop/wAAAP8AAAApKgoXKSoKjikqCvYpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr2KSoKjikqChf/AAAA/wAAACkq + CgUpKgpQKSoK2SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CtkpKgpQKSoKBf8AAAD/AAAA/wAAACkqChYpKgpmKSoKoikqCswpKgrrKSoK/SkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr9KSoK6ykqCswpKgqiKSoKZikqChb/AAAA/wAAAP8AAAD/AAAA/wAAACkqCgQpKgocKSoKSCkq + CmspKgqIKSoKoCkqCrMpKgrFKSoK1SkqCuMpKgrwKSoK/CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/Ckq + CvApKgrjKSoK1SkqCsUpKgqzKSoKoCkqCogpKgprKSoKSCkqChwpKgoE/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAACkqCggpKgobKSoKLykqCkEpKgpRKSoKXykqCmwpKgp5KSoKhSkq + CpApKgqaKSoKpCkqCq0pKgq1KSoKvSkqCsQpKgrLKSoK0SkqCtcpKgrcKSoK4SkqCuUpKgrpKSoK7Skq + CvApKgrzKSoK9ikqCvgpKgr6KSoK+ykqCvwpKgr9KSoK/SkqCv0pKgr9KSoK/CkqCvspKgr6KSoK+Ckq + CvYpKgrzKSoK8CkqCu0pKgrpKSoK5SkqCuEpKgrcKSoK1ykqCtEpKgrLKSoKxCkqCr0pKgq1KSoKrSkq + CqQpKgqaKSoKkCkqCoUpKgp5KSoKbCkqCl8pKgpRKSoKQSkqCi8pKgobKSoKCP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAApKgoHKSoKESkqChopKgojKSoKKikqCjIpKgo5KSoKPykqCkUpKgpKKSoKTykq + ClQpKgpZKSoKXCkqCmApKgpjKSoKZikqCmgpKgprKSoKbSkqCm4pKgpwKSoKcCkqCnEpKgpxKSoKcSkq + CnEpKgpwKSoKcCkqCm4pKgptKSoKaykqCmgpKgpmKSoKYykqCmApKgpcKSoKWSkqClQpKgpPKSoKSikq + CkUpKgo/KSoKOSkqCjIpKgoqKSoKIykqChopKgoRKSoKB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/////////////AAD/////////////AAD/////////////AAD///////////// + AAD/////////////AAD/////////////AAD/////////////AAD/////////////AAD//gAAAAAAAH// + AAD+AAAAAAAAAAB/AADgAAAAAAAAAAAHAADAAAAAAAAAAAADAACAAAAAAAAAAAABAACAAAAAAAAAAAAB + AACAAAAAAAAAAAABAACAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAAAAAAABAACAAAAAAAAAAAABAACAAAAAAAAAAAABAACAAAAAAAAAAAABAADAAAAAAAAAAAAD + AADgAAAAAAAAAAAHAAD+AAAAAAAAAAB/AAD//gAAAAAAAH//AAD/////////////AAD///////////// + AAD/////////////AAD/////////////AAD/////////////AAD/////////////AAD///////////// + AAD/////////////AAAoAAAAYAAAAMAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoCKSoKAykq + CgQpKgoEKSoKBSkqCgYpKgoHKSoKCCkqCggpKgoJKSoKCSkqCgopKgoKKSoKCykqCgspKgoMKSoKDCkq + Cg0pKgoNKSoKDSkqCg0pKgoOKSoKDikqCg4pKgoOKSoKDikqCg4pKgoOKSoKDikqCg4pKgoOKSoKDikq + Cg4pKgoOKSoKDikqCg0pKgoNKSoKDSkqCg0pKgoMKSoKDCkqCgspKgoLKSoKCikqCgopKgoJKSoKCSkq + CggpKgoIKSoKBykqCgYpKgoFKSoKBCkqCgQpKgoDKSoKAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoBKSoKAikqCgIpKgoDKSoKBCkq + CgQpKgoGKSoKDykqChspKgomKSoKMSkqCjopKgpDKSoKTCkqClUpKgpcKSoKYykqCmopKgpwKSoKdikq + CnwpKgqBKSoKhikqCoopKgqOKSoKkikqCpYpKgqYKSoKmykqCp4pKgqgKSoKoikqCqMpKgqkKSoKpSkq + CqYpKgqmKSoKpikqCqYpKgqlKSoKpCkqCqMpKgqiKSoKoCkqCp4pKgqbKSoKmCkqCpYpKgqSKSoKjikq + CoopKgqGKSoKgSkqCnwpKgp2KSoKcCkqCmopKgpjKSoKXCkqClUpKgpMKSoKQykqCjopKgoxKSoKJikq + ChspKgoPKSoKBikqCgQpKgoEKSoKAykqCgIpKgoCKSoKAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoBKSoKESkq + CiQpKgo3KSoKSCkqClcpKgpmKSoKcykqCn8pKgqLKSoKlSkqCp0pKgqlKSoKrSkqCrQpKgq7KSoKwSkq + CscpKgrNKSoK0ikqCtcpKgrbKSoK4CkqCuQpKgroKSoK6ykqCu4pKgrxKSoK9CkqCvcpKgr5KSoK+ykq + Cv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv0pKgr7KSoK+SkqCvcpKgr0KSoK8SkqCu4pKgrrKSoK6CkqCuQpKgrgKSoK2ykqCtcpKgrSKSoKzSkq + CscpKgrBKSoKuykqCrQpKgqtKSoKpSkqCp0pKgqVKSoKiykqCn8pKgpzKSoKZikqClcpKgpIKSoKNykq + CiQpKgoRKSoKAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACkq + CgEpKgoWKSoKOSkqClUpKgpsKSoKgykqCpgpKgqqKSoKvCkqCsspKgrZKSoK5ikqCvMpKgr9KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/Skq + CvMpKgrmKSoK2SkqCsspKgq8KSoKqikqCpgpKgqDKSoKbCkqClUpKgo5KSoKFikqCgH/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAAKSoKHykqCk4pKgp8KSoKrSkqCtIpKgruKSoK+ikqCvwpKgr9KSoK/Skq + Cv4pKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCv4pKgr9KSoK/SkqCvwpKgr6KSoK7ikq + CtIpKgqtKSoKfCkqCk4pKgof/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoNKSoKbCkqCtIpKgr0KSoK+ikq + Cv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv0pKgr6KSoK9CkqCtIpKgpsKSoKDf8AAAD/AAAA/wAAACkq + CgMpKgozKSoKqykqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv0pKgqrKSoKMykqCgP/AAAA/wAAACkqCgcpKgpgKSoK0SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrRKSoKYCkqCgf/AAAA/wAAACkqCgwpKgqHKSoK7Ckq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrsKSoKhykq + Cgz/AAAA/wAAACkqChopKgqnKSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr+KSoKpykqChr/AAAAKSoKBCkqCjQpKgq8KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoKvCkqCjQpKgoEKSoKCikq + ClEpKgrLKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoKyykqClEpKgoKKSoKDikqCmspKgrZKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK2SkqCmspKgoOKSoKEykqCoIpKgrlKSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK5Skq + CoIpKgoTKSoKFykqCpgpKgrxKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK8SkqCpgpKgoXKSoKGykqCqspKgr7KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykqCqspKgobKSoKJSkq + CropKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCropKgolKSoKOCkqCsMpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCsMpKgo4KSoKTCkqCskpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CskpKgpMKSoKXykqCs8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCs8pKgpfKSoKcCkqCtQpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCtQpKgpwKSoKgCkq + CtkpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCtkpKgqAKSoKkCkqCt0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCt0pKgqQKSoKnikqCuIpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CuIpKgqeKSoKqikqCuUpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuUpKgqqKSoKtikqCukpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCukpKgq2KSoKwSkq + CuwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCuwpKgrBKSoKyikqCu8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCu8pKgrKKSoK0ykqCvIpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK//////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvIpKgrTKSoK2ykqCvQpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvQpKgrbKSoK4ikqCvYpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr//////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvYpKgriKSoK6Skq + CvgpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvgpKgrpKSoK7ykqCvopKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK//////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv//////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvopKgrvKSoK8ykqCvspKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvspKgrzKSoK9ykqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr//////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv0pKgr3KSoK+ikqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv0pKgr6KSoK/Ckq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv//////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv4pKgr8KSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoK/Ckq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv//////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv4pKgr8KSoK+ikqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv0pKgr6KSoK9ykqCv0pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv0pKgr3KSoK8ykqCvspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv//////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvspKgrzKSoK7ykqCvopKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvopKgrvKSoK6Skq + CvgpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvgpKgrpKSoK4ikqCvYpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv//////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvYpKgriKSoK2ykqCvQpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvQpKgrbKSoK0ykqCvIpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvIpKgrTKSoKyikqCu8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv//////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCu8pKgrKKSoKwSkq + CuwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCuwpKgrBKSoKtikqCukpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCukpKgq2KSoKqikqCuUpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv//////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CuUpKgqqKSoKnikqCuIpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuIpKgqeKSoKkCkqCt0pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCt0pKgqQKSoKgCkq + CtkpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCtkpKgqAKSoKcCkqCtQpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCtQpKgpwKSoKXykqCs8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cs8pKgpfKSoKTCkqCskpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCskpKgpMKSoKOCkqCsMpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCsMpKgo4KSoKJSkq + CropKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCropKgolKSoKGykqCqspKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykqCqspKgobKSoKFykqCpgpKgrxKSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK8Skq + CpgpKgoXKSoKEykqCoIpKgrlKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK5SkqCoIpKgoTKSoKDikqCmspKgrZKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK2SkqCmspKgoOKSoKCikq + ClEpKgrLKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoKyykqClEpKgoKKSoKBCkqCjQpKgq8KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoKvCkqCjQpKgoE/wAAACkqChopKgqnKSoK/ikq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoKpykq + Chr/AAAA/wAAACkqCgwpKgqHKSoK7CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgrsKSoKhykqCgz/AAAA/wAAACkqCgcpKgpgKSoK0SkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrRKSoKYCkqCgf/AAAA/wAAACkq + CgMpKgozKSoKqykqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv0pKgqrKSoKMykqCgP/AAAA/wAAAP8AAAApKgoNKSoKbCkqCtIpKgr0KSoK+ikqCv0pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv0pKgr6KSoK9CkqCtIpKgpsKSoKDf8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKHykq + Ck4pKgp8KSoKrSkqCtIpKgruKSoK+ikqCvwpKgr9KSoK/SkqCv4pKgr+KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ikqCv4pKgr9KSoK/SkqCvwpKgr6KSoK7ikqCtIpKgqtKSoKfCkqCk4pKgof/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAACkqCgEpKgoWKSoKOSkqClUpKgpsKSoKgykqCpgpKgqqKSoKvCkq + CsspKgrZKSoK5ikqCvMpKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCvMpKgrmKSoK2SkqCsspKgq8KSoKqikqCpgpKgqDKSoKbCkq + ClUpKgo5KSoKFikqCgH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAApKgoBKSoKESkqCiQpKgo3KSoKSCkqClcpKgpmKSoKcykqCn8pKgqLKSoKlSkqCp0pKgqlKSoKrSkq + CrQpKgq7KSoKwSkqCscpKgrNKSoK0ikqCtcpKgrbKSoK4CkqCuQpKgroKSoK6ykqCu4pKgrxKSoK9Ckq + CvcpKgr5KSoK+ykqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv0pKgr7KSoK+SkqCvcpKgr0KSoK8SkqCu4pKgrrKSoK6CkqCuQpKgrgKSoK2ykq + CtcpKgrSKSoKzSkqCscpKgrBKSoKuykqCrQpKgqtKSoKpSkqCp0pKgqVKSoKiykqCn8pKgpzKSoKZikq + ClcpKgpIKSoKNykqCiQpKgoRKSoKAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoBKSoKAikqCgIpKgoDKSoKBCkq + CgQpKgoGKSoKDykqChspKgomKSoKMSkqCjopKgpDKSoKTCkqClUpKgpcKSoKYykqCmopKgpwKSoKdikq + CnwpKgqBKSoKhikqCoopKgqOKSoKkikqCpYpKgqYKSoKmykqCp4pKgqgKSoKoikqCqMpKgqkKSoKpSkq + CqYpKgqmKSoKpikqCqYpKgqlKSoKpCkqCqMpKgqiKSoKoCkqCp4pKgqbKSoKmCkqCpYpKgqSKSoKjikq + CoopKgqGKSoKgSkqCnwpKgp2KSoKcCkqCmopKgpjKSoKXCkqClUpKgpMKSoKQykqCjopKgoxKSoKJikq + ChspKgoPKSoKBikqCgQpKgoEKSoKAykqCgIpKgoCKSoKAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoCKSoKAykqCgQpKgoEKSoKBSkq + CgYpKgoHKSoKCCkqCggpKgoJKSoKCSkqCgopKgoKKSoKCykqCgspKgoMKSoKDCkqCg0pKgoNKSoKDSkq + Cg0pKgoOKSoKDikqCg4pKgoOKSoKDikqCg4pKgoOKSoKDikqCg4pKgoOKSoKDikqCg4pKgoOKSoKDikq + Cg0pKgoNKSoKDSkqCg0pKgoMKSoKDCkqCgspKgoLKSoKCikqCgopKgoJKSoKCSkqCggpKgoIKSoKBykq + CgYpKgoFKSoKBCkqCgQpKgoDKSoKAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////wAAAAAAAAD////+AAAAAAAAAAAAf//wAAAAAAAAAAAAD/8AAAAAAAAAAAAAAP4AAAAAAA + AAAAAAAHwAAAAAAAAAAAAAADgAAAAAAAAAAAAAABgAAAAAAAAAAAAAABgAAAAAAAAAAAAAABgAAAAAAA + AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAABgAAAAAAA + AAAAAAABgAAAAAAAAAAAAAABgAAAAAAAAAAAAAABwAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAH8AAAAAAA + AAAAAAAP/wAAAAAAAAAAAAD//+AAAAAAAAAAAAf////wAAAAAAAAD/////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACkqCgUpKgoLKSoKECkq + ChUpKgoZKSoKHikqCiIpKgomKSoKKikqCi0pKgoxKSoKNCkqCjcpKgo6KSoKPSkqCkApKgpDKSoKRSkq + CkgpKgpKKSoKTCkqCk4pKgpQKSoKUikqClMpKgpVKSoKVikqClcpKgpZKSoKWikqClspKgpcKSoKXCkq + Cl0pKgpdKSoKXikqCl4pKgpeKSoKXikqCl4pKgpeKSoKXikqCl4pKgpdKSoKXSkqClwpKgpcKSoKWykq + ClopKgpZKSoKVykqClYpKgpVKSoKUykqClIpKgpQKSoKTikqCkwpKgpKKSoKSCkqCkUpKgpDKSoKQCkq + Cj0pKgo6KSoKNykqCjQpKgoxKSoKLSkqCiopKgomKSoKIikqCh4pKgoZKSoKFSkqChApKgoLKSoKBf8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoBKSoKBCkqCgcpKgoKKSoKDSkqChApKgoSKSoKFSkq + ChcpKgoZKSoKGykqCh8pKgooKSoKNCkqCj4pKgpJKSoKUikqClwpKgpkKSoKbSkqCnUpKgp9KSoKhCkq + CospKgqSKSoKmCkqCp4pKgqkKSoKqSkqCq8pKgq0KSoKuSkqCr0pKgrBKSoKxSkqCskpKgrNKSoK0Ckq + CtMpKgrWKSoK2CkqCtspKgrdKSoK3ykqCuEpKgriKSoK4ykqCuQpKgrlKSoK5ikqCuYpKgrnKSoK5ykq + CuYpKgrmKSoK5SkqCuQpKgrjKSoK4ikqCuEpKgrfKSoK3SkqCtspKgrYKSoK1ikqCtMpKgrQKSoKzSkq + CskpKgrFKSoKwSkqCr0pKgq5KSoKtCkqCq8pKgqpKSoKpCkqCp4pKgqYKSoKkikqCospKgqEKSoKfSkq + CnUpKgptKSoKZCkqClwpKgpSKSoKSSkqCj4pKgo0KSoKKCkqCh8pKgobKSoKGSkqChcpKgoVKSoKEikq + ChApKgoNKSoKCikqCgcpKgoEKSoKAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKASkq + ChApKgoiKSoKMykqCkQpKgpTKSoKYSkqCm8pKgp7KSoKhykqCpIpKgqdKSoKpykqCq0pKgqyKSoKtykq + CrwpKgrAKSoKxSkqCskpKgrMKSoK0CkqCtQpKgrXKSoK2ykqCt4pKgrhKSoK4ykqCuYpKgrpKSoK6ykq + Cu0pKgrwKSoK8ikqCvQpKgr1KSoK9ykqCvkpKgr6KSoK/CkqCv0pKgr+KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv4pKgr9KSoK/CkqCvopKgr5KSoK9ykqCvUpKgr0KSoK8ikqCvApKgrtKSoK6ykq + CukpKgrmKSoK4ykqCuEpKgreKSoK2ykqCtcpKgrUKSoK0CkqCswpKgrJKSoKxSkqCsApKgq8KSoKtykq + CrIpKgqtKSoKpykqCp0pKgqSKSoKhykqCnspKgpvKSoKYSkqClMpKgpEKSoKMykqCiIpKgoQKSoKAf8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAAKSoKAikqChIpKgooKSoKOSkqCkcpKgpVKSoKaSkqCnwpKgqNKSoKnSkqCqwpKgq7KSoKyCkq + CtQpKgrgKSoK7CkqCvYpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK9ikqCuwpKgrgKSoK1Ckq + CsgpKgq7KSoKrCkqCp0pKgqNKSoKfCkqCmkpKgpVKSoKRykqCjkpKgooKSoKEikqCgL/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKBikqChMpKgomKSoKTCkqCnspKgqgKSoKwCkq + CtgpKgrjKSoK6SkqCuwpKgrvKSoK8ikqCvQpKgr3KSoK+SkqCvspKgr9KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCvspKgr5KSoK9ykqCvQpKgryKSoK7ykqCuwpKgrpKSoK4ykq + CtgpKgrAKSoKoCkqCnspKgpMKSoKJikqChMpKgoG/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACkq + CgEpKgovKSoKbykqCpwpKgq7KSoK0ikqCuQpKgr0KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvQpKgrkKSoK0ikqCrspKgqcKSoKbykq + Ci8pKgoB/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoBKSoKEikqCmQpKgrGKSoK9CkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvQpKgrGKSoKZCkqChIpKgoB/wAAAP8AAAD/AAAA/wAAACkq + CgopKgo1KSoKlCkqCu8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cu8pKgqUKSoKNSkqCgr/AAAA/wAAAP8AAAD/AAAAKSoKFSkqCl0pKgq4KSoK+ikqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ikqCrgpKgpdKSoKFf8AAAD/AAAA/wAAAP8A + AAApKgofKSoKgykqCtQpKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr7KSoK1CkqCoMpKgof/wAAAP8AAAD/AAAA/wAAACkqCikpKgqjKSoK7CkqCv4pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgrsKSoKoykqCin/AAAA/wAAAP8A + AAApKgoCKSoKOikqCrwpKgr8KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvwpKgq8KSoKOikqCgL/AAAAKSoKASkqCg4pKgpQKSoKzSkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCs0pKgpQKSoKDikq + CgEpKgoCKSoKHikqCmkpKgrVKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK1SkqCmkpKgoeKSoKAikqCgMpKgouKSoKgSkqCt0pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrdKSoKgSkq + Ci4pKgoDKSoKBCkqCjwpKgqWKSoK5CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCuQpKgqWKSoKPCkqCgQpKgoEKSoKSSkqCqopKgrrKSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK6ykq + CqopKgpJKSoKBCkqCgUpKgpVKSoKvSkqCvEpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrxKSoKvSkqClUpKgoFKSoKBikqCmApKgrPKSoK9ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvcpKgrPKSoKYCkqCgYpKgoHKSoKaykqCuApKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCuApKgprKSoKBykqCgwpKgp2KSoK7Skq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK7SkqCnYpKgoMKSoKFikqCoApKgr0KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr0KSoKgCkqChYpKgonKSoKiikq + CvYpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvYpKgqKKSoKJykqCjgpKgqTKSoK9ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK9ikqCpMpKgo4KSoKSCkq + CpwpKgr3KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr3KSoKnCkqCkgpKgpXKSoKpCkqCvgpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvgpKgqkKSoKVykq + CmUpKgqrKSoK+CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK+CkqCqspKgplKSoKcikqCrIpKgr5KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr5KSoKsikq + CnIpKgp/KSoKuSkqCvkpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvkpKgq5KSoKfykqCospKgrAKSoK+ikqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ikq + CsApKgqLKSoKlikqCsYpKgr6KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr6KSoKxikqCpYpKgqgKSoKyykqCvspKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvspKgrLKSoKoCkqCqopKgrRKSoK+ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK//////////////////////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykqCtEpKgqqKSoKsykqCtYpKgr8KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr8KSoK1ikqCrMpKgq8KSoK2ikqCvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvwpKgraKSoKvCkqCsQpKgrfKSoK/Ckq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/CkqCt8pKgrEKSoKyykqCuMpKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr9KSoK4ykqCsspKgrSKSoK5ykq + Cv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK//////////////////////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv0pKgrnKSoK0ikqCtkpKgrqKSoK/SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCuopKgrZKSoK3ykq + Cu0pKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr+KSoK7SkqCt8pKgrkKSoK8SkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgrxKSoK5Ckq + CuopKgrzKSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCvMpKgrqKSoK7ikqCvYpKgr+KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK//////////////////////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoK9ikq + Cu4pKgrxKSoK+CkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr4KSoK8SkqCvUpKgr5KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvkpKgr1KSoK+CkqCvspKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykqCvgpKgr6KSoK/CkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr8KSoK+ikqCvwpKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK//////////////////////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv0pKgr8KSoK/ikqCv4pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ikqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + ////////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr+KSoK/Ckq + Cv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/SkqCvwpKgr6KSoK/CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr8KSoK+ikq + CvgpKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + ////////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK//////////////////////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvspKgr4KSoK9SkqCvkpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+Skq + CvUpKgrxKSoK+CkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgr4KSoK8SkqCu4pKgr2KSoK/ikqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikq + CvYpKgruKSoK6ikqCvMpKgr+KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr+KSoK8ykqCuopKgrkKSoK8SkqCv4pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK//////////////////////////////////////////////////////////////////// + //////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv4pKgrxKSoK5CkqCt8pKgrtKSoK/ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////// + ////////////////////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikqCu0pKgrfKSoK2SkqCuopKgr9KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr///////////////////////////////////////////////////////////////////////// + /////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr9KSoK6ikqCtkpKgrSKSoK5ykqCv0pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////// + //////////////////////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv0pKgrnKSoK0ikqCsspKgrjKSoK/Skq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv////////////////////////////////////////////////////////////////////////////// + ////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/SkqCuMpKgrLKSoKxCkqCt8pKgr8KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////// + /////////////////////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////// + ////////////////////////////////////////////////////////////////////////KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr8KSoK3ykqCsQpKgq8KSoK2ikq + CvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//// + //////////////////////////////////////////////////////////////////////////////// + //8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr///////////////////////////////////////////////////////// + /////////////////////////////ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvwpKgraKSoKvCkqCrMpKgrWKSoK/CkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv////////////////////////////////////////////// + ////////////////////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////// + //////////////////////////////////////////////////////////////////8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/CkqCtYpKgqzKSoKqikq + CtEpKgr7KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////// + /////////////////////////////////////////////////////////////////////////////ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv////////////////////////////////////////////////////////////// + ////////////////////////KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr7KSoK0SkqCqopKgqgKSoKyykqCvspKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK//////////////////////////////////////////////////// + //////////////////////////////////8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr///////////////////////// + /////////////////////////////////////////////////////////////ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvspKgrLKSoKoCkq + CpYpKgrGKSoK+ikqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK+ikqCsYpKgqWKSoKiykqCsApKgr6KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr6KSoKwCkq + CospKgp/KSoKuSkqCvkpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvkpKgq5KSoKfykqCnIpKgqyKSoK+SkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK+Skq + CrIpKgpyKSoKZSkqCqspKgr4KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr4KSoKqykqCmUpKgpXKSoKpCkqCvgpKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + CvgpKgqkKSoKVykqCkgpKgqcKSoK9ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK9ykqCpwpKgpIKSoKOCkqCpMpKgr2KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr2KSoKkykqCjgpKgonKSoKiikqCvYpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvYpKgqKKSoKJykqChYpKgqAKSoK9Ckq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK9CkqCoApKgoWKSoKDCkqCnYpKgrtKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrtKSoKdikqCgwpKgoHKSoKaykq + CuApKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/SkqCuApKgprKSoKBykqCgYpKgpgKSoKzykqCvcpKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr3KSoKzykqCmApKgoGKSoKBSkq + ClUpKgq9KSoK8SkqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCvEpKgq9KSoKVSkqCgUpKgoEKSoKSSkqCqopKgrrKSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK6ykqCqopKgpJKSoKBCkq + CgQpKgo8KSoKlikqCuQpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgrkKSoKlikqCjwpKgoEKSoKAykqCi4pKgqBKSoK3SkqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCt0pKgqBKSoKLikq + CgMpKgoCKSoKHikqCmkpKgrVKSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK1SkqCmkpKgoeKSoKAikqCgEpKgoOKSoKUCkqCs0pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgrNKSoKUCkq + Cg4pKgoB/wAAACkqCgIpKgo6KSoKvCkqCvwpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/CkqCrwpKgo6KSoKAv8AAAD/AAAA/wAAACkqCikpKgqjKSoK7Ckq + Cv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv4pKgrsKSoKoykq + Cin/AAAA/wAAAP8AAAD/AAAAKSoKHykqCoMpKgrUKSoK+ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK+ykqCtQpKgqDKSoKH/8AAAD/AAAA/wAAAP8AAAApKgoVKSoKXSkq + CrgpKgr6KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr6KSoKuCkq + Cl0pKgoV/wAAAP8AAAD/AAAA/wAAACkqCgopKgo1KSoKlCkqCu8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCu8pKgqUKSoKNSkqCgr/AAAA/wAAAP8AAAD/AAAAKSoKASkq + ChIpKgpkKSoKxikqCvQpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr0KSoKxikq + CmQpKgoSKSoKAf8AAAD/AAAA/wAAAP8AAAD/AAAAKSoKASkqCi8pKgpvKSoKnCkqCrspKgrSKSoK5Ckq + CvQpKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK9CkqCuQpKgrSKSoKuykqCpwpKgpvKSoKLykqCgH/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAAKSoKBikqChMpKgomKSoKTCkqCnspKgqgKSoKwCkqCtgpKgrjKSoK6SkqCuwpKgrvKSoK8ikq + CvQpKgr3KSoK+SkqCvspKgr9KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/Skq + CvspKgr5KSoK9ykqCvQpKgryKSoK7ykqCuwpKgrpKSoK4ykqCtgpKgrAKSoKoCkqCnspKgpMKSoKJikq + ChMpKgoG/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACkqCgIpKgoSKSoKKCkq + CjkpKgpHKSoKVSkqCmkpKgp8KSoKjSkqCp0pKgqsKSoKuykqCsgpKgrUKSoK4CkqCuwpKgr2KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCvYpKgrsKSoK4CkqCtQpKgrIKSoKuykqCqwpKgqdKSoKjSkq + CnwpKgppKSoKVSkqCkcpKgo5KSoKKCkqChIpKgoC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoBKSoKECkqCiIpKgozKSoKRCkq + ClMpKgphKSoKbykqCnspKgqHKSoKkikqCp0pKgqnKSoKrSkqCrIpKgq3KSoKvCkqCsApKgrFKSoKySkq + CswpKgrQKSoK1CkqCtcpKgrbKSoK3ikqCuEpKgrjKSoK5ikqCukpKgrrKSoK7SkqCvApKgryKSoK9Ckq + CvUpKgr3KSoK+SkqCvopKgr8KSoK/SkqCv4pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykq + Cv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ykqCv8pKgr/KSoK/ikq + Cv0pKgr8KSoK+ikqCvkpKgr3KSoK9SkqCvQpKgryKSoK8CkqCu0pKgrrKSoK6SkqCuYpKgrjKSoK4Skq + Ct4pKgrbKSoK1ykqCtQpKgrQKSoKzCkqCskpKgrFKSoKwCkqCrwpKgq3KSoKsikqCq0pKgqnKSoKnSkq + CpIpKgqHKSoKeykqCm8pKgphKSoKUykqCkQpKgozKSoKIikqChApKgoB/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAApKgoBKSoKBCkqCgcpKgoKKSoKDSkqChApKgoSKSoKFSkqChcpKgoZKSoKGykq + Ch8pKgooKSoKNCkqCj4pKgpJKSoKUikqClwpKgpkKSoKbSkqCnUpKgp9KSoKhCkqCospKgqSKSoKmCkq + Cp4pKgqkKSoKqSkqCq8pKgq0KSoKuSkqCr0pKgrBKSoKxSkqCskpKgrNKSoK0CkqCtMpKgrWKSoK2Ckq + CtspKgrdKSoK3ykqCuEpKgriKSoK4ykqCuQpKgrlKSoK5ikqCuYpKgrnKSoK5ykqCuYpKgrmKSoK5Skq + CuQpKgrjKSoK4ikqCuEpKgrfKSoK3SkqCtspKgrYKSoK1ikqCtMpKgrQKSoKzSkqCskpKgrFKSoKwSkq + Cr0pKgq5KSoKtCkqCq8pKgqpKSoKpCkqCp4pKgqYKSoKkikqCospKgqEKSoKfSkqCnUpKgptKSoKZCkq + ClwpKgpSKSoKSSkqCj4pKgo0KSoKKCkqCh8pKgobKSoKGSkqChcpKgoVKSoKEikqChApKgoNKSoKCikq + CgcpKgoEKSoKAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAA + AAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAApKgoFKSoKCykqChApKgoVKSoKGSkq + Ch4pKgoiKSoKJikqCiopKgotKSoKMSkqCjQpKgo3KSoKOikqCj0pKgpAKSoKQykqCkUpKgpIKSoKSikq + CkwpKgpOKSoKUCkqClIpKgpTKSoKVSkqClYpKgpXKSoKWSkqClopKgpbKSoKXCkqClwpKgpdKSoKXSkq + Cl4pKgpeKSoKXikqCl4pKgpeKSoKXikqCl4pKgpeKSoKXSkqCl0pKgpcKSoKXCkqClspKgpaKSoKWSkq + ClcpKgpWKSoKVSkqClMpKgpSKSoKUCkqCk4pKgpMKSoKSikqCkgpKgpFKSoKQykqCkApKgo9KSoKOikq + CjcpKgo0KSoKMSkqCi0pKgoqKSoKJikqCiIpKgoeKSoKGSkqChUpKgoQKSoKCykqCgX/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////gAAA + AAAAAAAAAf/////wAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAAP/AA + AAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAA + AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA + AAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AA + AAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAA + AA/8AAAAAAAAAAAAAAAAAAA//+AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAD/////+AAAAAAAAA + AAAB//////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAFAtJREFUeJztnVtz40aShY8oUhd2t93qdttjezd2NmL3hTP//5fM8mUfZiY23Pa43XeJ + EiVR2odCEoViAgQpSsTl+yIqCiChW6nOQWaiAEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADwyBzs+xeox/2+fwGALWi+vAb7/gUAYH8M9/0LtJnxZNJ8i+8Bs+mUEHFLHmEC + P/3/IhPiQOHvqdp+aFPF/rrtOv02295+3ffqUPUPTd+733K7Tl9329t/SLsr296P8exWsl2KAAYKf4+1 + Q6df1wbJ9qBiO20HFa95/TqjUrJfZUaSbxDebFk3g7xJnQoyfa2O6NL3S4VV0cfNe83aomJ7kWxXtVun + t3ZXPoTtodURwHgyOZQ0knQs6Shpo6jZ/rCij7cPtZ2RDJz9dcZRZRplxhHvS74xeL1K9o2yM3rZGTne + v5Mv8DJx12meeOsIuEy4tn0TvXZT0V9n/U20H7e5pJvZdLooGc9HYLeSrfHdHibo8WSSiqCOMA7WbB8o + F1lqALHgvVYmeq89VPze3xe/ti5q2DSdkdPviioTqB02a/3ZfOG874l+WxNIW5kZeO1aRSOYZ/v2M72/ + sWx7XcSyUEgzHhhpVE+Dp0oBjhREmrajqB85fSraMuGWnbGrhFsl2FS4npCrxLsLMXvi3ifbGMtOcm2t + CqduSpCaycLp1xnKrbOdRhSekXhmcu3086hP29UGY70VjxoBjCeTkaRnkp5nvbVx1J9G/UnUnyiYg/We + eQxVHho/pLi3iyJfndx81wW/JvCQwuAmtYaq9+rWJ8per2tUtn+rahFbfyXpMupnUX8R9dbOJV3MptMb + bU31dCl5t1r0We5tZ2ETYnwGtoLciYL4zQCeqyh+a6dRMxOIxe+ZwCj7WQD7ZqFwRq8S/1xF8VubRc1M + 4Fy5AZxnX2OFxzSdsWjidn0tYlXu26YAAwXhvpR0Jukb5SL3RJ2e1eOUIC3cleXvcdjPAiZoEpZGHinM + 9apaQlpHiCMH246jBc8szBy+SPoo6VO2v3ExcqMIICvoHSkI/DtJP0n6WdIbSa8lvVIwhZeSXmTHxRX4 + TaviZQVADACaSNmly7pXPuKaRXwlYibpq4LQP0n6IOm9pHeSfpH0VtIf2XHX5YXDVblHr6yKPltgM1J+ + Frfw/RsF0f+cte8VDOEsay+zY05UzNMBoB5xfeFK4Wz/SeGM/1FB8L8rGMAvCmbwRXkaYVHDjb9gKcix + TgrwQkWhv0ramaRvVcz1nykYBqIH2I74UrdF0ScKenwl6QdJ/ybpPxUigrjFxvCh6oesM4BDBYH/t6S/ + Zj/sR4Wz/Qv5l+usAcDuOFKIpE8VIuy0rvBVISr4VdLfJf1NIRL4rBBFuKwT6jMFsf9Z0l8k/ZeCAZwp + FPAA4PE50PoT61whNXijkKqfK08NPpd90co3zPL+QwWBv5L0J0n/Luk/FNKAM4WzPQA0h2OFQvxAISp4 + q6Ddf40nk1sFg1ik9QCvmn6gkGu8VMj5f1So9v+QvYb4AZrJSEGjPyho9kcFDb9U0PRKTa7MAI6jb/Qn + hTTgW4U8BACay5GCVr9T0K6duI9V0wCs0PA6+wZvlBf8AKD5HClo9o2Chl8raHpF71UpwCvlFf/xY/2m + APAo2GK9HxW07KYAQ2cBUGwA3yu4x1isvgNoC7ZU/7XytTuJAdwvD/SwGsCb7IsxAID2YAbwSkHDVgNw + D0yxIqAVEs4U3AMDAGgHAwXNnikv4NcuAg4VCgYvlN/U434xADQSO4nHGj6Vs+5nIK083vpEIXx4kbVn + ypchAkDzsbt2nynX8VhB25JyzQ+TF+zOv/jpPSz5BWgXdkI/VlHLp+PJ5EhhpaCk/Kxua43tCT72YA/E + D9BujpXfxv9c+S36B1LRAEbKQ//n2RfyyC2AdmP39TxXngqM5BiA5Qx2b/+RKPwBtB3T9nMFbVtNr2AA + UnAFe9oPBgDQDWID+EZB48sb+tIU4Fl0EAYA0H7i6D42gJUUYKi8BlA4CABaS3xytxpAaRHwVMWn+WIA + AO3GIgA7uZ+qIgI4Vf7hHUQAAO0nvsL3XPmKQLcIaIuAMACAbhAbgD2t2y0CxhFAIUwAgNYSp/elEUC8 + EjB2CQwAoN2kS/zdlYBSWDFkNwIVXAIAWksc3dsNQcsVvkQAAN2mdgRgBjBODwKA1hKf3GNtSypGAHbT + ACkAQHdIUwC7yc8tAh4rOMSx+Hw/gK7gabvwQJDD5CB7ApDzscIA0CIOlK8GjA3gUMojgKFCoeBIxcd/ + kQIAtBvTsD0mzD7Re2gvSsWP+Oaz/wC6yYrOB+PJ5FghLDhScAUe/gnQTQYKGj+SdDyeTI7tAwQs719W + BwGgc9jVPqsHjO2DQE+VGwAAdBczgFNJp2YARAAA3SeNAFwDAIDustYAiAAAuokbAZyICACgL8QGcGIG + cKxwXZAIAKC7WAQwUrbqNzUA1gAAdJuBEgOwRUBEAADdJo4AjiQdEwEA9AsiAICe4kYAdi8AEQBA94kj + gOM4ArB7hIkAALqJRQDLG4LSFIAIAKDbWASwNAB7SIDdCkwEANBNDlS8JfjIMwAA6C6uAdgjgjAAgG5j + BjCSdGROEBtAq1OAi/+Z7u1nP/vLZG8/ex2MC6iYAozUxQhgn5NtnyJbB+MCGSsGYA8IPFQHIgCJyV4G + 49J7LAKwxUCjzkUABpPdh3HpPWsjgM7AZPdhXHrNSgRgZ3/7uKDWpwAxTHYfxqWXmL5N76NORwAGk92H + ceklKxGAuUFnDUBispfBuPQOM4ChpGGcAnT+RiAmuw/j0iviG4KWEcChcgPABB6JJk92xqUXmL5N78Pe + pAAxTHYfxqUXrKQAZgCdWARUFya7D+PSeeLlwMM0BcAEnogmT3bGpbPEKwHdFKA34jeY7D6MS2eJi4CF + CKBXZ/8YJrsP49JJ4ihgGIcDvTUAicleBuPSOQppQGwAvUwBYpjsPoxLp4gvAx6mEUCvowCJyV4G49IJ + 7OzvRgC9F7/BZPdhXDrBSgrQ+yKgB5Pdh3FpPW4RkPDfgcnuw7i0mkIaQAqwBia7D+PSWlZSgPjs3/mb + gbaBye7DuLSOWOMDSYPYAHpxI9C2MNl9GJdWstR8XAPg7L8GJrsP49Iq4gjgcKBiUQADWAOT3YdxaQ0F + vaf5P9SAye7DuLSGZRTgFQGhBkx2H8al8ZQWARH/hjDZfRiXxlMwgANxCXBrmOw+jEtjKejdWwOACWwI + k92HcWkcqc4H8VUAhP8AmOw+jEsjWWo+Fj4G8ECY7D6MS+NYaj6t/mMCD4TJ7sO4NIZY6wdp/g87gMnu + w7g0hkIREAN4BJjsPoxLI3ANQMIEdgqT3Ydx2SsrKUD6BuwQJrsP47JXllpnCfATwGT3YVz2ykoEAI8I + k92HcdkvGABAj8EAnoh9nm32eZZdB+OyXzCAJ4BJ7sO47B8M4JFhkvswLs1gKOk+2+ZKwI5hkvswLo3g + XipGAPclB8IWMMl9GJdGsNT6INu5T9+A7WGS+zAujSDW+n2cAkikAQ+GSe7DuDSK5UkfA9ghTHIfxqVx + LA2AFGBHMMl9GJfGUUgBBkL8D4ZJ7sO4NJal5i0FuBdrAraCSe7DuDSae0l3UhD9nXITiNMBWAOT3Idx + aSypzu/iIiDi3wAmuQ/j0ngKJjBUiAB4JsAGMMl9GJfWYClAwQDigiCUwCT3YVxawzL8V3YVIK4BQAVM + ch/GpXUsTcDO+nfKjQAcmOQ+jEvrKOh9KGmh1QVBEMEk92FcWkmcAtxZDUBRDxFMch/GpdVYBFAwgPjy + AFcExCQvg3FpLYU1AMoMYBG9QAqQwST3YVxaj2l9ocgAJAxgCZPch3HpBHERcDGUdJu9gQGISV4G49IZ + 4gjg1iKAA2EATPISGJdOERvAIjWA3poAk9yHcekUhfBfiQFYMbB3MMl9GJdOcq9M/HIigN4ZAJPch3Hp + LCspwK16agBMch/GpdOsFAHNAHqVAjDJfRiXzmMpwK0iAxhkL/YiCmCS+zAunacQ/isxAMT/yDR5kjMu + vcFMoDQC6CxMch/GpVcs839Jt4Nsw0KCzt4SzCT3YVx6hem7kALcSDpUh4uATHIfxqWXxEXAG4sALAro + XArAJPdhXHpLIQVII4BOGQCT3Idx6TVmADfKIoAb5VFAZ2oATHIfxqXXmL5N7zcWAdiS4E5EAExyH8YF + lEQAQ0nXCgZwqw4YAJPch3GBDFsDcCPp2iKAG3VkJSCTzYdxARVXAi5rANfK6wCtjwAAoJJCBOAZQKsj + AAAoJV4GXGoAANBdXAO4FgYA0AfMAK5VYgCkAADdJE4BlgYwV54GEAEAdJs7ZeG/pHlsAHY/ABEAQDeJ + bwQqGMBcRAAAfcAigLmSCMAWAxEBAHQTiwAKKcCViAAA+kIcAVwRAQD0ByIAgJ6zEgHEBkAEANBd4gig + YABXCiHBYn+/GwA8AQsFrV8pM4BLFQ2ACACgm1gEYAZw6RkAAHSXtQZABADQTUojgEsRAQD0ATOAS2UG + MBMRAEAfSCOA2WA2ndq9ADwTAKDbxLcCz2fT6XyQvXGTNADoHis6NwNYPiIoaxYFkA4AtBvT8J1yfdsj + AJcGYPcIz5XXA3g6EED7sacAWd4/V/7sj6UB2McFzZODAKD9eNq+l4oGsMjenClcIlgeBACtxU7ulwra + niu62jeIDrxVdmkg6zEAgPZjBpBqW9JqCnAl6ULBLW6EAQC0nXsFLV8qaLtwco8jgIVylyAFAOgGaQpw + pWjFLxEAQLepFQHELnEuDACgK8QGYNp2U4DYJWbCAAC6gBnATMXoXlJ5BIABAHSD2ABKI4A4TPiaHXwt + DACg7dwraHmmoO1Cep9GAHbQhYgAALqAndwvlJ/cSyOAC0lfsp4IAKD9WAQQa3slApCKBnAuDACgC5gB + nKtoAJKKEYC5xGdhAABdITaAz0qi+zQFsBrAufKbBgCgvdhNfufKawDLFGCYHRSvBDxXvhZg/sS/LADs + FrvD90JB2+7NQJpNp/ez6dSeFnoRtbmCQZAOALQD0+tcRS1fzqbT69l0utTyUArij77Ybgj6qvySoB17 + +Oi/OgA8FHv4p136s9D/yg4wzQ+cL7YVgV8lfcp6iwIAoPnY2T/WsK0ALOAZgH3xZ0l/SPqo4Bw8Lhyg + HdwpaPajgoY/q+Qk7hmAsoM/SXon6YNC+IABALSDOwXNflDQ8CeVFPQH0oFCW3Kv4B4fJP0u6b0wAIA2 + YQbwXkHDHxQ0HUUAQfdlKYAZwK8KIcTsUX9dANg1MwXt/irXAAKeAdwpFAzeS/pNIYT4qrB6CACaz7WC + Zt8paPi9gqZXoviqIuAnSf/KvoEVEjABgGZzrbyA/5uChq0GsBIBDNMXlKcA95KOFEKIt9k3OpV0Jmn0 + CL84ADyMG+Un7rcK2v1dmxhAtkDgVtLteDL5oOAi/yfpJwXh3ymYwPGj/AkAsA1zhct+v0r6p4Jmf5P0 + YTadXpR9kRcBxFwohBL/kPRcobDwTtJ3kl4oRAijqA2jdqjk8gIAbIV9ctdt1OJP+bWc34p+f1fQ7B/K + V/K6rDOAhYKr/K+C+P8h6VXSziR9q2AQzyU9y9rpBn8gAFRjt+vbTT12e+9HhSp/3H6X9Ev2XuUdvesM + QArO8s/sm44VxP2NpDeSfs7a9wpRwVnWXmbHnGQ/YyCiAYBNsE/1tbt0vyjk8h+Vr/Azof+iEJnbAz/s + w30u1/2QElH6y/7Hk8lAIewfKwj+JwUDeCPptUJE8DJrL7LjLE0wIxgopAeDGu3A2bYeoGncKReu9el2 + VVtE2xbmxw/0/JS1DwqX9t4piP+t8vU617PptGTR3qrcNzIAYzyZjBTC/ZcKZ/xvlIf/46ydJu0ka8cK + pnAcbVsbabWuENcXYiMBaBqxcNM8Pc7Xrbc2z5ptX2XtMmkzFe/t/6IQDXySdD6bTpeP+vJZlXudFKDs + D7Uni3zWavFvkG2fqFgbeK48jRjLN4uTrD9WbhjWx20kbk+GZrBQ0MI8aVdJf6lVYc9UFLY9vz/O9e0h + HhYlxMVAM5StlurXyMu3vws4ixRM+M+iFpvAadSfaDVa8MRvkUNcX7CW7tdpqvH6uu20T18rOy59r2rb + 228a6YS532A77dPXyo5L36vavq/xelW7c/ZNiKkBpCZg4rd+FvUXUR8X+y7Wn9mrqJ4uj2oA0rJuUCVi + 60dOn4b/8aXGePvQ2T50tuM2KNn3ahRezeKgxmupIZVt1zWptrGtsLztOFf2cmrvtUXJftwvSvat3Trb + t872jVYv0XmX69I+Dv1XzKM8n69L9dTZNgXYlGvlHz8ei6msGOgV/1JBmXBHKtYSquoIaS0h3U7bodOX + tSpDKTOTKhPZxjTk9Lui7Kz7UDGnr6Wi3VSwnljTsDm9np5ue7m7l7/Ps337mesKgGXFwIWz/SQP5H2E + M8vTPThoPJl4BhAbgbX4SkRZH2+XRRTbmMAmVz2qDKAs1ZHWm0DdNKIsfK8Sv+17oXFdA6hTFd+F+G27 + TPRpb4KPDSAt3t3MptMnfHr2biXbagMwxpPJgR529vYE7Im3Ssjrzuabnt2V7NepTyjZ9v6/6/7n3j9w + k9y8rKXv14kS6kYNdc6osWmsM5BaUUTyLM0nYreSfaoU4Cm4U+7eD8m1NykWaoPtOv02295+3ffqUDXJ + H1Lwi7fr9JsU+dL9h7Qyo+oELSkuNXO8s8gD9sx+zsR1aP70aP5vKKmpBgBQTfPlxYo6AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDH4/8BuJMS+BNZILUAAAAASUVORK5C + YII= + + + \ No newline at end of file diff --git a/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/FolderDialog.cs b/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/FolderDialog.cs new file mode 100644 index 0000000..1bdc04c --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/FolderDialog.cs @@ -0,0 +1,170 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.UserInterface.FolderBrowseDialog +{ + using System; + using System.IO; + using System.Runtime.InteropServices; + using System.Windows.Forms; + using FSI.BT.Tools.Global.Utilities; + using FSI.BT.Tools.SystemTrayMenu.Utilities; + + public class FolderDialog : IFolderDialog, IDisposable + { + private bool isDisposed; + + ~FolderDialog() // the finalizer + { + Dispose(false); + } + + /// + /// Gets or sets /sets folder in which dialog will be open. + /// + public string InitialFolder { get; set; } + + /// + /// Gets or sets /sets directory in which dialog will be open + /// if there is no recent directory available. + /// + public string DefaultFolder { get; set; } + + /// + /// Gets or sets selected folder. + /// + public string Folder { get; set; } + + public DialogResult ShowDialog() + { + return ShowDialog(owner: new WindowWrapper(IntPtr.Zero)); + } + + public DialogResult ShowDialog(IWin32Window owner) + { + if (Environment.OSVersion.Version.Major >= 6) + { + return ShowVistaDialog(owner); + } + else + { + return ShowLegacyDialog(owner); + } + } + + public DialogResult ShowVistaDialog(IWin32Window owner) + { + NativeMethods.IFileDialog frm = (NativeMethods.IFileDialog)new NativeMethods.FileOpenDialogRCW(); + frm.GetOptions(out uint options); + options |= NativeMethods.FOS_PICKFOLDERS | + NativeMethods.FOS_FORCEFILESYSTEM | + NativeMethods.FOS_NOVALIDATE | + NativeMethods.FOS_NOTESTFILECREATE | + NativeMethods.FOS_DONTADDTORECENT; + frm.SetOptions(options); + if (InitialFolder != null) + { + Guid riid = new("43826D1E-E718-42EE-BC55-A1E261C37BFE"); // IShellItem + if (NativeMethods.SHCreateItemFromParsingName( + InitialFolder, + IntPtr.Zero, + ref riid, + out NativeMethods.IShellItem directoryShellItem) == NativeMethods.S_OK) + { + frm.SetFolder(directoryShellItem); + } + } + + if (DefaultFolder != null) + { + Guid riid = new("43826D1E-E718-42EE-BC55-A1E261C37BFE"); // IShellItem + if (NativeMethods.SHCreateItemFromParsingName( + DefaultFolder, + IntPtr.Zero, + ref riid, + out NativeMethods.IShellItem directoryShellItem) == NativeMethods.S_OK) + { + frm.SetDefaultFolder(directoryShellItem); + } + } + + if (owner != null && frm.Show(owner.Handle) == NativeMethods.S_OK) + { + try + { + if (frm.GetResult(out NativeMethods.IShellItem shellItem) == NativeMethods.S_OK) + { + if (shellItem.GetDisplayName( + NativeMethods.SIGDN_FILESYSPATH, + out IntPtr pszString) == NativeMethods.S_OK) + { + if (pszString != IntPtr.Zero) + { + try + { + Folder = Marshal.PtrToStringAuto(pszString); + return DialogResult.OK; + } + finally + { + Marshal.FreeCoTaskMem(pszString); + } + } + } + } + } + catch (Exception ex) + { + Log.Warn("Folder Dialog failed", ex); + } + } + + return DialogResult.Cancel; + } + + public DialogResult ShowLegacyDialog(IWin32Window owner) + { + using SaveFileDialog frm = new() + { + CheckFileExists = false, + CheckPathExists = true, + CreatePrompt = false, + Filter = "|" + Guid.Empty.ToString(), + FileName = "any", + }; + if (InitialFolder != null) + { + frm.InitialDirectory = InitialFolder; + } + + frm.OverwritePrompt = false; + frm.Title = Global.Utilities.Translator.GetText("Select directory"); + frm.ValidateNames = false; + if (frm.ShowDialog(owner) == DialogResult.OK) + { + Folder = Path.GetDirectoryName(frm.FileName); + return DialogResult.OK; + } + else + { + return DialogResult.Cancel; + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!isDisposed) + { + } + + isDisposed = true; + } + } +} diff --git a/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/IFolderDialog.cs b/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/IFolderDialog.cs new file mode 100644 index 0000000..792fece --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/IFolderDialog.cs @@ -0,0 +1,27 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.UserInterface.FolderBrowseDialog +{ + using System.Windows.Forms; + + public interface IFolderDialog + { + string InitialFolder { get; set; } + + string DefaultFolder { get; set; } + + string Folder { get; set; } + + DialogResult ShowDialog(); + + DialogResult ShowDialog(IWin32Window owner); + + DialogResult ShowVistaDialog(IWin32Window owner); + + DialogResult ShowLegacyDialog(IWin32Window owner); + + void Dispose(); + } +} diff --git a/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/NativeMethods.cs b/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/NativeMethods.cs new file mode 100644 index 0000000..f3d920f --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/NativeMethods.cs @@ -0,0 +1,146 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.UserInterface.FolderBrowseDialog +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + + internal static class NativeMethods + { + public const uint FOS_PICKFOLDERS = 0x00000020; + public const uint FOS_FORCEFILESYSTEM = 0x00000040; + public const uint FOS_NOVALIDATE = 0x00000100; + public const uint FOS_NOTESTFILECREATE = 0x00010000; + public const uint FOS_DONTADDTORECENT = 0x02000000; + + public const uint S_OK = 0x0000; + + public const uint SIGDN_FILESYSPATH = 0x80058000; + + [ComImport] + [Guid("42F85136-DB7E-439C-85F1-E4075D135FC8")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IFileDialog + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [PreserveSig] + uint Show([In, Optional] IntPtr hwndOwner); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetFileTypes([In] uint cFileTypes, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr rgFilterSpec); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetFileTypeIndex([In] uint iFileType); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetFileTypeIndex(out uint piFileType); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint Advise( + [In, MarshalAs(UnmanagedType.Interface)] IntPtr pfde, + out uint pdwCookie); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint Unadvise([In] uint dwCookie); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetOptions([In] uint fos); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetOptions(out uint fos); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetDefaultFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] string pszName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetTitle([In, MarshalAs(UnmanagedType.LPWStr)] string pszTitle); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetOkButtonLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszText); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetFileNameLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint AddPlace([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, uint fdap); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetDefaultExtension([In, MarshalAs(UnmanagedType.LPWStr)] + string pszDefaultExtension); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint Close([MarshalAs(UnmanagedType.Error)] uint hr); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetClientGuid([In] ref Guid guid); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint ClearClientData(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint SetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter); + } + + [ComImport] + [Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IShellItem + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint BindToHandler( + [In] IntPtr pbc, + [In] ref Guid rbhid, + [In] ref Guid riid, + [Out, MarshalAs(UnmanagedType.Interface)] out IntPtr ppvOut); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetParent([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetDisplayName([In] uint sigdnName, out IntPtr ppszName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint GetAttributes([In] uint sfgaoMask, out uint psfgaoAttribs); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + uint Compare([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, [In] uint hint, out int piOrder); + } + + [DllImport("shell32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] + internal static extern int SHCreateItemFromParsingName( + [MarshalAs(UnmanagedType.LPWStr)] string pszPath, + IntPtr pbc, + ref Guid riid, + [MarshalAs(UnmanagedType.Interface)] out IShellItem ppv); + + [ComImport] + [ClassInterface(ClassInterfaceType.None)] + [TypeLibType(TypeLibTypeFlags.FCanCreate)] + [Guid("DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7")] + internal class FileOpenDialogRCW + { + } + } +} diff --git a/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/WindowWrapper.cs b/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/WindowWrapper.cs new file mode 100644 index 0000000..45f4e2f --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/FolderBrowseDialog/WindowWrapper.cs @@ -0,0 +1,25 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.UserInterface.FolderBrowseDialog +{ + using System; + + public class WindowWrapper : System.Windows.Forms.IWin32Window + { + /// + /// Initializes a new instance of the class. + /// + /// Handle to wrap. + public WindowWrapper(IntPtr handle) + { + Handle = handle; + } + + /// + /// Gets original ptr. + /// + public IntPtr Handle { get; } + } +} diff --git a/FSI.BT.Tools/Global/UserInterface/HotkeyTextboxControl/EventDelay.cs b/FSI.BT.Tools/Global/UserInterface/HotkeyTextboxControl/EventDelay.cs new file mode 100644 index 0000000..544661f --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/HotkeyTextboxControl/EventDelay.cs @@ -0,0 +1,32 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.UserInterface.HotkeyTextboxControl +{ + using System; + + public class EventDelay + { + private readonly long waitTime; + private long lastCheck; + + public EventDelay(long ticks) + { + waitTime = ticks; + } + + public bool Check() + { +#pragma warning disable CA2002 + lock (this) +#pragma warning restore CA2002 + { + long now = DateTime.Now.Ticks; + bool isPassed = now - lastCheck > waitTime; + lastCheck = now; + return isPassed; + } + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Global/UserInterface/HotkeyTextboxControl/HotkeyControl.cs b/FSI.BT.Tools/Global/UserInterface/HotkeyTextboxControl/HotkeyControl.cs new file mode 100644 index 0000000..cf6f2b8 --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/HotkeyTextboxControl/HotkeyControl.cs @@ -0,0 +1,604 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.UserInterface.HotkeyTextboxControl +{ + using System; + using System.Collections.Generic; + using System.Text; + using System.Windows.Forms; + using FSI.BT.Tools.Global.DllImports; + using FSI.BT.Tools.Global.Utilities; + using FSI.BT.Tools.SystemTrayMenu.Utilities; + + /// + /// A simple control that allows the user to select pretty much any valid hotkey combination + /// See: http://www.codeproject.com/KB/buttons/hotkeycontrol.aspx + /// But is modified to fit in Greenshot, and have localized support. + /// modfied to fit SystemTrayMenu. + /// + public sealed class HotkeyControl : TextBox + { + private static readonly bool IsWindows7OrOlder = Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 1; + private static readonly IntPtr HotkeyHwnd = (IntPtr)0x0000000000000000; + + + // Holds the list of hotkeys + private static readonly IDictionary KeyHandlers = new Dictionary(); + private static int hotKeyCounter = 1; + + // ArrayLists used to enforce the use of proper modifiers. + // Shift+A isn't a valid hotkey, for instance, as it would screw up when the user is typing. + private readonly IList needNonShiftModifier = new List(); + private readonly IList needNonAltGrModifier = new List(); + + private readonly ContextMenuStrip dummy = new(); + + // These variables store the current hotkey and modifier(s) + private Keys hotkey = Keys.None; + private Keys modifiers = Keys.None; + + /// + /// Initializes a new instance of the class. + /// + public HotkeyControl() + { + ContextMenuStrip = dummy; // Disable right-clicking + Text = string.Empty; + + // Handle events that occurs when keys are pressed + KeyPress += HotkeyControl_KeyPress; + KeyUp += HotkeyControl_KeyUp; + KeyDown += HotkeyControl_KeyDown; + + PopulateModifierLists(); + } + + public delegate void HotKeyHandler(); + + private enum Modifiers + { + NONE = 0, + ALT = 1, + CTRL = 2, + SHIFT = 4, + WIN = 8, + NOREPEAT = 0x4000, + } + + private enum MapType : uint + { + MAPVK_VK_TO_VSC = 0, // The uCode parameter is a virtual-key code and is translated into a scan code. If it is a virtual-key code that does not distinguish between left- and right-hand keys, the left-hand scan code is returned. If there is no translation, the function returns 0. + MAPVK_VSC_TO_VK = 1, // The uCode parameter is a scan code and is translated into a virtual-key code that does not distinguish between left- and right-hand keys. If there is no translation, the function returns 0. + MAPVK_VK_TO_CHAR = 2, // The uCode parameter is a virtual-key code and is translated into an unshifted character value in the low order word of the return value. Dead keys (diacritics) are indicated by setting the top bit of the return value. If there is no translation, the function returns 0. + MAPVK_VSC_TO_VK_EX = 3, // The uCode parameter is a scan code and is translated into a virtual-key code that distinguishes between left- and right-hand keys. If there is no translation, the function returns 0. + MAPVK_VK_TO_VSC_EX = 4, // The uCode parameter is a virtual-key code and is translated into a scan code. If it is a virtual-key code that does not distinguish between left- and right-hand keys, the left-hand scan code is returned. If the scan code is an extended scan code, the high byte of the uCode value can contain either 0xe0 or 0xe1 to specify the extended scan code. If there is no translation, the function returns 0. + } + + /// + /// Gets or sets used to make sure that there is no right-click menu available. + /// + public override ContextMenuStrip ContextMenuStrip + { + get => dummy; + set => base.ContextMenuStrip = dummy; + } + + /// + /// Gets or sets a value indicating whether forces the control to be non-multiline. + /// + public override bool Multiline + { + get => base.Multiline; + set => base.Multiline = false; + } + + /// + /// Gets or sets used to get/set the hotkey (e.g. Keys.A). + /// + public Keys Hotkey + { + get => hotkey; + set + { + hotkey = value; + Redraw(true); + } + } + + /// + /// Gets or sets used to get/set the modifier keys (e.g. Keys.Alt | Keys.Control). + /// + public Keys HotkeyModifiers + { + get => modifiers; + set + { + modifiers = value; + Redraw(true); + } + } + + public static string HotkeyToString(Keys modifierKeyCode, Keys virtualKeyCode) + { + return HotkeyModifiersToString(modifierKeyCode) + virtualKeyCode; + } + + public static string HotkeyModifiersToString(Keys modifierKeyCode) + { + StringBuilder hotkeyString = new(); + if ((modifierKeyCode & Keys.Alt) > 0) + { + hotkeyString.Append("Alt").Append(" + "); + } + + if ((modifierKeyCode & Keys.Control) > 0) + { + hotkeyString.Append("Ctrl").Append(" + "); + } + + if ((modifierKeyCode & Keys.Shift) > 0) + { + hotkeyString.Append("Shift").Append(" + "); + } + + if (modifierKeyCode == Keys.LWin || modifierKeyCode == Keys.RWin) + { + hotkeyString.Append("Win").Append(" + "); + } + + return hotkeyString.ToString(); + } + + public static string HotkeyToLocalizedString(Keys modifierKeyCode, Keys virtualKeyCode) + { + return HotkeyModifiersToLocalizedString(modifierKeyCode) + GetKeyName(virtualKeyCode); + } + + public static string HotkeyModifiersToLocalizedString(Keys modifierKeyCode) + { + StringBuilder hotkeyString = new(); + if ((modifierKeyCode & Keys.Alt) > 0) + { + hotkeyString.Append(GetKeyName(Keys.Alt)).Append(" + "); + } + + if ((modifierKeyCode & Keys.Control) > 0) + { + hotkeyString.Append(GetKeyName(Keys.Control)).Append(" + "); + } + + if ((modifierKeyCode & Keys.Shift) > 0) + { + hotkeyString.Append(GetKeyName(Keys.Shift)).Append(" + "); + } + + if (modifierKeyCode == Keys.LWin || modifierKeyCode == Keys.RWin) + { + hotkeyString.Append("Win").Append(" + "); + } + + return hotkeyString.ToString(); + } + + public static Keys HotkeyModifiersFromString(string modifiersString) + { + Keys modifiers = Keys.None; + if (!string.IsNullOrEmpty(modifiersString)) + { + if (modifiersString.ToUpperInvariant().Contains("ALT+", StringComparison.InvariantCulture)) + { + modifiers |= Keys.Alt; + } + + if (modifiersString.ToUpperInvariant().Contains("CTRL+", StringComparison.InvariantCulture) || + modifiersString.ToUpperInvariant().Contains("STRG+", StringComparison.InvariantCulture)) + { + modifiers |= Keys.Control; + } + + if (modifiersString.ToUpperInvariant().Contains("SHIFT+", StringComparison.InvariantCulture)) + { + modifiers |= Keys.Shift; + } + + if (modifiersString.ToUpperInvariant().Contains("WIN+", StringComparison.InvariantCulture)) + { + modifiers |= Keys.LWin; + } + } + + return modifiers; + } + + public static Keys HotkeyFromString(string hotkey) + { + Keys key = Keys.None; + if (!string.IsNullOrEmpty(hotkey)) + { + if (hotkey.LastIndexOf('+') > 0) + { + hotkey = hotkey.Remove(0, hotkey.LastIndexOf('+') + 1).Trim(); + } + + try + { + hotkey = hotkey. + Replace("PgDn", "PageDown", StringComparison.InvariantCulture). + Replace("PgUp", "PageUp", StringComparison.InvariantCulture); + key = (Keys)Enum.Parse(typeof(Keys), hotkey); + } + catch (ArgumentException ex) + { + Log.Warn($"{hotkey} can not be parsed", ex); + } + } + + return key; + } + + /// + /// Register a hotkey. + /// + /// The modifier, e.g.: Modifiers.CTRL, Modifiers.NONE or Modifiers.ALT . + /// The virtual key code. + /// A HotKeyHandler, this will be called to handle the hotkey press. + /// the hotkey number, -1 if failed. + public static int RegisterHotKey(Keys modifierKeyCode, Keys virtualKeyCode, HotKeyHandler handler) + { + if (virtualKeyCode == Keys.None) + { + return 0; + } + + // Convert Modifiers to fit HKM_SETHOTKEY + uint modifiers = 0; + if ((modifierKeyCode & Keys.Alt) > 0) + { + modifiers |= (uint)Modifiers.ALT; + } + + if ((modifierKeyCode & Keys.Control) > 0) + { + modifiers |= (uint)Modifiers.CTRL; + } + + if ((modifierKeyCode & Keys.Shift) > 0) + { + modifiers |= (uint)Modifiers.SHIFT; + } + + if (modifierKeyCode == Keys.LWin || modifierKeyCode == Keys.RWin) + { + modifiers |= (uint)Modifiers.WIN; + } + + if (IsWindows7OrOlder) + { + modifiers |= (uint)Modifiers.NOREPEAT; + } + + if (NativeMethods.User32RegisterHotKey(HotkeyHwnd, hotKeyCounter, modifiers, (uint)virtualKeyCode)) + { + KeyHandlers.Add(hotKeyCounter, handler); + return hotKeyCounter++; + } + else + { + Log.Info($"Couldn't register hotkey modifier {modifierKeyCode} virtualKeyCode {virtualKeyCode}"); + return -1; + } + } + + public static void UnregisterHotkeys() + { + foreach (int hotkey in KeyHandlers.Keys) + { + NativeMethods.User32UnregisterHotKey(HotkeyHwnd, hotkey); + } + + KeyHandlers.Clear(); + } + + public static string GetKeyName(Keys givenKey) + { + StringBuilder keyName = new(); + const uint numpad = 55; + + Keys virtualKey = givenKey; + string keyString = string.Empty; + + // Make VC's to real keys + switch (virtualKey) + { + case Keys.Alt: + virtualKey = Keys.LMenu; + break; + case Keys.Control: + virtualKey = Keys.ControlKey; + break; + case Keys.Shift: + virtualKey = Keys.LShiftKey; + break; + case Keys.Multiply: + if (NativeMethods.User32GetKeyNameText(numpad << 16, keyName, 100) > 0) + { + keyString = keyName.ToString().Replace("*", string.Empty, StringComparison.InvariantCulture).Trim().ToLowerInvariant(); + if (keyString.Contains('(')) + { + return "* " + keyString; + } + + keyString = keyString[..1].ToUpperInvariant() + keyString[1..].ToLowerInvariant(); + } + + return keyString + " *"; + case Keys.Divide: + if (NativeMethods.User32GetKeyNameText(numpad << 16, keyName, 100) > 0) + { + keyString = keyName.ToString().Replace("*", string.Empty, StringComparison.InvariantCulture).Trim().ToLowerInvariant(); + if (keyString.Contains('(')) + { + return "/ " + keyString; + } + + keyString = keyString[..1].ToUpperInvariant() + keyString[1..].ToLowerInvariant(); + } + + return keyString + " /"; + } + + uint scanCode = NativeMethods.User32MapVirtualKey((uint)virtualKey, (uint)MapType.MAPVK_VK_TO_VSC); + + // because MapVirtualKey strips the extended bit for some keys + switch (virtualKey) + { + case Keys.Left: + case Keys.Up: + case Keys.Right: + case Keys.Down: // arrow keys + case Keys.Prior: + case Keys.Next: // page up and page down + case Keys.End: + case Keys.Home: + case Keys.Insert: + case Keys.Delete: + case Keys.NumLock: + scanCode |= 0x100; // set extended bit + break; + case Keys.PrintScreen: // PrintScreen + scanCode = 311; + break; + case Keys.Pause: // PrintScreen + scanCode = 69; + break; + } + + scanCode |= 0x200; + if (NativeMethods.User32GetKeyNameText(scanCode << 16, keyName, 100) != 0) + { + string visibleName = keyName.ToString(); + if (visibleName.Length > 1) + { + visibleName = visibleName[..1] + visibleName[1..].ToLowerInvariant(); + } + + return visibleName; + } + else + { + return givenKey.ToString(); + } + } + + /// + /// Clears the current hotkey and resets the TextBox. + /// + public void ResetHotkey() + { + hotkey = Keys.None; + modifiers = Keys.None; + Redraw(); + } + + /// + /// Used to get/set the hotkey (e.g. Keys.A). + /// + /// hotkey. + public void SetHotkey(string hotkey) + { + this.hotkey = HotkeyFromString(hotkey); + modifiers = HotkeyModifiersFromString(hotkey); + Redraw(true); + } + + public override string ToString() + { + return HotkeyToString(HotkeyModifiers, Hotkey); + } + + /// + /// Handles some misc keys, such as Ctrl+Delete and Shift+Insert. + /// + /// msg. + /// keyData. + /// bool if handled. + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if (keyData == Keys.Delete || keyData == (Keys.Control | Keys.Delete)) + { + ResetHotkey(); + return true; + } + + // Paste + if (keyData == (Keys.Shift | Keys.Insert)) + { + return true; // Don't allow + } + + // Allow the rest + return base.ProcessCmdKey(ref msg, keyData); + } + + /// + /// Redraws the TextBox when necessary. + /// + /// Specifies whether this function was called by the Hotkey/HotkeyModifiers properties or by the user. + private void Redraw(bool bCalledProgramatically = false) + { + // No hotkey set + if (hotkey == Keys.None) + { + Text = string.Empty; + return; + } + + // Only validate input if it comes from the user + if (bCalledProgramatically == false) + { + // No modifier or shift only, AND a hotkey that needs another modifier + if ((modifiers == Keys.Shift || modifiers == Keys.None) && needNonShiftModifier.Contains((int)hotkey)) + { + if (modifiers == Keys.None) + { + // Set Ctrl+Alt as the modifier unless Ctrl+Alt+ won't work... + if (needNonAltGrModifier.Contains((int)hotkey) == false) + { + modifiers = Keys.Alt | Keys.Control; + } + else + { + // ... in that case, use Shift+Alt instead. + modifiers = Keys.Alt | Keys.Shift; + } + } + else + { + // User pressed Shift and an invalid key (e.g. a letter or a number), + // that needs another set of modifier keys + hotkey = Keys.None; + Text = string.Empty; + return; + } + } + + // Check all Ctrl+Alt keys + if ((modifiers == (Keys.Alt | Keys.Control)) && needNonAltGrModifier.Contains((int)hotkey)) + { + // Ctrl+Alt+4 etc won't work; reset hotkey and tell the user + hotkey = Keys.None; + Text = string.Empty; + return; + } + } + + // I have no idea why this is needed, but it is. Without this code, pressing only Ctrl + // will show up as "Control + ControlKey", etc. + if (hotkey == Keys.Menu /* Alt */ || hotkey == Keys.ShiftKey || hotkey == Keys.ControlKey) + { + hotkey = Keys.None; + } + + Text = HotkeyToLocalizedString(modifiers, hotkey); + } + + /// + /// Populates the ArrayLists specifying disallowed hotkeys + /// such as Shift+A, Ctrl+Alt+4 (would produce a dollar sign) etc. + /// + private void PopulateModifierLists() + { + // Shift + 0 - 9, A - Z + for (Keys k = Keys.D0; k <= Keys.Z; k++) + { + needNonShiftModifier.Add((int)k); + } + + // Shift + Numpad keys + for (Keys k = Keys.NumPad0; k <= Keys.NumPad9; k++) + { + needNonShiftModifier.Add((int)k); + } + + // Shift + Misc (,;<./ etc) + for (Keys k = Keys.Oem1; k <= Keys.OemBackslash; k++) + { + needNonShiftModifier.Add((int)k); + } + + // Shift + Space, PgUp, PgDn, End, Home + for (Keys k = Keys.Space; k <= Keys.Home; k++) + { + needNonShiftModifier.Add((int)k); + } + + // Misc keys that we can't loop through + needNonShiftModifier.Add((int)Keys.Insert); + needNonShiftModifier.Add((int)Keys.Help); + needNonShiftModifier.Add((int)Keys.Multiply); + needNonShiftModifier.Add((int)Keys.Add); + needNonShiftModifier.Add((int)Keys.Subtract); + needNonShiftModifier.Add((int)Keys.Divide); + needNonShiftModifier.Add((int)Keys.Decimal); + needNonShiftModifier.Add((int)Keys.Return); + needNonShiftModifier.Add((int)Keys.Escape); + needNonShiftModifier.Add((int)Keys.NumLock); + + // Ctrl+Alt + 0 - 9 + for (Keys k = Keys.D0; k <= Keys.D9; k++) + { + needNonAltGrModifier.Add((int)k); + } + } + + /// + /// Fires when a key is pushed down. Here, we'll want to update the text in the box + /// to notify the user what combination is currently pressed. + /// + private void HotkeyControl_KeyDown(object sender, KeyEventArgs e) + { + // Clear the current hotkey + if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete) + { + ResetHotkey(); + } + else + { + modifiers = e.Modifiers; + hotkey = e.KeyCode; + Redraw(); + } + } + + /// + /// Fires when all keys are released. If the current hotkey isn't valid, reset it. + /// Otherwise, do nothing and keep the text and hotkey as it was. + /// + private void HotkeyControl_KeyUp(object sender, KeyEventArgs e) + { + // Somehow the PrintScreen only comes as a keyup, therefore we handle it here. + if (e.KeyCode == Keys.PrintScreen) + { + modifiers = e.Modifiers; + hotkey = e.KeyCode; + Redraw(); + } + + if (hotkey == Keys.None && ModifierKeys == Keys.None) + { + ResetHotkey(); + } + } + + /// + /// Prevents the letter/whatever entered to show up in the TextBox + /// Without this, a "A" key press would appear as "aControl, Alt + A". + /// + private void HotkeyControl_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = true; + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Global/UserInterface/Settings.Designer.cs b/FSI.BT.Tools/Global/UserInterface/Settings.Designer.cs new file mode 100644 index 0000000..8d9478c --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/Settings.Designer.cs @@ -0,0 +1,5523 @@ +using FSI.BT.Tools.Global.UserInterface.HotkeyTextboxControl; + +namespace FSI.BT.Tools.Global.UserInterface +{ + partial class SettingsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tableLayoutPanelMain = new System.Windows.Forms.TableLayoutPanel(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.tabPageGeneral = new System.Windows.Forms.TabPage(); + this.tableLayoutPanelGeneral = new System.Windows.Forms.TableLayoutPanel(); + this.buttonGeneralDefault = new System.Windows.Forms.Button(); + this.groupBoxFolder = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelFolder = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanelChangeFolder = new System.Windows.Forms.TableLayoutPanel(); + this.buttonChangeFolder = new System.Windows.Forms.Button(); + this.buttonOpenFolder = new System.Windows.Forms.Button(); + this.checkBoxSetFolderByWindowsContextMenu = new System.Windows.Forms.CheckBox(); + this.textBoxFolder = new System.Windows.Forms.TextBox(); + this.tableLayoutPanelRelativeFolderOpenAssembly = new System.Windows.Forms.TableLayoutPanel(); + this.buttonChangeRelativeFolder = new System.Windows.Forms.Button(); + this.buttonOpenAssemblyLocation = new System.Windows.Forms.Button(); + this.groupBoxConfigAndLogfile = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelConfigAndLogfile = new System.Windows.Forms.TableLayoutPanel(); + this.checkBoxSaveLogFileInApplicationDirectory = new System.Windows.Forms.CheckBox(); + this.checkBoxSaveConfigInApplicationDirectory = new System.Windows.Forms.CheckBox(); + this.groupBoxAutostart = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.checkBoxCheckForUpdates = new System.Windows.Forms.CheckBox(); + this.tableLayoutPanelAutostart = new System.Windows.Forms.TableLayoutPanel(); + this.buttonAddStartup = new System.Windows.Forms.Button(); + this.labelStartupStatus = new System.Windows.Forms.Label(); + this.checkBoxAutostart = new System.Windows.Forms.CheckBox(); + this.groupBoxHotkey = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelHotkey = new System.Windows.Forms.TableLayoutPanel(); + this.textBoxHotkeyPlaceholder = new System.Windows.Forms.TextBox(); + this.buttonHotkeyDefault = new System.Windows.Forms.Button(); + this.groupBoxLanguage = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelLanguage = new System.Windows.Forms.TableLayoutPanel(); + this.comboBoxLanguage = new System.Windows.Forms.ComboBox(); + this.tabPageSizeAndLocation = new System.Windows.Forms.TabPage(); + this.tableLayoutPanelSizeAndLocation = new System.Windows.Forms.TableLayoutPanel(); + this.groupBoxSubMenuAppearAt = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.numericUpDownOverlappingOffsetPixels = new System.Windows.Forms.NumericUpDown(); + this.labelOverlappingByPixelsOffset = new System.Windows.Forms.Label(); + this.radioButtonOverlapping = new System.Windows.Forms.RadioButton(); + this.radioButtonNextToPreviousMenu = new System.Windows.Forms.RadioButton(); + this.buttonSizeAndLocationDefault = new System.Windows.Forms.Button(); + this.groupBoxMenuAppearAt = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelMenuAppearAt = new System.Windows.Forms.TableLayoutPanel(); + this.radioButtonUseCustomLocation = new System.Windows.Forms.RadioButton(); + this.radioButtonAppearAtTheBottomLeft = new System.Windows.Forms.RadioButton(); + this.radioButtonAppearAtTheBottomRight = new System.Windows.Forms.RadioButton(); + this.radioButtonAppearAtMouseLocation = new System.Windows.Forms.RadioButton(); + this.groupBoxSize = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelSize = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanelIconSizeInPercent = new System.Windows.Forms.TableLayoutPanel(); + this.numericUpDownIconSizeInPercent = new System.Windows.Forms.NumericUpDown(); + this.labelIconSizeInPercent = new System.Windows.Forms.Label(); + this.tableLayoutPanelRowHeighteInPercentage = new System.Windows.Forms.TableLayoutPanel(); + this.numericUpDownRowHeighteInPercentage = new System.Windows.Forms.NumericUpDown(); + this.labelRowHeightInPercentage = new System.Windows.Forms.Label(); + this.tableLayoutPanelSizeInPercent = new System.Windows.Forms.TableLayoutPanel(); + this.numericUpDownSizeInPercent = new System.Windows.Forms.NumericUpDown(); + this.labelSizeInPercent = new System.Windows.Forms.Label(); + this.tableLayoutPanelMenuHeight = new System.Windows.Forms.TableLayoutPanel(); + this.numericUpDownMenuHeight = new System.Windows.Forms.NumericUpDown(); + this.labelMaxMenuHeight = new System.Windows.Forms.Label(); + this.tableLayoutPanelMaxMenuWidth = new System.Windows.Forms.TableLayoutPanel(); + this.numericUpDownMenuWidth = new System.Windows.Forms.NumericUpDown(); + this.labelMaxMenuWidth = new System.Windows.Forms.Label(); + this.tabPageAdvanced = new System.Windows.Forms.TabPage(); + this.tableLayoutPanelAdvanced = new System.Windows.Forms.TableLayoutPanel(); + this.groupBoxOptionalFeatures = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.checkBoxShowInTaskbar = new System.Windows.Forms.CheckBox(); + this.checkBoxSendHotkeyInsteadKillOtherInstances = new System.Windows.Forms.CheckBox(); + this.checkBoxSupportGamepad = new System.Windows.Forms.CheckBox(); + this.checkBoxResolveLinksToFolders = new System.Windows.Forms.CheckBox(); + this.groupBoxInternetShortcutIcons = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelInternetShortcutIcons = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanelChangeIcoFolder = new System.Windows.Forms.TableLayoutPanel(); + this.buttonChangeIcoFolder = new System.Windows.Forms.Button(); + this.textBoxIcoFolder = new System.Windows.Forms.TextBox(); + this.groupBoxDrag = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.checkBoxSwipeScrolling = new System.Windows.Forms.CheckBox(); + this.checkBoxDragDropItems = new System.Windows.Forms.CheckBox(); + this.buttonAdvancedDefault = new System.Windows.Forms.Button(); + this.groupBoxSorting = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelSorting = new System.Windows.Forms.TableLayoutPanel(); + this.radioButtonSortByTypeAndDate = new System.Windows.Forms.RadioButton(); + this.radioButtonSortByTypeAndName = new System.Windows.Forms.RadioButton(); + this.radioButtonSortByDate = new System.Windows.Forms.RadioButton(); + this.radioButtonSortByName = new System.Windows.Forms.RadioButton(); + this.groupBoxHiddenFilesAndFolders = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelHiddenFilesAndFolders = new System.Windows.Forms.TableLayoutPanel(); + this.radioButtonAlwaysShowHiddenFiles = new System.Windows.Forms.RadioButton(); + this.radioButtonNeverShowHiddenFiles = new System.Windows.Forms.RadioButton(); + this.radioButtonSystemSettingsShowHiddenFiles = new System.Windows.Forms.RadioButton(); + this.groupBoxClick = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelClick = new System.Windows.Forms.TableLayoutPanel(); + this.checkBoxOpenDirectoryWithOneClick = new System.Windows.Forms.CheckBox(); + this.checkBoxOpenItemWithOneClick = new System.Windows.Forms.CheckBox(); + this.tabPageFolders = new System.Windows.Forms.TabPage(); + this.tableLayoutPanelFoldersInRootFolder = new System.Windows.Forms.TableLayoutPanel(); + this.groupBoxFoldersInRootFolder = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelFolderToRootFoldersList = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanelFolderToRootFolder = new System.Windows.Forms.TableLayoutPanel(); + this.buttonAddFolderToRootFolder = new System.Windows.Forms.Button(); + this.buttonRemoveFolder = new System.Windows.Forms.Button(); + this.dataGridViewFolders = new System.Windows.Forms.DataGridView(); + this.ColumnFolder = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColumnRecursiveLevel = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ColumnOnlyFiles = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.tableLayoutPanelAddSampleStartMenuFolder = new System.Windows.Forms.TableLayoutPanel(); + this.buttonAddSampleStartMenuFolder = new System.Windows.Forms.Button(); + this.checkBoxGenerateShortcutsToDrives = new System.Windows.Forms.CheckBox(); + this.checkBoxShowOnlyAsSearchResult = new System.Windows.Forms.CheckBox(); + this.buttonDefaultFolders = new System.Windows.Forms.Button(); + this.tabPageExpert = new System.Windows.Forms.TabPage(); + this.tableLayoutPanelExpert = new System.Windows.Forms.TableLayoutPanel(); + this.groupBoxSearchPattern = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelSearchPattern = new System.Windows.Forms.TableLayoutPanel(); + this.textBoxSearchPattern = new System.Windows.Forms.TextBox(); + this.groupBoxCache = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelCache = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems = new System.Windows.Forms.TableLayoutPanel(); + this.labelClearCacheIfMoreThanThisNumberOfItems = new System.Windows.Forms.Label(); + this.numericUpDownClearCacheIfMoreThanThisNumberOfItems = new System.Windows.Forms.NumericUpDown(); + this.groupBoxStaysOpen = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelStaysOpen = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed = new System.Windows.Forms.TableLayoutPanel(); + this.labelTimeUntilClosesAfterEnterPressed = new System.Windows.Forms.Label(); + this.numericUpDownTimeUntilClosesAfterEnterPressed = new System.Windows.Forms.NumericUpDown(); + this.checkBoxStayOpenWhenItemClicked = new System.Windows.Forms.CheckBox(); + this.checkBoxStayOpenWhenFocusLost = new System.Windows.Forms.CheckBox(); + this.tableLayoutPanelTimeUntilCloses = new System.Windows.Forms.TableLayoutPanel(); + this.labelTimeUntilCloses = new System.Windows.Forms.Label(); + this.numericUpDownTimeUntilClose = new System.Windows.Forms.NumericUpDown(); + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed = new System.Windows.Forms.CheckBox(); + this.groupBoxOpenSubmenus = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelTimeUntilOpen = new System.Windows.Forms.TableLayoutPanel(); + this.numericUpDownTimeUntilOpens = new System.Windows.Forms.NumericUpDown(); + this.labelTimeUntilOpen = new System.Windows.Forms.Label(); + this.buttonExpertDefault = new System.Windows.Forms.Button(); + this.tabPageCustomize = new System.Windows.Forms.TabPage(); + this.tableLayoutPanelCustomize = new System.Windows.Forms.TableLayoutPanel(); + this.groupBoxColorsDarkMode = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanelColorIconsDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxIconsDarkMode = new System.Windows.Forms.PictureBox(); + this.labelIconsDarkMode = new System.Windows.Forms.Label(); + this.textBoxColorIconsDarkMode = new System.Windows.Forms.TextBox(); + this.tableLayoutPanelColorBackgroundBorderDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxBackgroundBorderDarkMode = new System.Windows.Forms.PictureBox(); + this.labelBackgroundBorderDarkMode = new System.Windows.Forms.Label(); + this.textBoxColorBackgroundBorderDarkMode = new System.Windows.Forms.TextBox(); + this.labelMenuDarkMode = new System.Windows.Forms.Label(); + this.tableLayoutPanelSearchFieldDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSearchFieldDarkMode = new System.Windows.Forms.PictureBox(); + this.labelSearchFieldDarkMode = new System.Windows.Forms.Label(); + this.textBoxColorSearchFieldDarkMode = new System.Windows.Forms.TextBox(); + this.tableLayoutPanelOpenFolderDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxOpenFolderDarkMode = new System.Windows.Forms.PictureBox(); + this.labelOpenFolderDarkMode = new System.Windows.Forms.Label(); + this.textBoxColorOpenFolderDarkMode = new System.Windows.Forms.TextBox(); + this.tableLayoutPanelOpenFolderBorderDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxOpenFolderBorderDarkMode = new System.Windows.Forms.PictureBox(); + this.labelOpenFolderBorderDarkMode = new System.Windows.Forms.Label(); + this.textBoxColorOpenFolderBorderDarkMode = new System.Windows.Forms.TextBox(); + this.tableLayoutPanelSelectedItemDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureColorBoxSelectedItemDarkMode = new System.Windows.Forms.PictureBox(); + this.labelSelectedItemDarkMode = new System.Windows.Forms.Label(); + this.textBoxColorSelecetedItemDarkMode = new System.Windows.Forms.TextBox(); + this.tableLayoutPanelSelectedItemBorderDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSelectedItemBorderDarkMode = new System.Windows.Forms.PictureBox(); + this.labelSelectedItemBorderDarkMode = new System.Windows.Forms.Label(); + this.textBoxColorSelectedItemBorderDarkMode = new System.Windows.Forms.TextBox(); + this.labelScrollbarDarkMode = new System.Windows.Forms.Label(); + this.tableLayoutPanelScrollbarBackgroundDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxScrollbarBackgroundDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorScrollbarBackgroundDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeScrollbarBackground = new System.Windows.Forms.Label(); + this.tableLayoutPanelSliderDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSliderDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorSliderDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeSlider = new System.Windows.Forms.Label(); + this.tableLayoutPanelSliderDraggingDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSliderDraggingDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorSliderDraggingDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeSliderDragging = new System.Windows.Forms.Label(); + this.tableLayoutPanelSliderHoverDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSliderHoverDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorSliderHoverDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeSliderHover = new System.Windows.Forms.Label(); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSliderArrowsAndTrackHoverDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorSliderArrowsAndTrackHoverDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeSliderArrowsAndTrackHover = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrowDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeArrow = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrowClickDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowClickDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowClickDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeArrowClick = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrowClickBackgroundDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowClickBackgroundDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowClickBackgroundDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeArrowClickBackground = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrowHoverDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowHoverDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowHoverDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeArrowHover = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrowHoverBackgroundDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowHoverBackgroundDarkMode = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowHoverBackgroundDarkMode = new System.Windows.Forms.TextBox(); + this.labelColorDarkModeArrowHoverBackground = new System.Windows.Forms.Label(); + this.buttonColorsDefaultDarkMode = new System.Windows.Forms.Button(); + this.tableLayoutPanelBackgroundDarkMode = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxBackgroundDarkMode = new System.Windows.Forms.PictureBox(); + this.labelBackgroundDarkMode = new System.Windows.Forms.Label(); + this.textBoxColorBackgroundDarkMode = new System.Windows.Forms.TextBox(); + this.groupBoxColorsLightMode = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelColorsAndDefault = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanelIcons = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxIcons = new System.Windows.Forms.PictureBox(); + this.textBoxColorIcons = new System.Windows.Forms.TextBox(); + this.labelIcons = new System.Windows.Forms.Label(); + this.tableLayoutPanelBackgroundBorder = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxBackgroundBorder = new System.Windows.Forms.PictureBox(); + this.textBoxColorBackgroundBorder = new System.Windows.Forms.TextBox(); + this.labelBackgroundBorder = new System.Windows.Forms.Label(); + this.labelMenuLightMode = new System.Windows.Forms.Label(); + this.tableLayoutPanelBackground = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxBackground = new System.Windows.Forms.PictureBox(); + this.textBoxColorBackground = new System.Windows.Forms.TextBox(); + this.labelBackground = new System.Windows.Forms.Label(); + this.buttonColorsDefault = new System.Windows.Forms.Button(); + this.tableLayoutPanelArrowHoverBackground = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowHoverBackground = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowHoverBackground = new System.Windows.Forms.TextBox(); + this.labelArrowHoverBackground = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrowHover = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowHover = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowHover = new System.Windows.Forms.TextBox(); + this.labelArrowHover = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrowClickBackground = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowClickBackground = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowClickBackground = new System.Windows.Forms.TextBox(); + this.labelArrowClickBackground = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrowClick = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrowClick = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrowClick = new System.Windows.Forms.TextBox(); + this.labelArrowClick = new System.Windows.Forms.Label(); + this.tableLayoutPanelArrow = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxArrow = new System.Windows.Forms.PictureBox(); + this.textBoxColorArrow = new System.Windows.Forms.TextBox(); + this.labelArrow = new System.Windows.Forms.Label(); + this.tableLayoutPanelSliderArrowsAndTrackHover = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSliderArrowsAndTrackHover = new System.Windows.Forms.PictureBox(); + this.textBoxColorSliderArrowsAndTrackHover = new System.Windows.Forms.TextBox(); + this.labelSliderArrowsAndTrackHover = new System.Windows.Forms.Label(); + this.tableLayoutPanelSliderHover = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSliderHover = new System.Windows.Forms.PictureBox(); + this.textBoxColorSliderHover = new System.Windows.Forms.TextBox(); + this.labelSliderHover = new System.Windows.Forms.Label(); + this.tableLayoutPanelSliderDragging = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSliderDragging = new System.Windows.Forms.PictureBox(); + this.textBoxColorSliderDragging = new System.Windows.Forms.TextBox(); + this.labelSliderDragging = new System.Windows.Forms.Label(); + this.tableLayoutPanelSlider = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSlider = new System.Windows.Forms.PictureBox(); + this.textBoxColorSlider = new System.Windows.Forms.TextBox(); + this.labelSlider = new System.Windows.Forms.Label(); + this.tableLayoutPanelScrollbarBackground = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxScrollbarBackground = new System.Windows.Forms.PictureBox(); + this.textBoxColorScrollbarBackground = new System.Windows.Forms.TextBox(); + this.labelScrollbarBackground = new System.Windows.Forms.Label(); + this.labelScrollbarLightMode = new System.Windows.Forms.Label(); + this.tableLayoutPanelSelectedItemBorder = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSelectedItemBorder = new System.Windows.Forms.PictureBox(); + this.textBoxColorSelectedItemBorder = new System.Windows.Forms.TextBox(); + this.labelSelectedItemBorder = new System.Windows.Forms.Label(); + this.tableLayoutPanelSelectedItem = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSelectedItem = new System.Windows.Forms.PictureBox(); + this.textBoxColorSelectedItem = new System.Windows.Forms.TextBox(); + this.labelSelectedItem = new System.Windows.Forms.Label(); + this.tableLayoutPanelOpenFolderBorder = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxOpenFolderBorder = new System.Windows.Forms.PictureBox(); + this.textBoxColorOpenFolderBorder = new System.Windows.Forms.TextBox(); + this.labelOpenFolderBorder = new System.Windows.Forms.Label(); + this.tableLayoutPanelOpenFolder = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxOpenFolder = new System.Windows.Forms.PictureBox(); + this.textBoxColorOpenFolder = new System.Windows.Forms.TextBox(); + this.labelOpenFolder = new System.Windows.Forms.Label(); + this.tableLayoutPanelSearchField = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBoxSearchField = new System.Windows.Forms.PictureBox(); + this.textBoxColorSearchField = new System.Windows.Forms.TextBox(); + this.labelSearchField = new System.Windows.Forms.Label(); + this.groupBoxAppearance = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanelAppearance = new System.Windows.Forms.TableLayoutPanel(); + this.checkBoxShowFunctionKeyPinMenu = new System.Windows.Forms.CheckBox(); + this.checkBoxShowFunctionKeySettings = new System.Windows.Forms.CheckBox(); + this.checkBoxShowFunctionKeyRestart = new System.Windows.Forms.CheckBox(); + this.checkBoxShowLinkOverlay = new System.Windows.Forms.CheckBox(); + this.checkBoxUseFading = new System.Windows.Forms.CheckBox(); + this.checkBoxUseIconFromRootFolder = new System.Windows.Forms.CheckBox(); + this.checkBoxShowSearchBar = new System.Windows.Forms.CheckBox(); + this.checkBoxShowDirectoryTitleAtTop = new System.Windows.Forms.CheckBox(); + this.checkBoxRoundCorners = new System.Windows.Forms.CheckBox(); + this.checkBoxDarkModeAlwaysOn = new System.Windows.Forms.CheckBox(); + this.buttonAppearanceDefault = new System.Windows.Forms.Button(); + this.checkBoxShowCountOfElementsBelow = new System.Windows.Forms.CheckBox(); + this.checkBoxShowFunctionKeyOpenFolder = new System.Windows.Forms.CheckBox(); + this.tableLayoutPanelBottom = new System.Windows.Forms.TableLayoutPanel(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.colorDialog = new System.Windows.Forms.ColorDialog(); + this.radioButtonSortByFileExtensionAndName = new System.Windows.Forms.RadioButton(); + this.tableLayoutPanelMain.SuspendLayout(); + this.tabControl.SuspendLayout(); + this.tabPageGeneral.SuspendLayout(); + this.tableLayoutPanelGeneral.SuspendLayout(); + this.groupBoxFolder.SuspendLayout(); + this.tableLayoutPanelFolder.SuspendLayout(); + this.tableLayoutPanelChangeFolder.SuspendLayout(); + this.tableLayoutPanelRelativeFolderOpenAssembly.SuspendLayout(); + this.groupBoxConfigAndLogfile.SuspendLayout(); + this.tableLayoutPanelConfigAndLogfile.SuspendLayout(); + this.groupBoxAutostart.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + this.tableLayoutPanelAutostart.SuspendLayout(); + this.groupBoxHotkey.SuspendLayout(); + this.tableLayoutPanelHotkey.SuspendLayout(); + this.groupBoxLanguage.SuspendLayout(); + this.tableLayoutPanelLanguage.SuspendLayout(); + this.tabPageSizeAndLocation.SuspendLayout(); + this.tableLayoutPanelSizeAndLocation.SuspendLayout(); + this.groupBoxSubMenuAppearAt.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.tableLayoutPanel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownOverlappingOffsetPixels)).BeginInit(); + this.groupBoxMenuAppearAt.SuspendLayout(); + this.tableLayoutPanelMenuAppearAt.SuspendLayout(); + this.groupBoxSize.SuspendLayout(); + this.tableLayoutPanelSize.SuspendLayout(); + this.tableLayoutPanelIconSizeInPercent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownIconSizeInPercent)).BeginInit(); + this.tableLayoutPanelRowHeighteInPercentage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRowHeighteInPercentage)).BeginInit(); + this.tableLayoutPanelSizeInPercent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeInPercent)).BeginInit(); + this.tableLayoutPanelMenuHeight.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownMenuHeight)).BeginInit(); + this.tableLayoutPanelMaxMenuWidth.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownMenuWidth)).BeginInit(); + this.tabPageAdvanced.SuspendLayout(); + this.tableLayoutPanelAdvanced.SuspendLayout(); + this.groupBoxOptionalFeatures.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.groupBoxInternetShortcutIcons.SuspendLayout(); + this.tableLayoutPanelInternetShortcutIcons.SuspendLayout(); + this.tableLayoutPanelChangeIcoFolder.SuspendLayout(); + this.groupBoxDrag.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.groupBoxSorting.SuspendLayout(); + this.tableLayoutPanelSorting.SuspendLayout(); + this.groupBoxHiddenFilesAndFolders.SuspendLayout(); + this.tableLayoutPanelHiddenFilesAndFolders.SuspendLayout(); + this.groupBoxClick.SuspendLayout(); + this.tableLayoutPanelClick.SuspendLayout(); + this.tabPageFolders.SuspendLayout(); + this.tableLayoutPanelFoldersInRootFolder.SuspendLayout(); + this.groupBoxFoldersInRootFolder.SuspendLayout(); + this.tableLayoutPanelFolderToRootFoldersList.SuspendLayout(); + this.tableLayoutPanelFolderToRootFolder.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewFolders)).BeginInit(); + this.tableLayoutPanelAddSampleStartMenuFolder.SuspendLayout(); + this.tabPageExpert.SuspendLayout(); + this.tableLayoutPanelExpert.SuspendLayout(); + this.groupBoxSearchPattern.SuspendLayout(); + this.tableLayoutPanelSearchPattern.SuspendLayout(); + this.groupBoxCache.SuspendLayout(); + this.tableLayoutPanelCache.SuspendLayout(); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownClearCacheIfMoreThanThisNumberOfItems)).BeginInit(); + this.groupBoxStaysOpen.SuspendLayout(); + this.tableLayoutPanelStaysOpen.SuspendLayout(); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeUntilClosesAfterEnterPressed)).BeginInit(); + this.tableLayoutPanelTimeUntilCloses.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeUntilClose)).BeginInit(); + this.groupBoxOpenSubmenus.SuspendLayout(); + this.tableLayoutPanelTimeUntilOpen.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeUntilOpens)).BeginInit(); + this.tabPageCustomize.SuspendLayout(); + this.tableLayoutPanelCustomize.SuspendLayout(); + this.groupBoxColorsDarkMode.SuspendLayout(); + this.tableLayoutPanelDarkMode.SuspendLayout(); + this.tableLayoutPanelColorIconsDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIconsDarkMode)).BeginInit(); + this.tableLayoutPanelColorBackgroundBorderDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBackgroundBorderDarkMode)).BeginInit(); + this.tableLayoutPanelSearchFieldDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSearchFieldDarkMode)).BeginInit(); + this.tableLayoutPanelOpenFolderDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxOpenFolderDarkMode)).BeginInit(); + this.tableLayoutPanelOpenFolderBorderDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxOpenFolderBorderDarkMode)).BeginInit(); + this.tableLayoutPanelSelectedItemDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureColorBoxSelectedItemDarkMode)).BeginInit(); + this.tableLayoutPanelSelectedItemBorderDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSelectedItemBorderDarkMode)).BeginInit(); + this.tableLayoutPanelScrollbarBackgroundDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxScrollbarBackgroundDarkMode)).BeginInit(); + this.tableLayoutPanelSliderDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderDarkMode)).BeginInit(); + this.tableLayoutPanelSliderDraggingDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderDraggingDarkMode)).BeginInit(); + this.tableLayoutPanelSliderHoverDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderHoverDarkMode)).BeginInit(); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderArrowsAndTrackHoverDarkMode)).BeginInit(); + this.tableLayoutPanelArrowDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowDarkMode)).BeginInit(); + this.tableLayoutPanelArrowClickDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowClickDarkMode)).BeginInit(); + this.tableLayoutPanelArrowClickBackgroundDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowClickBackgroundDarkMode)).BeginInit(); + this.tableLayoutPanelArrowHoverDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowHoverDarkMode)).BeginInit(); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowHoverBackgroundDarkMode)).BeginInit(); + this.tableLayoutPanelBackgroundDarkMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBackgroundDarkMode)).BeginInit(); + this.groupBoxColorsLightMode.SuspendLayout(); + this.tableLayoutPanelColorsAndDefault.SuspendLayout(); + this.tableLayoutPanelIcons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcons)).BeginInit(); + this.tableLayoutPanelBackgroundBorder.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBackgroundBorder)).BeginInit(); + this.tableLayoutPanelBackground.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBackground)).BeginInit(); + this.tableLayoutPanelArrowHoverBackground.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowHoverBackground)).BeginInit(); + this.tableLayoutPanelArrowHover.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowHover)).BeginInit(); + this.tableLayoutPanelArrowClickBackground.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowClickBackground)).BeginInit(); + this.tableLayoutPanelArrowClick.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowClick)).BeginInit(); + this.tableLayoutPanelArrow.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrow)).BeginInit(); + this.tableLayoutPanelSliderArrowsAndTrackHover.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderArrowsAndTrackHover)).BeginInit(); + this.tableLayoutPanelSliderHover.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderHover)).BeginInit(); + this.tableLayoutPanelSliderDragging.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderDragging)).BeginInit(); + this.tableLayoutPanelSlider.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSlider)).BeginInit(); + this.tableLayoutPanelScrollbarBackground.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxScrollbarBackground)).BeginInit(); + this.tableLayoutPanelSelectedItemBorder.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSelectedItemBorder)).BeginInit(); + this.tableLayoutPanelSelectedItem.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSelectedItem)).BeginInit(); + this.tableLayoutPanelOpenFolderBorder.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxOpenFolderBorder)).BeginInit(); + this.tableLayoutPanelOpenFolder.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxOpenFolder)).BeginInit(); + this.tableLayoutPanelSearchField.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSearchField)).BeginInit(); + this.groupBoxAppearance.SuspendLayout(); + this.tableLayoutPanelAppearance.SuspendLayout(); + this.tableLayoutPanelBottom.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanelMain + // + this.tableLayoutPanelMain.AutoSize = true; + this.tableLayoutPanelMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelMain.ColumnCount = 1; + this.tableLayoutPanelMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelMain.Controls.Add(this.tabControl, 0, 0); + this.tableLayoutPanelMain.Controls.Add(this.tableLayoutPanelBottom, 0, 1); + this.tableLayoutPanelMain.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelMain.Name = "tableLayoutPanelMain"; + this.tableLayoutPanelMain.RowCount = 2; + this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelMain.Size = new System.Drawing.Size(432, 553); + this.tableLayoutPanelMain.TabIndex = 0; + // + // tabControl + // + this.tabControl.Controls.Add(this.tabPageGeneral); + this.tabControl.Controls.Add(this.tabPageSizeAndLocation); + this.tabControl.Controls.Add(this.tabPageAdvanced); + this.tabControl.Controls.Add(this.tabPageFolders); + this.tabControl.Controls.Add(this.tabPageExpert); + this.tabControl.Controls.Add(this.tabPageCustomize); + this.tabControl.Location = new System.Drawing.Point(6, 3); + this.tabControl.Margin = new System.Windows.Forms.Padding(6, 3, 6, 3); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 2; + this.tabControl.Size = new System.Drawing.Size(420, 513); + this.tabControl.TabIndex = 0; + // + // tabPageGeneral + // + this.tabPageGeneral.AutoScroll = true; + this.tabPageGeneral.Controls.Add(this.tableLayoutPanelGeneral); + this.tabPageGeneral.Location = new System.Drawing.Point(4, 24); + this.tabPageGeneral.Margin = new System.Windows.Forms.Padding(3, 3, 6, 3); + this.tabPageGeneral.Name = "tabPageGeneral"; + this.tabPageGeneral.Padding = new System.Windows.Forms.Padding(3); + this.tabPageGeneral.Size = new System.Drawing.Size(412, 485); + this.tabPageGeneral.TabIndex = 0; + this.tabPageGeneral.Text = "tabPageGeneral"; + this.tabPageGeneral.UseVisualStyleBackColor = true; + // + // tableLayoutPanelGeneral + // + this.tableLayoutPanelGeneral.AutoSize = true; + this.tableLayoutPanelGeneral.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelGeneral.ColumnCount = 1; + this.tableLayoutPanelGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelGeneral.Controls.Add(this.buttonGeneralDefault, 0, 5); + this.tableLayoutPanelGeneral.Controls.Add(this.groupBoxFolder, 0, 0); + this.tableLayoutPanelGeneral.Controls.Add(this.groupBoxConfigAndLogfile, 0, 1); + this.tableLayoutPanelGeneral.Controls.Add(this.groupBoxAutostart, 0, 2); + this.tableLayoutPanelGeneral.Controls.Add(this.groupBoxHotkey, 0, 3); + this.tableLayoutPanelGeneral.Controls.Add(this.groupBoxLanguage, 0, 4); + this.tableLayoutPanelGeneral.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanelGeneral.Name = "tableLayoutPanelGeneral"; + this.tableLayoutPanelGeneral.Padding = new System.Windows.Forms.Padding(0, 0, 6, 0); + this.tableLayoutPanelGeneral.RowCount = 6; + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelGeneral.Size = new System.Drawing.Size(377, 458); + this.tableLayoutPanelGeneral.TabIndex = 0; + // + // buttonGeneralDefault + // + this.buttonGeneralDefault.AutoSize = true; + this.buttonGeneralDefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonGeneralDefault.Location = new System.Drawing.Point(9, 424); + this.buttonGeneralDefault.Margin = new System.Windows.Forms.Padding(9, 9, 3, 9); + this.buttonGeneralDefault.MinimumSize = new System.Drawing.Size(75, 25); + this.buttonGeneralDefault.Name = "buttonGeneralDefault"; + this.buttonGeneralDefault.Size = new System.Drawing.Size(131, 25); + this.buttonGeneralDefault.TabIndex = 1; + this.buttonGeneralDefault.Text = "buttonGeneralDefault"; + this.buttonGeneralDefault.UseVisualStyleBackColor = true; + this.buttonGeneralDefault.Click += new System.EventHandler(this.ButtonGeneralDefault_Click); + // + // groupBoxFolder + // + this.groupBoxFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxFolder.AutoSize = true; + this.groupBoxFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxFolder.Controls.Add(this.tableLayoutPanelFolder); + this.groupBoxFolder.Location = new System.Drawing.Point(3, 3); + this.groupBoxFolder.Name = "groupBoxFolder"; + this.groupBoxFolder.Size = new System.Drawing.Size(365, 131); + this.groupBoxFolder.TabIndex = 0; + this.groupBoxFolder.TabStop = false; + this.groupBoxFolder.Text = "groupBoxFolder"; + // + // tableLayoutPanelFolder + // + this.tableLayoutPanelFolder.AutoSize = true; + this.tableLayoutPanelFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelFolder.ColumnCount = 1; + this.tableLayoutPanelFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelFolder.Controls.Add(this.tableLayoutPanelChangeFolder, 0, 1); + this.tableLayoutPanelFolder.Controls.Add(this.checkBoxSetFolderByWindowsContextMenu, 0, 2); + this.tableLayoutPanelFolder.Controls.Add(this.textBoxFolder, 0, 0); + this.tableLayoutPanelFolder.Controls.Add(this.tableLayoutPanelRelativeFolderOpenAssembly, 0, 3); + this.tableLayoutPanelFolder.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelFolder.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelFolder.Name = "tableLayoutPanelFolder"; + this.tableLayoutPanelFolder.RowCount = 4; + this.tableLayoutPanelFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolder.Size = new System.Drawing.Size(359, 109); + this.tableLayoutPanelFolder.TabIndex = 0; + // + // tableLayoutPanelChangeFolder + // + this.tableLayoutPanelChangeFolder.AutoSize = true; + this.tableLayoutPanelChangeFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelChangeFolder.ColumnCount = 3; + this.tableLayoutPanelChangeFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelChangeFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelChangeFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelChangeFolder.Controls.Add(this.buttonChangeFolder, 0, 0); + this.tableLayoutPanelChangeFolder.Controls.Add(this.buttonOpenFolder, 2, 0); + this.tableLayoutPanelChangeFolder.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelChangeFolder.Location = new System.Drawing.Point(0, 22); + this.tableLayoutPanelChangeFolder.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelChangeFolder.Name = "tableLayoutPanelChangeFolder"; + this.tableLayoutPanelChangeFolder.RowCount = 1; + this.tableLayoutPanelChangeFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelChangeFolder.Size = new System.Drawing.Size(359, 31); + this.tableLayoutPanelChangeFolder.TabIndex = 0; + // + // buttonChangeFolder + // + this.buttonChangeFolder.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.buttonChangeFolder.AutoSize = true; + this.buttonChangeFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonChangeFolder.Location = new System.Drawing.Point(2, 3); + this.buttonChangeFolder.Margin = new System.Windows.Forms.Padding(2, 3, 3, 3); + this.buttonChangeFolder.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonChangeFolder.Name = "buttonChangeFolder"; + this.buttonChangeFolder.Size = new System.Drawing.Size(127, 25); + this.buttonChangeFolder.TabIndex = 0; + this.buttonChangeFolder.Text = "buttonChangeFolder"; + this.buttonChangeFolder.UseVisualStyleBackColor = true; + this.buttonChangeFolder.Click += new System.EventHandler(this.ButtonChange_Click); + // + // buttonOpenFolder + // + this.buttonOpenFolder.AutoSize = true; + this.buttonOpenFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonOpenFolder.Location = new System.Drawing.Point(241, 3); + this.buttonOpenFolder.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonOpenFolder.Name = "buttonOpenFolder"; + this.buttonOpenFolder.Size = new System.Drawing.Size(115, 25); + this.buttonOpenFolder.TabIndex = 3; + this.buttonOpenFolder.Text = "buttonOpenFolder"; + this.buttonOpenFolder.UseVisualStyleBackColor = true; + this.buttonOpenFolder.Click += new System.EventHandler(this.ButtonOpenFolder_Click); + // + // checkBoxSetFolderByWindowsContextMenu + // + this.checkBoxSetFolderByWindowsContextMenu.AutoSize = true; + this.checkBoxSetFolderByWindowsContextMenu.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxSetFolderByWindowsContextMenu.Location = new System.Drawing.Point(3, 56); + this.checkBoxSetFolderByWindowsContextMenu.Name = "checkBoxSetFolderByWindowsContextMenu"; + this.checkBoxSetFolderByWindowsContextMenu.Size = new System.Drawing.Size(353, 19); + this.checkBoxSetFolderByWindowsContextMenu.TabIndex = 5; + this.checkBoxSetFolderByWindowsContextMenu.Text = "SetFolderByWindowsContextMenu"; + this.checkBoxSetFolderByWindowsContextMenu.UseVisualStyleBackColor = true; + // + // textBoxFolder + // + this.textBoxFolder.BackColor = System.Drawing.Color.White; + this.textBoxFolder.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBoxFolder.Location = new System.Drawing.Point(6, 3); + this.textBoxFolder.Margin = new System.Windows.Forms.Padding(6, 3, 6, 3); + this.textBoxFolder.Name = "textBoxFolder"; + this.textBoxFolder.ReadOnly = true; + this.textBoxFolder.Size = new System.Drawing.Size(277, 16); + this.textBoxFolder.TabIndex = 0; + this.textBoxFolder.TabStop = false; + // + // tableLayoutPanelRelativeFolderOpenAssembly + // + this.tableLayoutPanelRelativeFolderOpenAssembly.AutoSize = true; + this.tableLayoutPanelRelativeFolderOpenAssembly.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelRelativeFolderOpenAssembly.ColumnCount = 3; + this.tableLayoutPanelRelativeFolderOpenAssembly.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelRelativeFolderOpenAssembly.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelRelativeFolderOpenAssembly.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelRelativeFolderOpenAssembly.Controls.Add(this.buttonChangeRelativeFolder, 0, 0); + this.tableLayoutPanelRelativeFolderOpenAssembly.Controls.Add(this.buttonOpenAssemblyLocation, 2, 0); + this.tableLayoutPanelRelativeFolderOpenAssembly.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelRelativeFolderOpenAssembly.Location = new System.Drawing.Point(0, 78); + this.tableLayoutPanelRelativeFolderOpenAssembly.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelRelativeFolderOpenAssembly.Name = "tableLayoutPanelRelativeFolderOpenAssembly"; + this.tableLayoutPanelRelativeFolderOpenAssembly.RowCount = 1; + this.tableLayoutPanelRelativeFolderOpenAssembly.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelRelativeFolderOpenAssembly.Size = new System.Drawing.Size(359, 31); + this.tableLayoutPanelRelativeFolderOpenAssembly.TabIndex = 0; + // + // buttonChangeRelativeFolder + // + this.buttonChangeRelativeFolder.AutoSize = true; + this.buttonChangeRelativeFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonChangeRelativeFolder.Location = new System.Drawing.Point(2, 3); + this.buttonChangeRelativeFolder.Margin = new System.Windows.Forms.Padding(2, 3, 3, 3); + this.buttonChangeRelativeFolder.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonChangeRelativeFolder.Name = "buttonChangeRelativeFolder"; + this.buttonChangeRelativeFolder.Size = new System.Drawing.Size(132, 25); + this.buttonChangeRelativeFolder.TabIndex = 0; + this.buttonChangeRelativeFolder.Text = "ChangeRelativeFolder"; + this.buttonChangeRelativeFolder.UseVisualStyleBackColor = true; + this.buttonChangeRelativeFolder.Click += new System.EventHandler(this.ButtonChangeRelativeFolder_Click); + // + // buttonOpenAssemblyLocation + // + this.buttonOpenAssemblyLocation.AutoSize = true; + this.buttonOpenAssemblyLocation.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonOpenAssemblyLocation.Location = new System.Drawing.Point(177, 3); + this.buttonOpenAssemblyLocation.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonOpenAssemblyLocation.Name = "buttonOpenAssemblyLocation"; + this.buttonOpenAssemblyLocation.Size = new System.Drawing.Size(179, 25); + this.buttonOpenAssemblyLocation.TabIndex = 0; + this.buttonOpenAssemblyLocation.Text = "buttonOpenAssemblyLocation"; + this.buttonOpenAssemblyLocation.UseVisualStyleBackColor = true; + this.buttonOpenAssemblyLocation.Click += new System.EventHandler(this.ButtonOpenAssemblyLocation_Click); + // + // groupBoxConfigAndLogfile + // + this.groupBoxConfigAndLogfile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxConfigAndLogfile.AutoSize = true; + this.groupBoxConfigAndLogfile.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxConfigAndLogfile.Controls.Add(this.tableLayoutPanelConfigAndLogfile); + this.groupBoxConfigAndLogfile.Location = new System.Drawing.Point(3, 140); + this.groupBoxConfigAndLogfile.Name = "groupBoxConfigAndLogfile"; + this.groupBoxConfigAndLogfile.Size = new System.Drawing.Size(365, 72); + this.groupBoxConfigAndLogfile.TabIndex = 0; + this.groupBoxConfigAndLogfile.TabStop = false; + this.groupBoxConfigAndLogfile.Text = "groupBoxConfigAndLogfile"; + // + // tableLayoutPanelConfigAndLogfile + // + this.tableLayoutPanelConfigAndLogfile.AutoSize = true; + this.tableLayoutPanelConfigAndLogfile.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelConfigAndLogfile.ColumnCount = 1; + this.tableLayoutPanelConfigAndLogfile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelConfigAndLogfile.Controls.Add(this.checkBoxSaveLogFileInApplicationDirectory, 0, 2); + this.tableLayoutPanelConfigAndLogfile.Controls.Add(this.checkBoxSaveConfigInApplicationDirectory, 0, 1); + this.tableLayoutPanelConfigAndLogfile.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelConfigAndLogfile.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelConfigAndLogfile.Name = "tableLayoutPanelConfigAndLogfile"; + this.tableLayoutPanelConfigAndLogfile.RowCount = 3; + this.tableLayoutPanelConfigAndLogfile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelConfigAndLogfile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelConfigAndLogfile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelConfigAndLogfile.Size = new System.Drawing.Size(359, 50); + this.tableLayoutPanelConfigAndLogfile.TabIndex = 0; + // + // checkBoxSaveLogFileInApplicationDirectory + // + this.checkBoxSaveLogFileInApplicationDirectory.AutoSize = true; + this.checkBoxSaveLogFileInApplicationDirectory.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxSaveLogFileInApplicationDirectory.Location = new System.Drawing.Point(3, 28); + this.checkBoxSaveLogFileInApplicationDirectory.Name = "checkBoxSaveLogFileInApplicationDirectory"; + this.checkBoxSaveLogFileInApplicationDirectory.Size = new System.Drawing.Size(353, 19); + this.checkBoxSaveLogFileInApplicationDirectory.TabIndex = 1; + this.checkBoxSaveLogFileInApplicationDirectory.Text = "checkBoxSaveLogFileInApplicationDirectory"; + this.checkBoxSaveLogFileInApplicationDirectory.UseVisualStyleBackColor = true; + // + // checkBoxSaveConfigInApplicationDirectory + // + this.checkBoxSaveConfigInApplicationDirectory.AutoSize = true; + this.checkBoxSaveConfigInApplicationDirectory.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxSaveConfigInApplicationDirectory.Location = new System.Drawing.Point(3, 3); + this.checkBoxSaveConfigInApplicationDirectory.Name = "checkBoxSaveConfigInApplicationDirectory"; + this.checkBoxSaveConfigInApplicationDirectory.Size = new System.Drawing.Size(353, 19); + this.checkBoxSaveConfigInApplicationDirectory.TabIndex = 0; + this.checkBoxSaveConfigInApplicationDirectory.Text = "checkBoxSaveConfigInApplicationDirectory"; + this.checkBoxSaveConfigInApplicationDirectory.UseVisualStyleBackColor = true; + // + // groupBoxAutostart + // + this.groupBoxAutostart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxAutostart.AutoSize = true; + this.groupBoxAutostart.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxAutostart.Controls.Add(this.tableLayoutPanel5); + this.groupBoxAutostart.Location = new System.Drawing.Point(3, 218); + this.groupBoxAutostart.Name = "groupBoxAutostart"; + this.groupBoxAutostart.Size = new System.Drawing.Size(365, 78); + this.groupBoxAutostart.TabIndex = 0; + this.groupBoxAutostart.TabStop = false; + this.groupBoxAutostart.Text = "groupBoxAutostart"; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.AutoSize = true; + this.tableLayoutPanel5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel5.ColumnCount = 1; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel5.Controls.Add(this.checkBoxCheckForUpdates, 0, 1); + this.tableLayoutPanel5.Controls.Add(this.tableLayoutPanelAutostart, 0, 0); + this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 2; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.Size = new System.Drawing.Size(359, 56); + this.tableLayoutPanel5.TabIndex = 1; + // + // checkBoxCheckForUpdates + // + this.checkBoxCheckForUpdates.AutoSize = true; + this.checkBoxCheckForUpdates.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxCheckForUpdates.Location = new System.Drawing.Point(3, 34); + this.checkBoxCheckForUpdates.Name = "checkBoxCheckForUpdates"; + this.checkBoxCheckForUpdates.Size = new System.Drawing.Size(353, 19); + this.checkBoxCheckForUpdates.TabIndex = 10; + this.checkBoxCheckForUpdates.Text = "checkBoxCheckForUpdates"; + this.checkBoxCheckForUpdates.UseVisualStyleBackColor = true; + // + // tableLayoutPanelAutostart + // + this.tableLayoutPanelAutostart.AutoSize = true; + this.tableLayoutPanelAutostart.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelAutostart.ColumnCount = 3; + this.tableLayoutPanelAutostart.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelAutostart.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelAutostart.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelAutostart.Controls.Add(this.buttonAddStartup, 0, 0); + this.tableLayoutPanelAutostart.Controls.Add(this.labelStartupStatus, 2, 0); + this.tableLayoutPanelAutostart.Controls.Add(this.checkBoxAutostart, 0, 0); + this.tableLayoutPanelAutostart.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelAutostart.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelAutostart.Name = "tableLayoutPanelAutostart"; + this.tableLayoutPanelAutostart.RowCount = 1; + this.tableLayoutPanelAutostart.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelAutostart.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelAutostart.Size = new System.Drawing.Size(359, 31); + this.tableLayoutPanelAutostart.TabIndex = 0; + // + // buttonAddStartup + // + this.buttonAddStartup.AutoSize = true; + this.buttonAddStartup.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonAddStartup.Location = new System.Drawing.Point(135, 3); + this.buttonAddStartup.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonAddStartup.Name = "buttonAddStartup"; + this.buttonAddStartup.Size = new System.Drawing.Size(113, 25); + this.buttonAddStartup.TabIndex = 10; + this.buttonAddStartup.Text = "buttonAddStartup"; + this.buttonAddStartup.UseVisualStyleBackColor = true; + this.buttonAddStartup.Click += new System.EventHandler(this.ButtonAddStartup_Click); + // + // labelStartupStatus + // + this.labelStartupStatus.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelStartupStatus.AutoSize = true; + this.labelStartupStatus.Location = new System.Drawing.Point(254, 8); + this.labelStartupStatus.Name = "labelStartupStatus"; + this.labelStartupStatus.Size = new System.Drawing.Size(102, 15); + this.labelStartupStatus.TabIndex = 2; + this.labelStartupStatus.Text = "labelStartupStatus"; + // + // checkBoxAutostart + // + this.checkBoxAutostart.AutoSize = true; + this.checkBoxAutostart.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxAutostart.Location = new System.Drawing.Point(3, 3); + this.checkBoxAutostart.Name = "checkBoxAutostart"; + this.checkBoxAutostart.Size = new System.Drawing.Size(126, 25); + this.checkBoxAutostart.TabIndex = 9; + this.checkBoxAutostart.Text = "checkBoxAutostart"; + this.checkBoxAutostart.UseVisualStyleBackColor = true; + // + // groupBoxHotkey + // + this.groupBoxHotkey.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxHotkey.AutoSize = true; + this.groupBoxHotkey.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxHotkey.Controls.Add(this.tableLayoutPanelHotkey); + this.groupBoxHotkey.Location = new System.Drawing.Point(3, 302); + this.groupBoxHotkey.Name = "groupBoxHotkey"; + this.groupBoxHotkey.Size = new System.Drawing.Size(365, 53); + this.groupBoxHotkey.TabIndex = 0; + this.groupBoxHotkey.TabStop = false; + this.groupBoxHotkey.Text = "groupBoxHotkey"; + // + // tableLayoutPanelHotkey + // + this.tableLayoutPanelHotkey.AutoSize = true; + this.tableLayoutPanelHotkey.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelHotkey.ColumnCount = 3; + this.tableLayoutPanelHotkey.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelHotkey.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelHotkey.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelHotkey.Controls.Add(this.textBoxHotkeyPlaceholder, 1, 0); + this.tableLayoutPanelHotkey.Controls.Add(this.buttonHotkeyDefault, 2, 0); + this.tableLayoutPanelHotkey.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelHotkey.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelHotkey.Name = "tableLayoutPanelHotkey"; + this.tableLayoutPanelHotkey.RowCount = 1; + this.tableLayoutPanelHotkey.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelHotkey.Size = new System.Drawing.Size(359, 31); + this.tableLayoutPanelHotkey.TabIndex = 0; + // + // textBoxHotkeyPlaceholder + // + this.textBoxHotkeyPlaceholder.Location = new System.Drawing.Point(3, 3); + this.textBoxHotkeyPlaceholder.Name = "textBoxHotkeyPlaceholder"; + this.textBoxHotkeyPlaceholder.Size = new System.Drawing.Size(131, 23); + this.textBoxHotkeyPlaceholder.TabIndex = 0; + this.textBoxHotkeyPlaceholder.TabStop = false; + // + // buttonHotkeyDefault + // + this.buttonHotkeyDefault.AutoSize = true; + this.buttonHotkeyDefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonHotkeyDefault.Location = new System.Drawing.Point(227, 3); + this.buttonHotkeyDefault.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonHotkeyDefault.Name = "buttonHotkeyDefault"; + this.buttonHotkeyDefault.Size = new System.Drawing.Size(129, 25); + this.buttonHotkeyDefault.TabIndex = 0; + this.buttonHotkeyDefault.Text = "buttonHotkeyDefault"; + this.buttonHotkeyDefault.UseVisualStyleBackColor = true; + this.buttonHotkeyDefault.Click += new System.EventHandler(this.ButtonHotkeyDefault_Click); + // + // groupBoxLanguage + // + this.groupBoxLanguage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxLanguage.AutoSize = true; + this.groupBoxLanguage.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxLanguage.Controls.Add(this.tableLayoutPanelLanguage); + this.groupBoxLanguage.Location = new System.Drawing.Point(3, 361); + this.groupBoxLanguage.Name = "groupBoxLanguage"; + this.groupBoxLanguage.Size = new System.Drawing.Size(365, 51); + this.groupBoxLanguage.TabIndex = 0; + this.groupBoxLanguage.TabStop = false; + this.groupBoxLanguage.Text = "groupBoxLanguage"; + // + // tableLayoutPanelLanguage + // + this.tableLayoutPanelLanguage.AutoSize = true; + this.tableLayoutPanelLanguage.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelLanguage.ColumnCount = 2; + this.tableLayoutPanelLanguage.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelLanguage.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelLanguage.Controls.Add(this.comboBoxLanguage, 0, 0); + this.tableLayoutPanelLanguage.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelLanguage.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelLanguage.Name = "tableLayoutPanelLanguage"; + this.tableLayoutPanelLanguage.RowCount = 1; + this.tableLayoutPanelLanguage.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelLanguage.Size = new System.Drawing.Size(359, 29); + this.tableLayoutPanelLanguage.TabIndex = 0; + // + // comboBoxLanguage + // + this.comboBoxLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxLanguage.FormattingEnabled = true; + this.comboBoxLanguage.Location = new System.Drawing.Point(3, 3); + this.comboBoxLanguage.Name = "comboBoxLanguage"; + this.comboBoxLanguage.Size = new System.Drawing.Size(200, 23); + this.comboBoxLanguage.TabIndex = 13; + // + // tabPageSizeAndLocation + // + this.tabPageSizeAndLocation.AutoScroll = true; + this.tabPageSizeAndLocation.Controls.Add(this.tableLayoutPanelSizeAndLocation); + this.tabPageSizeAndLocation.Location = new System.Drawing.Point(4, 24); + this.tabPageSizeAndLocation.Margin = new System.Windows.Forms.Padding(3, 3, 6, 3); + this.tabPageSizeAndLocation.Name = "tabPageSizeAndLocation"; + this.tabPageSizeAndLocation.Padding = new System.Windows.Forms.Padding(3); + this.tabPageSizeAndLocation.Size = new System.Drawing.Size(412, 485); + this.tabPageSizeAndLocation.TabIndex = 3; + this.tabPageSizeAndLocation.Text = "tabPageSizeAndLocation"; + this.tabPageSizeAndLocation.UseVisualStyleBackColor = true; + // + // tableLayoutPanelSizeAndLocation + // + this.tableLayoutPanelSizeAndLocation.AutoSize = true; + this.tableLayoutPanelSizeAndLocation.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSizeAndLocation.ColumnCount = 1; + this.tableLayoutPanelSizeAndLocation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSizeAndLocation.Controls.Add(this.groupBoxSubMenuAppearAt, 0, 2); + this.tableLayoutPanelSizeAndLocation.Controls.Add(this.buttonSizeAndLocationDefault, 0, 3); + this.tableLayoutPanelSizeAndLocation.Controls.Add(this.groupBoxMenuAppearAt, 0, 1); + this.tableLayoutPanelSizeAndLocation.Controls.Add(this.groupBoxSize, 0, 0); + this.tableLayoutPanelSizeAndLocation.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanelSizeAndLocation.Name = "tableLayoutPanelSizeAndLocation"; + this.tableLayoutPanelSizeAndLocation.Padding = new System.Windows.Forms.Padding(0, 0, 6, 0); + this.tableLayoutPanelSizeAndLocation.RowCount = 4; + this.tableLayoutPanelSizeAndLocation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSizeAndLocation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSizeAndLocation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSizeAndLocation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSizeAndLocation.Size = new System.Drawing.Size(308, 426); + this.tableLayoutPanelSizeAndLocation.TabIndex = 1; + // + // groupBoxSubMenuAppearAt + // + this.groupBoxSubMenuAppearAt.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxSubMenuAppearAt.AutoSize = true; + this.groupBoxSubMenuAppearAt.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxSubMenuAppearAt.Controls.Add(this.tableLayoutPanel3); + this.groupBoxSubMenuAppearAt.Location = new System.Drawing.Point(3, 304); + this.groupBoxSubMenuAppearAt.Name = "groupBoxSubMenuAppearAt"; + this.groupBoxSubMenuAppearAt.Size = new System.Drawing.Size(296, 76); + this.groupBoxSubMenuAppearAt.TabIndex = 2; + this.groupBoxSubMenuAppearAt.TabStop = false; + this.groupBoxSubMenuAppearAt.Text = "groupBoxSubMenuAppearAt"; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.AutoSize = true; + this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel3.ColumnCount = 1; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 0, 1); + this.tableLayoutPanel3.Controls.Add(this.radioButtonNextToPreviousMenu, 0, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 2; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.Size = new System.Drawing.Size(290, 54); + this.tableLayoutPanel3.TabIndex = 1; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel4.AutoSize = true; + this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel4.ColumnCount = 3; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.numericUpDownOverlappingOffsetPixels, 1, 0); + this.tableLayoutPanel4.Controls.Add(this.labelOverlappingByPixelsOffset, 2, 0); + this.tableLayoutPanel4.Controls.Add(this.radioButtonOverlapping, 0, 0); + this.tableLayoutPanel4.Location = new System.Drawing.Point(0, 25); + this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 1; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(290, 29); + this.tableLayoutPanel4.TabIndex = 3; + // + // numericUpDownOverlappingOffsetPixels + // + this.numericUpDownOverlappingOffsetPixels.Increment = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.numericUpDownOverlappingOffsetPixels.Location = new System.Drawing.Point(162, 3); + this.numericUpDownOverlappingOffsetPixels.Maximum = new decimal(new int[] { + 500, + 0, + 0, + 0}); + this.numericUpDownOverlappingOffsetPixels.Name = "numericUpDownOverlappingOffsetPixels"; + this.numericUpDownOverlappingOffsetPixels.Size = new System.Drawing.Size(55, 23); + this.numericUpDownOverlappingOffsetPixels.TabIndex = 2; + // + // labelOverlappingByPixelsOffset + // + this.labelOverlappingByPixelsOffset.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelOverlappingByPixelsOffset.AutoSize = true; + this.labelOverlappingByPixelsOffset.Location = new System.Drawing.Point(223, 7); + this.labelOverlappingByPixelsOffset.MaximumSize = new System.Drawing.Size(330, 0); + this.labelOverlappingByPixelsOffset.Name = "labelOverlappingByPixelsOffset"; + this.labelOverlappingByPixelsOffset.Size = new System.Drawing.Size(64, 15); + this.labelOverlappingByPixelsOffset.TabIndex = 3; + this.labelOverlappingByPixelsOffset.Text = "labelOffset"; + // + // radioButtonOverlapping + // + this.radioButtonOverlapping.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.radioButtonOverlapping.AutoSize = true; + this.radioButtonOverlapping.Location = new System.Drawing.Point(3, 5); + this.radioButtonOverlapping.Name = "radioButtonOverlapping"; + this.radioButtonOverlapping.Size = new System.Drawing.Size(153, 19); + this.radioButtonOverlapping.TabIndex = 1; + this.radioButtonOverlapping.TabStop = true; + this.radioButtonOverlapping.Text = "radioButtonOverlapping"; + this.radioButtonOverlapping.UseVisualStyleBackColor = true; + this.radioButtonOverlapping.CheckedChanged += new System.EventHandler(this.RadioButtonOverlapping_CheckedChanged); + // + // radioButtonNextToPreviousMenu + // + this.radioButtonNextToPreviousMenu.AutoSize = true; + this.radioButtonNextToPreviousMenu.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonNextToPreviousMenu.Location = new System.Drawing.Point(3, 3); + this.radioButtonNextToPreviousMenu.Name = "radioButtonNextToPreviousMenu"; + this.radioButtonNextToPreviousMenu.Size = new System.Drawing.Size(284, 19); + this.radioButtonNextToPreviousMenu.TabIndex = 2; + this.radioButtonNextToPreviousMenu.TabStop = true; + this.radioButtonNextToPreviousMenu.Text = "radioButtonNextToPreviousMenu"; + this.radioButtonNextToPreviousMenu.UseVisualStyleBackColor = true; + this.radioButtonNextToPreviousMenu.CheckedChanged += new System.EventHandler(this.RadioButtonNextToPreviousMenu_CheckedChanged); + // + // buttonSizeAndLocationDefault + // + this.buttonSizeAndLocationDefault.AutoSize = true; + this.buttonSizeAndLocationDefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonSizeAndLocationDefault.Location = new System.Drawing.Point(9, 392); + this.buttonSizeAndLocationDefault.Margin = new System.Windows.Forms.Padding(9, 9, 3, 9); + this.buttonSizeAndLocationDefault.MinimumSize = new System.Drawing.Size(75, 25); + this.buttonSizeAndLocationDefault.Name = "buttonSizeAndLocationDefault"; + this.buttonSizeAndLocationDefault.Size = new System.Drawing.Size(179, 25); + this.buttonSizeAndLocationDefault.TabIndex = 0; + this.buttonSizeAndLocationDefault.Text = "buttonSizeAndLocationDefault"; + this.buttonSizeAndLocationDefault.UseVisualStyleBackColor = true; + this.buttonSizeAndLocationDefault.Click += new System.EventHandler(this.ButtonSizeAndLocationDefault_Click); + // + // groupBoxMenuAppearAt + // + this.groupBoxMenuAppearAt.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxMenuAppearAt.AutoSize = true; + this.groupBoxMenuAppearAt.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxMenuAppearAt.Controls.Add(this.tableLayoutPanelMenuAppearAt); + this.groupBoxMenuAppearAt.Location = new System.Drawing.Point(3, 176); + this.groupBoxMenuAppearAt.Name = "groupBoxMenuAppearAt"; + this.groupBoxMenuAppearAt.Size = new System.Drawing.Size(296, 122); + this.groupBoxMenuAppearAt.TabIndex = 1; + this.groupBoxMenuAppearAt.TabStop = false; + this.groupBoxMenuAppearAt.Text = "groupBoxMenuAppearAt"; + // + // tableLayoutPanelMenuAppearAt + // + this.tableLayoutPanelMenuAppearAt.AutoSize = true; + this.tableLayoutPanelMenuAppearAt.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelMenuAppearAt.ColumnCount = 1; + this.tableLayoutPanelMenuAppearAt.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelMenuAppearAt.Controls.Add(this.radioButtonUseCustomLocation, 0, 2); + this.tableLayoutPanelMenuAppearAt.Controls.Add(this.radioButtonAppearAtTheBottomLeft, 0, 1); + this.tableLayoutPanelMenuAppearAt.Controls.Add(this.radioButtonAppearAtTheBottomRight, 0, 0); + this.tableLayoutPanelMenuAppearAt.Controls.Add(this.radioButtonAppearAtMouseLocation, 0, 3); + this.tableLayoutPanelMenuAppearAt.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelMenuAppearAt.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelMenuAppearAt.Name = "tableLayoutPanelMenuAppearAt"; + this.tableLayoutPanelMenuAppearAt.RowCount = 4; + this.tableLayoutPanelMenuAppearAt.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelMenuAppearAt.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelMenuAppearAt.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelMenuAppearAt.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelMenuAppearAt.Size = new System.Drawing.Size(290, 100); + this.tableLayoutPanelMenuAppearAt.TabIndex = 1; + // + // radioButtonUseCustomLocation + // + this.radioButtonUseCustomLocation.AutoSize = true; + this.radioButtonUseCustomLocation.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonUseCustomLocation.Location = new System.Drawing.Point(3, 53); + this.radioButtonUseCustomLocation.Name = "radioButtonUseCustomLocation"; + this.radioButtonUseCustomLocation.Size = new System.Drawing.Size(284, 19); + this.radioButtonUseCustomLocation.TabIndex = 2; + this.radioButtonUseCustomLocation.TabStop = true; + this.radioButtonUseCustomLocation.Text = "radioButtonUseCustomLocation"; + this.radioButtonUseCustomLocation.UseVisualStyleBackColor = true; + // + // radioButtonAppearAtTheBottomLeft + // + this.radioButtonAppearAtTheBottomLeft.AutoSize = true; + this.radioButtonAppearAtTheBottomLeft.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonAppearAtTheBottomLeft.Location = new System.Drawing.Point(3, 28); + this.radioButtonAppearAtTheBottomLeft.Name = "radioButtonAppearAtTheBottomLeft"; + this.radioButtonAppearAtTheBottomLeft.Size = new System.Drawing.Size(284, 19); + this.radioButtonAppearAtTheBottomLeft.TabIndex = 1; + this.radioButtonAppearAtTheBottomLeft.TabStop = true; + this.radioButtonAppearAtTheBottomLeft.Text = "radioButtonradioButtonAppearAtTheBottomLeft"; + this.radioButtonAppearAtTheBottomLeft.UseVisualStyleBackColor = true; + // + // radioButtonAppearAtTheBottomRight + // + this.radioButtonAppearAtTheBottomRight.AutoSize = true; + this.radioButtonAppearAtTheBottomRight.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonAppearAtTheBottomRight.Location = new System.Drawing.Point(3, 3); + this.radioButtonAppearAtTheBottomRight.Name = "radioButtonAppearAtTheBottomRight"; + this.radioButtonAppearAtTheBottomRight.Size = new System.Drawing.Size(284, 19); + this.radioButtonAppearAtTheBottomRight.TabIndex = 2; + this.radioButtonAppearAtTheBottomRight.TabStop = true; + this.radioButtonAppearAtTheBottomRight.Text = "radioButtonAppearAtTheBottomRight"; + this.radioButtonAppearAtTheBottomRight.UseVisualStyleBackColor = true; + // + // radioButtonAppearAtMouseLocation + // + this.radioButtonAppearAtMouseLocation.AutoSize = true; + this.radioButtonAppearAtMouseLocation.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonAppearAtMouseLocation.Location = new System.Drawing.Point(3, 78); + this.radioButtonAppearAtMouseLocation.Name = "radioButtonAppearAtMouseLocation"; + this.radioButtonAppearAtMouseLocation.Size = new System.Drawing.Size(284, 19); + this.radioButtonAppearAtMouseLocation.TabIndex = 3; + this.radioButtonAppearAtMouseLocation.TabStop = true; + this.radioButtonAppearAtMouseLocation.Text = "radioButtonAppearAtMouseLocation"; + this.radioButtonAppearAtMouseLocation.UseVisualStyleBackColor = true; + // + // groupBoxSize + // + this.groupBoxSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxSize.AutoSize = true; + this.groupBoxSize.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxSize.Controls.Add(this.tableLayoutPanelSize); + this.groupBoxSize.Location = new System.Drawing.Point(3, 3); + this.groupBoxSize.Name = "groupBoxSize"; + this.groupBoxSize.Size = new System.Drawing.Size(296, 167); + this.groupBoxSize.TabIndex = 0; + this.groupBoxSize.TabStop = false; + this.groupBoxSize.Text = "groupBoxSize"; + // + // tableLayoutPanelSize + // + this.tableLayoutPanelSize.AutoSize = true; + this.tableLayoutPanelSize.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSize.ColumnCount = 1; + this.tableLayoutPanelSize.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSize.Controls.Add(this.tableLayoutPanelIconSizeInPercent, 0, 1); + this.tableLayoutPanelSize.Controls.Add(this.tableLayoutPanelRowHeighteInPercentage, 0, 2); + this.tableLayoutPanelSize.Controls.Add(this.tableLayoutPanelSizeInPercent, 0, 0); + this.tableLayoutPanelSize.Controls.Add(this.tableLayoutPanelMenuHeight, 0, 4); + this.tableLayoutPanelSize.Controls.Add(this.tableLayoutPanelMaxMenuWidth, 0, 3); + this.tableLayoutPanelSize.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelSize.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelSize.Name = "tableLayoutPanelSize"; + this.tableLayoutPanelSize.RowCount = 5; + this.tableLayoutPanelSize.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSize.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSize.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSize.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSize.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSize.Size = new System.Drawing.Size(290, 145); + this.tableLayoutPanelSize.TabIndex = 0; + // + // tableLayoutPanelIconSizeInPercent + // + this.tableLayoutPanelIconSizeInPercent.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelIconSizeInPercent.AutoSize = true; + this.tableLayoutPanelIconSizeInPercent.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelIconSizeInPercent.ColumnCount = 2; + this.tableLayoutPanelIconSizeInPercent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelIconSizeInPercent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelIconSizeInPercent.Controls.Add(this.numericUpDownIconSizeInPercent, 0, 0); + this.tableLayoutPanelIconSizeInPercent.Controls.Add(this.labelIconSizeInPercent, 1, 0); + this.tableLayoutPanelIconSizeInPercent.Location = new System.Drawing.Point(0, 29); + this.tableLayoutPanelIconSizeInPercent.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelIconSizeInPercent.Name = "tableLayoutPanelIconSizeInPercent"; + this.tableLayoutPanelIconSizeInPercent.RowCount = 1; + this.tableLayoutPanelIconSizeInPercent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelIconSizeInPercent.Size = new System.Drawing.Size(290, 29); + this.tableLayoutPanelIconSizeInPercent.TabIndex = 1; + // + // numericUpDownIconSizeInPercent + // + this.numericUpDownIconSizeInPercent.Location = new System.Drawing.Point(3, 3); + this.numericUpDownIconSizeInPercent.Name = "numericUpDownIconSizeInPercent"; + this.numericUpDownIconSizeInPercent.Size = new System.Drawing.Size(55, 23); + this.numericUpDownIconSizeInPercent.TabIndex = 1; + // + // labelIconSizeInPercent + // + this.labelIconSizeInPercent.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelIconSizeInPercent.AutoSize = true; + this.labelIconSizeInPercent.Location = new System.Drawing.Point(64, 7); + this.labelIconSizeInPercent.MaximumSize = new System.Drawing.Size(330, 0); + this.labelIconSizeInPercent.Name = "labelIconSizeInPercent"; + this.labelIconSizeInPercent.Size = new System.Drawing.Size(125, 15); + this.labelIconSizeInPercent.TabIndex = 0; + this.labelIconSizeInPercent.Text = "labelIconSizeInPercent"; + // + // tableLayoutPanelRowHeighteInPercentage + // + this.tableLayoutPanelRowHeighteInPercentage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelRowHeighteInPercentage.AutoSize = true; + this.tableLayoutPanelRowHeighteInPercentage.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelRowHeighteInPercentage.ColumnCount = 2; + this.tableLayoutPanelRowHeighteInPercentage.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelRowHeighteInPercentage.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelRowHeighteInPercentage.Controls.Add(this.numericUpDownRowHeighteInPercentage, 0, 0); + this.tableLayoutPanelRowHeighteInPercentage.Controls.Add(this.labelRowHeightInPercentage, 1, 0); + this.tableLayoutPanelRowHeighteInPercentage.Location = new System.Drawing.Point(0, 58); + this.tableLayoutPanelRowHeighteInPercentage.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelRowHeighteInPercentage.Name = "tableLayoutPanelRowHeighteInPercentage"; + this.tableLayoutPanelRowHeighteInPercentage.RowCount = 1; + this.tableLayoutPanelRowHeighteInPercentage.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelRowHeighteInPercentage.Size = new System.Drawing.Size(290, 29); + this.tableLayoutPanelRowHeighteInPercentage.TabIndex = 3; + // + // numericUpDownRowHeighteInPercentage + // + this.numericUpDownRowHeighteInPercentage.Location = new System.Drawing.Point(3, 3); + this.numericUpDownRowHeighteInPercentage.Name = "numericUpDownRowHeighteInPercentage"; + this.numericUpDownRowHeighteInPercentage.Size = new System.Drawing.Size(55, 23); + this.numericUpDownRowHeighteInPercentage.TabIndex = 1; + // + // labelRowHeightInPercentage + // + this.labelRowHeightInPercentage.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelRowHeightInPercentage.AutoSize = true; + this.labelRowHeightInPercentage.Location = new System.Drawing.Point(64, 7); + this.labelRowHeightInPercentage.MaximumSize = new System.Drawing.Size(330, 0); + this.labelRowHeightInPercentage.Name = "labelRowHeightInPercentage"; + this.labelRowHeightInPercentage.Size = new System.Drawing.Size(166, 15); + this.labelRowHeightInPercentage.TabIndex = 0; + this.labelRowHeightInPercentage.Text = "labelRowHeighteInPercentage"; + // + // tableLayoutPanelSizeInPercent + // + this.tableLayoutPanelSizeInPercent.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelSizeInPercent.AutoSize = true; + this.tableLayoutPanelSizeInPercent.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSizeInPercent.ColumnCount = 2; + this.tableLayoutPanelSizeInPercent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSizeInPercent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSizeInPercent.Controls.Add(this.numericUpDownSizeInPercent, 0, 0); + this.tableLayoutPanelSizeInPercent.Controls.Add(this.labelSizeInPercent, 1, 0); + this.tableLayoutPanelSizeInPercent.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelSizeInPercent.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelSizeInPercent.Name = "tableLayoutPanelSizeInPercent"; + this.tableLayoutPanelSizeInPercent.RowCount = 1; + this.tableLayoutPanelSizeInPercent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSizeInPercent.Size = new System.Drawing.Size(290, 29); + this.tableLayoutPanelSizeInPercent.TabIndex = 0; + // + // numericUpDownSizeInPercent + // + this.numericUpDownSizeInPercent.Location = new System.Drawing.Point(3, 3); + this.numericUpDownSizeInPercent.Name = "numericUpDownSizeInPercent"; + this.numericUpDownSizeInPercent.Size = new System.Drawing.Size(55, 23); + this.numericUpDownSizeInPercent.TabIndex = 1; + this.numericUpDownSizeInPercent.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.numericUpDownSizeInPercent.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelSizeInPercent + // + this.labelSizeInPercent.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSizeInPercent.AutoSize = true; + this.labelSizeInPercent.Location = new System.Drawing.Point(64, 7); + this.labelSizeInPercent.MaximumSize = new System.Drawing.Size(330, 0); + this.labelSizeInPercent.Name = "labelSizeInPercent"; + this.labelSizeInPercent.Size = new System.Drawing.Size(102, 15); + this.labelSizeInPercent.TabIndex = 0; + this.labelSizeInPercent.Text = "labelSizeInPercent"; + // + // tableLayoutPanelMenuHeight + // + this.tableLayoutPanelMenuHeight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelMenuHeight.AutoSize = true; + this.tableLayoutPanelMenuHeight.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelMenuHeight.ColumnCount = 2; + this.tableLayoutPanelMenuHeight.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelMenuHeight.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelMenuHeight.Controls.Add(this.numericUpDownMenuHeight, 0, 0); + this.tableLayoutPanelMenuHeight.Controls.Add(this.labelMaxMenuHeight, 1, 0); + this.tableLayoutPanelMenuHeight.Location = new System.Drawing.Point(0, 116); + this.tableLayoutPanelMenuHeight.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelMenuHeight.Name = "tableLayoutPanelMenuHeight"; + this.tableLayoutPanelMenuHeight.RowCount = 1; + this.tableLayoutPanelMenuHeight.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelMenuHeight.Size = new System.Drawing.Size(290, 29); + this.tableLayoutPanelMenuHeight.TabIndex = 0; + // + // numericUpDownMenuHeight + // + this.numericUpDownMenuHeight.Location = new System.Drawing.Point(3, 3); + this.numericUpDownMenuHeight.Name = "numericUpDownMenuHeight"; + this.numericUpDownMenuHeight.Size = new System.Drawing.Size(55, 23); + this.numericUpDownMenuHeight.TabIndex = 1; + this.numericUpDownMenuHeight.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.numericUpDownMenuHeight.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelMaxMenuHeight + // + this.labelMaxMenuHeight.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelMaxMenuHeight.AutoSize = true; + this.labelMaxMenuHeight.Location = new System.Drawing.Point(64, 7); + this.labelMaxMenuHeight.MaximumSize = new System.Drawing.Size(330, 0); + this.labelMaxMenuHeight.Name = "labelMaxMenuHeight"; + this.labelMaxMenuHeight.Size = new System.Drawing.Size(122, 15); + this.labelMaxMenuHeight.TabIndex = 0; + this.labelMaxMenuHeight.Text = "labelMaxMenuHeight"; + // + // tableLayoutPanelMaxMenuWidth + // + this.tableLayoutPanelMaxMenuWidth.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelMaxMenuWidth.AutoSize = true; + this.tableLayoutPanelMaxMenuWidth.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelMaxMenuWidth.ColumnCount = 2; + this.tableLayoutPanelMaxMenuWidth.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelMaxMenuWidth.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelMaxMenuWidth.Controls.Add(this.numericUpDownMenuWidth, 0, 0); + this.tableLayoutPanelMaxMenuWidth.Controls.Add(this.labelMaxMenuWidth, 1, 0); + this.tableLayoutPanelMaxMenuWidth.Location = new System.Drawing.Point(0, 87); + this.tableLayoutPanelMaxMenuWidth.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelMaxMenuWidth.Name = "tableLayoutPanelMaxMenuWidth"; + this.tableLayoutPanelMaxMenuWidth.RowCount = 1; + this.tableLayoutPanelMaxMenuWidth.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelMaxMenuWidth.Size = new System.Drawing.Size(290, 29); + this.tableLayoutPanelMaxMenuWidth.TabIndex = 0; + // + // numericUpDownMenuWidth + // + this.numericUpDownMenuWidth.Location = new System.Drawing.Point(3, 3); + this.numericUpDownMenuWidth.Name = "numericUpDownMenuWidth"; + this.numericUpDownMenuWidth.Size = new System.Drawing.Size(55, 23); + this.numericUpDownMenuWidth.TabIndex = 1; + this.numericUpDownMenuWidth.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.numericUpDownMenuWidth.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelMaxMenuWidth + // + this.labelMaxMenuWidth.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelMaxMenuWidth.AutoSize = true; + this.labelMaxMenuWidth.Location = new System.Drawing.Point(64, 7); + this.labelMaxMenuWidth.MaximumSize = new System.Drawing.Size(330, 0); + this.labelMaxMenuWidth.Name = "labelMaxMenuWidth"; + this.labelMaxMenuWidth.Size = new System.Drawing.Size(118, 15); + this.labelMaxMenuWidth.TabIndex = 0; + this.labelMaxMenuWidth.Text = "labelMaxMenuWidth"; + // + // tabPageAdvanced + // + this.tabPageAdvanced.AutoScroll = true; + this.tabPageAdvanced.Controls.Add(this.tableLayoutPanelAdvanced); + this.tabPageAdvanced.Location = new System.Drawing.Point(4, 24); + this.tabPageAdvanced.Name = "tabPageAdvanced"; + this.tabPageAdvanced.Padding = new System.Windows.Forms.Padding(3); + this.tabPageAdvanced.Size = new System.Drawing.Size(412, 485); + this.tabPageAdvanced.TabIndex = 0; + this.tabPageAdvanced.Text = "tabPageAdvanced"; + this.tabPageAdvanced.UseVisualStyleBackColor = true; + // + // tableLayoutPanelAdvanced + // + this.tableLayoutPanelAdvanced.AutoSize = true; + this.tableLayoutPanelAdvanced.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelAdvanced.ColumnCount = 1; + this.tableLayoutPanelAdvanced.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelAdvanced.Controls.Add(this.groupBoxOptionalFeatures, 0, 0); + this.tableLayoutPanelAdvanced.Controls.Add(this.groupBoxInternetShortcutIcons, 0, 3); + this.tableLayoutPanelAdvanced.Controls.Add(this.groupBoxDrag, 0, 2); + this.tableLayoutPanelAdvanced.Controls.Add(this.buttonAdvancedDefault, 0, 6); + this.tableLayoutPanelAdvanced.Controls.Add(this.groupBoxSorting, 0, 4); + this.tableLayoutPanelAdvanced.Controls.Add(this.groupBoxHiddenFilesAndFolders, 0, 5); + this.tableLayoutPanelAdvanced.Controls.Add(this.groupBoxClick, 0, 1); + this.tableLayoutPanelAdvanced.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanelAdvanced.Name = "tableLayoutPanelAdvanced"; + this.tableLayoutPanelAdvanced.Padding = new System.Windows.Forms.Padding(0, 0, 6, 0); + this.tableLayoutPanelAdvanced.RowCount = 7; + this.tableLayoutPanelAdvanced.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAdvanced.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAdvanced.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAdvanced.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAdvanced.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAdvanced.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAdvanced.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAdvanced.Size = new System.Drawing.Size(301, 670); + this.tableLayoutPanelAdvanced.TabIndex = 0; + // + // groupBoxOptionalFeatures + // + this.groupBoxOptionalFeatures.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxOptionalFeatures.AutoSize = true; + this.groupBoxOptionalFeatures.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxOptionalFeatures.Controls.Add(this.tableLayoutPanel2); + this.groupBoxOptionalFeatures.Location = new System.Drawing.Point(3, 3); + this.groupBoxOptionalFeatures.Name = "groupBoxOptionalFeatures"; + this.groupBoxOptionalFeatures.Size = new System.Drawing.Size(289, 122); + this.groupBoxOptionalFeatures.TabIndex = 1; + this.groupBoxOptionalFeatures.TabStop = false; + this.groupBoxOptionalFeatures.Text = "groupBoxOptionalFeatures"; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.AutoSize = true; + this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.checkBoxShowInTaskbar, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.checkBoxSendHotkeyInsteadKillOtherInstances, 0, 2); + this.tableLayoutPanel2.Controls.Add(this.checkBoxSupportGamepad, 0, 3); + this.tableLayoutPanel2.Controls.Add(this.checkBoxResolveLinksToFolders, 0, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 4; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.Size = new System.Drawing.Size(283, 100); + this.tableLayoutPanel2.TabIndex = 0; + // + // checkBoxShowInTaskbar + // + this.checkBoxShowInTaskbar.AutoSize = true; + this.checkBoxShowInTaskbar.Location = new System.Drawing.Point(3, 28); + this.checkBoxShowInTaskbar.Name = "checkBoxShowInTaskbar"; + this.checkBoxShowInTaskbar.Size = new System.Drawing.Size(155, 19); + this.checkBoxShowInTaskbar.TabIndex = 1; + this.checkBoxShowInTaskbar.Text = "checkBoxShowInTaskbar"; + this.checkBoxShowInTaskbar.UseVisualStyleBackColor = true; + // + // checkBoxSendHotkeyInsteadKillOtherInstances + // + this.checkBoxSendHotkeyInsteadKillOtherInstances.AutoSize = true; + this.checkBoxSendHotkeyInsteadKillOtherInstances.Location = new System.Drawing.Point(3, 53); + this.checkBoxSendHotkeyInsteadKillOtherInstances.MaximumSize = new System.Drawing.Size(330, 0); + this.checkBoxSendHotkeyInsteadKillOtherInstances.Name = "checkBoxSendHotkeyInsteadKillOtherInstances"; + this.checkBoxSendHotkeyInsteadKillOtherInstances.Size = new System.Drawing.Size(274, 19); + this.checkBoxSendHotkeyInsteadKillOtherInstances.TabIndex = 3; + this.checkBoxSendHotkeyInsteadKillOtherInstances.Text = "checkBoxSendHotkeyInsteadKillOtherInstances"; + this.checkBoxSendHotkeyInsteadKillOtherInstances.UseVisualStyleBackColor = true; + // + // checkBoxSupportGamepad + // + this.checkBoxSupportGamepad.AutoSize = true; + this.checkBoxSupportGamepad.Location = new System.Drawing.Point(3, 78); + this.checkBoxSupportGamepad.Name = "checkBoxSupportGamepad"; + this.checkBoxSupportGamepad.Size = new System.Drawing.Size(170, 19); + this.checkBoxSupportGamepad.TabIndex = 4; + this.checkBoxSupportGamepad.Text = "checkBoxSupportGamepad"; + this.checkBoxSupportGamepad.UseVisualStyleBackColor = true; + // + // checkBoxResolveLinksToFolders + // + this.checkBoxResolveLinksToFolders.AutoSize = true; + this.checkBoxResolveLinksToFolders.Location = new System.Drawing.Point(3, 3); + this.checkBoxResolveLinksToFolders.Name = "checkBoxResolveLinksToFolders"; + this.checkBoxResolveLinksToFolders.Size = new System.Drawing.Size(194, 19); + this.checkBoxResolveLinksToFolders.TabIndex = 1; + this.checkBoxResolveLinksToFolders.Text = "checkBoxResolveLinksToFolders"; + this.checkBoxResolveLinksToFolders.UseVisualStyleBackColor = true; + // + // groupBoxInternetShortcutIcons + // + this.groupBoxInternetShortcutIcons.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxInternetShortcutIcons.AutoSize = true; + this.groupBoxInternetShortcutIcons.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxInternetShortcutIcons.Controls.Add(this.tableLayoutPanelInternetShortcutIcons); + this.groupBoxInternetShortcutIcons.Location = new System.Drawing.Point(3, 287); + this.groupBoxInternetShortcutIcons.Name = "groupBoxInternetShortcutIcons"; + this.groupBoxInternetShortcutIcons.Padding = new System.Windows.Forms.Padding(3, 6, 3, 6); + this.groupBoxInternetShortcutIcons.Size = new System.Drawing.Size(289, 81); + this.groupBoxInternetShortcutIcons.TabIndex = 1; + this.groupBoxInternetShortcutIcons.TabStop = false; + this.groupBoxInternetShortcutIcons.Text = "groupBoxInternetShortcutIcons"; + // + // tableLayoutPanelInternetShortcutIcons + // + this.tableLayoutPanelInternetShortcutIcons.AutoSize = true; + this.tableLayoutPanelInternetShortcutIcons.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelInternetShortcutIcons.ColumnCount = 1; + this.tableLayoutPanelInternetShortcutIcons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelInternetShortcutIcons.Controls.Add(this.tableLayoutPanelChangeIcoFolder, 0, 1); + this.tableLayoutPanelInternetShortcutIcons.Controls.Add(this.textBoxIcoFolder, 0, 0); + this.tableLayoutPanelInternetShortcutIcons.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelInternetShortcutIcons.Location = new System.Drawing.Point(3, 22); + this.tableLayoutPanelInternetShortcutIcons.Name = "tableLayoutPanelInternetShortcutIcons"; + this.tableLayoutPanelInternetShortcutIcons.RowCount = 2; + this.tableLayoutPanelInternetShortcutIcons.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelInternetShortcutIcons.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelInternetShortcutIcons.Size = new System.Drawing.Size(283, 53); + this.tableLayoutPanelInternetShortcutIcons.TabIndex = 0; + // + // tableLayoutPanelChangeIcoFolder + // + this.tableLayoutPanelChangeIcoFolder.AutoSize = true; + this.tableLayoutPanelChangeIcoFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelChangeIcoFolder.ColumnCount = 2; + this.tableLayoutPanelChangeIcoFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelChangeIcoFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelChangeIcoFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelChangeIcoFolder.Controls.Add(this.buttonChangeIcoFolder, 0, 0); + this.tableLayoutPanelChangeIcoFolder.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelChangeIcoFolder.Location = new System.Drawing.Point(0, 22); + this.tableLayoutPanelChangeIcoFolder.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelChangeIcoFolder.Name = "tableLayoutPanelChangeIcoFolder"; + this.tableLayoutPanelChangeIcoFolder.RowCount = 1; + this.tableLayoutPanelChangeIcoFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelChangeIcoFolder.Size = new System.Drawing.Size(283, 31); + this.tableLayoutPanelChangeIcoFolder.TabIndex = 0; + // + // buttonChangeIcoFolder + // + this.buttonChangeIcoFolder.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.buttonChangeIcoFolder.AutoSize = true; + this.buttonChangeIcoFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonChangeIcoFolder.Location = new System.Drawing.Point(2, 3); + this.buttonChangeIcoFolder.Margin = new System.Windows.Forms.Padding(2, 3, 3, 3); + this.buttonChangeIcoFolder.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonChangeIcoFolder.Name = "buttonChangeIcoFolder"; + this.buttonChangeIcoFolder.Size = new System.Drawing.Size(143, 25); + this.buttonChangeIcoFolder.TabIndex = 0; + this.buttonChangeIcoFolder.Text = "buttonChangeIcoFolder"; + this.buttonChangeIcoFolder.UseVisualStyleBackColor = true; + this.buttonChangeIcoFolder.Click += new System.EventHandler(this.ButtonChangeIcoFolder_Click); + // + // textBoxIcoFolder + // + this.textBoxIcoFolder.BackColor = System.Drawing.Color.White; + this.textBoxIcoFolder.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBoxIcoFolder.Location = new System.Drawing.Point(6, 3); + this.textBoxIcoFolder.Margin = new System.Windows.Forms.Padding(6, 3, 6, 3); + this.textBoxIcoFolder.Name = "textBoxIcoFolder"; + this.textBoxIcoFolder.ReadOnly = true; + this.textBoxIcoFolder.Size = new System.Drawing.Size(271, 16); + this.textBoxIcoFolder.TabIndex = 0; + this.textBoxIcoFolder.TabStop = false; + // + // groupBoxDrag + // + this.groupBoxDrag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxDrag.AutoSize = true; + this.groupBoxDrag.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxDrag.Controls.Add(this.tableLayoutPanel1); + this.groupBoxDrag.Location = new System.Drawing.Point(3, 209); + this.groupBoxDrag.Name = "groupBoxDrag"; + this.groupBoxDrag.Size = new System.Drawing.Size(289, 72); + this.groupBoxDrag.TabIndex = 4; + this.groupBoxDrag.TabStop = false; + this.groupBoxDrag.Text = "groupBoxDrag"; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.checkBoxSwipeScrolling, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.checkBoxDragDropItems, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(283, 50); + this.tableLayoutPanel1.TabIndex = 1; + // + // checkBoxSwipeScrolling + // + this.checkBoxSwipeScrolling.AutoSize = true; + this.checkBoxSwipeScrolling.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxSwipeScrolling.Location = new System.Drawing.Point(3, 28); + this.checkBoxSwipeScrolling.Name = "checkBoxSwipeScrolling"; + this.checkBoxSwipeScrolling.Size = new System.Drawing.Size(277, 19); + this.checkBoxSwipeScrolling.TabIndex = 4; + this.checkBoxSwipeScrolling.Text = "checkBoxSwipeScrolling"; + this.checkBoxSwipeScrolling.UseVisualStyleBackColor = true; + // + // checkBoxDragDropItems + // + this.checkBoxDragDropItems.AutoSize = true; + this.checkBoxDragDropItems.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxDragDropItems.Location = new System.Drawing.Point(3, 3); + this.checkBoxDragDropItems.Name = "checkBoxDragDropItems"; + this.checkBoxDragDropItems.Size = new System.Drawing.Size(277, 19); + this.checkBoxDragDropItems.TabIndex = 3; + this.checkBoxDragDropItems.Text = "checkBoxDragDropItems"; + this.checkBoxDragDropItems.UseVisualStyleBackColor = true; + // + // buttonAdvancedDefault + // + this.buttonAdvancedDefault.AutoSize = true; + this.buttonAdvancedDefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonAdvancedDefault.Location = new System.Drawing.Point(9, 636); + this.buttonAdvancedDefault.Margin = new System.Windows.Forms.Padding(9, 9, 3, 9); + this.buttonAdvancedDefault.MinimumSize = new System.Drawing.Size(75, 25); + this.buttonAdvancedDefault.Name = "buttonAdvancedDefault"; + this.buttonAdvancedDefault.Size = new System.Drawing.Size(144, 25); + this.buttonAdvancedDefault.TabIndex = 0; + this.buttonAdvancedDefault.Text = "buttonAdvancedDefault"; + this.buttonAdvancedDefault.UseVisualStyleBackColor = true; + this.buttonAdvancedDefault.Click += new System.EventHandler(this.ButtonAdvancedDefault_Click); + // + // groupBoxSorting + // + this.groupBoxSorting.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxSorting.AutoSize = true; + this.groupBoxSorting.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxSorting.Controls.Add(this.tableLayoutPanelSorting); + this.groupBoxSorting.Location = new System.Drawing.Point(3, 374); + this.groupBoxSorting.Name = "groupBoxSorting"; + this.groupBoxSorting.Size = new System.Drawing.Size(289, 147); + this.groupBoxSorting.TabIndex = 3; + this.groupBoxSorting.TabStop = false; + this.groupBoxSorting.Text = "groupBoxSorting"; + // + // tableLayoutPanelSorting + // + this.tableLayoutPanelSorting.AutoSize = true; + this.tableLayoutPanelSorting.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSorting.ColumnCount = 1; + this.tableLayoutPanelSorting.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSorting.Controls.Add(this.radioButtonSortByFileExtensionAndName, 0, 2); + this.tableLayoutPanelSorting.Controls.Add(this.radioButtonSortByTypeAndDate, 0, 1); + this.tableLayoutPanelSorting.Controls.Add(this.radioButtonSortByTypeAndName, 0, 0); + this.tableLayoutPanelSorting.Controls.Add(this.radioButtonSortByDate, 0, 4); + this.tableLayoutPanelSorting.Controls.Add(this.radioButtonSortByName, 0, 3); + this.tableLayoutPanelSorting.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelSorting.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelSorting.Name = "tableLayoutPanelSorting"; + this.tableLayoutPanelSorting.RowCount = 5; + this.tableLayoutPanelSorting.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSorting.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSorting.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSorting.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSorting.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSorting.Size = new System.Drawing.Size(283, 125); + this.tableLayoutPanelSorting.TabIndex = 1; + // + // radioButtonSortByTypeAndDate + // + this.radioButtonSortByTypeAndDate.AutoSize = true; + this.radioButtonSortByTypeAndDate.Location = new System.Drawing.Point(3, 28); + this.radioButtonSortByTypeAndDate.Name = "radioButtonSortByTypeAndDate"; + this.radioButtonSortByTypeAndDate.Size = new System.Drawing.Size(192, 19); + this.radioButtonSortByTypeAndDate.TabIndex = 3; + this.radioButtonSortByTypeAndDate.TabStop = true; + this.radioButtonSortByTypeAndDate.Text = "radioButtonSortByTypeAndDate"; + this.radioButtonSortByTypeAndDate.UseVisualStyleBackColor = true; + // + // radioButtonSortByTypeAndName + // + this.radioButtonSortByTypeAndName.AutoSize = true; + this.radioButtonSortByTypeAndName.Location = new System.Drawing.Point(3, 3); + this.radioButtonSortByTypeAndName.Name = "radioButtonSortByTypeAndName"; + this.radioButtonSortByTypeAndName.Size = new System.Drawing.Size(200, 19); + this.radioButtonSortByTypeAndName.TabIndex = 4; + this.radioButtonSortByTypeAndName.TabStop = true; + this.radioButtonSortByTypeAndName.Text = "radioButtonSortByTypeAndName"; + this.radioButtonSortByTypeAndName.UseVisualStyleBackColor = true; + // + // radioButtonSortByDate + // + this.radioButtonSortByDate.AutoSize = true; + this.radioButtonSortByDate.Location = new System.Drawing.Point(3, 103); + this.radioButtonSortByDate.Name = "radioButtonSortByDate"; + this.radioButtonSortByDate.Size = new System.Drawing.Size(146, 19); + this.radioButtonSortByDate.TabIndex = 1; + this.radioButtonSortByDate.TabStop = true; + this.radioButtonSortByDate.Text = "radioButtonSortByDate"; + this.radioButtonSortByDate.UseVisualStyleBackColor = true; + // + // radioButtonSortByName + // + this.radioButtonSortByName.AutoSize = true; + this.radioButtonSortByName.Location = new System.Drawing.Point(3, 78); + this.radioButtonSortByName.Name = "radioButtonSortByName"; + this.radioButtonSortByName.Size = new System.Drawing.Size(154, 19); + this.radioButtonSortByName.TabIndex = 2; + this.radioButtonSortByName.TabStop = true; + this.radioButtonSortByName.Text = "radioButtonSortByName"; + this.radioButtonSortByName.UseVisualStyleBackColor = true; + // + // groupBoxHiddenFilesAndFolders + // + this.groupBoxHiddenFilesAndFolders.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxHiddenFilesAndFolders.AutoSize = true; + this.groupBoxHiddenFilesAndFolders.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxHiddenFilesAndFolders.Controls.Add(this.tableLayoutPanelHiddenFilesAndFolders); + this.groupBoxHiddenFilesAndFolders.Location = new System.Drawing.Point(3, 527); + this.groupBoxHiddenFilesAndFolders.Name = "groupBoxHiddenFilesAndFolders"; + this.groupBoxHiddenFilesAndFolders.Size = new System.Drawing.Size(289, 97); + this.groupBoxHiddenFilesAndFolders.TabIndex = 2; + this.groupBoxHiddenFilesAndFolders.TabStop = false; + this.groupBoxHiddenFilesAndFolders.Text = "groupBoxHiddenFilesAndFolders"; + // + // tableLayoutPanelHiddenFilesAndFolders + // + this.tableLayoutPanelHiddenFilesAndFolders.AutoSize = true; + this.tableLayoutPanelHiddenFilesAndFolders.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelHiddenFilesAndFolders.ColumnCount = 1; + this.tableLayoutPanelHiddenFilesAndFolders.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelHiddenFilesAndFolders.Controls.Add(this.radioButtonAlwaysShowHiddenFiles, 0, 2); + this.tableLayoutPanelHiddenFilesAndFolders.Controls.Add(this.radioButtonNeverShowHiddenFiles, 0, 1); + this.tableLayoutPanelHiddenFilesAndFolders.Controls.Add(this.radioButtonSystemSettingsShowHiddenFiles, 0, 0); + this.tableLayoutPanelHiddenFilesAndFolders.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelHiddenFilesAndFolders.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelHiddenFilesAndFolders.Name = "tableLayoutPanelHiddenFilesAndFolders"; + this.tableLayoutPanelHiddenFilesAndFolders.RowCount = 3; + this.tableLayoutPanelHiddenFilesAndFolders.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelHiddenFilesAndFolders.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelHiddenFilesAndFolders.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelHiddenFilesAndFolders.Size = new System.Drawing.Size(283, 75); + this.tableLayoutPanelHiddenFilesAndFolders.TabIndex = 1; + // + // radioButtonAlwaysShowHiddenFiles + // + this.radioButtonAlwaysShowHiddenFiles.AutoSize = true; + this.radioButtonAlwaysShowHiddenFiles.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonAlwaysShowHiddenFiles.Location = new System.Drawing.Point(3, 53); + this.radioButtonAlwaysShowHiddenFiles.Name = "radioButtonAlwaysShowHiddenFiles"; + this.radioButtonAlwaysShowHiddenFiles.Size = new System.Drawing.Size(277, 19); + this.radioButtonAlwaysShowHiddenFiles.TabIndex = 2; + this.radioButtonAlwaysShowHiddenFiles.TabStop = true; + this.radioButtonAlwaysShowHiddenFiles.Text = "radioButtonAlwaysShowHiddenFiles"; + this.radioButtonAlwaysShowHiddenFiles.UseVisualStyleBackColor = true; + // + // radioButtonNeverShowHiddenFiles + // + this.radioButtonNeverShowHiddenFiles.AutoSize = true; + this.radioButtonNeverShowHiddenFiles.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonNeverShowHiddenFiles.Location = new System.Drawing.Point(3, 28); + this.radioButtonNeverShowHiddenFiles.Name = "radioButtonNeverShowHiddenFiles"; + this.radioButtonNeverShowHiddenFiles.Size = new System.Drawing.Size(277, 19); + this.radioButtonNeverShowHiddenFiles.TabIndex = 1; + this.radioButtonNeverShowHiddenFiles.TabStop = true; + this.radioButtonNeverShowHiddenFiles.Text = "radioButtonNeverShowHiddenFiles"; + this.radioButtonNeverShowHiddenFiles.UseVisualStyleBackColor = true; + // + // radioButtonSystemSettingsShowHiddenFiles + // + this.radioButtonSystemSettingsShowHiddenFiles.AutoSize = true; + this.radioButtonSystemSettingsShowHiddenFiles.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonSystemSettingsShowHiddenFiles.Location = new System.Drawing.Point(3, 3); + this.radioButtonSystemSettingsShowHiddenFiles.Name = "radioButtonSystemSettingsShowHiddenFiles"; + this.radioButtonSystemSettingsShowHiddenFiles.Size = new System.Drawing.Size(277, 19); + this.radioButtonSystemSettingsShowHiddenFiles.TabIndex = 2; + this.radioButtonSystemSettingsShowHiddenFiles.TabStop = true; + this.radioButtonSystemSettingsShowHiddenFiles.Text = "radioButtonSystemSettingsShowHiddenFiles"; + this.radioButtonSystemSettingsShowHiddenFiles.UseVisualStyleBackColor = true; + // + // groupBoxClick + // + this.groupBoxClick.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxClick.AutoSize = true; + this.groupBoxClick.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxClick.Controls.Add(this.tableLayoutPanelClick); + this.groupBoxClick.Location = new System.Drawing.Point(3, 131); + this.groupBoxClick.Name = "groupBoxClick"; + this.groupBoxClick.Size = new System.Drawing.Size(289, 72); + this.groupBoxClick.TabIndex = 0; + this.groupBoxClick.TabStop = false; + this.groupBoxClick.Text = "groupBoxClick"; + // + // tableLayoutPanelClick + // + this.tableLayoutPanelClick.AutoSize = true; + this.tableLayoutPanelClick.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelClick.ColumnCount = 1; + this.tableLayoutPanelClick.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelClick.Controls.Add(this.checkBoxOpenDirectoryWithOneClick, 0, 1); + this.tableLayoutPanelClick.Controls.Add(this.checkBoxOpenItemWithOneClick, 0, 0); + this.tableLayoutPanelClick.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelClick.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelClick.Name = "tableLayoutPanelClick"; + this.tableLayoutPanelClick.RowCount = 2; + this.tableLayoutPanelClick.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelClick.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelClick.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelClick.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelClick.Size = new System.Drawing.Size(283, 50); + this.tableLayoutPanelClick.TabIndex = 0; + // + // checkBoxOpenDirectoryWithOneClick + // + this.checkBoxOpenDirectoryWithOneClick.AutoSize = true; + this.checkBoxOpenDirectoryWithOneClick.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxOpenDirectoryWithOneClick.Location = new System.Drawing.Point(3, 28); + this.checkBoxOpenDirectoryWithOneClick.Name = "checkBoxOpenDirectoryWithOneClick"; + this.checkBoxOpenDirectoryWithOneClick.Size = new System.Drawing.Size(277, 19); + this.checkBoxOpenDirectoryWithOneClick.TabIndex = 2; + this.checkBoxOpenDirectoryWithOneClick.Text = "checkBoxOpenDirectoryWithOneClick"; + this.checkBoxOpenDirectoryWithOneClick.UseVisualStyleBackColor = true; + // + // checkBoxOpenItemWithOneClick + // + this.checkBoxOpenItemWithOneClick.AutoSize = true; + this.checkBoxOpenItemWithOneClick.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxOpenItemWithOneClick.Location = new System.Drawing.Point(3, 3); + this.checkBoxOpenItemWithOneClick.Name = "checkBoxOpenItemWithOneClick"; + this.checkBoxOpenItemWithOneClick.Size = new System.Drawing.Size(277, 19); + this.checkBoxOpenItemWithOneClick.TabIndex = 0; + this.checkBoxOpenItemWithOneClick.Text = "checkBoxOpenItemWithOneClick"; + this.checkBoxOpenItemWithOneClick.UseVisualStyleBackColor = true; + // + // tabPageFolders + // + this.tabPageFolders.Controls.Add(this.tableLayoutPanelFoldersInRootFolder); + this.tabPageFolders.Location = new System.Drawing.Point(4, 24); + this.tabPageFolders.Name = "tabPageFolders"; + this.tabPageFolders.Padding = new System.Windows.Forms.Padding(3); + this.tabPageFolders.Size = new System.Drawing.Size(412, 485); + this.tabPageFolders.TabIndex = 2; + this.tabPageFolders.Text = "tabPageFolders"; + this.tabPageFolders.UseVisualStyleBackColor = true; + // + // tableLayoutPanelFoldersInRootFolder + // + this.tableLayoutPanelFoldersInRootFolder.AutoSize = true; + this.tableLayoutPanelFoldersInRootFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelFoldersInRootFolder.ColumnCount = 1; + this.tableLayoutPanelFoldersInRootFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelFoldersInRootFolder.Controls.Add(this.groupBoxFoldersInRootFolder, 0, 0); + this.tableLayoutPanelFoldersInRootFolder.Controls.Add(this.buttonDefaultFolders, 0, 1); + this.tableLayoutPanelFoldersInRootFolder.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanelFoldersInRootFolder.Name = "tableLayoutPanelFoldersInRootFolder"; + this.tableLayoutPanelFoldersInRootFolder.Padding = new System.Windows.Forms.Padding(0, 0, 6, 0); + this.tableLayoutPanelFoldersInRootFolder.RowCount = 2; + this.tableLayoutPanelFoldersInRootFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFoldersInRootFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFoldersInRootFolder.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelFoldersInRootFolder.Size = new System.Drawing.Size(345, 415); + this.tableLayoutPanelFoldersInRootFolder.TabIndex = 1; + // + // groupBoxFoldersInRootFolder + // + this.groupBoxFoldersInRootFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxFoldersInRootFolder.AutoSize = true; + this.groupBoxFoldersInRootFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxFoldersInRootFolder.Controls.Add(this.tableLayoutPanelFolderToRootFoldersList); + this.groupBoxFoldersInRootFolder.Location = new System.Drawing.Point(3, 3); + this.groupBoxFoldersInRootFolder.Name = "groupBoxFoldersInRootFolder"; + this.groupBoxFoldersInRootFolder.Size = new System.Drawing.Size(333, 366); + this.groupBoxFoldersInRootFolder.TabIndex = 0; + this.groupBoxFoldersInRootFolder.TabStop = false; + this.groupBoxFoldersInRootFolder.Text = "groupBoxFoldersInRootFolder"; + // + // tableLayoutPanelFolderToRootFoldersList + // + this.tableLayoutPanelFolderToRootFoldersList.AutoSize = true; + this.tableLayoutPanelFolderToRootFoldersList.ColumnCount = 1; + this.tableLayoutPanelFolderToRootFoldersList.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelFolderToRootFoldersList.Controls.Add(this.tableLayoutPanelFolderToRootFolder, 0, 2); + this.tableLayoutPanelFolderToRootFoldersList.Controls.Add(this.dataGridViewFolders, 0, 3); + this.tableLayoutPanelFolderToRootFoldersList.Controls.Add(this.tableLayoutPanelAddSampleStartMenuFolder, 0, 4); + this.tableLayoutPanelFolderToRootFoldersList.Controls.Add(this.checkBoxGenerateShortcutsToDrives, 0, 5); + this.tableLayoutPanelFolderToRootFoldersList.Controls.Add(this.checkBoxShowOnlyAsSearchResult, 0, 0); + this.tableLayoutPanelFolderToRootFoldersList.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelFolderToRootFoldersList.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelFolderToRootFoldersList.Name = "tableLayoutPanelFolderToRootFoldersList"; + this.tableLayoutPanelFolderToRootFoldersList.RowCount = 6; + this.tableLayoutPanelFolderToRootFoldersList.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolderToRootFoldersList.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolderToRootFoldersList.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolderToRootFoldersList.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelFolderToRootFoldersList.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolderToRootFoldersList.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelFolderToRootFoldersList.Size = new System.Drawing.Size(327, 344); + this.tableLayoutPanelFolderToRootFoldersList.TabIndex = 0; + // + // tableLayoutPanelFolderToRootFolder + // + this.tableLayoutPanelFolderToRootFolder.AutoSize = true; + this.tableLayoutPanelFolderToRootFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelFolderToRootFolder.ColumnCount = 3; + this.tableLayoutPanelFolderToRootFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelFolderToRootFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelFolderToRootFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelFolderToRootFolder.Controls.Add(this.buttonAddFolderToRootFolder, 0, 0); + this.tableLayoutPanelFolderToRootFolder.Controls.Add(this.buttonRemoveFolder, 2, 0); + this.tableLayoutPanelFolderToRootFolder.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelFolderToRootFolder.Location = new System.Drawing.Point(0, 25); + this.tableLayoutPanelFolderToRootFolder.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelFolderToRootFolder.Name = "tableLayoutPanelFolderToRootFolder"; + this.tableLayoutPanelFolderToRootFolder.RowCount = 1; + this.tableLayoutPanelFolderToRootFolder.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelFolderToRootFolder.Size = new System.Drawing.Size(327, 31); + this.tableLayoutPanelFolderToRootFolder.TabIndex = 2; + // + // buttonAddFolderToRootFolder + // + this.buttonAddFolderToRootFolder.AutoSize = true; + this.buttonAddFolderToRootFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonAddFolderToRootFolder.Location = new System.Drawing.Point(2, 3); + this.buttonAddFolderToRootFolder.Margin = new System.Windows.Forms.Padding(2, 3, 3, 3); + this.buttonAddFolderToRootFolder.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonAddFolderToRootFolder.Name = "buttonAddFolderToRootFolder"; + this.buttonAddFolderToRootFolder.Size = new System.Drawing.Size(178, 25); + this.buttonAddFolderToRootFolder.TabIndex = 0; + this.buttonAddFolderToRootFolder.Text = "buttonAddFolderToRootFolder"; + this.buttonAddFolderToRootFolder.UseVisualStyleBackColor = true; + this.buttonAddFolderToRootFolder.Click += new System.EventHandler(this.ButtonAddFolderToRootFolder_Click); + // + // buttonRemoveFolder + // + this.buttonRemoveFolder.AutoSize = true; + this.buttonRemoveFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonRemoveFolder.Location = new System.Drawing.Point(195, 3); + this.buttonRemoveFolder.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonRemoveFolder.Name = "buttonRemoveFolder"; + this.buttonRemoveFolder.Size = new System.Drawing.Size(129, 25); + this.buttonRemoveFolder.TabIndex = 1; + this.buttonRemoveFolder.Text = "buttonRemoveFolder"; + this.buttonRemoveFolder.UseVisualStyleBackColor = true; + this.buttonRemoveFolder.Click += new System.EventHandler(this.ButtonRemoveFolder_Click); + // + // dataGridViewFolders + // + this.dataGridViewFolders.AllowUserToAddRows = false; + this.dataGridViewFolders.AllowUserToDeleteRows = false; + this.dataGridViewFolders.AllowUserToResizeColumns = false; + this.dataGridViewFolders.AllowUserToResizeRows = false; + this.dataGridViewFolders.BackgroundColor = System.Drawing.Color.White; + this.dataGridViewFolders.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridViewFolders.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ColumnFolder, + this.ColumnRecursiveLevel, + this.ColumnOnlyFiles}); + this.dataGridViewFolders.Location = new System.Drawing.Point(3, 59); + this.dataGridViewFolders.Name = "dataGridViewFolders"; + this.dataGridViewFolders.RowHeadersVisible = false; + this.dataGridViewFolders.RowTemplate.Height = 25; + this.dataGridViewFolders.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridViewFolders.Size = new System.Drawing.Size(321, 226); + this.dataGridViewFolders.TabIndex = 6; + this.dataGridViewFolders.TabStop = false; + this.dataGridViewFolders.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.DataGridViewFolders_CellValidating); + this.dataGridViewFolders.CurrentCellDirtyStateChanged += new System.EventHandler(this.DataGridViewFolders_CurrentCellDirtyStateChanged); + this.dataGridViewFolders.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler(this.DataGridViewFolders_RowsAdded); + this.dataGridViewFolders.RowsRemoved += new System.Windows.Forms.DataGridViewRowsRemovedEventHandler(this.DataGridViewFolders_RowsRemoved); + this.dataGridViewFolders.SelectionChanged += new System.EventHandler(this.DataGridViewFolders_SelectionChanged); + this.dataGridViewFolders.MouseClick += new System.Windows.Forms.MouseEventHandler(this.DataGridViewFolders_MouseClick); + // + // ColumnFolder + // + this.ColumnFolder.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ColumnFolder.HeaderText = "ColumnFolder"; + this.ColumnFolder.Name = "ColumnFolder"; + // + // ColumnRecursiveLevel + // + this.ColumnRecursiveLevel.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.ColumnHeader; + this.ColumnRecursiveLevel.HeaderText = "ColumnRecursiveLevel"; + this.ColumnRecursiveLevel.Name = "ColumnRecursiveLevel"; + this.ColumnRecursiveLevel.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ColumnRecursiveLevel.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.ColumnRecursiveLevel.Width = 152; + // + // ColumnOnlyFiles + // + this.ColumnOnlyFiles.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.ColumnHeader; + this.ColumnOnlyFiles.HeaderText = "ColumnOnlyFiles"; + this.ColumnOnlyFiles.Name = "ColumnOnlyFiles"; + this.ColumnOnlyFiles.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ColumnOnlyFiles.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.ColumnOnlyFiles.Width = 123; + // + // tableLayoutPanelAddSampleStartMenuFolder + // + this.tableLayoutPanelAddSampleStartMenuFolder.AutoSize = true; + this.tableLayoutPanelAddSampleStartMenuFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelAddSampleStartMenuFolder.ColumnCount = 2; + this.tableLayoutPanelAddSampleStartMenuFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelAddSampleStartMenuFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelAddSampleStartMenuFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelAddSampleStartMenuFolder.Controls.Add(this.buttonAddSampleStartMenuFolder, 0, 0); + this.tableLayoutPanelAddSampleStartMenuFolder.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelAddSampleStartMenuFolder.Location = new System.Drawing.Point(0, 288); + this.tableLayoutPanelAddSampleStartMenuFolder.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelAddSampleStartMenuFolder.Name = "tableLayoutPanelAddSampleStartMenuFolder"; + this.tableLayoutPanelAddSampleStartMenuFolder.RowCount = 1; + this.tableLayoutPanelAddSampleStartMenuFolder.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelAddSampleStartMenuFolder.Size = new System.Drawing.Size(327, 31); + this.tableLayoutPanelAddSampleStartMenuFolder.TabIndex = 3; + // + // buttonAddSampleStartMenuFolder + // + this.buttonAddSampleStartMenuFolder.AutoSize = true; + this.buttonAddSampleStartMenuFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonAddSampleStartMenuFolder.Location = new System.Drawing.Point(2, 3); + this.buttonAddSampleStartMenuFolder.Margin = new System.Windows.Forms.Padding(2, 3, 3, 3); + this.buttonAddSampleStartMenuFolder.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonAddSampleStartMenuFolder.Name = "buttonAddSampleStartMenuFolder"; + this.buttonAddSampleStartMenuFolder.Size = new System.Drawing.Size(202, 25); + this.buttonAddSampleStartMenuFolder.TabIndex = 2; + this.buttonAddSampleStartMenuFolder.Text = "buttonAddSampleStartMenuFolder"; + this.buttonAddSampleStartMenuFolder.UseVisualStyleBackColor = true; + this.buttonAddSampleStartMenuFolder.Click += new System.EventHandler(this.ButtonAddSampleStartMenuFolder_Click); + // + // checkBoxGenerateShortcutsToDrives + // + this.checkBoxGenerateShortcutsToDrives.AutoSize = true; + this.checkBoxGenerateShortcutsToDrives.Location = new System.Drawing.Point(3, 322); + this.checkBoxGenerateShortcutsToDrives.Name = "checkBoxGenerateShortcutsToDrives"; + this.checkBoxGenerateShortcutsToDrives.Size = new System.Drawing.Size(218, 19); + this.checkBoxGenerateShortcutsToDrives.TabIndex = 7; + this.checkBoxGenerateShortcutsToDrives.Text = "checkBoxGenerateShortcutsToDrives"; + this.checkBoxGenerateShortcutsToDrives.UseVisualStyleBackColor = true; + // + // checkBoxShowOnlyAsSearchResult + // + this.checkBoxShowOnlyAsSearchResult.AutoSize = true; + this.checkBoxShowOnlyAsSearchResult.Location = new System.Drawing.Point(3, 3); + this.checkBoxShowOnlyAsSearchResult.Name = "checkBoxShowOnlyAsSearchResult"; + this.checkBoxShowOnlyAsSearchResult.Size = new System.Drawing.Size(211, 19); + this.checkBoxShowOnlyAsSearchResult.TabIndex = 8; + this.checkBoxShowOnlyAsSearchResult.Text = "checkBoxShowOnlyAsSearchResult"; + this.checkBoxShowOnlyAsSearchResult.UseVisualStyleBackColor = true; + // + // buttonDefaultFolders + // + this.buttonDefaultFolders.AutoSize = true; + this.buttonDefaultFolders.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonDefaultFolders.Location = new System.Drawing.Point(9, 381); + this.buttonDefaultFolders.Margin = new System.Windows.Forms.Padding(9, 9, 3, 9); + this.buttonDefaultFolders.MinimumSize = new System.Drawing.Size(75, 25); + this.buttonDefaultFolders.Name = "buttonDefaultFolders"; + this.buttonDefaultFolders.Size = new System.Drawing.Size(129, 25); + this.buttonDefaultFolders.TabIndex = 6; + this.buttonDefaultFolders.Text = "buttonDefaultFolders"; + this.buttonDefaultFolders.UseVisualStyleBackColor = true; + this.buttonDefaultFolders.Click += new System.EventHandler(this.ButtonClearFolders_Click); + // + // tabPageExpert + // + this.tabPageExpert.Controls.Add(this.tableLayoutPanelExpert); + this.tabPageExpert.Location = new System.Drawing.Point(4, 24); + this.tabPageExpert.Name = "tabPageExpert"; + this.tabPageExpert.Padding = new System.Windows.Forms.Padding(3); + this.tabPageExpert.Size = new System.Drawing.Size(412, 485); + this.tabPageExpert.TabIndex = 1; + this.tabPageExpert.Text = "tabPageExpert"; + this.tabPageExpert.UseVisualStyleBackColor = true; + // + // tableLayoutPanelExpert + // + this.tableLayoutPanelExpert.AutoSize = true; + this.tableLayoutPanelExpert.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelExpert.ColumnCount = 1; + this.tableLayoutPanelExpert.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelExpert.Controls.Add(this.groupBoxSearchPattern, 0, 3); + this.tableLayoutPanelExpert.Controls.Add(this.groupBoxCache, 0, 2); + this.tableLayoutPanelExpert.Controls.Add(this.groupBoxStaysOpen, 0, 1); + this.tableLayoutPanelExpert.Controls.Add(this.groupBoxOpenSubmenus, 0, 0); + this.tableLayoutPanelExpert.Controls.Add(this.buttonExpertDefault, 0, 4); + this.tableLayoutPanelExpert.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanelExpert.Name = "tableLayoutPanelExpert"; + this.tableLayoutPanelExpert.Padding = new System.Windows.Forms.Padding(0, 0, 6, 0); + this.tableLayoutPanelExpert.RowCount = 5; + this.tableLayoutPanelExpert.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelExpert.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelExpert.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelExpert.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelExpert.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelExpert.Size = new System.Drawing.Size(345, 387); + this.tableLayoutPanelExpert.TabIndex = 1; + // + // groupBoxSearchPattern + // + this.groupBoxSearchPattern.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxSearchPattern.AutoSize = true; + this.groupBoxSearchPattern.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxSearchPattern.Controls.Add(this.tableLayoutPanelSearchPattern); + this.groupBoxSearchPattern.Location = new System.Drawing.Point(3, 287); + this.groupBoxSearchPattern.Name = "groupBoxSearchPattern"; + this.groupBoxSearchPattern.Padding = new System.Windows.Forms.Padding(3, 3, 3, 6); + this.groupBoxSearchPattern.Size = new System.Drawing.Size(333, 54); + this.groupBoxSearchPattern.TabIndex = 2; + this.groupBoxSearchPattern.TabStop = false; + this.groupBoxSearchPattern.Text = "groupBoxSearchPattern"; + // + // tableLayoutPanelSearchPattern + // + this.tableLayoutPanelSearchPattern.AutoSize = true; + this.tableLayoutPanelSearchPattern.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSearchPattern.ColumnCount = 1; + this.tableLayoutPanelSearchPattern.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSearchPattern.Controls.Add(this.textBoxSearchPattern, 0, 0); + this.tableLayoutPanelSearchPattern.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelSearchPattern.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelSearchPattern.Name = "tableLayoutPanelSearchPattern"; + this.tableLayoutPanelSearchPattern.RowCount = 1; + this.tableLayoutPanelSearchPattern.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSearchPattern.Size = new System.Drawing.Size(327, 29); + this.tableLayoutPanelSearchPattern.TabIndex = 0; + // + // textBoxSearchPattern + // + this.textBoxSearchPattern.Location = new System.Drawing.Point(3, 3); + this.textBoxSearchPattern.Name = "textBoxSearchPattern"; + this.textBoxSearchPattern.Size = new System.Drawing.Size(311, 23); + this.textBoxSearchPattern.TabIndex = 1; + this.textBoxSearchPattern.TabStop = false; + // + // groupBoxCache + // + this.groupBoxCache.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxCache.AutoSize = true; + this.groupBoxCache.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxCache.Controls.Add(this.tableLayoutPanelCache); + this.groupBoxCache.Location = new System.Drawing.Point(3, 227); + this.groupBoxCache.Name = "groupBoxCache"; + this.groupBoxCache.Padding = new System.Windows.Forms.Padding(3, 3, 3, 6); + this.groupBoxCache.Size = new System.Drawing.Size(333, 54); + this.groupBoxCache.TabIndex = 1; + this.groupBoxCache.TabStop = false; + this.groupBoxCache.Text = "groupBoxCache"; + // + // tableLayoutPanelCache + // + this.tableLayoutPanelCache.AutoSize = true; + this.tableLayoutPanelCache.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelCache.ColumnCount = 1; + this.tableLayoutPanelCache.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelCache.Controls.Add(this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems, 0, 0); + this.tableLayoutPanelCache.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelCache.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelCache.Name = "tableLayoutPanelCache"; + this.tableLayoutPanelCache.RowCount = 1; + this.tableLayoutPanelCache.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelCache.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelCache.Size = new System.Drawing.Size(327, 29); + this.tableLayoutPanelCache.TabIndex = 0; + // + // tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems + // + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.AutoSize = true; + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.ColumnCount = 2; + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.Controls.Add(this.labelClearCacheIfMoreThanThisNumberOfItems, 1, 0); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.Controls.Add(this.numericUpDownClearCacheIfMoreThanThisNumberOfItems, 0, 0); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.Name = "tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems"; + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.RowCount = 1; + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.Size = new System.Drawing.Size(327, 29); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.TabIndex = 3; + // + // labelClearCacheIfMoreThanThisNumberOfItems + // + this.labelClearCacheIfMoreThanThisNumberOfItems.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelClearCacheIfMoreThanThisNumberOfItems.AutoSize = true; + this.labelClearCacheIfMoreThanThisNumberOfItems.Location = new System.Drawing.Point(64, 7); + this.labelClearCacheIfMoreThanThisNumberOfItems.MaximumSize = new System.Drawing.Size(330, 0); + this.labelClearCacheIfMoreThanThisNumberOfItems.Name = "labelClearCacheIfMoreThanThisNumberOfItems"; + this.labelClearCacheIfMoreThanThisNumberOfItems.Size = new System.Drawing.Size(260, 15); + this.labelClearCacheIfMoreThanThisNumberOfItems.TabIndex = 0; + this.labelClearCacheIfMoreThanThisNumberOfItems.Text = "labelClearCacheIfMoreThanThisNumberOfItems"; + // + // numericUpDownClearCacheIfMoreThanThisNumberOfItems + // + this.numericUpDownClearCacheIfMoreThanThisNumberOfItems.Location = new System.Drawing.Point(3, 3); + this.numericUpDownClearCacheIfMoreThanThisNumberOfItems.Maximum = new decimal(new int[] { + 5000, + 0, + 0, + 0}); + this.numericUpDownClearCacheIfMoreThanThisNumberOfItems.Minimum = new decimal(new int[] { + 200, + 0, + 0, + 0}); + this.numericUpDownClearCacheIfMoreThanThisNumberOfItems.Name = "numericUpDownClearCacheIfMoreThanThisNumberOfItems"; + this.numericUpDownClearCacheIfMoreThanThisNumberOfItems.Size = new System.Drawing.Size(55, 23); + this.numericUpDownClearCacheIfMoreThanThisNumberOfItems.TabIndex = 5; + this.numericUpDownClearCacheIfMoreThanThisNumberOfItems.Value = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + // + // groupBoxStaysOpen + // + this.groupBoxStaysOpen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxStaysOpen.AutoSize = true; + this.groupBoxStaysOpen.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxStaysOpen.Controls.Add(this.tableLayoutPanelStaysOpen); + this.groupBoxStaysOpen.Location = new System.Drawing.Point(3, 63); + this.groupBoxStaysOpen.Name = "groupBoxStaysOpen"; + this.groupBoxStaysOpen.Padding = new System.Windows.Forms.Padding(3, 3, 3, 6); + this.groupBoxStaysOpen.Size = new System.Drawing.Size(333, 158); + this.groupBoxStaysOpen.TabIndex = 0; + this.groupBoxStaysOpen.TabStop = false; + this.groupBoxStaysOpen.Text = "groupBoxStaysOpen"; + // + // tableLayoutPanelStaysOpen + // + this.tableLayoutPanelStaysOpen.AutoSize = true; + this.tableLayoutPanelStaysOpen.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelStaysOpen.ColumnCount = 1; + this.tableLayoutPanelStaysOpen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelStaysOpen.Controls.Add(this.tableLayoutPanelTimeUntilClosesAfterEnterPressed, 0, 4); + this.tableLayoutPanelStaysOpen.Controls.Add(this.checkBoxStayOpenWhenItemClicked, 0, 0); + this.tableLayoutPanelStaysOpen.Controls.Add(this.checkBoxStayOpenWhenFocusLost, 0, 1); + this.tableLayoutPanelStaysOpen.Controls.Add(this.tableLayoutPanelTimeUntilCloses, 0, 2); + this.tableLayoutPanelStaysOpen.Controls.Add(this.checkBoxStayOpenWhenFocusLostAfterEnterPressed, 0, 3); + this.tableLayoutPanelStaysOpen.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelStaysOpen.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelStaysOpen.Name = "tableLayoutPanelStaysOpen"; + this.tableLayoutPanelStaysOpen.RowCount = 5; + this.tableLayoutPanelStaysOpen.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelStaysOpen.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelStaysOpen.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelStaysOpen.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelStaysOpen.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelStaysOpen.Size = new System.Drawing.Size(327, 133); + this.tableLayoutPanelStaysOpen.TabIndex = 0; + // + // tableLayoutPanelTimeUntilClosesAfterEnterPressed + // + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.AutoSize = true; + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.ColumnCount = 2; + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.Controls.Add(this.labelTimeUntilClosesAfterEnterPressed, 1, 0); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.Controls.Add(this.numericUpDownTimeUntilClosesAfterEnterPressed, 0, 0); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.Location = new System.Drawing.Point(0, 104); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.Name = "tableLayoutPanelTimeUntilClosesAfterEnterPressed"; + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.RowCount = 1; + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.Size = new System.Drawing.Size(327, 29); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.TabIndex = 2; + // + // labelTimeUntilClosesAfterEnterPressed + // + this.labelTimeUntilClosesAfterEnterPressed.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelTimeUntilClosesAfterEnterPressed.AutoSize = true; + this.labelTimeUntilClosesAfterEnterPressed.Location = new System.Drawing.Point(64, 7); + this.labelTimeUntilClosesAfterEnterPressed.MaximumSize = new System.Drawing.Size(300, 0); + this.labelTimeUntilClosesAfterEnterPressed.Name = "labelTimeUntilClosesAfterEnterPressed"; + this.labelTimeUntilClosesAfterEnterPressed.Size = new System.Drawing.Size(210, 15); + this.labelTimeUntilClosesAfterEnterPressed.TabIndex = 0; + this.labelTimeUntilClosesAfterEnterPressed.Text = "labelTimeUntilClosesAfterEnterPressed"; + // + // numericUpDownTimeUntilClosesAfterEnterPressed + // + this.numericUpDownTimeUntilClosesAfterEnterPressed.Location = new System.Drawing.Point(3, 3); + this.numericUpDownTimeUntilClosesAfterEnterPressed.Name = "numericUpDownTimeUntilClosesAfterEnterPressed"; + this.numericUpDownTimeUntilClosesAfterEnterPressed.Size = new System.Drawing.Size(55, 23); + this.numericUpDownTimeUntilClosesAfterEnterPressed.TabIndex = 1; + // + // checkBoxStayOpenWhenItemClicked + // + this.checkBoxStayOpenWhenItemClicked.AutoSize = true; + this.checkBoxStayOpenWhenItemClicked.Checked = true; + this.checkBoxStayOpenWhenItemClicked.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxStayOpenWhenItemClicked.Location = new System.Drawing.Point(3, 3); + this.checkBoxStayOpenWhenItemClicked.Name = "checkBoxStayOpenWhenItemClicked"; + this.checkBoxStayOpenWhenItemClicked.Size = new System.Drawing.Size(222, 19); + this.checkBoxStayOpenWhenItemClicked.TabIndex = 0; + this.checkBoxStayOpenWhenItemClicked.Text = "checkBoxStayOpenWhenItemClicked"; + this.checkBoxStayOpenWhenItemClicked.UseVisualStyleBackColor = true; + // + // checkBoxStayOpenWhenFocusLost + // + this.checkBoxStayOpenWhenFocusLost.AutoSize = true; + this.checkBoxStayOpenWhenFocusLost.Checked = true; + this.checkBoxStayOpenWhenFocusLost.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxStayOpenWhenFocusLost.Location = new System.Drawing.Point(3, 28); + this.checkBoxStayOpenWhenFocusLost.Name = "checkBoxStayOpenWhenFocusLost"; + this.checkBoxStayOpenWhenFocusLost.Size = new System.Drawing.Size(212, 19); + this.checkBoxStayOpenWhenFocusLost.TabIndex = 0; + this.checkBoxStayOpenWhenFocusLost.Text = "checkBoxStayOpenWhenFocusLost"; + this.checkBoxStayOpenWhenFocusLost.UseVisualStyleBackColor = true; + this.checkBoxStayOpenWhenFocusLost.CheckedChanged += new System.EventHandler(this.CheckBoxStayOpenWhenFocusLost_CheckedChanged); + // + // tableLayoutPanelTimeUntilCloses + // + this.tableLayoutPanelTimeUntilCloses.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelTimeUntilCloses.AutoSize = true; + this.tableLayoutPanelTimeUntilCloses.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelTimeUntilCloses.ColumnCount = 2; + this.tableLayoutPanelTimeUntilCloses.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelTimeUntilCloses.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelTimeUntilCloses.Controls.Add(this.labelTimeUntilCloses, 1, 0); + this.tableLayoutPanelTimeUntilCloses.Controls.Add(this.numericUpDownTimeUntilClose, 0, 0); + this.tableLayoutPanelTimeUntilCloses.Location = new System.Drawing.Point(0, 50); + this.tableLayoutPanelTimeUntilCloses.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelTimeUntilCloses.Name = "tableLayoutPanelTimeUntilCloses"; + this.tableLayoutPanelTimeUntilCloses.RowCount = 1; + this.tableLayoutPanelTimeUntilCloses.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelTimeUntilCloses.Size = new System.Drawing.Size(327, 29); + this.tableLayoutPanelTimeUntilCloses.TabIndex = 0; + // + // labelTimeUntilCloses + // + this.labelTimeUntilCloses.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelTimeUntilCloses.AutoSize = true; + this.labelTimeUntilCloses.Location = new System.Drawing.Point(64, 7); + this.labelTimeUntilCloses.MaximumSize = new System.Drawing.Size(300, 0); + this.labelTimeUntilCloses.Name = "labelTimeUntilCloses"; + this.labelTimeUntilCloses.Size = new System.Drawing.Size(117, 15); + this.labelTimeUntilCloses.TabIndex = 0; + this.labelTimeUntilCloses.Text = "labelTimeUntilCloses"; + // + // numericUpDownTimeUntilClose + // + this.numericUpDownTimeUntilClose.Location = new System.Drawing.Point(3, 3); + this.numericUpDownTimeUntilClose.Name = "numericUpDownTimeUntilClose"; + this.numericUpDownTimeUntilClose.Size = new System.Drawing.Size(55, 23); + this.numericUpDownTimeUntilClose.TabIndex = 1; + this.numericUpDownTimeUntilClose.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.numericUpDownTimeUntilClose.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // checkBoxStayOpenWhenFocusLostAfterEnterPressed + // + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.AutoSize = true; + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.Checked = true; + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.Location = new System.Drawing.Point(3, 82); + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.Name = "checkBoxStayOpenWhenFocusLostAfterEnterPressed"; + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.Size = new System.Drawing.Size(305, 19); + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.TabIndex = 1; + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.Text = "checkBoxStayOpenWhenFocusLostAfterEnterPressed"; + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.UseVisualStyleBackColor = true; + this.checkBoxStayOpenWhenFocusLostAfterEnterPressed.CheckedChanged += new System.EventHandler(this.CheckBoxStayOpenWhenFocusLostAfterEnterPressed_CheckedChanged); + // + // groupBoxOpenSubmenus + // + this.groupBoxOpenSubmenus.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxOpenSubmenus.AutoSize = true; + this.groupBoxOpenSubmenus.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxOpenSubmenus.Controls.Add(this.tableLayoutPanelTimeUntilOpen); + this.groupBoxOpenSubmenus.Location = new System.Drawing.Point(3, 3); + this.groupBoxOpenSubmenus.Name = "groupBoxOpenSubmenus"; + this.groupBoxOpenSubmenus.Padding = new System.Windows.Forms.Padding(3, 3, 3, 6); + this.groupBoxOpenSubmenus.Size = new System.Drawing.Size(333, 54); + this.groupBoxOpenSubmenus.TabIndex = 0; + this.groupBoxOpenSubmenus.TabStop = false; + this.groupBoxOpenSubmenus.Text = "groupBoxOpenSubmenus"; + // + // tableLayoutPanelTimeUntilOpen + // + this.tableLayoutPanelTimeUntilOpen.AutoSize = true; + this.tableLayoutPanelTimeUntilOpen.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelTimeUntilOpen.ColumnCount = 2; + this.tableLayoutPanelTimeUntilOpen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelTimeUntilOpen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelTimeUntilOpen.Controls.Add(this.numericUpDownTimeUntilOpens, 0, 0); + this.tableLayoutPanelTimeUntilOpen.Controls.Add(this.labelTimeUntilOpen, 1, 0); + this.tableLayoutPanelTimeUntilOpen.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelTimeUntilOpen.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelTimeUntilOpen.Name = "tableLayoutPanelTimeUntilOpen"; + this.tableLayoutPanelTimeUntilOpen.RowCount = 1; + this.tableLayoutPanelTimeUntilOpen.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelTimeUntilOpen.Size = new System.Drawing.Size(327, 29); + this.tableLayoutPanelTimeUntilOpen.TabIndex = 0; + // + // numericUpDownTimeUntilOpens + // + this.numericUpDownTimeUntilOpens.Location = new System.Drawing.Point(3, 3); + this.numericUpDownTimeUntilOpens.Name = "numericUpDownTimeUntilOpens"; + this.numericUpDownTimeUntilOpens.Size = new System.Drawing.Size(55, 23); + this.numericUpDownTimeUntilOpens.TabIndex = 2; + this.numericUpDownTimeUntilOpens.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.numericUpDownTimeUntilOpens.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelTimeUntilOpen + // + this.labelTimeUntilOpen.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelTimeUntilOpen.AutoSize = true; + this.labelTimeUntilOpen.Location = new System.Drawing.Point(64, 7); + this.labelTimeUntilOpen.MaximumSize = new System.Drawing.Size(330, 0); + this.labelTimeUntilOpen.Name = "labelTimeUntilOpen"; + this.labelTimeUntilOpen.Size = new System.Drawing.Size(112, 15); + this.labelTimeUntilOpen.TabIndex = 0; + this.labelTimeUntilOpen.Text = "labelTimeUntilOpen"; + // + // buttonExpertDefault + // + this.buttonExpertDefault.AutoSize = true; + this.buttonExpertDefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonExpertDefault.Location = new System.Drawing.Point(9, 353); + this.buttonExpertDefault.Margin = new System.Windows.Forms.Padding(9, 9, 3, 9); + this.buttonExpertDefault.MinimumSize = new System.Drawing.Size(75, 25); + this.buttonExpertDefault.Name = "buttonExpertDefault"; + this.buttonExpertDefault.Size = new System.Drawing.Size(124, 25); + this.buttonExpertDefault.TabIndex = 0; + this.buttonExpertDefault.Text = "buttonExpertDefault"; + this.buttonExpertDefault.UseVisualStyleBackColor = true; + this.buttonExpertDefault.Click += new System.EventHandler(this.ButtonExpertDefault_Click); + // + // tabPageCustomize + // + this.tabPageCustomize.AutoScroll = true; + this.tabPageCustomize.Controls.Add(this.tableLayoutPanelCustomize); + this.tabPageCustomize.Location = new System.Drawing.Point(4, 24); + this.tabPageCustomize.Name = "tabPageCustomize"; + this.tabPageCustomize.Padding = new System.Windows.Forms.Padding(3); + this.tabPageCustomize.Size = new System.Drawing.Size(412, 485); + this.tabPageCustomize.TabIndex = 0; + this.tabPageCustomize.Text = "tabPageCustomize"; + this.tabPageCustomize.UseVisualStyleBackColor = true; + // + // tableLayoutPanelCustomize + // + this.tableLayoutPanelCustomize.AutoSize = true; + this.tableLayoutPanelCustomize.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelCustomize.ColumnCount = 1; + this.tableLayoutPanelCustomize.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelCustomize.Controls.Add(this.groupBoxColorsDarkMode, 0, 2); + this.tableLayoutPanelCustomize.Controls.Add(this.groupBoxColorsLightMode, 0, 1); + this.tableLayoutPanelCustomize.Controls.Add(this.groupBoxAppearance, 0, 0); + this.tableLayoutPanelCustomize.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanelCustomize.Name = "tableLayoutPanelCustomize"; + this.tableLayoutPanelCustomize.Padding = new System.Windows.Forms.Padding(0, 0, 6, 0); + this.tableLayoutPanelCustomize.RowCount = 3; + this.tableLayoutPanelCustomize.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelCustomize.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelCustomize.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelCustomize.Size = new System.Drawing.Size(385, 1581); + this.tableLayoutPanelCustomize.TabIndex = 0; + // + // groupBoxColorsDarkMode + // + this.groupBoxColorsDarkMode.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxColorsDarkMode.AutoSize = true; + this.groupBoxColorsDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxColorsDarkMode.Controls.Add(this.tableLayoutPanelDarkMode); + this.groupBoxColorsDarkMode.Location = new System.Drawing.Point(3, 973); + this.groupBoxColorsDarkMode.Name = "groupBoxColorsDarkMode"; + this.groupBoxColorsDarkMode.Size = new System.Drawing.Size(373, 605); + this.groupBoxColorsDarkMode.TabIndex = 0; + this.groupBoxColorsDarkMode.TabStop = false; + this.groupBoxColorsDarkMode.Text = "groupBoxColorsDarkMode"; + // + // tableLayoutPanelDarkMode + // + this.tableLayoutPanelDarkMode.AutoSize = true; + this.tableLayoutPanelDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelDarkMode.ColumnCount = 1; + this.tableLayoutPanelDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelColorIconsDarkMode, 0, 1); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelColorBackgroundBorderDarkMode, 0, 3); + this.tableLayoutPanelDarkMode.Controls.Add(this.labelMenuDarkMode, 0, 0); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelSearchFieldDarkMode, 0, 4); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelOpenFolderDarkMode, 0, 5); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelOpenFolderBorderDarkMode, 0, 6); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelSelectedItemDarkMode, 0, 7); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelSelectedItemBorderDarkMode, 0, 8); + this.tableLayoutPanelDarkMode.Controls.Add(this.labelScrollbarDarkMode, 0, 9); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelScrollbarBackgroundDarkMode, 0, 10); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelSliderDarkMode, 0, 11); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelSliderDraggingDarkMode, 0, 12); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelSliderHoverDarkMode, 0, 13); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode, 0, 14); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelArrowDarkMode, 0, 15); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelArrowClickDarkMode, 0, 16); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelArrowClickBackgroundDarkMode, 0, 17); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelArrowHoverDarkMode, 0, 18); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelArrowHoverBackgroundDarkMode, 0, 19); + this.tableLayoutPanelDarkMode.Controls.Add(this.buttonColorsDefaultDarkMode, 0, 20); + this.tableLayoutPanelDarkMode.Controls.Add(this.tableLayoutPanelBackgroundDarkMode, 0, 2); + this.tableLayoutPanelDarkMode.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelDarkMode.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelDarkMode.Name = "tableLayoutPanelDarkMode"; + this.tableLayoutPanelDarkMode.RowCount = 21; + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelDarkMode.Size = new System.Drawing.Size(367, 583); + this.tableLayoutPanelDarkMode.TabIndex = 0; + // + // tableLayoutPanelColorIconsDarkMode + // + this.tableLayoutPanelColorIconsDarkMode.AutoSize = true; + this.tableLayoutPanelColorIconsDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelColorIconsDarkMode.ColumnCount = 3; + this.tableLayoutPanelColorIconsDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelColorIconsDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelColorIconsDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelColorIconsDarkMode.Controls.Add(this.pictureBoxIconsDarkMode, 0, 0); + this.tableLayoutPanelColorIconsDarkMode.Controls.Add(this.labelIconsDarkMode, 2, 0); + this.tableLayoutPanelColorIconsDarkMode.Controls.Add(this.textBoxColorIconsDarkMode, 1, 0); + this.tableLayoutPanelColorIconsDarkMode.Location = new System.Drawing.Point(3, 18); + this.tableLayoutPanelColorIconsDarkMode.Name = "tableLayoutPanelColorIconsDarkMode"; + this.tableLayoutPanelColorIconsDarkMode.RowCount = 1; + this.tableLayoutPanelColorIconsDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorIconsDarkMode.Size = new System.Drawing.Size(213, 23); + this.tableLayoutPanelColorIconsDarkMode.TabIndex = 2; + // + // pictureBoxIconsDarkMode + // + this.pictureBoxIconsDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxIconsDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxIconsDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxIconsDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxIconsDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxIconsDarkMode.Name = "pictureBoxIconsDarkMode"; + this.pictureBoxIconsDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxIconsDarkMode.TabIndex = 1; + this.pictureBoxIconsDarkMode.TabStop = false; + this.pictureBoxIconsDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // labelIconsDarkMode + // + this.labelIconsDarkMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelIconsDarkMode.AutoSize = true; + this.labelIconsDarkMode.Location = new System.Drawing.Point(95, 4); + this.labelIconsDarkMode.Name = "labelIconsDarkMode"; + this.labelIconsDarkMode.Size = new System.Drawing.Size(115, 15); + this.labelIconsDarkMode.TabIndex = 0; + this.labelIconsDarkMode.Text = "labelIconsDarkMode"; + // + // textBoxColorIconsDarkMode + // + this.textBoxColorIconsDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorIconsDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorIconsDarkMode.MaxLength = 12; + this.textBoxColorIconsDarkMode.Name = "textBoxColorIconsDarkMode"; + this.textBoxColorIconsDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorIconsDarkMode.TabIndex = 2; + this.textBoxColorIconsDarkMode.Text = "#ffffff"; + this.textBoxColorIconsDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorIconsDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorIconsDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // tableLayoutPanelColorBackgroundBorderDarkMode + // + this.tableLayoutPanelColorBackgroundBorderDarkMode.AutoSize = true; + this.tableLayoutPanelColorBackgroundBorderDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelColorBackgroundBorderDarkMode.ColumnCount = 3; + this.tableLayoutPanelColorBackgroundBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelColorBackgroundBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelColorBackgroundBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelColorBackgroundBorderDarkMode.Controls.Add(this.pictureBoxBackgroundBorderDarkMode, 0, 0); + this.tableLayoutPanelColorBackgroundBorderDarkMode.Controls.Add(this.labelBackgroundBorderDarkMode, 2, 0); + this.tableLayoutPanelColorBackgroundBorderDarkMode.Controls.Add(this.textBoxColorBackgroundBorderDarkMode, 1, 0); + this.tableLayoutPanelColorBackgroundBorderDarkMode.Location = new System.Drawing.Point(3, 76); + this.tableLayoutPanelColorBackgroundBorderDarkMode.Name = "tableLayoutPanelColorBackgroundBorderDarkMode"; + this.tableLayoutPanelColorBackgroundBorderDarkMode.RowCount = 1; + this.tableLayoutPanelColorBackgroundBorderDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorBackgroundBorderDarkMode.Size = new System.Drawing.Size(284, 23); + this.tableLayoutPanelColorBackgroundBorderDarkMode.TabIndex = 2; + // + // pictureBoxBackgroundBorderDarkMode + // + this.pictureBoxBackgroundBorderDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxBackgroundBorderDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxBackgroundBorderDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxBackgroundBorderDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxBackgroundBorderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxBackgroundBorderDarkMode.Name = "pictureBoxBackgroundBorderDarkMode"; + this.pictureBoxBackgroundBorderDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxBackgroundBorderDarkMode.TabIndex = 1; + this.pictureBoxBackgroundBorderDarkMode.TabStop = false; + this.pictureBoxBackgroundBorderDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // labelBackgroundBorderDarkMode + // + this.labelBackgroundBorderDarkMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelBackgroundBorderDarkMode.AutoSize = true; + this.labelBackgroundBorderDarkMode.Location = new System.Drawing.Point(95, 4); + this.labelBackgroundBorderDarkMode.Name = "labelBackgroundBorderDarkMode"; + this.labelBackgroundBorderDarkMode.Size = new System.Drawing.Size(186, 15); + this.labelBackgroundBorderDarkMode.TabIndex = 0; + this.labelBackgroundBorderDarkMode.Text = "labelBackgroundDarkModeBorder"; + // + // textBoxColorBackgroundBorderDarkMode + // + this.textBoxColorBackgroundBorderDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorBackgroundBorderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorBackgroundBorderDarkMode.MaxLength = 12; + this.textBoxColorBackgroundBorderDarkMode.Name = "textBoxColorBackgroundBorderDarkMode"; + this.textBoxColorBackgroundBorderDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorBackgroundBorderDarkMode.TabIndex = 2; + this.textBoxColorBackgroundBorderDarkMode.Text = "#ffffff"; + this.textBoxColorBackgroundBorderDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorBackgroundBorderDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorBackgroundBorderDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelMenuDarkMode + // + this.labelMenuDarkMode.AutoSize = true; + this.labelMenuDarkMode.Location = new System.Drawing.Point(3, 0); + this.labelMenuDarkMode.Name = "labelMenuDarkMode"; + this.labelMenuDarkMode.Size = new System.Drawing.Size(118, 15); + this.labelMenuDarkMode.TabIndex = 3; + this.labelMenuDarkMode.Text = "labelMenuDarkMode"; + // + // tableLayoutPanelSearchFieldDarkMode + // + this.tableLayoutPanelSearchFieldDarkMode.AutoSize = true; + this.tableLayoutPanelSearchFieldDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSearchFieldDarkMode.ColumnCount = 3; + this.tableLayoutPanelSearchFieldDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSearchFieldDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSearchFieldDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSearchFieldDarkMode.Controls.Add(this.pictureBoxSearchFieldDarkMode, 0, 0); + this.tableLayoutPanelSearchFieldDarkMode.Controls.Add(this.labelSearchFieldDarkMode, 2, 0); + this.tableLayoutPanelSearchFieldDarkMode.Controls.Add(this.textBoxColorSearchFieldDarkMode, 1, 0); + this.tableLayoutPanelSearchFieldDarkMode.Location = new System.Drawing.Point(3, 105); + this.tableLayoutPanelSearchFieldDarkMode.Name = "tableLayoutPanelSearchFieldDarkMode"; + this.tableLayoutPanelSearchFieldDarkMode.RowCount = 1; + this.tableLayoutPanelSearchFieldDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSearchFieldDarkMode.Size = new System.Drawing.Size(245, 23); + this.tableLayoutPanelSearchFieldDarkMode.TabIndex = 2; + // + // pictureBoxSearchFieldDarkMode + // + this.pictureBoxSearchFieldDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxSearchFieldDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSearchFieldDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSearchFieldDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSearchFieldDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSearchFieldDarkMode.Name = "pictureBoxSearchFieldDarkMode"; + this.pictureBoxSearchFieldDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSearchFieldDarkMode.TabIndex = 1; + this.pictureBoxSearchFieldDarkMode.TabStop = false; + this.pictureBoxSearchFieldDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // labelSearchFieldDarkMode + // + this.labelSearchFieldDarkMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSearchFieldDarkMode.AutoSize = true; + this.labelSearchFieldDarkMode.Location = new System.Drawing.Point(95, 4); + this.labelSearchFieldDarkMode.Name = "labelSearchFieldDarkMode"; + this.labelSearchFieldDarkMode.Size = new System.Drawing.Size(147, 15); + this.labelSearchFieldDarkMode.TabIndex = 0; + this.labelSearchFieldDarkMode.Text = "labelSearchFieldDarkMode"; + // + // textBoxColorSearchFieldDarkMode + // + this.textBoxColorSearchFieldDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSearchFieldDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSearchFieldDarkMode.MaxLength = 12; + this.textBoxColorSearchFieldDarkMode.Name = "textBoxColorSearchFieldDarkMode"; + this.textBoxColorSearchFieldDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSearchFieldDarkMode.TabIndex = 2; + this.textBoxColorSearchFieldDarkMode.Text = "#ffffff"; + this.textBoxColorSearchFieldDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSearchFieldDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSearchFieldDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // tableLayoutPanelOpenFolderDarkMode + // + this.tableLayoutPanelOpenFolderDarkMode.AutoSize = true; + this.tableLayoutPanelOpenFolderDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelOpenFolderDarkMode.ColumnCount = 3; + this.tableLayoutPanelOpenFolderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelOpenFolderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelOpenFolderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelOpenFolderDarkMode.Controls.Add(this.pictureBoxOpenFolderDarkMode, 0, 0); + this.tableLayoutPanelOpenFolderDarkMode.Controls.Add(this.labelOpenFolderDarkMode, 2, 0); + this.tableLayoutPanelOpenFolderDarkMode.Controls.Add(this.textBoxColorOpenFolderDarkMode, 1, 0); + this.tableLayoutPanelOpenFolderDarkMode.Location = new System.Drawing.Point(3, 134); + this.tableLayoutPanelOpenFolderDarkMode.Name = "tableLayoutPanelOpenFolderDarkMode"; + this.tableLayoutPanelOpenFolderDarkMode.RowCount = 1; + this.tableLayoutPanelOpenFolderDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelOpenFolderDarkMode.Size = new System.Drawing.Size(247, 23); + this.tableLayoutPanelOpenFolderDarkMode.TabIndex = 2; + // + // pictureBoxOpenFolderDarkMode + // + this.pictureBoxOpenFolderDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxOpenFolderDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxOpenFolderDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxOpenFolderDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxOpenFolderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxOpenFolderDarkMode.Name = "pictureBoxOpenFolderDarkMode"; + this.pictureBoxOpenFolderDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxOpenFolderDarkMode.TabIndex = 1; + this.pictureBoxOpenFolderDarkMode.TabStop = false; + this.pictureBoxOpenFolderDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // labelOpenFolderDarkMode + // + this.labelOpenFolderDarkMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelOpenFolderDarkMode.AutoSize = true; + this.labelOpenFolderDarkMode.Location = new System.Drawing.Point(95, 4); + this.labelOpenFolderDarkMode.Name = "labelOpenFolderDarkMode"; + this.labelOpenFolderDarkMode.Size = new System.Drawing.Size(149, 15); + this.labelOpenFolderDarkMode.TabIndex = 0; + this.labelOpenFolderDarkMode.Text = "labelOpenFolderDarkMode"; + // + // textBoxColorOpenFolderDarkMode + // + this.textBoxColorOpenFolderDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorOpenFolderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorOpenFolderDarkMode.MaxLength = 12; + this.textBoxColorOpenFolderDarkMode.Name = "textBoxColorOpenFolderDarkMode"; + this.textBoxColorOpenFolderDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorOpenFolderDarkMode.TabIndex = 2; + this.textBoxColorOpenFolderDarkMode.Text = "#ffffff"; + this.textBoxColorOpenFolderDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorOpenFolderDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorOpenFolderDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // tableLayoutPanelOpenFolderBorderDarkMode + // + this.tableLayoutPanelOpenFolderBorderDarkMode.AutoSize = true; + this.tableLayoutPanelOpenFolderBorderDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelOpenFolderBorderDarkMode.ColumnCount = 3; + this.tableLayoutPanelOpenFolderBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelOpenFolderBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelOpenFolderBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelOpenFolderBorderDarkMode.Controls.Add(this.pictureBoxOpenFolderBorderDarkMode, 0, 0); + this.tableLayoutPanelOpenFolderBorderDarkMode.Controls.Add(this.labelOpenFolderBorderDarkMode, 2, 0); + this.tableLayoutPanelOpenFolderBorderDarkMode.Controls.Add(this.textBoxColorOpenFolderBorderDarkMode, 1, 0); + this.tableLayoutPanelOpenFolderBorderDarkMode.Location = new System.Drawing.Point(3, 163); + this.tableLayoutPanelOpenFolderBorderDarkMode.Name = "tableLayoutPanelOpenFolderBorderDarkMode"; + this.tableLayoutPanelOpenFolderBorderDarkMode.RowCount = 1; + this.tableLayoutPanelOpenFolderBorderDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelOpenFolderBorderDarkMode.Size = new System.Drawing.Size(282, 23); + this.tableLayoutPanelOpenFolderBorderDarkMode.TabIndex = 2; + // + // pictureBoxOpenFolderBorderDarkMode + // + this.pictureBoxOpenFolderBorderDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxOpenFolderBorderDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxOpenFolderBorderDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxOpenFolderBorderDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxOpenFolderBorderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxOpenFolderBorderDarkMode.Name = "pictureBoxOpenFolderBorderDarkMode"; + this.pictureBoxOpenFolderBorderDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxOpenFolderBorderDarkMode.TabIndex = 1; + this.pictureBoxOpenFolderBorderDarkMode.TabStop = false; + this.pictureBoxOpenFolderBorderDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // labelOpenFolderBorderDarkMode + // + this.labelOpenFolderBorderDarkMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelOpenFolderBorderDarkMode.AutoSize = true; + this.labelOpenFolderBorderDarkMode.Location = new System.Drawing.Point(95, 4); + this.labelOpenFolderBorderDarkMode.Name = "labelOpenFolderBorderDarkMode"; + this.labelOpenFolderBorderDarkMode.Size = new System.Drawing.Size(184, 15); + this.labelOpenFolderBorderDarkMode.TabIndex = 0; + this.labelOpenFolderBorderDarkMode.Text = "labelOpenFolderBorderDarkMode"; + // + // textBoxColorOpenFolderBorderDarkMode + // + this.textBoxColorOpenFolderBorderDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorOpenFolderBorderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorOpenFolderBorderDarkMode.Name = "textBoxColorOpenFolderBorderDarkMode"; + this.textBoxColorOpenFolderBorderDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorOpenFolderBorderDarkMode.TabIndex = 2; + this.textBoxColorOpenFolderBorderDarkMode.Text = "#ffffff"; + this.textBoxColorOpenFolderBorderDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorOpenFolderBorderDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorOpenFolderBorderDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // tableLayoutPanelSelectedItemDarkMode + // + this.tableLayoutPanelSelectedItemDarkMode.AutoSize = true; + this.tableLayoutPanelSelectedItemDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSelectedItemDarkMode.ColumnCount = 3; + this.tableLayoutPanelSelectedItemDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSelectedItemDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSelectedItemDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSelectedItemDarkMode.Controls.Add(this.pictureColorBoxSelectedItemDarkMode, 0, 0); + this.tableLayoutPanelSelectedItemDarkMode.Controls.Add(this.labelSelectedItemDarkMode, 2, 0); + this.tableLayoutPanelSelectedItemDarkMode.Controls.Add(this.textBoxColorSelecetedItemDarkMode, 1, 0); + this.tableLayoutPanelSelectedItemDarkMode.Location = new System.Drawing.Point(3, 192); + this.tableLayoutPanelSelectedItemDarkMode.Name = "tableLayoutPanelSelectedItemDarkMode"; + this.tableLayoutPanelSelectedItemDarkMode.RowCount = 1; + this.tableLayoutPanelSelectedItemDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSelectedItemDarkMode.Size = new System.Drawing.Size(253, 23); + this.tableLayoutPanelSelectedItemDarkMode.TabIndex = 2; + // + // pictureColorBoxSelectedItemDarkMode + // + this.pictureColorBoxSelectedItemDarkMode.BackColor = System.Drawing.Color.White; + this.pictureColorBoxSelectedItemDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureColorBoxSelectedItemDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureColorBoxSelectedItemDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureColorBoxSelectedItemDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureColorBoxSelectedItemDarkMode.Name = "pictureColorBoxSelectedItemDarkMode"; + this.pictureColorBoxSelectedItemDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureColorBoxSelectedItemDarkMode.TabIndex = 1; + this.pictureColorBoxSelectedItemDarkMode.TabStop = false; + this.pictureColorBoxSelectedItemDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // labelSelectedItemDarkMode + // + this.labelSelectedItemDarkMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSelectedItemDarkMode.AutoSize = true; + this.labelSelectedItemDarkMode.Location = new System.Drawing.Point(95, 4); + this.labelSelectedItemDarkMode.Name = "labelSelectedItemDarkMode"; + this.labelSelectedItemDarkMode.Size = new System.Drawing.Size(155, 15); + this.labelSelectedItemDarkMode.TabIndex = 0; + this.labelSelectedItemDarkMode.Text = "labelSelectedItemDarkMode"; + // + // textBoxColorSelecetedItemDarkMode + // + this.textBoxColorSelecetedItemDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSelecetedItemDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSelecetedItemDarkMode.MaxLength = 12; + this.textBoxColorSelecetedItemDarkMode.Name = "textBoxColorSelecetedItemDarkMode"; + this.textBoxColorSelecetedItemDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSelecetedItemDarkMode.TabIndex = 2; + this.textBoxColorSelecetedItemDarkMode.Text = "#ffffff"; + this.textBoxColorSelecetedItemDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSelecetedItemDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSelecetedItemDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // tableLayoutPanelSelectedItemBorderDarkMode + // + this.tableLayoutPanelSelectedItemBorderDarkMode.AutoSize = true; + this.tableLayoutPanelSelectedItemBorderDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSelectedItemBorderDarkMode.ColumnCount = 3; + this.tableLayoutPanelSelectedItemBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSelectedItemBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSelectedItemBorderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSelectedItemBorderDarkMode.Controls.Add(this.pictureBoxSelectedItemBorderDarkMode, 0, 0); + this.tableLayoutPanelSelectedItemBorderDarkMode.Controls.Add(this.labelSelectedItemBorderDarkMode, 2, 0); + this.tableLayoutPanelSelectedItemBorderDarkMode.Controls.Add(this.textBoxColorSelectedItemBorderDarkMode, 1, 0); + this.tableLayoutPanelSelectedItemBorderDarkMode.Location = new System.Drawing.Point(3, 221); + this.tableLayoutPanelSelectedItemBorderDarkMode.Name = "tableLayoutPanelSelectedItemBorderDarkMode"; + this.tableLayoutPanelSelectedItemBorderDarkMode.RowCount = 1; + this.tableLayoutPanelSelectedItemBorderDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSelectedItemBorderDarkMode.Size = new System.Drawing.Size(288, 23); + this.tableLayoutPanelSelectedItemBorderDarkMode.TabIndex = 2; + // + // pictureBoxSelectedItemBorderDarkMode + // + this.pictureBoxSelectedItemBorderDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxSelectedItemBorderDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSelectedItemBorderDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSelectedItemBorderDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSelectedItemBorderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSelectedItemBorderDarkMode.Name = "pictureBoxSelectedItemBorderDarkMode"; + this.pictureBoxSelectedItemBorderDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSelectedItemBorderDarkMode.TabIndex = 1; + this.pictureBoxSelectedItemBorderDarkMode.TabStop = false; + this.pictureBoxSelectedItemBorderDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // labelSelectedItemBorderDarkMode + // + this.labelSelectedItemBorderDarkMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSelectedItemBorderDarkMode.AutoSize = true; + this.labelSelectedItemBorderDarkMode.Location = new System.Drawing.Point(95, 4); + this.labelSelectedItemBorderDarkMode.Name = "labelSelectedItemBorderDarkMode"; + this.labelSelectedItemBorderDarkMode.Size = new System.Drawing.Size(190, 15); + this.labelSelectedItemBorderDarkMode.TabIndex = 0; + this.labelSelectedItemBorderDarkMode.Text = "labelSelectedItemBorderDarkMode"; + // + // textBoxColorSelectedItemBorderDarkMode + // + this.textBoxColorSelectedItemBorderDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSelectedItemBorderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSelectedItemBorderDarkMode.MaxLength = 12; + this.textBoxColorSelectedItemBorderDarkMode.Name = "textBoxColorSelectedItemBorderDarkMode"; + this.textBoxColorSelectedItemBorderDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSelectedItemBorderDarkMode.TabIndex = 2; + this.textBoxColorSelectedItemBorderDarkMode.Text = "#ffffff"; + this.textBoxColorSelectedItemBorderDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSelectedItemBorderDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSelectedItemBorderDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelScrollbarDarkMode + // + this.labelScrollbarDarkMode.AutoSize = true; + this.labelScrollbarDarkMode.Location = new System.Drawing.Point(3, 247); + this.labelScrollbarDarkMode.Name = "labelScrollbarDarkMode"; + this.labelScrollbarDarkMode.Size = new System.Drawing.Size(133, 15); + this.labelScrollbarDarkMode.TabIndex = 3; + this.labelScrollbarDarkMode.Text = "labelScrollbarDarkMode"; + // + // tableLayoutPanelScrollbarBackgroundDarkMode + // + this.tableLayoutPanelScrollbarBackgroundDarkMode.AutoSize = true; + this.tableLayoutPanelScrollbarBackgroundDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelScrollbarBackgroundDarkMode.ColumnCount = 3; + this.tableLayoutPanelScrollbarBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelScrollbarBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelScrollbarBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelScrollbarBackgroundDarkMode.Controls.Add(this.pictureBoxScrollbarBackgroundDarkMode, 0, 0); + this.tableLayoutPanelScrollbarBackgroundDarkMode.Controls.Add(this.textBoxColorScrollbarBackgroundDarkMode, 1, 0); + this.tableLayoutPanelScrollbarBackgroundDarkMode.Controls.Add(this.labelColorDarkModeScrollbarBackground, 2, 0); + this.tableLayoutPanelScrollbarBackgroundDarkMode.Location = new System.Drawing.Point(3, 265); + this.tableLayoutPanelScrollbarBackgroundDarkMode.Name = "tableLayoutPanelScrollbarBackgroundDarkMode"; + this.tableLayoutPanelScrollbarBackgroundDarkMode.RowCount = 1; + this.tableLayoutPanelScrollbarBackgroundDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelScrollbarBackgroundDarkMode.Size = new System.Drawing.Size(324, 23); + this.tableLayoutPanelScrollbarBackgroundDarkMode.TabIndex = 2; + // + // pictureBoxScrollbarBackgroundDarkMode + // + this.pictureBoxScrollbarBackgroundDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxScrollbarBackgroundDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxScrollbarBackgroundDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxScrollbarBackgroundDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxScrollbarBackgroundDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxScrollbarBackgroundDarkMode.Name = "pictureBoxScrollbarBackgroundDarkMode"; + this.pictureBoxScrollbarBackgroundDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxScrollbarBackgroundDarkMode.TabIndex = 1; + this.pictureBoxScrollbarBackgroundDarkMode.TabStop = false; + this.pictureBoxScrollbarBackgroundDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorScrollbarBackgroundDarkMode + // + this.textBoxColorScrollbarBackgroundDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorScrollbarBackgroundDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorScrollbarBackgroundDarkMode.MaxLength = 12; + this.textBoxColorScrollbarBackgroundDarkMode.Name = "textBoxColorScrollbarBackgroundDarkMode"; + this.textBoxColorScrollbarBackgroundDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorScrollbarBackgroundDarkMode.TabIndex = 2; + this.textBoxColorScrollbarBackgroundDarkMode.Text = "#ffffff"; + this.textBoxColorScrollbarBackgroundDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorScrollbarBackgroundDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorScrollbarBackgroundDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeScrollbarBackground + // + this.labelColorDarkModeScrollbarBackground.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeScrollbarBackground.AutoSize = true; + this.labelColorDarkModeScrollbarBackground.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeScrollbarBackground.Name = "labelColorDarkModeScrollbarBackground"; + this.labelColorDarkModeScrollbarBackground.Size = new System.Drawing.Size(226, 15); + this.labelColorDarkModeScrollbarBackground.TabIndex = 0; + this.labelColorDarkModeScrollbarBackground.Text = "labelColorDarkModeScrollbarBackground"; + // + // tableLayoutPanelSliderDarkMode + // + this.tableLayoutPanelSliderDarkMode.AutoSize = true; + this.tableLayoutPanelSliderDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSliderDarkMode.ColumnCount = 3; + this.tableLayoutPanelSliderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSliderDarkMode.Controls.Add(this.pictureBoxSliderDarkMode, 0, 0); + this.tableLayoutPanelSliderDarkMode.Controls.Add(this.textBoxColorSliderDarkMode, 1, 0); + this.tableLayoutPanelSliderDarkMode.Controls.Add(this.labelColorDarkModeSlider, 2, 0); + this.tableLayoutPanelSliderDarkMode.Location = new System.Drawing.Point(3, 294); + this.tableLayoutPanelSliderDarkMode.Name = "tableLayoutPanelSliderDarkMode"; + this.tableLayoutPanelSliderDarkMode.RowCount = 1; + this.tableLayoutPanelSliderDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSliderDarkMode.Size = new System.Drawing.Size(243, 23); + this.tableLayoutPanelSliderDarkMode.TabIndex = 2; + // + // pictureBoxSliderDarkMode + // + this.pictureBoxSliderDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxSliderDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSliderDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSliderDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSliderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSliderDarkMode.Name = "pictureBoxSliderDarkMode"; + this.pictureBoxSliderDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSliderDarkMode.TabIndex = 1; + this.pictureBoxSliderDarkMode.TabStop = false; + this.pictureBoxSliderDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSliderDarkMode + // + this.textBoxColorSliderDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSliderDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSliderDarkMode.MaxLength = 12; + this.textBoxColorSliderDarkMode.Name = "textBoxColorSliderDarkMode"; + this.textBoxColorSliderDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSliderDarkMode.TabIndex = 2; + this.textBoxColorSliderDarkMode.Text = "#ffffff"; + this.textBoxColorSliderDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSliderDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSliderDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeSlider + // + this.labelColorDarkModeSlider.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeSlider.AutoSize = true; + this.labelColorDarkModeSlider.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeSlider.Name = "labelColorDarkModeSlider"; + this.labelColorDarkModeSlider.Size = new System.Drawing.Size(145, 15); + this.labelColorDarkModeSlider.TabIndex = 0; + this.labelColorDarkModeSlider.Text = "labelColorDarkModeSlider"; + // + // tableLayoutPanelSliderDraggingDarkMode + // + this.tableLayoutPanelSliderDraggingDarkMode.AutoSize = true; + this.tableLayoutPanelSliderDraggingDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSliderDraggingDarkMode.ColumnCount = 3; + this.tableLayoutPanelSliderDraggingDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderDraggingDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderDraggingDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSliderDraggingDarkMode.Controls.Add(this.pictureBoxSliderDraggingDarkMode, 0, 0); + this.tableLayoutPanelSliderDraggingDarkMode.Controls.Add(this.textBoxColorSliderDraggingDarkMode, 1, 0); + this.tableLayoutPanelSliderDraggingDarkMode.Controls.Add(this.labelColorDarkModeSliderDragging, 2, 0); + this.tableLayoutPanelSliderDraggingDarkMode.Location = new System.Drawing.Point(3, 323); + this.tableLayoutPanelSliderDraggingDarkMode.Name = "tableLayoutPanelSliderDraggingDarkMode"; + this.tableLayoutPanelSliderDraggingDarkMode.RowCount = 1; + this.tableLayoutPanelSliderDraggingDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSliderDraggingDarkMode.Size = new System.Drawing.Size(292, 23); + this.tableLayoutPanelSliderDraggingDarkMode.TabIndex = 2; + // + // pictureBoxSliderDraggingDarkMode + // + this.pictureBoxSliderDraggingDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxSliderDraggingDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSliderDraggingDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSliderDraggingDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSliderDraggingDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSliderDraggingDarkMode.Name = "pictureBoxSliderDraggingDarkMode"; + this.pictureBoxSliderDraggingDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSliderDraggingDarkMode.TabIndex = 1; + this.pictureBoxSliderDraggingDarkMode.TabStop = false; + this.pictureBoxSliderDraggingDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSliderDraggingDarkMode + // + this.textBoxColorSliderDraggingDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSliderDraggingDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSliderDraggingDarkMode.MaxLength = 12; + this.textBoxColorSliderDraggingDarkMode.Name = "textBoxColorSliderDraggingDarkMode"; + this.textBoxColorSliderDraggingDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSliderDraggingDarkMode.TabIndex = 2; + this.textBoxColorSliderDraggingDarkMode.Text = "#ffffff"; + this.textBoxColorSliderDraggingDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSliderDraggingDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSliderDraggingDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeSliderDragging + // + this.labelColorDarkModeSliderDragging.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeSliderDragging.AutoSize = true; + this.labelColorDarkModeSliderDragging.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeSliderDragging.Name = "labelColorDarkModeSliderDragging"; + this.labelColorDarkModeSliderDragging.Size = new System.Drawing.Size(194, 15); + this.labelColorDarkModeSliderDragging.TabIndex = 0; + this.labelColorDarkModeSliderDragging.Text = "labelColorDarkModeSliderDragging"; + // + // tableLayoutPanelSliderHoverDarkMode + // + this.tableLayoutPanelSliderHoverDarkMode.AutoSize = true; + this.tableLayoutPanelSliderHoverDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSliderHoverDarkMode.ColumnCount = 3; + this.tableLayoutPanelSliderHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSliderHoverDarkMode.Controls.Add(this.pictureBoxSliderHoverDarkMode, 0, 0); + this.tableLayoutPanelSliderHoverDarkMode.Controls.Add(this.textBoxColorSliderHoverDarkMode, 1, 0); + this.tableLayoutPanelSliderHoverDarkMode.Controls.Add(this.labelColorDarkModeSliderHover, 2, 0); + this.tableLayoutPanelSliderHoverDarkMode.Location = new System.Drawing.Point(3, 352); + this.tableLayoutPanelSliderHoverDarkMode.Name = "tableLayoutPanelSliderHoverDarkMode"; + this.tableLayoutPanelSliderHoverDarkMode.RowCount = 1; + this.tableLayoutPanelSliderHoverDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSliderHoverDarkMode.Size = new System.Drawing.Size(275, 23); + this.tableLayoutPanelSliderHoverDarkMode.TabIndex = 2; + // + // pictureBoxSliderHoverDarkMode + // + this.pictureBoxSliderHoverDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxSliderHoverDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSliderHoverDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSliderHoverDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSliderHoverDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSliderHoverDarkMode.Name = "pictureBoxSliderHoverDarkMode"; + this.pictureBoxSliderHoverDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSliderHoverDarkMode.TabIndex = 1; + this.pictureBoxSliderHoverDarkMode.TabStop = false; + this.pictureBoxSliderHoverDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSliderHoverDarkMode + // + this.textBoxColorSliderHoverDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSliderHoverDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSliderHoverDarkMode.MaxLength = 12; + this.textBoxColorSliderHoverDarkMode.Name = "textBoxColorSliderHoverDarkMode"; + this.textBoxColorSliderHoverDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSliderHoverDarkMode.TabIndex = 2; + this.textBoxColorSliderHoverDarkMode.Text = "#ffffff"; + this.textBoxColorSliderHoverDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSliderHoverDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSliderHoverDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeSliderHover + // + this.labelColorDarkModeSliderHover.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeSliderHover.AutoSize = true; + this.labelColorDarkModeSliderHover.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeSliderHover.Name = "labelColorDarkModeSliderHover"; + this.labelColorDarkModeSliderHover.Size = new System.Drawing.Size(177, 15); + this.labelColorDarkModeSliderHover.TabIndex = 0; + this.labelColorDarkModeSliderHover.Text = "labelColorDarkModeSliderHover"; + // + // tableLayoutPanelSliderArrowsAndTrackHoverDarkMode + // + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.AutoSize = true; + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.ColumnCount = 3; + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.Controls.Add(this.pictureBoxSliderArrowsAndTrackHoverDarkMode, 0, 0); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.Controls.Add(this.textBoxColorSliderArrowsAndTrackHoverDarkMode, 1, 0); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.Controls.Add(this.labelColorDarkModeSliderArrowsAndTrackHover, 2, 0); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.Location = new System.Drawing.Point(3, 381); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.Name = "tableLayoutPanelSliderArrowsAndTrackHoverDarkMode"; + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.RowCount = 1; + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.Size = new System.Drawing.Size(361, 23); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.TabIndex = 2; + // + // pictureBoxSliderArrowsAndTrackHoverDarkMode + // + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.Name = "pictureBoxSliderArrowsAndTrackHoverDarkMode"; + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.TabIndex = 1; + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.TabStop = false; + this.pictureBoxSliderArrowsAndTrackHoverDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSliderArrowsAndTrackHoverDarkMode + // + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.MaxLength = 12; + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.Name = "textBoxColorSliderArrowsAndTrackHoverDarkMode"; + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.TabIndex = 2; + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.Text = "#ffffff"; + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSliderArrowsAndTrackHoverDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeSliderArrowsAndTrackHover + // + this.labelColorDarkModeSliderArrowsAndTrackHover.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeSliderArrowsAndTrackHover.AutoSize = true; + this.labelColorDarkModeSliderArrowsAndTrackHover.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeSliderArrowsAndTrackHover.Name = "labelColorDarkModeSliderArrowsAndTrackHover"; + this.labelColorDarkModeSliderArrowsAndTrackHover.Size = new System.Drawing.Size(263, 15); + this.labelColorDarkModeSliderArrowsAndTrackHover.TabIndex = 0; + this.labelColorDarkModeSliderArrowsAndTrackHover.Text = "labelColorDarkModeSliderArrowsAndTrackHover"; + // + // tableLayoutPanelArrowDarkMode + // + this.tableLayoutPanelArrowDarkMode.AutoSize = true; + this.tableLayoutPanelArrowDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowDarkMode.ColumnCount = 3; + this.tableLayoutPanelArrowDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowDarkMode.Controls.Add(this.pictureBoxArrowDarkMode, 0, 0); + this.tableLayoutPanelArrowDarkMode.Controls.Add(this.textBoxColorArrowDarkMode, 1, 0); + this.tableLayoutPanelArrowDarkMode.Controls.Add(this.labelColorDarkModeArrow, 2, 0); + this.tableLayoutPanelArrowDarkMode.Location = new System.Drawing.Point(3, 410); + this.tableLayoutPanelArrowDarkMode.Name = "tableLayoutPanelArrowDarkMode"; + this.tableLayoutPanelArrowDarkMode.RowCount = 1; + this.tableLayoutPanelArrowDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowDarkMode.Size = new System.Drawing.Size(246, 23); + this.tableLayoutPanelArrowDarkMode.TabIndex = 2; + // + // pictureBoxArrowDarkMode + // + this.pictureBoxArrowDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowDarkMode.Name = "pictureBoxArrowDarkMode"; + this.pictureBoxArrowDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowDarkMode.TabIndex = 1; + this.pictureBoxArrowDarkMode.TabStop = false; + this.pictureBoxArrowDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowDarkMode + // + this.textBoxColorArrowDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowDarkMode.MaxLength = 12; + this.textBoxColorArrowDarkMode.Name = "textBoxColorArrowDarkMode"; + this.textBoxColorArrowDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowDarkMode.TabIndex = 2; + this.textBoxColorArrowDarkMode.Text = "#ffffff"; + this.textBoxColorArrowDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeArrow + // + this.labelColorDarkModeArrow.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeArrow.AutoSize = true; + this.labelColorDarkModeArrow.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeArrow.Name = "labelColorDarkModeArrow"; + this.labelColorDarkModeArrow.Size = new System.Drawing.Size(148, 15); + this.labelColorDarkModeArrow.TabIndex = 0; + this.labelColorDarkModeArrow.Text = "labelColorDarkModeArrow"; + // + // tableLayoutPanelArrowClickDarkMode + // + this.tableLayoutPanelArrowClickDarkMode.AutoSize = true; + this.tableLayoutPanelArrowClickDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowClickDarkMode.ColumnCount = 3; + this.tableLayoutPanelArrowClickDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowClickDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowClickDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowClickDarkMode.Controls.Add(this.pictureBoxArrowClickDarkMode, 0, 0); + this.tableLayoutPanelArrowClickDarkMode.Controls.Add(this.textBoxColorArrowClickDarkMode, 1, 0); + this.tableLayoutPanelArrowClickDarkMode.Controls.Add(this.labelColorDarkModeArrowClick, 2, 0); + this.tableLayoutPanelArrowClickDarkMode.Location = new System.Drawing.Point(3, 439); + this.tableLayoutPanelArrowClickDarkMode.Name = "tableLayoutPanelArrowClickDarkMode"; + this.tableLayoutPanelArrowClickDarkMode.RowCount = 1; + this.tableLayoutPanelArrowClickDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowClickDarkMode.Size = new System.Drawing.Size(272, 23); + this.tableLayoutPanelArrowClickDarkMode.TabIndex = 2; + // + // pictureBoxArrowClickDarkMode + // + this.pictureBoxArrowClickDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowClickDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowClickDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowClickDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowClickDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowClickDarkMode.Name = "pictureBoxArrowClickDarkMode"; + this.pictureBoxArrowClickDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowClickDarkMode.TabIndex = 1; + this.pictureBoxArrowClickDarkMode.TabStop = false; + this.pictureBoxArrowClickDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowClickDarkMode + // + this.textBoxColorArrowClickDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowClickDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowClickDarkMode.MaxLength = 12; + this.textBoxColorArrowClickDarkMode.Name = "textBoxColorArrowClickDarkMode"; + this.textBoxColorArrowClickDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowClickDarkMode.TabIndex = 2; + this.textBoxColorArrowClickDarkMode.Text = "#ffffff"; + this.textBoxColorArrowClickDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowClickDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowClickDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeArrowClick + // + this.labelColorDarkModeArrowClick.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeArrowClick.AutoSize = true; + this.labelColorDarkModeArrowClick.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeArrowClick.Name = "labelColorDarkModeArrowClick"; + this.labelColorDarkModeArrowClick.Size = new System.Drawing.Size(174, 15); + this.labelColorDarkModeArrowClick.TabIndex = 0; + this.labelColorDarkModeArrowClick.Text = "labelColorDarkModeArrowClick"; + // + // tableLayoutPanelArrowClickBackgroundDarkMode + // + this.tableLayoutPanelArrowClickBackgroundDarkMode.AutoSize = true; + this.tableLayoutPanelArrowClickBackgroundDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowClickBackgroundDarkMode.ColumnCount = 3; + this.tableLayoutPanelArrowClickBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowClickBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowClickBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowClickBackgroundDarkMode.Controls.Add(this.pictureBoxArrowClickBackgroundDarkMode, 0, 0); + this.tableLayoutPanelArrowClickBackgroundDarkMode.Controls.Add(this.textBoxColorArrowClickBackgroundDarkMode, 1, 0); + this.tableLayoutPanelArrowClickBackgroundDarkMode.Controls.Add(this.labelColorDarkModeArrowClickBackground, 2, 0); + this.tableLayoutPanelArrowClickBackgroundDarkMode.Location = new System.Drawing.Point(3, 468); + this.tableLayoutPanelArrowClickBackgroundDarkMode.Name = "tableLayoutPanelArrowClickBackgroundDarkMode"; + this.tableLayoutPanelArrowClickBackgroundDarkMode.RowCount = 1; + this.tableLayoutPanelArrowClickBackgroundDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowClickBackgroundDarkMode.Size = new System.Drawing.Size(336, 23); + this.tableLayoutPanelArrowClickBackgroundDarkMode.TabIndex = 2; + // + // pictureBoxArrowClickBackgroundDarkMode + // + this.pictureBoxArrowClickBackgroundDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowClickBackgroundDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowClickBackgroundDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowClickBackgroundDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowClickBackgroundDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowClickBackgroundDarkMode.Name = "pictureBoxArrowClickBackgroundDarkMode"; + this.pictureBoxArrowClickBackgroundDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowClickBackgroundDarkMode.TabIndex = 1; + this.pictureBoxArrowClickBackgroundDarkMode.TabStop = false; + this.pictureBoxArrowClickBackgroundDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowClickBackgroundDarkMode + // + this.textBoxColorArrowClickBackgroundDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowClickBackgroundDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowClickBackgroundDarkMode.MaxLength = 12; + this.textBoxColorArrowClickBackgroundDarkMode.Name = "textBoxColorArrowClickBackgroundDarkMode"; + this.textBoxColorArrowClickBackgroundDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowClickBackgroundDarkMode.TabIndex = 2; + this.textBoxColorArrowClickBackgroundDarkMode.Text = "#ffffff"; + this.textBoxColorArrowClickBackgroundDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowClickBackgroundDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowClickBackgroundDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeArrowClickBackground + // + this.labelColorDarkModeArrowClickBackground.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeArrowClickBackground.AutoSize = true; + this.labelColorDarkModeArrowClickBackground.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeArrowClickBackground.Name = "labelColorDarkModeArrowClickBackground"; + this.labelColorDarkModeArrowClickBackground.Size = new System.Drawing.Size(238, 15); + this.labelColorDarkModeArrowClickBackground.TabIndex = 0; + this.labelColorDarkModeArrowClickBackground.Text = "labelColorDarkModeArrowClickBackground"; + // + // tableLayoutPanelArrowHoverDarkMode + // + this.tableLayoutPanelArrowHoverDarkMode.AutoSize = true; + this.tableLayoutPanelArrowHoverDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowHoverDarkMode.ColumnCount = 3; + this.tableLayoutPanelArrowHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowHoverDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowHoverDarkMode.Controls.Add(this.pictureBoxArrowHoverDarkMode, 0, 0); + this.tableLayoutPanelArrowHoverDarkMode.Controls.Add(this.textBoxColorArrowHoverDarkMode, 1, 0); + this.tableLayoutPanelArrowHoverDarkMode.Controls.Add(this.labelColorDarkModeArrowHover, 2, 0); + this.tableLayoutPanelArrowHoverDarkMode.Location = new System.Drawing.Point(3, 497); + this.tableLayoutPanelArrowHoverDarkMode.Name = "tableLayoutPanelArrowHoverDarkMode"; + this.tableLayoutPanelArrowHoverDarkMode.RowCount = 1; + this.tableLayoutPanelArrowHoverDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowHoverDarkMode.Size = new System.Drawing.Size(278, 23); + this.tableLayoutPanelArrowHoverDarkMode.TabIndex = 2; + // + // pictureBoxArrowHoverDarkMode + // + this.pictureBoxArrowHoverDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowHoverDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowHoverDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowHoverDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowHoverDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowHoverDarkMode.Name = "pictureBoxArrowHoverDarkMode"; + this.pictureBoxArrowHoverDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowHoverDarkMode.TabIndex = 1; + this.pictureBoxArrowHoverDarkMode.TabStop = false; + this.pictureBoxArrowHoverDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowHoverDarkMode + // + this.textBoxColorArrowHoverDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowHoverDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowHoverDarkMode.MaxLength = 12; + this.textBoxColorArrowHoverDarkMode.Name = "textBoxColorArrowHoverDarkMode"; + this.textBoxColorArrowHoverDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowHoverDarkMode.TabIndex = 2; + this.textBoxColorArrowHoverDarkMode.Text = "#ffffff"; + this.textBoxColorArrowHoverDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowHoverDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowHoverDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeArrowHover + // + this.labelColorDarkModeArrowHover.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeArrowHover.AutoSize = true; + this.labelColorDarkModeArrowHover.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeArrowHover.Name = "labelColorDarkModeArrowHover"; + this.labelColorDarkModeArrowHover.Size = new System.Drawing.Size(180, 15); + this.labelColorDarkModeArrowHover.TabIndex = 0; + this.labelColorDarkModeArrowHover.Text = "labelColorDarkModeArrowHover"; + // + // tableLayoutPanelArrowHoverBackgroundDarkMode + // + this.tableLayoutPanelArrowHoverBackgroundDarkMode.AutoSize = true; + this.tableLayoutPanelArrowHoverBackgroundDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowHoverBackgroundDarkMode.ColumnCount = 3; + this.tableLayoutPanelArrowHoverBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.Controls.Add(this.pictureBoxArrowHoverBackgroundDarkMode, 0, 0); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.Controls.Add(this.textBoxColorArrowHoverBackgroundDarkMode, 1, 0); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.Controls.Add(this.labelColorDarkModeArrowHoverBackground, 2, 0); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.Location = new System.Drawing.Point(3, 526); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.Name = "tableLayoutPanelArrowHoverBackgroundDarkMode"; + this.tableLayoutPanelArrowHoverBackgroundDarkMode.RowCount = 1; + this.tableLayoutPanelArrowHoverBackgroundDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.Size = new System.Drawing.Size(342, 23); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.TabIndex = 2; + // + // pictureBoxArrowHoverBackgroundDarkMode + // + this.pictureBoxArrowHoverBackgroundDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowHoverBackgroundDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowHoverBackgroundDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowHoverBackgroundDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowHoverBackgroundDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowHoverBackgroundDarkMode.Name = "pictureBoxArrowHoverBackgroundDarkMode"; + this.pictureBoxArrowHoverBackgroundDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowHoverBackgroundDarkMode.TabIndex = 1; + this.pictureBoxArrowHoverBackgroundDarkMode.TabStop = false; + this.pictureBoxArrowHoverBackgroundDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowHoverBackgroundDarkMode + // + this.textBoxColorArrowHoverBackgroundDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowHoverBackgroundDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowHoverBackgroundDarkMode.MaxLength = 12; + this.textBoxColorArrowHoverBackgroundDarkMode.Name = "textBoxColorArrowHoverBackgroundDarkMode"; + this.textBoxColorArrowHoverBackgroundDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowHoverBackgroundDarkMode.TabIndex = 2; + this.textBoxColorArrowHoverBackgroundDarkMode.Text = "#ffffff"; + this.textBoxColorArrowHoverBackgroundDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowHoverBackgroundDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowHoverBackgroundDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelColorDarkModeArrowHoverBackground + // + this.labelColorDarkModeArrowHoverBackground.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelColorDarkModeArrowHoverBackground.AutoSize = true; + this.labelColorDarkModeArrowHoverBackground.Location = new System.Drawing.Point(95, 4); + this.labelColorDarkModeArrowHoverBackground.MaximumSize = new System.Drawing.Size(280, 0); + this.labelColorDarkModeArrowHoverBackground.Name = "labelColorDarkModeArrowHoverBackground"; + this.labelColorDarkModeArrowHoverBackground.Size = new System.Drawing.Size(244, 15); + this.labelColorDarkModeArrowHoverBackground.TabIndex = 0; + this.labelColorDarkModeArrowHoverBackground.Text = "labelColorDarkModeArrowHoverBackground"; + // + // buttonColorsDefaultDarkMode + // + this.buttonColorsDefaultDarkMode.AutoSize = true; + this.buttonColorsDefaultDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonColorsDefaultDarkMode.Location = new System.Drawing.Point(3, 555); + this.buttonColorsDefaultDarkMode.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonColorsDefaultDarkMode.Name = "buttonColorsDefaultDarkMode"; + this.buttonColorsDefaultDarkMode.Size = new System.Drawing.Size(180, 25); + this.buttonColorsDefaultDarkMode.TabIndex = 2; + this.buttonColorsDefaultDarkMode.Text = "buttonColorsDarkModeDefault"; + this.buttonColorsDefaultDarkMode.UseVisualStyleBackColor = true; + this.buttonColorsDefaultDarkMode.Click += new System.EventHandler(this.ButtonDefaultColorsDark_Click); + // + // tableLayoutPanelBackgroundDarkMode + // + this.tableLayoutPanelBackgroundDarkMode.AutoSize = true; + this.tableLayoutPanelBackgroundDarkMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelBackgroundDarkMode.ColumnCount = 3; + this.tableLayoutPanelBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackgroundDarkMode.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelBackgroundDarkMode.Controls.Add(this.pictureBoxBackgroundDarkMode, 0, 0); + this.tableLayoutPanelBackgroundDarkMode.Controls.Add(this.labelBackgroundDarkMode, 2, 0); + this.tableLayoutPanelBackgroundDarkMode.Controls.Add(this.textBoxColorBackgroundDarkMode, 1, 0); + this.tableLayoutPanelBackgroundDarkMode.Location = new System.Drawing.Point(3, 47); + this.tableLayoutPanelBackgroundDarkMode.Name = "tableLayoutPanelBackgroundDarkMode"; + this.tableLayoutPanelBackgroundDarkMode.RowCount = 1; + this.tableLayoutPanelBackgroundDarkMode.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackgroundDarkMode.Size = new System.Drawing.Size(249, 23); + this.tableLayoutPanelBackgroundDarkMode.TabIndex = 2; + // + // pictureBoxBackgroundDarkMode + // + this.pictureBoxBackgroundDarkMode.BackColor = System.Drawing.Color.White; + this.pictureBoxBackgroundDarkMode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxBackgroundDarkMode.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxBackgroundDarkMode.Location = new System.Drawing.Point(0, 0); + this.pictureBoxBackgroundDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxBackgroundDarkMode.Name = "pictureBoxBackgroundDarkMode"; + this.pictureBoxBackgroundDarkMode.Size = new System.Drawing.Size(23, 23); + this.pictureBoxBackgroundDarkMode.TabIndex = 1; + this.pictureBoxBackgroundDarkMode.TabStop = false; + this.pictureBoxBackgroundDarkMode.Click += new System.EventHandler(this.PictureBoxClick); + // + // labelBackgroundDarkMode + // + this.labelBackgroundDarkMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelBackgroundDarkMode.AutoSize = true; + this.labelBackgroundDarkMode.Location = new System.Drawing.Point(95, 4); + this.labelBackgroundDarkMode.Name = "labelBackgroundDarkMode"; + this.labelBackgroundDarkMode.Size = new System.Drawing.Size(151, 15); + this.labelBackgroundDarkMode.TabIndex = 0; + this.labelBackgroundDarkMode.Text = "labelBackgroundDarkMode"; + // + // textBoxColorBackgroundDarkMode + // + this.textBoxColorBackgroundDarkMode.Location = new System.Drawing.Point(23, 0); + this.textBoxColorBackgroundDarkMode.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorBackgroundDarkMode.MaxLength = 12; + this.textBoxColorBackgroundDarkMode.Name = "textBoxColorBackgroundDarkMode"; + this.textBoxColorBackgroundDarkMode.Size = new System.Drawing.Size(69, 23); + this.textBoxColorBackgroundDarkMode.TabIndex = 2; + this.textBoxColorBackgroundDarkMode.Text = "#ffffff"; + this.textBoxColorBackgroundDarkMode.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorBackgroundDarkMode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorBackgroundDarkMode.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // groupBoxColorsLightMode + // + this.groupBoxColorsLightMode.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxColorsLightMode.AutoSize = true; + this.groupBoxColorsLightMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxColorsLightMode.Controls.Add(this.tableLayoutPanelColorsAndDefault); + this.groupBoxColorsLightMode.Location = new System.Drawing.Point(3, 362); + this.groupBoxColorsLightMode.Name = "groupBoxColorsLightMode"; + this.groupBoxColorsLightMode.Size = new System.Drawing.Size(373, 605); + this.groupBoxColorsLightMode.TabIndex = 0; + this.groupBoxColorsLightMode.TabStop = false; + this.groupBoxColorsLightMode.Text = "groupBoxColorsLightMode"; + // + // tableLayoutPanelColorsAndDefault + // + this.tableLayoutPanelColorsAndDefault.AutoSize = true; + this.tableLayoutPanelColorsAndDefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelColorsAndDefault.ColumnCount = 1; + this.tableLayoutPanelColorsAndDefault.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelIcons, 0, 1); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelBackgroundBorder, 0, 3); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.labelMenuLightMode, 0, 0); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelBackground, 0, 2); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.buttonColorsDefault, 0, 20); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelArrowHoverBackground, 0, 19); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelArrowHover, 0, 18); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelArrowClickBackground, 0, 17); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelArrowClick, 0, 16); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelArrow, 0, 15); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelSliderArrowsAndTrackHover, 0, 14); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelSliderHover, 0, 13); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelSliderDragging, 0, 12); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelSlider, 0, 11); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelScrollbarBackground, 0, 10); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.labelScrollbarLightMode, 0, 9); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelSelectedItemBorder, 0, 8); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelSelectedItem, 0, 7); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelOpenFolderBorder, 0, 6); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelOpenFolder, 0, 5); + this.tableLayoutPanelColorsAndDefault.Controls.Add(this.tableLayoutPanelSearchField, 0, 4); + this.tableLayoutPanelColorsAndDefault.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelColorsAndDefault.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelColorsAndDefault.Name = "tableLayoutPanelColorsAndDefault"; + this.tableLayoutPanelColorsAndDefault.RowCount = 21; + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelColorsAndDefault.Size = new System.Drawing.Size(367, 583); + this.tableLayoutPanelColorsAndDefault.TabIndex = 0; + // + // tableLayoutPanelIcons + // + this.tableLayoutPanelIcons.AutoSize = true; + this.tableLayoutPanelIcons.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelIcons.ColumnCount = 3; + this.tableLayoutPanelIcons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelIcons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelIcons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelIcons.Controls.Add(this.pictureBoxIcons, 0, 0); + this.tableLayoutPanelIcons.Controls.Add(this.textBoxColorIcons, 1, 0); + this.tableLayoutPanelIcons.Controls.Add(this.labelIcons, 2, 0); + this.tableLayoutPanelIcons.Location = new System.Drawing.Point(3, 18); + this.tableLayoutPanelIcons.Name = "tableLayoutPanelIcons"; + this.tableLayoutPanelIcons.RowCount = 1; + this.tableLayoutPanelIcons.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelIcons.Size = new System.Drawing.Size(158, 23); + this.tableLayoutPanelIcons.TabIndex = 2; + // + // pictureBoxIcons + // + this.pictureBoxIcons.BackColor = System.Drawing.Color.White; + this.pictureBoxIcons.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxIcons.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxIcons.Location = new System.Drawing.Point(0, 0); + this.pictureBoxIcons.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxIcons.Name = "pictureBoxIcons"; + this.pictureBoxIcons.Size = new System.Drawing.Size(23, 23); + this.pictureBoxIcons.TabIndex = 1; + this.pictureBoxIcons.TabStop = false; + this.pictureBoxIcons.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorIcons + // + this.textBoxColorIcons.Location = new System.Drawing.Point(23, 0); + this.textBoxColorIcons.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorIcons.MaxLength = 12; + this.textBoxColorIcons.Name = "textBoxColorIcons"; + this.textBoxColorIcons.Size = new System.Drawing.Size(69, 23); + this.textBoxColorIcons.TabIndex = 2; + this.textBoxColorIcons.Text = "#ffffff"; + this.textBoxColorIcons.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorIcons.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorIcons.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelIcons + // + this.labelIcons.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelIcons.AutoSize = true; + this.labelIcons.Location = new System.Drawing.Point(95, 4); + this.labelIcons.Name = "labelIcons"; + this.labelIcons.Size = new System.Drawing.Size(60, 15); + this.labelIcons.TabIndex = 0; + this.labelIcons.Text = "labelIcons"; + // + // tableLayoutPanelBackgroundBorder + // + this.tableLayoutPanelBackgroundBorder.AutoSize = true; + this.tableLayoutPanelBackgroundBorder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelBackgroundBorder.ColumnCount = 3; + this.tableLayoutPanelBackgroundBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackgroundBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackgroundBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelBackgroundBorder.Controls.Add(this.pictureBoxBackgroundBorder, 0, 0); + this.tableLayoutPanelBackgroundBorder.Controls.Add(this.textBoxColorBackgroundBorder, 1, 0); + this.tableLayoutPanelBackgroundBorder.Controls.Add(this.labelBackgroundBorder, 2, 0); + this.tableLayoutPanelBackgroundBorder.Location = new System.Drawing.Point(3, 76); + this.tableLayoutPanelBackgroundBorder.Name = "tableLayoutPanelBackgroundBorder"; + this.tableLayoutPanelBackgroundBorder.RowCount = 1; + this.tableLayoutPanelBackgroundBorder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackgroundBorder.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); + this.tableLayoutPanelBackgroundBorder.Size = new System.Drawing.Size(229, 23); + this.tableLayoutPanelBackgroundBorder.TabIndex = 2; + // + // pictureBoxBackgroundBorder + // + this.pictureBoxBackgroundBorder.BackColor = System.Drawing.Color.White; + this.pictureBoxBackgroundBorder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxBackgroundBorder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxBackgroundBorder.Location = new System.Drawing.Point(0, 0); + this.pictureBoxBackgroundBorder.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxBackgroundBorder.Name = "pictureBoxBackgroundBorder"; + this.pictureBoxBackgroundBorder.Size = new System.Drawing.Size(23, 23); + this.pictureBoxBackgroundBorder.TabIndex = 1; + this.pictureBoxBackgroundBorder.TabStop = false; + this.pictureBoxBackgroundBorder.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorBackgroundBorder + // + this.textBoxColorBackgroundBorder.Location = new System.Drawing.Point(23, 0); + this.textBoxColorBackgroundBorder.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorBackgroundBorder.MaxLength = 12; + this.textBoxColorBackgroundBorder.Name = "textBoxColorBackgroundBorder"; + this.textBoxColorBackgroundBorder.Size = new System.Drawing.Size(69, 23); + this.textBoxColorBackgroundBorder.TabIndex = 2; + this.textBoxColorBackgroundBorder.Text = "#ffffff"; + this.textBoxColorBackgroundBorder.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorBackgroundBorder.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorBackgroundBorder.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelBackgroundBorder + // + this.labelBackgroundBorder.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelBackgroundBorder.AutoSize = true; + this.labelBackgroundBorder.Location = new System.Drawing.Point(95, 4); + this.labelBackgroundBorder.Name = "labelBackgroundBorder"; + this.labelBackgroundBorder.Size = new System.Drawing.Size(131, 15); + this.labelBackgroundBorder.TabIndex = 0; + this.labelBackgroundBorder.Text = "labelBackgroundBorder"; + // + // labelMenuLightMode + // + this.labelMenuLightMode.AutoSize = true; + this.labelMenuLightMode.Location = new System.Drawing.Point(3, 0); + this.labelMenuLightMode.Name = "labelMenuLightMode"; + this.labelMenuLightMode.Size = new System.Drawing.Size(121, 15); + this.labelMenuLightMode.TabIndex = 3; + this.labelMenuLightMode.Text = "labelMenuLightMode"; + // + // tableLayoutPanelBackground + // + this.tableLayoutPanelBackground.AutoSize = true; + this.tableLayoutPanelBackground.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelBackground.ColumnCount = 3; + this.tableLayoutPanelBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelBackground.Controls.Add(this.pictureBoxBackground, 0, 0); + this.tableLayoutPanelBackground.Controls.Add(this.textBoxColorBackground, 1, 0); + this.tableLayoutPanelBackground.Controls.Add(this.labelBackground, 2, 0); + this.tableLayoutPanelBackground.Location = new System.Drawing.Point(3, 47); + this.tableLayoutPanelBackground.Name = "tableLayoutPanelBackground"; + this.tableLayoutPanelBackground.RowCount = 1; + this.tableLayoutPanelBackground.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackground.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); + this.tableLayoutPanelBackground.Size = new System.Drawing.Size(194, 23); + this.tableLayoutPanelBackground.TabIndex = 2; + // + // pictureBoxBackground + // + this.pictureBoxBackground.BackColor = System.Drawing.Color.White; + this.pictureBoxBackground.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxBackground.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxBackground.Location = new System.Drawing.Point(0, 0); + this.pictureBoxBackground.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxBackground.Name = "pictureBoxBackground"; + this.pictureBoxBackground.Size = new System.Drawing.Size(23, 23); + this.pictureBoxBackground.TabIndex = 1; + this.pictureBoxBackground.TabStop = false; + this.pictureBoxBackground.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorBackground + // + this.textBoxColorBackground.Location = new System.Drawing.Point(23, 0); + this.textBoxColorBackground.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorBackground.MaxLength = 12; + this.textBoxColorBackground.Name = "textBoxColorBackground"; + this.textBoxColorBackground.Size = new System.Drawing.Size(69, 23); + this.textBoxColorBackground.TabIndex = 2; + this.textBoxColorBackground.Text = "#ffffff"; + this.textBoxColorBackground.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorBackground.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorBackground.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelBackground + // + this.labelBackground.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelBackground.AutoSize = true; + this.labelBackground.Location = new System.Drawing.Point(95, 4); + this.labelBackground.Name = "labelBackground"; + this.labelBackground.Size = new System.Drawing.Size(96, 15); + this.labelBackground.TabIndex = 0; + this.labelBackground.Text = "labelBackground"; + // + // buttonColorsDefault + // + this.buttonColorsDefault.AutoSize = true; + this.buttonColorsDefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonColorsDefault.Location = new System.Drawing.Point(3, 555); + this.buttonColorsDefault.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonColorsDefault.Name = "buttonColorsDefault"; + this.buttonColorsDefault.Size = new System.Drawing.Size(125, 25); + this.buttonColorsDefault.TabIndex = 2; + this.buttonColorsDefault.Text = "buttonColorsDefault"; + this.buttonColorsDefault.UseVisualStyleBackColor = true; + this.buttonColorsDefault.Click += new System.EventHandler(this.ButtonDefaultColors_Click); + // + // tableLayoutPanelArrowHoverBackground + // + this.tableLayoutPanelArrowHoverBackground.AutoSize = true; + this.tableLayoutPanelArrowHoverBackground.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowHoverBackground.ColumnCount = 3; + this.tableLayoutPanelArrowHoverBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowHoverBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowHoverBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowHoverBackground.Controls.Add(this.pictureBoxArrowHoverBackground, 0, 0); + this.tableLayoutPanelArrowHoverBackground.Controls.Add(this.textBoxColorArrowHoverBackground, 1, 0); + this.tableLayoutPanelArrowHoverBackground.Controls.Add(this.labelArrowHoverBackground, 2, 0); + this.tableLayoutPanelArrowHoverBackground.Location = new System.Drawing.Point(3, 526); + this.tableLayoutPanelArrowHoverBackground.Name = "tableLayoutPanelArrowHoverBackground"; + this.tableLayoutPanelArrowHoverBackground.RowCount = 1; + this.tableLayoutPanelArrowHoverBackground.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowHoverBackground.Size = new System.Drawing.Size(258, 23); + this.tableLayoutPanelArrowHoverBackground.TabIndex = 2; + // + // pictureBoxArrowHoverBackground + // + this.pictureBoxArrowHoverBackground.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowHoverBackground.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowHoverBackground.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowHoverBackground.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowHoverBackground.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowHoverBackground.Name = "pictureBoxArrowHoverBackground"; + this.pictureBoxArrowHoverBackground.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowHoverBackground.TabIndex = 1; + this.pictureBoxArrowHoverBackground.TabStop = false; + this.pictureBoxArrowHoverBackground.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowHoverBackground + // + this.textBoxColorArrowHoverBackground.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowHoverBackground.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowHoverBackground.MaxLength = 12; + this.textBoxColorArrowHoverBackground.Name = "textBoxColorArrowHoverBackground"; + this.textBoxColorArrowHoverBackground.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowHoverBackground.TabIndex = 2; + this.textBoxColorArrowHoverBackground.Text = "#ffffff"; + this.textBoxColorArrowHoverBackground.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowHoverBackground.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowHoverBackground.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelArrowHoverBackground + // + this.labelArrowHoverBackground.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelArrowHoverBackground.AutoSize = true; + this.labelArrowHoverBackground.Location = new System.Drawing.Point(95, 4); + this.labelArrowHoverBackground.MaximumSize = new System.Drawing.Size(280, 0); + this.labelArrowHoverBackground.Name = "labelArrowHoverBackground"; + this.labelArrowHoverBackground.Size = new System.Drawing.Size(160, 15); + this.labelArrowHoverBackground.TabIndex = 0; + this.labelArrowHoverBackground.Text = "labelArrowHoverBackground"; + // + // tableLayoutPanelArrowHover + // + this.tableLayoutPanelArrowHover.AutoSize = true; + this.tableLayoutPanelArrowHover.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowHover.ColumnCount = 3; + this.tableLayoutPanelArrowHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowHover.Controls.Add(this.pictureBoxArrowHover, 0, 0); + this.tableLayoutPanelArrowHover.Controls.Add(this.textBoxColorArrowHover, 1, 0); + this.tableLayoutPanelArrowHover.Controls.Add(this.labelArrowHover, 2, 0); + this.tableLayoutPanelArrowHover.Location = new System.Drawing.Point(3, 497); + this.tableLayoutPanelArrowHover.Name = "tableLayoutPanelArrowHover"; + this.tableLayoutPanelArrowHover.RowCount = 1; + this.tableLayoutPanelArrowHover.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowHover.Size = new System.Drawing.Size(194, 23); + this.tableLayoutPanelArrowHover.TabIndex = 2; + // + // pictureBoxArrowHover + // + this.pictureBoxArrowHover.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowHover.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowHover.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowHover.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowHover.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowHover.Name = "pictureBoxArrowHover"; + this.pictureBoxArrowHover.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowHover.TabIndex = 1; + this.pictureBoxArrowHover.TabStop = false; + this.pictureBoxArrowHover.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowHover + // + this.textBoxColorArrowHover.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowHover.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowHover.MaxLength = 12; + this.textBoxColorArrowHover.Name = "textBoxColorArrowHover"; + this.textBoxColorArrowHover.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowHover.TabIndex = 2; + this.textBoxColorArrowHover.Text = "#ffffff"; + this.textBoxColorArrowHover.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowHover.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowHover.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelArrowHover + // + this.labelArrowHover.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelArrowHover.AutoSize = true; + this.labelArrowHover.Location = new System.Drawing.Point(95, 4); + this.labelArrowHover.Name = "labelArrowHover"; + this.labelArrowHover.Size = new System.Drawing.Size(96, 15); + this.labelArrowHover.TabIndex = 0; + this.labelArrowHover.Text = "labelArrowHover"; + // + // tableLayoutPanelArrowClickBackground + // + this.tableLayoutPanelArrowClickBackground.AutoSize = true; + this.tableLayoutPanelArrowClickBackground.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowClickBackground.ColumnCount = 3; + this.tableLayoutPanelArrowClickBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowClickBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowClickBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowClickBackground.Controls.Add(this.pictureBoxArrowClickBackground, 0, 0); + this.tableLayoutPanelArrowClickBackground.Controls.Add(this.textBoxColorArrowClickBackground, 1, 0); + this.tableLayoutPanelArrowClickBackground.Controls.Add(this.labelArrowClickBackground, 2, 0); + this.tableLayoutPanelArrowClickBackground.Location = new System.Drawing.Point(3, 468); + this.tableLayoutPanelArrowClickBackground.Name = "tableLayoutPanelArrowClickBackground"; + this.tableLayoutPanelArrowClickBackground.RowCount = 1; + this.tableLayoutPanelArrowClickBackground.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowClickBackground.Size = new System.Drawing.Size(252, 23); + this.tableLayoutPanelArrowClickBackground.TabIndex = 2; + // + // pictureBoxArrowClickBackground + // + this.pictureBoxArrowClickBackground.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowClickBackground.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowClickBackground.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowClickBackground.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowClickBackground.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowClickBackground.Name = "pictureBoxArrowClickBackground"; + this.pictureBoxArrowClickBackground.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowClickBackground.TabIndex = 1; + this.pictureBoxArrowClickBackground.TabStop = false; + this.pictureBoxArrowClickBackground.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowClickBackground + // + this.textBoxColorArrowClickBackground.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowClickBackground.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowClickBackground.MaxLength = 12; + this.textBoxColorArrowClickBackground.Name = "textBoxColorArrowClickBackground"; + this.textBoxColorArrowClickBackground.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowClickBackground.TabIndex = 2; + this.textBoxColorArrowClickBackground.Text = "#ffffff"; + this.textBoxColorArrowClickBackground.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowClickBackground.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowClickBackground.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelArrowClickBackground + // + this.labelArrowClickBackground.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelArrowClickBackground.AutoSize = true; + this.labelArrowClickBackground.Location = new System.Drawing.Point(95, 4); + this.labelArrowClickBackground.Name = "labelArrowClickBackground"; + this.labelArrowClickBackground.Size = new System.Drawing.Size(154, 15); + this.labelArrowClickBackground.TabIndex = 0; + this.labelArrowClickBackground.Text = "labelArrowClickBackground"; + // + // tableLayoutPanelArrowClick + // + this.tableLayoutPanelArrowClick.AutoSize = true; + this.tableLayoutPanelArrowClick.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrowClick.ColumnCount = 3; + this.tableLayoutPanelArrowClick.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowClick.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrowClick.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrowClick.Controls.Add(this.pictureBoxArrowClick, 0, 0); + this.tableLayoutPanelArrowClick.Controls.Add(this.textBoxColorArrowClick, 1, 0); + this.tableLayoutPanelArrowClick.Controls.Add(this.labelArrowClick, 2, 0); + this.tableLayoutPanelArrowClick.Location = new System.Drawing.Point(3, 439); + this.tableLayoutPanelArrowClick.Name = "tableLayoutPanelArrowClick"; + this.tableLayoutPanelArrowClick.RowCount = 1; + this.tableLayoutPanelArrowClick.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrowClick.Size = new System.Drawing.Size(188, 23); + this.tableLayoutPanelArrowClick.TabIndex = 2; + // + // pictureBoxArrowClick + // + this.pictureBoxArrowClick.BackColor = System.Drawing.Color.White; + this.pictureBoxArrowClick.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrowClick.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrowClick.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrowClick.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrowClick.Name = "pictureBoxArrowClick"; + this.pictureBoxArrowClick.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrowClick.TabIndex = 1; + this.pictureBoxArrowClick.TabStop = false; + this.pictureBoxArrowClick.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrowClick + // + this.textBoxColorArrowClick.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrowClick.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrowClick.MaxLength = 12; + this.textBoxColorArrowClick.Name = "textBoxColorArrowClick"; + this.textBoxColorArrowClick.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrowClick.TabIndex = 2; + this.textBoxColorArrowClick.Text = "#ffffff"; + this.textBoxColorArrowClick.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrowClick.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrowClick.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelArrowClick + // + this.labelArrowClick.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelArrowClick.AutoSize = true; + this.labelArrowClick.Location = new System.Drawing.Point(95, 4); + this.labelArrowClick.Name = "labelArrowClick"; + this.labelArrowClick.Size = new System.Drawing.Size(90, 15); + this.labelArrowClick.TabIndex = 0; + this.labelArrowClick.Text = "labelArrowClick"; + // + // tableLayoutPanelArrow + // + this.tableLayoutPanelArrow.AutoSize = true; + this.tableLayoutPanelArrow.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelArrow.ColumnCount = 3; + this.tableLayoutPanelArrow.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrow.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelArrow.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelArrow.Controls.Add(this.pictureBoxArrow, 0, 0); + this.tableLayoutPanelArrow.Controls.Add(this.textBoxColorArrow, 1, 0); + this.tableLayoutPanelArrow.Controls.Add(this.labelArrow, 2, 0); + this.tableLayoutPanelArrow.Location = new System.Drawing.Point(3, 410); + this.tableLayoutPanelArrow.Name = "tableLayoutPanelArrow"; + this.tableLayoutPanelArrow.RowCount = 1; + this.tableLayoutPanelArrow.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelArrow.Size = new System.Drawing.Size(162, 23); + this.tableLayoutPanelArrow.TabIndex = 2; + // + // pictureBoxArrow + // + this.pictureBoxArrow.BackColor = System.Drawing.Color.White; + this.pictureBoxArrow.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxArrow.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxArrow.Location = new System.Drawing.Point(0, 0); + this.pictureBoxArrow.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxArrow.Name = "pictureBoxArrow"; + this.pictureBoxArrow.Size = new System.Drawing.Size(23, 23); + this.pictureBoxArrow.TabIndex = 1; + this.pictureBoxArrow.TabStop = false; + this.pictureBoxArrow.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorArrow + // + this.textBoxColorArrow.Location = new System.Drawing.Point(23, 0); + this.textBoxColorArrow.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorArrow.MaxLength = 12; + this.textBoxColorArrow.Name = "textBoxColorArrow"; + this.textBoxColorArrow.Size = new System.Drawing.Size(69, 23); + this.textBoxColorArrow.TabIndex = 2; + this.textBoxColorArrow.Text = "#ffffff"; + this.textBoxColorArrow.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorArrow.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorArrow.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelArrow + // + this.labelArrow.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelArrow.AutoSize = true; + this.labelArrow.Location = new System.Drawing.Point(95, 4); + this.labelArrow.Name = "labelArrow"; + this.labelArrow.Size = new System.Drawing.Size(64, 15); + this.labelArrow.TabIndex = 0; + this.labelArrow.Text = "labelArrow"; + // + // tableLayoutPanelSliderArrowsAndTrackHover + // + this.tableLayoutPanelSliderArrowsAndTrackHover.AutoSize = true; + this.tableLayoutPanelSliderArrowsAndTrackHover.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSliderArrowsAndTrackHover.ColumnCount = 3; + this.tableLayoutPanelSliderArrowsAndTrackHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderArrowsAndTrackHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderArrowsAndTrackHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSliderArrowsAndTrackHover.Controls.Add(this.pictureBoxSliderArrowsAndTrackHover, 0, 0); + this.tableLayoutPanelSliderArrowsAndTrackHover.Controls.Add(this.textBoxColorSliderArrowsAndTrackHover, 1, 0); + this.tableLayoutPanelSliderArrowsAndTrackHover.Controls.Add(this.labelSliderArrowsAndTrackHover, 2, 0); + this.tableLayoutPanelSliderArrowsAndTrackHover.Location = new System.Drawing.Point(3, 381); + this.tableLayoutPanelSliderArrowsAndTrackHover.Name = "tableLayoutPanelSliderArrowsAndTrackHover"; + this.tableLayoutPanelSliderArrowsAndTrackHover.RowCount = 1; + this.tableLayoutPanelSliderArrowsAndTrackHover.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSliderArrowsAndTrackHover.Size = new System.Drawing.Size(277, 23); + this.tableLayoutPanelSliderArrowsAndTrackHover.TabIndex = 2; + // + // pictureBoxSliderArrowsAndTrackHover + // + this.pictureBoxSliderArrowsAndTrackHover.BackColor = System.Drawing.Color.White; + this.pictureBoxSliderArrowsAndTrackHover.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSliderArrowsAndTrackHover.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSliderArrowsAndTrackHover.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSliderArrowsAndTrackHover.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSliderArrowsAndTrackHover.Name = "pictureBoxSliderArrowsAndTrackHover"; + this.pictureBoxSliderArrowsAndTrackHover.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSliderArrowsAndTrackHover.TabIndex = 1; + this.pictureBoxSliderArrowsAndTrackHover.TabStop = false; + this.pictureBoxSliderArrowsAndTrackHover.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSliderArrowsAndTrackHover + // + this.textBoxColorSliderArrowsAndTrackHover.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSliderArrowsAndTrackHover.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSliderArrowsAndTrackHover.MaxLength = 12; + this.textBoxColorSliderArrowsAndTrackHover.Name = "textBoxColorSliderArrowsAndTrackHover"; + this.textBoxColorSliderArrowsAndTrackHover.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSliderArrowsAndTrackHover.TabIndex = 2; + this.textBoxColorSliderArrowsAndTrackHover.Text = "#ffffff"; + this.textBoxColorSliderArrowsAndTrackHover.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSliderArrowsAndTrackHover.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSliderArrowsAndTrackHover.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelSliderArrowsAndTrackHover + // + this.labelSliderArrowsAndTrackHover.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSliderArrowsAndTrackHover.AutoSize = true; + this.labelSliderArrowsAndTrackHover.Location = new System.Drawing.Point(95, 4); + this.labelSliderArrowsAndTrackHover.Name = "labelSliderArrowsAndTrackHover"; + this.labelSliderArrowsAndTrackHover.Size = new System.Drawing.Size(179, 15); + this.labelSliderArrowsAndTrackHover.TabIndex = 0; + this.labelSliderArrowsAndTrackHover.Text = "labelSliderArrowsAndTrackHover"; + // + // tableLayoutPanelSliderHover + // + this.tableLayoutPanelSliderHover.AutoSize = true; + this.tableLayoutPanelSliderHover.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSliderHover.ColumnCount = 3; + this.tableLayoutPanelSliderHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderHover.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSliderHover.Controls.Add(this.pictureBoxSliderHover, 0, 0); + this.tableLayoutPanelSliderHover.Controls.Add(this.textBoxColorSliderHover, 1, 0); + this.tableLayoutPanelSliderHover.Controls.Add(this.labelSliderHover, 2, 0); + this.tableLayoutPanelSliderHover.Location = new System.Drawing.Point(3, 352); + this.tableLayoutPanelSliderHover.Name = "tableLayoutPanelSliderHover"; + this.tableLayoutPanelSliderHover.RowCount = 1; + this.tableLayoutPanelSliderHover.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSliderHover.Size = new System.Drawing.Size(191, 23); + this.tableLayoutPanelSliderHover.TabIndex = 2; + // + // pictureBoxSliderHover + // + this.pictureBoxSliderHover.BackColor = System.Drawing.Color.White; + this.pictureBoxSliderHover.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSliderHover.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSliderHover.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSliderHover.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSliderHover.Name = "pictureBoxSliderHover"; + this.pictureBoxSliderHover.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSliderHover.TabIndex = 1; + this.pictureBoxSliderHover.TabStop = false; + this.pictureBoxSliderHover.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSliderHover + // + this.textBoxColorSliderHover.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSliderHover.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSliderHover.MaxLength = 12; + this.textBoxColorSliderHover.Name = "textBoxColorSliderHover"; + this.textBoxColorSliderHover.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSliderHover.TabIndex = 2; + this.textBoxColorSliderHover.Text = "#ffffff"; + this.textBoxColorSliderHover.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSliderHover.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSliderHover.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelSliderHover + // + this.labelSliderHover.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSliderHover.AutoSize = true; + this.labelSliderHover.Location = new System.Drawing.Point(95, 4); + this.labelSliderHover.Name = "labelSliderHover"; + this.labelSliderHover.Size = new System.Drawing.Size(93, 15); + this.labelSliderHover.TabIndex = 0; + this.labelSliderHover.Text = "labelSliderHover"; + // + // tableLayoutPanelSliderDragging + // + this.tableLayoutPanelSliderDragging.AutoSize = true; + this.tableLayoutPanelSliderDragging.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSliderDragging.ColumnCount = 3; + this.tableLayoutPanelSliderDragging.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderDragging.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSliderDragging.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSliderDragging.Controls.Add(this.pictureBoxSliderDragging, 0, 0); + this.tableLayoutPanelSliderDragging.Controls.Add(this.textBoxColorSliderDragging, 1, 0); + this.tableLayoutPanelSliderDragging.Controls.Add(this.labelSliderDragging, 2, 0); + this.tableLayoutPanelSliderDragging.Location = new System.Drawing.Point(3, 323); + this.tableLayoutPanelSliderDragging.Name = "tableLayoutPanelSliderDragging"; + this.tableLayoutPanelSliderDragging.RowCount = 1; + this.tableLayoutPanelSliderDragging.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSliderDragging.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); + this.tableLayoutPanelSliderDragging.Size = new System.Drawing.Size(208, 23); + this.tableLayoutPanelSliderDragging.TabIndex = 2; + // + // pictureBoxSliderDragging + // + this.pictureBoxSliderDragging.BackColor = System.Drawing.Color.White; + this.pictureBoxSliderDragging.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSliderDragging.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSliderDragging.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSliderDragging.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSliderDragging.Name = "pictureBoxSliderDragging"; + this.pictureBoxSliderDragging.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSliderDragging.TabIndex = 1; + this.pictureBoxSliderDragging.TabStop = false; + this.pictureBoxSliderDragging.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSliderDragging + // + this.textBoxColorSliderDragging.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSliderDragging.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSliderDragging.MaxLength = 12; + this.textBoxColorSliderDragging.Name = "textBoxColorSliderDragging"; + this.textBoxColorSliderDragging.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSliderDragging.TabIndex = 2; + this.textBoxColorSliderDragging.Text = "#ffffff"; + this.textBoxColorSliderDragging.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSliderDragging.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSliderDragging.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelSliderDragging + // + this.labelSliderDragging.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSliderDragging.AutoSize = true; + this.labelSliderDragging.Location = new System.Drawing.Point(95, 4); + this.labelSliderDragging.Name = "labelSliderDragging"; + this.labelSliderDragging.Size = new System.Drawing.Size(110, 15); + this.labelSliderDragging.TabIndex = 0; + this.labelSliderDragging.Text = "labelSliderDragging"; + // + // tableLayoutPanelSlider + // + this.tableLayoutPanelSlider.AutoSize = true; + this.tableLayoutPanelSlider.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSlider.ColumnCount = 3; + this.tableLayoutPanelSlider.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSlider.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSlider.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSlider.Controls.Add(this.pictureBoxSlider, 0, 0); + this.tableLayoutPanelSlider.Controls.Add(this.textBoxColorSlider, 1, 0); + this.tableLayoutPanelSlider.Controls.Add(this.labelSlider, 2, 0); + this.tableLayoutPanelSlider.Location = new System.Drawing.Point(3, 294); + this.tableLayoutPanelSlider.Name = "tableLayoutPanelSlider"; + this.tableLayoutPanelSlider.RowCount = 1; + this.tableLayoutPanelSlider.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSlider.Size = new System.Drawing.Size(159, 23); + this.tableLayoutPanelSlider.TabIndex = 2; + // + // pictureBoxSlider + // + this.pictureBoxSlider.BackColor = System.Drawing.Color.White; + this.pictureBoxSlider.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSlider.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSlider.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSlider.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSlider.Name = "pictureBoxSlider"; + this.pictureBoxSlider.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSlider.TabIndex = 1; + this.pictureBoxSlider.TabStop = false; + this.pictureBoxSlider.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSlider + // + this.textBoxColorSlider.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSlider.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSlider.MaxLength = 12; + this.textBoxColorSlider.Name = "textBoxColorSlider"; + this.textBoxColorSlider.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSlider.TabIndex = 2; + this.textBoxColorSlider.Text = "#ffffff"; + this.textBoxColorSlider.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSlider.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSlider.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelSlider + // + this.labelSlider.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSlider.AutoSize = true; + this.labelSlider.Location = new System.Drawing.Point(95, 4); + this.labelSlider.Name = "labelSlider"; + this.labelSlider.Size = new System.Drawing.Size(61, 15); + this.labelSlider.TabIndex = 0; + this.labelSlider.Text = "labelSlider"; + // + // tableLayoutPanelScrollbarBackground + // + this.tableLayoutPanelScrollbarBackground.AutoSize = true; + this.tableLayoutPanelScrollbarBackground.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelScrollbarBackground.ColumnCount = 3; + this.tableLayoutPanelScrollbarBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelScrollbarBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelScrollbarBackground.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelScrollbarBackground.Controls.Add(this.pictureBoxScrollbarBackground, 0, 0); + this.tableLayoutPanelScrollbarBackground.Controls.Add(this.textBoxColorScrollbarBackground, 1, 0); + this.tableLayoutPanelScrollbarBackground.Controls.Add(this.labelScrollbarBackground, 2, 0); + this.tableLayoutPanelScrollbarBackground.Location = new System.Drawing.Point(3, 265); + this.tableLayoutPanelScrollbarBackground.Name = "tableLayoutPanelScrollbarBackground"; + this.tableLayoutPanelScrollbarBackground.RowCount = 1; + this.tableLayoutPanelScrollbarBackground.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelScrollbarBackground.Size = new System.Drawing.Size(240, 23); + this.tableLayoutPanelScrollbarBackground.TabIndex = 2; + // + // pictureBoxScrollbarBackground + // + this.pictureBoxScrollbarBackground.BackColor = System.Drawing.Color.White; + this.pictureBoxScrollbarBackground.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxScrollbarBackground.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxScrollbarBackground.Location = new System.Drawing.Point(0, 0); + this.pictureBoxScrollbarBackground.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxScrollbarBackground.Name = "pictureBoxScrollbarBackground"; + this.pictureBoxScrollbarBackground.Size = new System.Drawing.Size(23, 23); + this.pictureBoxScrollbarBackground.TabIndex = 1; + this.pictureBoxScrollbarBackground.TabStop = false; + this.pictureBoxScrollbarBackground.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorScrollbarBackground + // + this.textBoxColorScrollbarBackground.Location = new System.Drawing.Point(23, 0); + this.textBoxColorScrollbarBackground.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorScrollbarBackground.MaxLength = 12; + this.textBoxColorScrollbarBackground.Name = "textBoxColorScrollbarBackground"; + this.textBoxColorScrollbarBackground.Size = new System.Drawing.Size(69, 23); + this.textBoxColorScrollbarBackground.TabIndex = 2; + this.textBoxColorScrollbarBackground.Text = "#ffffff"; + this.textBoxColorScrollbarBackground.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorScrollbarBackground.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorScrollbarBackground.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelScrollbarBackground + // + this.labelScrollbarBackground.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelScrollbarBackground.AutoSize = true; + this.labelScrollbarBackground.Location = new System.Drawing.Point(95, 4); + this.labelScrollbarBackground.Name = "labelScrollbarBackground"; + this.labelScrollbarBackground.Size = new System.Drawing.Size(142, 15); + this.labelScrollbarBackground.TabIndex = 0; + this.labelScrollbarBackground.Text = "labelScrollbarBackground"; + // + // labelScrollbarLightMode + // + this.labelScrollbarLightMode.AutoSize = true; + this.labelScrollbarLightMode.Location = new System.Drawing.Point(3, 247); + this.labelScrollbarLightMode.Name = "labelScrollbarLightMode"; + this.labelScrollbarLightMode.Size = new System.Drawing.Size(136, 15); + this.labelScrollbarLightMode.TabIndex = 3; + this.labelScrollbarLightMode.Text = "labelScrollbarLightMode"; + // + // tableLayoutPanelSelectedItemBorder + // + this.tableLayoutPanelSelectedItemBorder.AutoSize = true; + this.tableLayoutPanelSelectedItemBorder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSelectedItemBorder.ColumnCount = 3; + this.tableLayoutPanelSelectedItemBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSelectedItemBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSelectedItemBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSelectedItemBorder.Controls.Add(this.pictureBoxSelectedItemBorder, 0, 0); + this.tableLayoutPanelSelectedItemBorder.Controls.Add(this.textBoxColorSelectedItemBorder, 1, 0); + this.tableLayoutPanelSelectedItemBorder.Controls.Add(this.labelSelectedItemBorder, 2, 0); + this.tableLayoutPanelSelectedItemBorder.Location = new System.Drawing.Point(3, 221); + this.tableLayoutPanelSelectedItemBorder.Name = "tableLayoutPanelSelectedItemBorder"; + this.tableLayoutPanelSelectedItemBorder.RowCount = 1; + this.tableLayoutPanelSelectedItemBorder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSelectedItemBorder.Size = new System.Drawing.Size(233, 23); + this.tableLayoutPanelSelectedItemBorder.TabIndex = 2; + // + // pictureBoxSelectedItemBorder + // + this.pictureBoxSelectedItemBorder.BackColor = System.Drawing.Color.White; + this.pictureBoxSelectedItemBorder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSelectedItemBorder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSelectedItemBorder.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSelectedItemBorder.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSelectedItemBorder.Name = "pictureBoxSelectedItemBorder"; + this.pictureBoxSelectedItemBorder.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSelectedItemBorder.TabIndex = 1; + this.pictureBoxSelectedItemBorder.TabStop = false; + this.pictureBoxSelectedItemBorder.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSelectedItemBorder + // + this.textBoxColorSelectedItemBorder.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSelectedItemBorder.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSelectedItemBorder.MaxLength = 12; + this.textBoxColorSelectedItemBorder.Name = "textBoxColorSelectedItemBorder"; + this.textBoxColorSelectedItemBorder.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSelectedItemBorder.TabIndex = 2; + this.textBoxColorSelectedItemBorder.Text = "#ffffff"; + this.textBoxColorSelectedItemBorder.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSelectedItemBorder.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSelectedItemBorder.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelSelectedItemBorder + // + this.labelSelectedItemBorder.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSelectedItemBorder.AutoSize = true; + this.labelSelectedItemBorder.Location = new System.Drawing.Point(95, 4); + this.labelSelectedItemBorder.Name = "labelSelectedItemBorder"; + this.labelSelectedItemBorder.Size = new System.Drawing.Size(135, 15); + this.labelSelectedItemBorder.TabIndex = 0; + this.labelSelectedItemBorder.Text = "labelSelectedItemBorder"; + // + // tableLayoutPanelSelectedItem + // + this.tableLayoutPanelSelectedItem.AutoSize = true; + this.tableLayoutPanelSelectedItem.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSelectedItem.ColumnCount = 3; + this.tableLayoutPanelSelectedItem.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSelectedItem.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSelectedItem.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSelectedItem.Controls.Add(this.pictureBoxSelectedItem, 0, 0); + this.tableLayoutPanelSelectedItem.Controls.Add(this.textBoxColorSelectedItem, 1, 0); + this.tableLayoutPanelSelectedItem.Controls.Add(this.labelSelectedItem, 2, 0); + this.tableLayoutPanelSelectedItem.Location = new System.Drawing.Point(3, 192); + this.tableLayoutPanelSelectedItem.Name = "tableLayoutPanelSelectedItem"; + this.tableLayoutPanelSelectedItem.RowCount = 1; + this.tableLayoutPanelSelectedItem.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSelectedItem.Size = new System.Drawing.Size(198, 23); + this.tableLayoutPanelSelectedItem.TabIndex = 2; + // + // pictureBoxSelectedItem + // + this.pictureBoxSelectedItem.BackColor = System.Drawing.Color.White; + this.pictureBoxSelectedItem.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSelectedItem.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSelectedItem.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSelectedItem.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSelectedItem.Name = "pictureBoxSelectedItem"; + this.pictureBoxSelectedItem.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSelectedItem.TabIndex = 1; + this.pictureBoxSelectedItem.TabStop = false; + this.pictureBoxSelectedItem.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSelectedItem + // + this.textBoxColorSelectedItem.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSelectedItem.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSelectedItem.MaxLength = 12; + this.textBoxColorSelectedItem.Name = "textBoxColorSelectedItem"; + this.textBoxColorSelectedItem.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSelectedItem.TabIndex = 2; + this.textBoxColorSelectedItem.Text = "#ffffff"; + this.textBoxColorSelectedItem.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSelectedItem.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSelectedItem.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelSelectedItem + // + this.labelSelectedItem.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSelectedItem.AutoSize = true; + this.labelSelectedItem.Location = new System.Drawing.Point(95, 4); + this.labelSelectedItem.Name = "labelSelectedItem"; + this.labelSelectedItem.Size = new System.Drawing.Size(100, 15); + this.labelSelectedItem.TabIndex = 0; + this.labelSelectedItem.Text = "labelSelectedItem"; + // + // tableLayoutPanelOpenFolderBorder + // + this.tableLayoutPanelOpenFolderBorder.AutoSize = true; + this.tableLayoutPanelOpenFolderBorder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelOpenFolderBorder.ColumnCount = 3; + this.tableLayoutPanelOpenFolderBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelOpenFolderBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelOpenFolderBorder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelOpenFolderBorder.Controls.Add(this.pictureBoxOpenFolderBorder, 0, 0); + this.tableLayoutPanelOpenFolderBorder.Controls.Add(this.textBoxColorOpenFolderBorder, 1, 0); + this.tableLayoutPanelOpenFolderBorder.Controls.Add(this.labelOpenFolderBorder, 2, 0); + this.tableLayoutPanelOpenFolderBorder.Location = new System.Drawing.Point(3, 163); + this.tableLayoutPanelOpenFolderBorder.Name = "tableLayoutPanelOpenFolderBorder"; + this.tableLayoutPanelOpenFolderBorder.RowCount = 1; + this.tableLayoutPanelOpenFolderBorder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelOpenFolderBorder.Size = new System.Drawing.Size(227, 23); + this.tableLayoutPanelOpenFolderBorder.TabIndex = 2; + // + // pictureBoxOpenFolderBorder + // + this.pictureBoxOpenFolderBorder.BackColor = System.Drawing.Color.White; + this.pictureBoxOpenFolderBorder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxOpenFolderBorder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxOpenFolderBorder.Location = new System.Drawing.Point(0, 0); + this.pictureBoxOpenFolderBorder.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxOpenFolderBorder.Name = "pictureBoxOpenFolderBorder"; + this.pictureBoxOpenFolderBorder.Size = new System.Drawing.Size(23, 23); + this.pictureBoxOpenFolderBorder.TabIndex = 1; + this.pictureBoxOpenFolderBorder.TabStop = false; + this.pictureBoxOpenFolderBorder.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorOpenFolderBorder + // + this.textBoxColorOpenFolderBorder.Location = new System.Drawing.Point(23, 0); + this.textBoxColorOpenFolderBorder.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorOpenFolderBorder.Name = "textBoxColorOpenFolderBorder"; + this.textBoxColorOpenFolderBorder.Size = new System.Drawing.Size(69, 23); + this.textBoxColorOpenFolderBorder.TabIndex = 2; + this.textBoxColorOpenFolderBorder.Text = "#ffffff"; + this.textBoxColorOpenFolderBorder.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorOpenFolderBorder.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorOpenFolderBorder.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelOpenFolderBorder + // + this.labelOpenFolderBorder.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelOpenFolderBorder.AutoSize = true; + this.labelOpenFolderBorder.Location = new System.Drawing.Point(95, 4); + this.labelOpenFolderBorder.Name = "labelOpenFolderBorder"; + this.labelOpenFolderBorder.Size = new System.Drawing.Size(129, 15); + this.labelOpenFolderBorder.TabIndex = 0; + this.labelOpenFolderBorder.Text = "labelOpenFolderBorder"; + // + // tableLayoutPanelOpenFolder + // + this.tableLayoutPanelOpenFolder.AutoSize = true; + this.tableLayoutPanelOpenFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelOpenFolder.ColumnCount = 3; + this.tableLayoutPanelOpenFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelOpenFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelOpenFolder.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelOpenFolder.Controls.Add(this.pictureBoxOpenFolder, 0, 0); + this.tableLayoutPanelOpenFolder.Controls.Add(this.textBoxColorOpenFolder, 1, 0); + this.tableLayoutPanelOpenFolder.Controls.Add(this.labelOpenFolder, 2, 0); + this.tableLayoutPanelOpenFolder.Location = new System.Drawing.Point(3, 134); + this.tableLayoutPanelOpenFolder.Name = "tableLayoutPanelOpenFolder"; + this.tableLayoutPanelOpenFolder.RowCount = 1; + this.tableLayoutPanelOpenFolder.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelOpenFolder.Size = new System.Drawing.Size(192, 23); + this.tableLayoutPanelOpenFolder.TabIndex = 2; + // + // pictureBoxOpenFolder + // + this.pictureBoxOpenFolder.BackColor = System.Drawing.Color.White; + this.pictureBoxOpenFolder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxOpenFolder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxOpenFolder.Location = new System.Drawing.Point(0, 0); + this.pictureBoxOpenFolder.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxOpenFolder.Name = "pictureBoxOpenFolder"; + this.pictureBoxOpenFolder.Size = new System.Drawing.Size(23, 23); + this.pictureBoxOpenFolder.TabIndex = 1; + this.pictureBoxOpenFolder.TabStop = false; + this.pictureBoxOpenFolder.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorOpenFolder + // + this.textBoxColorOpenFolder.Location = new System.Drawing.Point(23, 0); + this.textBoxColorOpenFolder.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorOpenFolder.MaxLength = 12; + this.textBoxColorOpenFolder.Name = "textBoxColorOpenFolder"; + this.textBoxColorOpenFolder.Size = new System.Drawing.Size(69, 23); + this.textBoxColorOpenFolder.TabIndex = 2; + this.textBoxColorOpenFolder.Text = "#ffffff"; + this.textBoxColorOpenFolder.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorOpenFolder.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorOpenFolder.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelOpenFolder + // + this.labelOpenFolder.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelOpenFolder.AutoSize = true; + this.labelOpenFolder.Location = new System.Drawing.Point(95, 4); + this.labelOpenFolder.Name = "labelOpenFolder"; + this.labelOpenFolder.Size = new System.Drawing.Size(94, 15); + this.labelOpenFolder.TabIndex = 0; + this.labelOpenFolder.Text = "labelOpenFolder"; + // + // tableLayoutPanelSearchField + // + this.tableLayoutPanelSearchField.AutoSize = true; + this.tableLayoutPanelSearchField.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelSearchField.ColumnCount = 3; + this.tableLayoutPanelSearchField.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSearchField.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelSearchField.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelSearchField.Controls.Add(this.pictureBoxSearchField, 0, 0); + this.tableLayoutPanelSearchField.Controls.Add(this.textBoxColorSearchField, 1, 0); + this.tableLayoutPanelSearchField.Controls.Add(this.labelSearchField, 2, 0); + this.tableLayoutPanelSearchField.Location = new System.Drawing.Point(3, 105); + this.tableLayoutPanelSearchField.Name = "tableLayoutPanelSearchField"; + this.tableLayoutPanelSearchField.RowCount = 1; + this.tableLayoutPanelSearchField.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelSearchField.Size = new System.Drawing.Size(190, 23); + this.tableLayoutPanelSearchField.TabIndex = 2; + // + // pictureBoxSearchField + // + this.pictureBoxSearchField.BackColor = System.Drawing.Color.White; + this.pictureBoxSearchField.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxSearchField.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxSearchField.Location = new System.Drawing.Point(0, 0); + this.pictureBoxSearchField.Margin = new System.Windows.Forms.Padding(0); + this.pictureBoxSearchField.Name = "pictureBoxSearchField"; + this.pictureBoxSearchField.Size = new System.Drawing.Size(23, 23); + this.pictureBoxSearchField.TabIndex = 1; + this.pictureBoxSearchField.TabStop = false; + this.pictureBoxSearchField.Click += new System.EventHandler(this.PictureBoxClick); + // + // textBoxColorSearchField + // + this.textBoxColorSearchField.Location = new System.Drawing.Point(23, 0); + this.textBoxColorSearchField.Margin = new System.Windows.Forms.Padding(0); + this.textBoxColorSearchField.MaxLength = 12; + this.textBoxColorSearchField.Name = "textBoxColorSearchField"; + this.textBoxColorSearchField.Size = new System.Drawing.Size(69, 23); + this.textBoxColorSearchField.TabIndex = 2; + this.textBoxColorSearchField.Text = "#ffffff"; + this.textBoxColorSearchField.TextChanged += new System.EventHandler(this.TextBoxColorsChanged); + this.textBoxColorSearchField.KeyDown += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyDown); + this.textBoxColorSearchField.KeyUp += new System.Windows.Forms.KeyEventHandler(this.StopPlayingDingSoundEnterKeyPressed_KeyUp); + // + // labelSearchField + // + this.labelSearchField.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.labelSearchField.AutoSize = true; + this.labelSearchField.Location = new System.Drawing.Point(95, 4); + this.labelSearchField.Name = "labelSearchField"; + this.labelSearchField.Size = new System.Drawing.Size(92, 15); + this.labelSearchField.TabIndex = 0; + this.labelSearchField.Text = "labelSearchField"; + // + // groupBoxAppearance + // + this.groupBoxAppearance.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxAppearance.AutoSize = true; + this.groupBoxAppearance.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBoxAppearance.Controls.Add(this.tableLayoutPanelAppearance); + this.groupBoxAppearance.Location = new System.Drawing.Point(3, 3); + this.groupBoxAppearance.Name = "groupBoxAppearance"; + this.groupBoxAppearance.Size = new System.Drawing.Size(373, 353); + this.groupBoxAppearance.TabIndex = 1; + this.groupBoxAppearance.TabStop = false; + this.groupBoxAppearance.Text = "groupBoxAppearance"; + // + // tableLayoutPanelAppearance + // + this.tableLayoutPanelAppearance.AutoSize = true; + this.tableLayoutPanelAppearance.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelAppearance.ColumnCount = 1; + this.tableLayoutPanelAppearance.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxShowFunctionKeyPinMenu, 0, 8); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxShowFunctionKeySettings, 0, 9); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxShowFunctionKeyRestart, 0, 10); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxShowLinkOverlay, 0, 4); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxUseFading, 0, 3); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxUseIconFromRootFolder, 0, 0); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxShowSearchBar, 0, 6); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxShowDirectoryTitleAtTop, 0, 5); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxRoundCorners, 0, 1); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxDarkModeAlwaysOn, 0, 2); + this.tableLayoutPanelAppearance.Controls.Add(this.buttonAppearanceDefault, 0, 12); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxShowCountOfElementsBelow, 0, 11); + this.tableLayoutPanelAppearance.Controls.Add(this.checkBoxShowFunctionKeyOpenFolder, 0, 7); + this.tableLayoutPanelAppearance.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelAppearance.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanelAppearance.Name = "tableLayoutPanelAppearance"; + this.tableLayoutPanelAppearance.RowCount = 13; + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelAppearance.Size = new System.Drawing.Size(367, 331); + this.tableLayoutPanelAppearance.TabIndex = 1; + // + // checkBoxShowFunctionKeyPinMenu + // + this.checkBoxShowFunctionKeyPinMenu.AutoSize = true; + this.checkBoxShowFunctionKeyPinMenu.Location = new System.Drawing.Point(3, 203); + this.checkBoxShowFunctionKeyPinMenu.Name = "checkBoxShowFunctionKeyPinMenu"; + this.checkBoxShowFunctionKeyPinMenu.Size = new System.Drawing.Size(220, 19); + this.checkBoxShowFunctionKeyPinMenu.TabIndex = 4; + this.checkBoxShowFunctionKeyPinMenu.Text = "checkBoxShowFunctionKeyPinMenu"; + this.checkBoxShowFunctionKeyPinMenu.UseVisualStyleBackColor = true; + // + // checkBoxShowFunctionKeySettings + // + this.checkBoxShowFunctionKeySettings.AutoSize = true; + this.checkBoxShowFunctionKeySettings.Location = new System.Drawing.Point(3, 228); + this.checkBoxShowFunctionKeySettings.Name = "checkBoxShowFunctionKeySettings"; + this.checkBoxShowFunctionKeySettings.Size = new System.Drawing.Size(214, 19); + this.checkBoxShowFunctionKeySettings.TabIndex = 5; + this.checkBoxShowFunctionKeySettings.Text = "checkBoxShowFunctionKeySettings"; + this.checkBoxShowFunctionKeySettings.UseVisualStyleBackColor = true; + // + // checkBoxShowFunctionKeyRestart + // + this.checkBoxShowFunctionKeyRestart.AutoSize = true; + this.checkBoxShowFunctionKeyRestart.Location = new System.Drawing.Point(3, 253); + this.checkBoxShowFunctionKeyRestart.Name = "checkBoxShowFunctionKeyRestart"; + this.checkBoxShowFunctionKeyRestart.Size = new System.Drawing.Size(208, 19); + this.checkBoxShowFunctionKeyRestart.TabIndex = 6; + this.checkBoxShowFunctionKeyRestart.Text = "checkBoxShowFunctionKeyRestart"; + this.checkBoxShowFunctionKeyRestart.UseVisualStyleBackColor = true; + // + // checkBoxShowLinkOverlay + // + this.checkBoxShowLinkOverlay.AutoSize = true; + this.checkBoxShowLinkOverlay.Location = new System.Drawing.Point(3, 103); + this.checkBoxShowLinkOverlay.Name = "checkBoxShowLinkOverlay"; + this.checkBoxShowLinkOverlay.Size = new System.Drawing.Size(168, 19); + this.checkBoxShowLinkOverlay.TabIndex = 5; + this.checkBoxShowLinkOverlay.Text = "checkBoxShowLinkOverlay"; + this.checkBoxShowLinkOverlay.UseVisualStyleBackColor = true; + // + // checkBoxUseFading + // + this.checkBoxUseFading.AutoSize = true; + this.checkBoxUseFading.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxUseFading.Location = new System.Drawing.Point(3, 78); + this.checkBoxUseFading.Name = "checkBoxUseFading"; + this.checkBoxUseFading.Size = new System.Drawing.Size(361, 19); + this.checkBoxUseFading.TabIndex = 5; + this.checkBoxUseFading.Text = "checkBoxUseFading"; + this.checkBoxUseFading.UseVisualStyleBackColor = true; + // + // checkBoxUseIconFromRootFolder + // + this.checkBoxUseIconFromRootFolder.AutoSize = true; + this.checkBoxUseIconFromRootFolder.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxUseIconFromRootFolder.Location = new System.Drawing.Point(3, 3); + this.checkBoxUseIconFromRootFolder.Name = "checkBoxUseIconFromRootFolder"; + this.checkBoxUseIconFromRootFolder.Size = new System.Drawing.Size(361, 19); + this.checkBoxUseIconFromRootFolder.TabIndex = 4; + this.checkBoxUseIconFromRootFolder.Text = "checkBoxUseIconFromRootFolder"; + this.checkBoxUseIconFromRootFolder.UseVisualStyleBackColor = true; + // + // checkBoxShowSearchBar + // + this.checkBoxShowSearchBar.AutoSize = true; + this.checkBoxShowSearchBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxShowSearchBar.Location = new System.Drawing.Point(3, 153); + this.checkBoxShowSearchBar.Name = "checkBoxShowSearchBar"; + this.checkBoxShowSearchBar.Size = new System.Drawing.Size(361, 19); + this.checkBoxShowSearchBar.TabIndex = 2; + this.checkBoxShowSearchBar.Text = "checkBoxShowSearchBar"; + this.checkBoxShowSearchBar.UseVisualStyleBackColor = true; + // + // checkBoxShowDirectoryTitleAtTop + // + this.checkBoxShowDirectoryTitleAtTop.AutoSize = true; + this.checkBoxShowDirectoryTitleAtTop.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxShowDirectoryTitleAtTop.Location = new System.Drawing.Point(3, 128); + this.checkBoxShowDirectoryTitleAtTop.Name = "checkBoxShowDirectoryTitleAtTop"; + this.checkBoxShowDirectoryTitleAtTop.Size = new System.Drawing.Size(361, 19); + this.checkBoxShowDirectoryTitleAtTop.TabIndex = 1; + this.checkBoxShowDirectoryTitleAtTop.Text = "checkBoxShowDirectoryTitleAtTop"; + this.checkBoxShowDirectoryTitleAtTop.UseVisualStyleBackColor = true; + // + // checkBoxRoundCorners + // + this.checkBoxRoundCorners.AutoSize = true; + this.checkBoxRoundCorners.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxRoundCorners.Location = new System.Drawing.Point(3, 28); + this.checkBoxRoundCorners.Name = "checkBoxRoundCorners"; + this.checkBoxRoundCorners.Size = new System.Drawing.Size(361, 19); + this.checkBoxRoundCorners.TabIndex = 4; + this.checkBoxRoundCorners.Text = "checkBoxRoundCorners"; + this.checkBoxRoundCorners.UseVisualStyleBackColor = true; + // + // checkBoxDarkModeAlwaysOn + // + this.checkBoxDarkModeAlwaysOn.AutoSize = true; + this.checkBoxDarkModeAlwaysOn.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBoxDarkModeAlwaysOn.Location = new System.Drawing.Point(3, 53); + this.checkBoxDarkModeAlwaysOn.Name = "checkBoxDarkModeAlwaysOn"; + this.checkBoxDarkModeAlwaysOn.Size = new System.Drawing.Size(361, 19); + this.checkBoxDarkModeAlwaysOn.TabIndex = 0; + this.checkBoxDarkModeAlwaysOn.Text = "checkBoxDarkModeAlwaysOn"; + this.checkBoxDarkModeAlwaysOn.UseVisualStyleBackColor = true; + this.checkBoxDarkModeAlwaysOn.CheckedChanged += new System.EventHandler(this.CheckBoxDarkModeAlwaysOnCheckedChanged); + // + // buttonAppearanceDefault + // + this.buttonAppearanceDefault.AutoSize = true; + this.buttonAppearanceDefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonAppearanceDefault.Location = new System.Drawing.Point(3, 303); + this.buttonAppearanceDefault.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonAppearanceDefault.Name = "buttonAppearanceDefault"; + this.buttonAppearanceDefault.Size = new System.Drawing.Size(154, 25); + this.buttonAppearanceDefault.TabIndex = 3; + this.buttonAppearanceDefault.Text = "buttonAppearanceDefault"; + this.buttonAppearanceDefault.UseVisualStyleBackColor = true; + this.buttonAppearanceDefault.Click += new System.EventHandler(this.ButtonAppearanceDefault_Click); + // + // checkBoxShowCountOfElementsBelow + // + this.checkBoxShowCountOfElementsBelow.AutoSize = true; + this.checkBoxShowCountOfElementsBelow.Location = new System.Drawing.Point(3, 278); + this.checkBoxShowCountOfElementsBelow.Name = "checkBoxShowCountOfElementsBelow"; + this.checkBoxShowCountOfElementsBelow.Size = new System.Drawing.Size(232, 19); + this.checkBoxShowCountOfElementsBelow.TabIndex = 4; + this.checkBoxShowCountOfElementsBelow.Text = "checkBoxShowCountOfElementsBelow"; + this.checkBoxShowCountOfElementsBelow.UseVisualStyleBackColor = true; + // + // checkBoxShowFunctionKeyOpenFolder + // + this.checkBoxShowFunctionKeyOpenFolder.AutoSize = true; + this.checkBoxShowFunctionKeyOpenFolder.Location = new System.Drawing.Point(3, 178); + this.checkBoxShowFunctionKeyOpenFolder.Name = "checkBoxShowFunctionKeyOpenFolder"; + this.checkBoxShowFunctionKeyOpenFolder.Size = new System.Drawing.Size(234, 19); + this.checkBoxShowFunctionKeyOpenFolder.TabIndex = 3; + this.checkBoxShowFunctionKeyOpenFolder.Text = "checkBoxShowFunctionKeyOpenFolder"; + this.checkBoxShowFunctionKeyOpenFolder.UseVisualStyleBackColor = true; + // + // tableLayoutPanelBottom + // + this.tableLayoutPanelBottom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanelBottom.AutoSize = true; + this.tableLayoutPanelBottom.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanelBottom.ColumnCount = 3; + this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBottom.Controls.Add(this.buttonOk, 1, 0); + this.tableLayoutPanelBottom.Controls.Add(this.buttonCancel, 2, 0); + this.tableLayoutPanelBottom.Location = new System.Drawing.Point(3, 522); + this.tableLayoutPanelBottom.Margin = new System.Windows.Forms.Padding(3, 3, 3, 6); + this.tableLayoutPanelBottom.Name = "tableLayoutPanelBottom"; + this.tableLayoutPanelBottom.RowCount = 1; + this.tableLayoutPanelBottom.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBottom.Size = new System.Drawing.Size(426, 25); + this.tableLayoutPanelBottom.TabIndex = 0; + // + // buttonOk + // + this.buttonOk.AutoSize = true; + this.buttonOk.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Location = new System.Drawing.Point(265, 0); + this.buttonOk.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.buttonOk.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 25); + this.buttonOk.TabIndex = 1; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.ButtonOk_Click); + // + // buttonCancel + // + this.buttonCancel.AutoSize = true; + this.buttonCancel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Location = new System.Drawing.Point(346, 0); + this.buttonCancel.Margin = new System.Windows.Forms.Padding(3, 0, 5, 0); + this.buttonCancel.MinimumSize = new System.Drawing.Size(75, 23); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 25); + this.buttonCancel.TabIndex = 2; + this.buttonCancel.Text = "Abort"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click); + // + // radioButtonSortByFileExtensionAndName + // + this.radioButtonSortByFileExtensionAndName.AutoSize = true; + this.radioButtonSortByFileExtensionAndName.Location = new System.Drawing.Point(3, 53); + this.radioButtonSortByFileExtensionAndName.Name = "radioButtonSortByFileExtensionAndName"; + this.radioButtonSortByFileExtensionAndName.Size = new System.Drawing.Size(245, 19); + this.radioButtonSortByFileExtensionAndName.TabIndex = 5; + this.radioButtonSortByFileExtensionAndName.TabStop = true; + this.radioButtonSortByFileExtensionAndName.Text = "radioButtonSortByFileExtensionAndName"; + this.radioButtonSortByFileExtensionAndName.UseVisualStyleBackColor = true; + // + // SettingsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ClientSize = new System.Drawing.Size(1080, 577); + this.Controls.Add(this.tableLayoutPanelMain); + this.Name = "SettingsForm"; + this.Opacity = 0D; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Settings"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.SettingsForm_FormClosed); + this.Load += new System.EventHandler(this.SettingsForm_Load); + this.Shown += new System.EventHandler(this.SettingsForm_Shown); + this.tableLayoutPanelMain.ResumeLayout(false); + this.tableLayoutPanelMain.PerformLayout(); + this.tabControl.ResumeLayout(false); + this.tabPageGeneral.ResumeLayout(false); + this.tabPageGeneral.PerformLayout(); + this.tableLayoutPanelGeneral.ResumeLayout(false); + this.tableLayoutPanelGeneral.PerformLayout(); + this.groupBoxFolder.ResumeLayout(false); + this.groupBoxFolder.PerformLayout(); + this.tableLayoutPanelFolder.ResumeLayout(false); + this.tableLayoutPanelFolder.PerformLayout(); + this.tableLayoutPanelChangeFolder.ResumeLayout(false); + this.tableLayoutPanelChangeFolder.PerformLayout(); + this.tableLayoutPanelRelativeFolderOpenAssembly.ResumeLayout(false); + this.tableLayoutPanelRelativeFolderOpenAssembly.PerformLayout(); + this.groupBoxConfigAndLogfile.ResumeLayout(false); + this.groupBoxConfigAndLogfile.PerformLayout(); + this.tableLayoutPanelConfigAndLogfile.ResumeLayout(false); + this.tableLayoutPanelConfigAndLogfile.PerformLayout(); + this.groupBoxAutostart.ResumeLayout(false); + this.groupBoxAutostart.PerformLayout(); + this.tableLayoutPanel5.ResumeLayout(false); + this.tableLayoutPanel5.PerformLayout(); + this.tableLayoutPanelAutostart.ResumeLayout(false); + this.tableLayoutPanelAutostart.PerformLayout(); + this.groupBoxHotkey.ResumeLayout(false); + this.groupBoxHotkey.PerformLayout(); + this.tableLayoutPanelHotkey.ResumeLayout(false); + this.tableLayoutPanelHotkey.PerformLayout(); + this.groupBoxLanguage.ResumeLayout(false); + this.groupBoxLanguage.PerformLayout(); + this.tableLayoutPanelLanguage.ResumeLayout(false); + this.tabPageSizeAndLocation.ResumeLayout(false); + this.tabPageSizeAndLocation.PerformLayout(); + this.tableLayoutPanelSizeAndLocation.ResumeLayout(false); + this.tableLayoutPanelSizeAndLocation.PerformLayout(); + this.groupBoxSubMenuAppearAt.ResumeLayout(false); + this.groupBoxSubMenuAppearAt.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownOverlappingOffsetPixels)).EndInit(); + this.groupBoxMenuAppearAt.ResumeLayout(false); + this.groupBoxMenuAppearAt.PerformLayout(); + this.tableLayoutPanelMenuAppearAt.ResumeLayout(false); + this.tableLayoutPanelMenuAppearAt.PerformLayout(); + this.groupBoxSize.ResumeLayout(false); + this.groupBoxSize.PerformLayout(); + this.tableLayoutPanelSize.ResumeLayout(false); + this.tableLayoutPanelSize.PerformLayout(); + this.tableLayoutPanelIconSizeInPercent.ResumeLayout(false); + this.tableLayoutPanelIconSizeInPercent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownIconSizeInPercent)).EndInit(); + this.tableLayoutPanelRowHeighteInPercentage.ResumeLayout(false); + this.tableLayoutPanelRowHeighteInPercentage.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRowHeighteInPercentage)).EndInit(); + this.tableLayoutPanelSizeInPercent.ResumeLayout(false); + this.tableLayoutPanelSizeInPercent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeInPercent)).EndInit(); + this.tableLayoutPanelMenuHeight.ResumeLayout(false); + this.tableLayoutPanelMenuHeight.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownMenuHeight)).EndInit(); + this.tableLayoutPanelMaxMenuWidth.ResumeLayout(false); + this.tableLayoutPanelMaxMenuWidth.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownMenuWidth)).EndInit(); + this.tabPageAdvanced.ResumeLayout(false); + this.tabPageAdvanced.PerformLayout(); + this.tableLayoutPanelAdvanced.ResumeLayout(false); + this.tableLayoutPanelAdvanced.PerformLayout(); + this.groupBoxOptionalFeatures.ResumeLayout(false); + this.groupBoxOptionalFeatures.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.groupBoxInternetShortcutIcons.ResumeLayout(false); + this.groupBoxInternetShortcutIcons.PerformLayout(); + this.tableLayoutPanelInternetShortcutIcons.ResumeLayout(false); + this.tableLayoutPanelInternetShortcutIcons.PerformLayout(); + this.tableLayoutPanelChangeIcoFolder.ResumeLayout(false); + this.tableLayoutPanelChangeIcoFolder.PerformLayout(); + this.groupBoxDrag.ResumeLayout(false); + this.groupBoxDrag.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.groupBoxSorting.ResumeLayout(false); + this.groupBoxSorting.PerformLayout(); + this.tableLayoutPanelSorting.ResumeLayout(false); + this.tableLayoutPanelSorting.PerformLayout(); + this.groupBoxHiddenFilesAndFolders.ResumeLayout(false); + this.groupBoxHiddenFilesAndFolders.PerformLayout(); + this.tableLayoutPanelHiddenFilesAndFolders.ResumeLayout(false); + this.tableLayoutPanelHiddenFilesAndFolders.PerformLayout(); + this.groupBoxClick.ResumeLayout(false); + this.groupBoxClick.PerformLayout(); + this.tableLayoutPanelClick.ResumeLayout(false); + this.tableLayoutPanelClick.PerformLayout(); + this.tabPageFolders.ResumeLayout(false); + this.tabPageFolders.PerformLayout(); + this.tableLayoutPanelFoldersInRootFolder.ResumeLayout(false); + this.tableLayoutPanelFoldersInRootFolder.PerformLayout(); + this.groupBoxFoldersInRootFolder.ResumeLayout(false); + this.groupBoxFoldersInRootFolder.PerformLayout(); + this.tableLayoutPanelFolderToRootFoldersList.ResumeLayout(false); + this.tableLayoutPanelFolderToRootFoldersList.PerformLayout(); + this.tableLayoutPanelFolderToRootFolder.ResumeLayout(false); + this.tableLayoutPanelFolderToRootFolder.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewFolders)).EndInit(); + this.tableLayoutPanelAddSampleStartMenuFolder.ResumeLayout(false); + this.tableLayoutPanelAddSampleStartMenuFolder.PerformLayout(); + this.tabPageExpert.ResumeLayout(false); + this.tabPageExpert.PerformLayout(); + this.tableLayoutPanelExpert.ResumeLayout(false); + this.tableLayoutPanelExpert.PerformLayout(); + this.groupBoxSearchPattern.ResumeLayout(false); + this.groupBoxSearchPattern.PerformLayout(); + this.tableLayoutPanelSearchPattern.ResumeLayout(false); + this.tableLayoutPanelSearchPattern.PerformLayout(); + this.groupBoxCache.ResumeLayout(false); + this.groupBoxCache.PerformLayout(); + this.tableLayoutPanelCache.ResumeLayout(false); + this.tableLayoutPanelCache.PerformLayout(); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.ResumeLayout(false); + this.tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownClearCacheIfMoreThanThisNumberOfItems)).EndInit(); + this.groupBoxStaysOpen.ResumeLayout(false); + this.groupBoxStaysOpen.PerformLayout(); + this.tableLayoutPanelStaysOpen.ResumeLayout(false); + this.tableLayoutPanelStaysOpen.PerformLayout(); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.ResumeLayout(false); + this.tableLayoutPanelTimeUntilClosesAfterEnterPressed.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeUntilClosesAfterEnterPressed)).EndInit(); + this.tableLayoutPanelTimeUntilCloses.ResumeLayout(false); + this.tableLayoutPanelTimeUntilCloses.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeUntilClose)).EndInit(); + this.groupBoxOpenSubmenus.ResumeLayout(false); + this.groupBoxOpenSubmenus.PerformLayout(); + this.tableLayoutPanelTimeUntilOpen.ResumeLayout(false); + this.tableLayoutPanelTimeUntilOpen.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeUntilOpens)).EndInit(); + this.tabPageCustomize.ResumeLayout(false); + this.tabPageCustomize.PerformLayout(); + this.tableLayoutPanelCustomize.ResumeLayout(false); + this.tableLayoutPanelCustomize.PerformLayout(); + this.groupBoxColorsDarkMode.ResumeLayout(false); + this.groupBoxColorsDarkMode.PerformLayout(); + this.tableLayoutPanelDarkMode.ResumeLayout(false); + this.tableLayoutPanelDarkMode.PerformLayout(); + this.tableLayoutPanelColorIconsDarkMode.ResumeLayout(false); + this.tableLayoutPanelColorIconsDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIconsDarkMode)).EndInit(); + this.tableLayoutPanelColorBackgroundBorderDarkMode.ResumeLayout(false); + this.tableLayoutPanelColorBackgroundBorderDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBackgroundBorderDarkMode)).EndInit(); + this.tableLayoutPanelSearchFieldDarkMode.ResumeLayout(false); + this.tableLayoutPanelSearchFieldDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSearchFieldDarkMode)).EndInit(); + this.tableLayoutPanelOpenFolderDarkMode.ResumeLayout(false); + this.tableLayoutPanelOpenFolderDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxOpenFolderDarkMode)).EndInit(); + this.tableLayoutPanelOpenFolderBorderDarkMode.ResumeLayout(false); + this.tableLayoutPanelOpenFolderBorderDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxOpenFolderBorderDarkMode)).EndInit(); + this.tableLayoutPanelSelectedItemDarkMode.ResumeLayout(false); + this.tableLayoutPanelSelectedItemDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureColorBoxSelectedItemDarkMode)).EndInit(); + this.tableLayoutPanelSelectedItemBorderDarkMode.ResumeLayout(false); + this.tableLayoutPanelSelectedItemBorderDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSelectedItemBorderDarkMode)).EndInit(); + this.tableLayoutPanelScrollbarBackgroundDarkMode.ResumeLayout(false); + this.tableLayoutPanelScrollbarBackgroundDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxScrollbarBackgroundDarkMode)).EndInit(); + this.tableLayoutPanelSliderDarkMode.ResumeLayout(false); + this.tableLayoutPanelSliderDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderDarkMode)).EndInit(); + this.tableLayoutPanelSliderDraggingDarkMode.ResumeLayout(false); + this.tableLayoutPanelSliderDraggingDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderDraggingDarkMode)).EndInit(); + this.tableLayoutPanelSliderHoverDarkMode.ResumeLayout(false); + this.tableLayoutPanelSliderHoverDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderHoverDarkMode)).EndInit(); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.ResumeLayout(false); + this.tableLayoutPanelSliderArrowsAndTrackHoverDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderArrowsAndTrackHoverDarkMode)).EndInit(); + this.tableLayoutPanelArrowDarkMode.ResumeLayout(false); + this.tableLayoutPanelArrowDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowDarkMode)).EndInit(); + this.tableLayoutPanelArrowClickDarkMode.ResumeLayout(false); + this.tableLayoutPanelArrowClickDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowClickDarkMode)).EndInit(); + this.tableLayoutPanelArrowClickBackgroundDarkMode.ResumeLayout(false); + this.tableLayoutPanelArrowClickBackgroundDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowClickBackgroundDarkMode)).EndInit(); + this.tableLayoutPanelArrowHoverDarkMode.ResumeLayout(false); + this.tableLayoutPanelArrowHoverDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowHoverDarkMode)).EndInit(); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.ResumeLayout(false); + this.tableLayoutPanelArrowHoverBackgroundDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowHoverBackgroundDarkMode)).EndInit(); + this.tableLayoutPanelBackgroundDarkMode.ResumeLayout(false); + this.tableLayoutPanelBackgroundDarkMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBackgroundDarkMode)).EndInit(); + this.groupBoxColorsLightMode.ResumeLayout(false); + this.groupBoxColorsLightMode.PerformLayout(); + this.tableLayoutPanelColorsAndDefault.ResumeLayout(false); + this.tableLayoutPanelColorsAndDefault.PerformLayout(); + this.tableLayoutPanelIcons.ResumeLayout(false); + this.tableLayoutPanelIcons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcons)).EndInit(); + this.tableLayoutPanelBackgroundBorder.ResumeLayout(false); + this.tableLayoutPanelBackgroundBorder.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBackgroundBorder)).EndInit(); + this.tableLayoutPanelBackground.ResumeLayout(false); + this.tableLayoutPanelBackground.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBackground)).EndInit(); + this.tableLayoutPanelArrowHoverBackground.ResumeLayout(false); + this.tableLayoutPanelArrowHoverBackground.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowHoverBackground)).EndInit(); + this.tableLayoutPanelArrowHover.ResumeLayout(false); + this.tableLayoutPanelArrowHover.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowHover)).EndInit(); + this.tableLayoutPanelArrowClickBackground.ResumeLayout(false); + this.tableLayoutPanelArrowClickBackground.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowClickBackground)).EndInit(); + this.tableLayoutPanelArrowClick.ResumeLayout(false); + this.tableLayoutPanelArrowClick.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrowClick)).EndInit(); + this.tableLayoutPanelArrow.ResumeLayout(false); + this.tableLayoutPanelArrow.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxArrow)).EndInit(); + this.tableLayoutPanelSliderArrowsAndTrackHover.ResumeLayout(false); + this.tableLayoutPanelSliderArrowsAndTrackHover.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderArrowsAndTrackHover)).EndInit(); + this.tableLayoutPanelSliderHover.ResumeLayout(false); + this.tableLayoutPanelSliderHover.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderHover)).EndInit(); + this.tableLayoutPanelSliderDragging.ResumeLayout(false); + this.tableLayoutPanelSliderDragging.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSliderDragging)).EndInit(); + this.tableLayoutPanelSlider.ResumeLayout(false); + this.tableLayoutPanelSlider.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSlider)).EndInit(); + this.tableLayoutPanelScrollbarBackground.ResumeLayout(false); + this.tableLayoutPanelScrollbarBackground.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxScrollbarBackground)).EndInit(); + this.tableLayoutPanelSelectedItemBorder.ResumeLayout(false); + this.tableLayoutPanelSelectedItemBorder.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSelectedItemBorder)).EndInit(); + this.tableLayoutPanelSelectedItem.ResumeLayout(false); + this.tableLayoutPanelSelectedItem.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSelectedItem)).EndInit(); + this.tableLayoutPanelOpenFolderBorder.ResumeLayout(false); + this.tableLayoutPanelOpenFolderBorder.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxOpenFolderBorder)).EndInit(); + this.tableLayoutPanelOpenFolder.ResumeLayout(false); + this.tableLayoutPanelOpenFolder.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxOpenFolder)).EndInit(); + this.tableLayoutPanelSearchField.ResumeLayout(false); + this.tableLayoutPanelSearchField.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSearchField)).EndInit(); + this.groupBoxAppearance.ResumeLayout(false); + this.groupBoxAppearance.PerformLayout(); + this.tableLayoutPanelAppearance.ResumeLayout(false); + this.tableLayoutPanelAppearance.PerformLayout(); + this.tableLayoutPanelBottom.ResumeLayout(false); + this.tableLayoutPanelBottom.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMain; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBottom; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.TabPage tabPageGeneral; + private System.Windows.Forms.ComboBox comboBoxLanguage; + //private System.Windows.Forms.TextBox textBoxHotkey; + private HotkeyControl textBoxHotkey; + private System.Windows.Forms.TextBox textBoxFolder; + private System.Windows.Forms.CheckBox checkBoxAutostart; + private System.Windows.Forms.Button buttonChangeFolder; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.TabPage tabPageCustomize; + private System.Windows.Forms.CheckBox checkBoxOpenItemWithOneClick; + private System.Windows.Forms.CheckBox checkBoxDarkModeAlwaysOn; + private System.Windows.Forms.TabPage tabPageAdvanced; + private System.Windows.Forms.Label labelMaxMenuWidth; + private System.Windows.Forms.Label labelTimeUntilOpen; + private System.Windows.Forms.CheckBox checkBoxStayOpenWhenFocusLost; + private System.Windows.Forms.GroupBox groupBoxFolder; + private System.Windows.Forms.GroupBox groupBoxAutostart; + private System.Windows.Forms.GroupBox groupBoxHotkey; + private System.Windows.Forms.GroupBox groupBoxLanguage; + private System.Windows.Forms.GroupBox groupBoxStaysOpen; + private System.Windows.Forms.GroupBox groupBoxClick; + private System.Windows.Forms.GroupBox groupBoxSize; + private System.Windows.Forms.GroupBox groupBoxOpenSubmenus; + private System.Windows.Forms.GroupBox groupBoxColorsDarkMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelDarkMode; + private System.Windows.Forms.GroupBox groupBoxColorsLightMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelClick; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelColorsAndDefault; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelCustomize; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelStaysOpen; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelTimeUntilCloses; + private System.Windows.Forms.Label labelTimeUntilCloses; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelAdvanced; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSize; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMaxMenuWidth; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelTimeUntilOpen; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelHotkey; + private System.Windows.Forms.Button buttonHotkeyDefault; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelLanguage; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelFolder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelChangeFolder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelAutostart; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelGeneral; + private System.Windows.Forms.TextBox textBoxHotkeyPlaceholder; + private System.Windows.Forms.Button buttonAdvancedDefault; + private System.Windows.Forms.NumericUpDown numericUpDownTimeUntilClose; + private System.Windows.Forms.NumericUpDown numericUpDownMenuWidth; + private System.Windows.Forms.NumericUpDown numericUpDownTimeUntilOpens; + private System.Windows.Forms.CheckBox checkBoxStayOpenWhenItemClicked; + private System.Windows.Forms.ColorDialog colorDialog; + private System.Windows.Forms.TextBox textBoxColorOpenFolder; + private System.Windows.Forms.TextBox textBoxColorBackground; + private System.Windows.Forms.TextBox textBoxColorSelectedItem; + private System.Windows.Forms.TextBox textBoxColorOpenFolderBorder; + private System.Windows.Forms.TextBox textBoxColorBackgroundDarkMode; + private System.Windows.Forms.TextBox textBoxColorSelecetedItemDarkMode; + private System.Windows.Forms.TextBox textBoxColorOpenFolderDarkMode; + private System.Windows.Forms.TextBox textBoxColorOpenFolderBorderDarkMode; + private System.Windows.Forms.TextBox textBoxColorSelectedItemBorder; + private System.Windows.Forms.TextBox textBoxColorSelectedItemBorderDarkMode; + private System.Windows.Forms.TextBox textBoxColorSearchFieldDarkMode; + private System.Windows.Forms.TextBox textBoxColorSearchField; + private System.Windows.Forms.Label labelBackground; + private System.Windows.Forms.Label labelSearchField; + private System.Windows.Forms.Label labelOpenFolder; + private System.Windows.Forms.Label labelOpenFolderBorder; + private System.Windows.Forms.Label labelSelectedItem; + private System.Windows.Forms.Label labelSelectedItemBorder; + private System.Windows.Forms.CheckBox checkBoxSaveConfigInApplicationDirectory; + private System.Windows.Forms.GroupBox groupBoxConfigAndLogfile; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelConfigAndLogfile; + private System.Windows.Forms.Button buttonChangeRelativeFolder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelRelativeFolderOpenAssembly; + private System.Windows.Forms.Button buttonOpenAssemblyLocation; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMenuHeight; + private System.Windows.Forms.NumericUpDown numericUpDownMenuHeight; + private System.Windows.Forms.Label labelMaxMenuHeight; + private System.Windows.Forms.Button buttonColorsDefault; + private System.Windows.Forms.Label labelMenuLightMode; + private System.Windows.Forms.Label labelMenuDarkMode; + private System.Windows.Forms.Label labelScrollbarDarkMode; + private System.Windows.Forms.Label labelScrollbarLightMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelScrollbarBackgroundDarkMode; + private System.Windows.Forms.PictureBox pictureBoxScrollbarBackgroundDarkMode; + private System.Windows.Forms.TextBox textBoxColorScrollbarBackgroundDarkMode; + private System.Windows.Forms.Label labelColorDarkModeScrollbarBackground; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSelectedItemBorderDarkMode; + private System.Windows.Forms.PictureBox pictureBoxSelectedItemBorderDarkMode; + private System.Windows.Forms.Label labelSelectedItemBorderDarkMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSelectedItemDarkMode; + private System.Windows.Forms.PictureBox pictureColorBoxSelectedItemDarkMode; + private System.Windows.Forms.Label labelSelectedItemDarkMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelOpenFolderBorderDarkMode; + private System.Windows.Forms.PictureBox pictureBoxOpenFolderBorderDarkMode; + private System.Windows.Forms.Label labelOpenFolderBorderDarkMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelOpenFolderDarkMode; + private System.Windows.Forms.PictureBox pictureBoxOpenFolderDarkMode; + private System.Windows.Forms.Label labelOpenFolderDarkMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSearchFieldDarkMode; + private System.Windows.Forms.PictureBox pictureBoxSearchFieldDarkMode; + private System.Windows.Forms.Label labelSearchFieldDarkMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBackgroundDarkMode; + private System.Windows.Forms.PictureBox pictureBoxBackgroundDarkMode; + private System.Windows.Forms.Label labelBackgroundDarkMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelScrollbarBackground; + private System.Windows.Forms.PictureBox pictureBoxScrollbarBackground; + private System.Windows.Forms.TextBox textBoxColorScrollbarBackground; + private System.Windows.Forms.Label labelScrollbarBackground; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSelectedItemBorder; + private System.Windows.Forms.PictureBox pictureBoxSelectedItemBorder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSelectedItem; + private System.Windows.Forms.PictureBox pictureBoxSelectedItem; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelOpenFolderBorder; + private System.Windows.Forms.PictureBox pictureBoxOpenFolderBorder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelOpenFolder; + private System.Windows.Forms.PictureBox pictureBoxOpenFolder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSearchField; + private System.Windows.Forms.PictureBox pictureBoxSearchField; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBackground; + private System.Windows.Forms.PictureBox pictureBoxBackground; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowClickBackground; + private System.Windows.Forms.PictureBox pictureBoxArrowClickBackground; + private System.Windows.Forms.TextBox textBoxColorArrowClickBackground; + private System.Windows.Forms.Label labelArrowClickBackground; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowClick; + private System.Windows.Forms.PictureBox pictureBoxArrowClick; + private System.Windows.Forms.TextBox textBoxColorArrowClick; + private System.Windows.Forms.Label labelArrowClick; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrow; + private System.Windows.Forms.PictureBox pictureBoxArrow; + private System.Windows.Forms.TextBox textBoxColorArrow; + private System.Windows.Forms.Label labelArrow; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSliderArrowsAndTrackHover; + private System.Windows.Forms.PictureBox pictureBoxSliderArrowsAndTrackHover; + private System.Windows.Forms.TextBox textBoxColorSliderArrowsAndTrackHover; + private System.Windows.Forms.Label labelSliderArrowsAndTrackHover; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSliderHover; + private System.Windows.Forms.PictureBox pictureBoxSliderHover; + private System.Windows.Forms.TextBox textBoxColorSliderHover; + private System.Windows.Forms.Label labelSliderHover; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSliderDragging; + private System.Windows.Forms.PictureBox pictureBoxSliderDragging; + private System.Windows.Forms.TextBox textBoxColorSliderDragging; + private System.Windows.Forms.Label labelSliderDragging; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSlider; + private System.Windows.Forms.PictureBox pictureBoxSlider; + private System.Windows.Forms.TextBox textBoxColorSlider; + private System.Windows.Forms.Label labelSlider; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowHoverBackground; + private System.Windows.Forms.PictureBox pictureBoxArrowHoverBackground; + private System.Windows.Forms.TextBox textBoxColorArrowHoverBackground; + private System.Windows.Forms.Label labelArrowHoverBackground; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowHover; + private System.Windows.Forms.PictureBox pictureBoxArrowHover; + private System.Windows.Forms.TextBox textBoxColorArrowHover; + private System.Windows.Forms.Label labelArrowHover; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowHoverBackgroundDarkMode; + private System.Windows.Forms.PictureBox pictureBoxArrowHoverBackgroundDarkMode; + private System.Windows.Forms.TextBox textBoxColorArrowHoverBackgroundDarkMode; + private System.Windows.Forms.Label labelColorDarkModeArrowHoverBackground; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowHoverDarkMode; + private System.Windows.Forms.PictureBox pictureBoxArrowHoverDarkMode; + private System.Windows.Forms.TextBox textBoxColorArrowHoverDarkMode; + private System.Windows.Forms.Label labelColorDarkModeArrowHover; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowClickBackgroundDarkMode; + private System.Windows.Forms.PictureBox pictureBoxArrowClickBackgroundDarkMode; + private System.Windows.Forms.TextBox textBoxColorArrowClickBackgroundDarkMode; + private System.Windows.Forms.Label labelColorDarkModeArrowClickBackground; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowClickDarkMode; + private System.Windows.Forms.PictureBox pictureBoxArrowClickDarkMode; + private System.Windows.Forms.TextBox textBoxColorArrowClickDarkMode; + private System.Windows.Forms.Label labelColorDarkModeArrowClick; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelArrowDarkMode; + private System.Windows.Forms.PictureBox pictureBoxArrowDarkMode; + private System.Windows.Forms.TextBox textBoxColorArrowDarkMode; + private System.Windows.Forms.Label labelColorDarkModeArrow; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSliderArrowsAndTrackHoverDarkMode; + private System.Windows.Forms.PictureBox pictureBoxSliderArrowsAndTrackHoverDarkMode; + private System.Windows.Forms.TextBox textBoxColorSliderArrowsAndTrackHoverDarkMode; + private System.Windows.Forms.Label labelColorDarkModeSliderArrowsAndTrackHover; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSliderHoverDarkMode; + private System.Windows.Forms.PictureBox pictureBoxSliderHoverDarkMode; + private System.Windows.Forms.TextBox textBoxColorSliderHoverDarkMode; + private System.Windows.Forms.Label labelColorDarkModeSliderHover; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSliderDraggingDarkMode; + private System.Windows.Forms.PictureBox pictureBoxSliderDraggingDarkMode; + private System.Windows.Forms.TextBox textBoxColorSliderDraggingDarkMode; + private System.Windows.Forms.Label labelColorDarkModeSliderDragging; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSliderDarkMode; + private System.Windows.Forms.PictureBox pictureBoxSliderDarkMode; + private System.Windows.Forms.TextBox textBoxColorSliderDarkMode; + private System.Windows.Forms.Label labelColorDarkModeSlider; + private System.Windows.Forms.Button buttonColorsDefaultDarkMode; + private System.Windows.Forms.CheckBox checkBoxUseIconFromRootFolder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSizeInPercent; + private System.Windows.Forms.NumericUpDown numericUpDownSizeInPercent; + private System.Windows.Forms.Label labelSizeInPercent; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBackgroundBorder; + private System.Windows.Forms.PictureBox pictureBoxBackgroundBorder; + private System.Windows.Forms.TextBox textBoxColorBackgroundBorder; + private System.Windows.Forms.Label labelBackgroundBorder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelColorBackgroundBorderDarkMode; + private System.Windows.Forms.PictureBox pictureBoxBackgroundBorderDarkMode; + private System.Windows.Forms.Label labelBackgroundBorderDarkMode; + private System.Windows.Forms.TextBox textBoxColorBackgroundBorderDarkMode; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelIcons; + private System.Windows.Forms.PictureBox pictureBoxIcons; + private System.Windows.Forms.TextBox textBoxColorIcons; + private System.Windows.Forms.Label labelIcons; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelColorIconsDarkMode; + private System.Windows.Forms.PictureBox pictureBoxIconsDarkMode; + private System.Windows.Forms.Label labelIconsDarkMode; + private System.Windows.Forms.TextBox textBoxColorIconsDarkMode; + private System.Windows.Forms.CheckBox checkBoxSetFolderByWindowsContextMenu; + private System.Windows.Forms.Button buttonOpenFolder; + private System.Windows.Forms.Button buttonAddStartup; + private System.Windows.Forms.Label labelStartupStatus; + private System.Windows.Forms.TabPage tabPageExpert; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelExpert; + private System.Windows.Forms.Button buttonExpertDefault; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelTimeUntilClosesAfterEnterPressed; + private System.Windows.Forms.Label labelTimeUntilClosesAfterEnterPressed; + private System.Windows.Forms.NumericUpDown numericUpDownTimeUntilClosesAfterEnterPressed; + private System.Windows.Forms.CheckBox checkBoxStayOpenWhenFocusLostAfterEnterPressed; + private System.Windows.Forms.CheckBox checkBoxShowInTaskbar; + private System.Windows.Forms.TabPage tabPageFolders; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelFoldersInRootFolder; + private System.Windows.Forms.GroupBox groupBoxFoldersInRootFolder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelFolderToRootFoldersList; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelFolderToRootFolder; + private System.Windows.Forms.Button buttonAddFolderToRootFolder; + private System.Windows.Forms.Button buttonRemoveFolder; + private System.Windows.Forms.DataGridView dataGridViewFolders; + private System.Windows.Forms.Button buttonDefaultFolders; + private System.Windows.Forms.DataGridViewTextBoxColumn ColumnFolder; + private System.Windows.Forms.DataGridViewCheckBoxColumn ColumnRecursiveLevel; + private System.Windows.Forms.DataGridViewCheckBoxColumn ColumnOnlyFiles; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelClearCacheIfMoreThanThisNumberOfItems; + private System.Windows.Forms.NumericUpDown numericUpDownClearCacheIfMoreThanThisNumberOfItems; + private System.Windows.Forms.Label labelClearCacheIfMoreThanThisNumberOfItems; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelAddSampleStartMenuFolder; + private System.Windows.Forms.Button buttonAddSampleStartMenuFolder; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelRowHeighteInPercentage; + private System.Windows.Forms.NumericUpDown numericUpDownRowHeighteInPercentage; + private System.Windows.Forms.Label labelRowHeightInPercentage; + private System.Windows.Forms.CheckBox checkBoxRoundCorners; + private System.Windows.Forms.GroupBox groupBoxAppearance; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelAppearance; + private System.Windows.Forms.GroupBox groupBoxMenuAppearAt; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMenuAppearAt; + private System.Windows.Forms.RadioButton radioButtonAppearAtTheBottomLeft; + private System.Windows.Forms.RadioButton radioButtonAppearAtTheBottomRight; + private System.Windows.Forms.RadioButton radioButtonAppearAtMouseLocation; + private System.Windows.Forms.RadioButton radioButtonUseCustomLocation; + private System.Windows.Forms.CheckBox checkBoxGenerateShortcutsToDrives; + private System.Windows.Forms.GroupBox groupBoxCache; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelCache; + private System.Windows.Forms.TabPage tabPageSizeAndLocation; + private System.Windows.Forms.GroupBox groupBoxHiddenFilesAndFolders; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelHiddenFilesAndFolders; + private System.Windows.Forms.RadioButton radioButtonAlwaysShowHiddenFiles; + private System.Windows.Forms.RadioButton radioButtonNeverShowHiddenFiles; + private System.Windows.Forms.RadioButton radioButtonSystemSettingsShowHiddenFiles; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSizeAndLocation; + private System.Windows.Forms.Button buttonSizeAndLocationDefault; + private System.Windows.Forms.CheckBox checkBoxShowOnlyAsSearchResult; + private System.Windows.Forms.CheckBox checkBoxOpenDirectoryWithOneClick; + private System.Windows.Forms.GroupBox groupBoxSubMenuAppearAt; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; + private System.Windows.Forms.Label labelOverlappingByPixelsOffset; + private System.Windows.Forms.RadioButton radioButtonOverlapping; + private System.Windows.Forms.RadioButton radioButtonNextToPreviousMenu; + private System.Windows.Forms.NumericUpDown numericUpDownOverlappingOffsetPixels; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelIconSizeInPercent; + private System.Windows.Forms.NumericUpDown numericUpDownIconSizeInPercent; + private System.Windows.Forms.Label labelIconSizeInPercent; + private System.Windows.Forms.CheckBox checkBoxUseFading; + private System.Windows.Forms.Button buttonAppearanceDefault; + private System.Windows.Forms.CheckBox checkBoxSendHotkeyInsteadKillOtherInstances; + private System.Windows.Forms.GroupBox groupBoxSorting; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSorting; + private System.Windows.Forms.RadioButton radioButtonSortByDate; + private System.Windows.Forms.RadioButton radioButtonSortByName; + private System.Windows.Forms.GroupBox groupBoxDrag; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.CheckBox checkBoxSwipeScrolling; + private System.Windows.Forms.CheckBox checkBoxDragDropItems; + private System.Windows.Forms.GroupBox groupBoxSearchPattern; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSearchPattern; + private System.Windows.Forms.TextBox textBoxSearchPattern; + private System.Windows.Forms.CheckBox checkBoxShowFunctionKeyOpenFolder; + private System.Windows.Forms.CheckBox checkBoxShowSearchBar; + private System.Windows.Forms.CheckBox checkBoxShowDirectoryTitleAtTop; + private System.Windows.Forms.CheckBox checkBoxShowCountOfElementsBelow; + private System.Windows.Forms.CheckBox checkBoxSaveLogFileInApplicationDirectory; + private System.Windows.Forms.CheckBox checkBoxShowLinkOverlay; + private System.Windows.Forms.GroupBox groupBoxInternetShortcutIcons; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelInternetShortcutIcons; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelChangeIcoFolder; + private System.Windows.Forms.Button buttonChangeIcoFolder; + private System.Windows.Forms.TextBox textBoxIcoFolder; + private System.Windows.Forms.RadioButton radioButtonSortByTypeAndDate; + private System.Windows.Forms.RadioButton radioButtonSortByTypeAndName; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; + private System.Windows.Forms.CheckBox checkBoxCheckForUpdates; + private System.Windows.Forms.Button buttonGeneralDefault; + private System.Windows.Forms.CheckBox checkBoxShowFunctionKeyPinMenu; + private System.Windows.Forms.CheckBox checkBoxShowFunctionKeySettings; + private System.Windows.Forms.CheckBox checkBoxShowFunctionKeyRestart; + private System.Windows.Forms.CheckBox checkBoxSupportGamepad; + private System.Windows.Forms.GroupBox groupBoxOptionalFeatures; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.CheckBox checkBoxResolveLinksToFolders; + private System.Windows.Forms.RadioButton radioButtonSortByFileExtensionAndName; + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Global/UserInterface/Settings.cs b/FSI.BT.Tools/Global/UserInterface/Settings.cs new file mode 100644 index 0000000..4ad5d54 --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/Settings.cs @@ -0,0 +1,1462 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.UserInterface +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.IO; + using System.Reflection; + using System.Text; + using System.Threading.Tasks; + using System.Windows.Forms; + using Microsoft.Win32; + using FSI.BT.Tools.SystemTrayMenu.Properties; + using FSI.BT.Tools.Global.UserInterface.FolderBrowseDialog; + using FSI.BT.Tools.SystemTrayMenu.Utilities; + using Windows.ApplicationModel; + using static FSI.BT.Tools.Global.UserInterface.HotkeyTextboxControl.HotkeyControl; + using FSI.BT.Tools.SystemTrayMenu.UserInterface; + using FSI.BT.Tools.Global.Utilities; + + public partial class SettingsForm : Form + { + private const string MenuName = @"Software\Classes\directory\shell\FSI.BT.Tools.SystemTrayMenu_SetAsRootFolder"; + private const string Command = @"Software\Classes\directory\shell\FSI.BT.Tools.SystemTrayMenu_SetAsRootFolder\command"; + + private static readonly Icon SystemTrayMenu = Resources.SystemTrayMenu; + private static SettingsForm settingsForm; + private readonly ColorConverter colorConverter = new(); + private bool inHotkey; + + public SettingsForm() + { + InitializeComponent(); + Icon = SystemTrayMenu; + + // Initialize and replace here here, because designer always removes it + InitializeTextBoxHotkeyAndReplacetextBoxHotkeyPlaceholder(); + void InitializeTextBoxHotkeyAndReplacetextBoxHotkeyPlaceholder() + { + textBoxHotkey = new Tools.Global.UserInterface.HotkeyTextboxControl.HotkeyControl + { + Hotkey = Keys.None, + HotkeyModifiers = Keys.None, + Name = "textBoxHotkey", + Size = new Size(200, 20), + Text = "None", + TabStop = false, + }; + textBoxHotkey.Enter += new EventHandler(TextBoxHotkeyEnter); + textBoxHotkey.Leave += new EventHandler(TextBoxHotkey_Leave); + tableLayoutPanelHotkey.Controls.Remove(textBoxHotkeyPlaceholder); + tableLayoutPanelHotkey.Controls.Add(textBoxHotkey, 0, 0); + } + + // designer always resets it to 1 + tabControl.SelectedIndex = 0; + + CombineControls(textBoxColorIcons, pictureBoxIcons); + CombineControls(textBoxColorBackground, pictureBoxBackground); + CombineControls(textBoxColorBackgroundBorder, pictureBoxBackgroundBorder); + CombineControls(textBoxColorSearchField, pictureBoxSearchField); + CombineControls(textBoxColorOpenFolder, pictureBoxOpenFolder); + CombineControls(textBoxColorOpenFolderBorder, pictureBoxOpenFolderBorder); + CombineControls(textBoxColorSelectedItem, pictureBoxSelectedItem); + CombineControls(textBoxColorSelectedItemBorder, pictureBoxSelectedItemBorder); + CombineControls(textBoxColorScrollbarBackground, pictureBoxScrollbarBackground); + CombineControls(textBoxColorSlider, pictureBoxSlider); + CombineControls(textBoxColorSliderDragging, pictureBoxSliderDragging); + CombineControls(textBoxColorSliderHover, pictureBoxSliderHover); + CombineControls(textBoxColorSliderArrowsAndTrackHover, pictureBoxSliderArrowsAndTrackHover); + CombineControls(textBoxColorArrow, pictureBoxArrow); + CombineControls(textBoxColorArrowClick, pictureBoxArrowClick); + CombineControls(textBoxColorArrowClickBackground, pictureBoxArrowClickBackground); + CombineControls(textBoxColorArrowHover, pictureBoxArrowHover); + CombineControls(textBoxColorArrowHoverBackground, pictureBoxArrowHoverBackground); + + CombineControls(textBoxColorIconsDarkMode, pictureBoxIconsDarkMode); + CombineControls(textBoxColorBackgroundDarkMode, pictureBoxBackgroundDarkMode); + CombineControls(textBoxColorBackgroundBorderDarkMode, pictureBoxBackgroundBorderDarkMode); + CombineControls(textBoxColorSearchFieldDarkMode, pictureBoxSearchFieldDarkMode); + CombineControls(textBoxColorOpenFolderDarkMode, pictureBoxOpenFolderDarkMode); + CombineControls(textBoxColorOpenFolderBorderDarkMode, pictureBoxOpenFolderBorderDarkMode); + CombineControls(textBoxColorSelecetedItemDarkMode, pictureColorBoxSelectedItemDarkMode); + CombineControls(textBoxColorSelectedItemBorderDarkMode, pictureBoxSelectedItemBorderDarkMode); + CombineControls(textBoxColorScrollbarBackgroundDarkMode, pictureBoxScrollbarBackgroundDarkMode); + CombineControls(textBoxColorSliderDarkMode, pictureBoxSliderDarkMode); + CombineControls(textBoxColorSliderDraggingDarkMode, pictureBoxSliderDraggingDarkMode); + CombineControls(textBoxColorSliderHoverDarkMode, pictureBoxSliderHoverDarkMode); + CombineControls(textBoxColorSliderArrowsAndTrackHoverDarkMode, pictureBoxSliderArrowsAndTrackHoverDarkMode); + CombineControls(textBoxColorArrowDarkMode, pictureBoxArrowDarkMode); + CombineControls(textBoxColorArrowClickDarkMode, pictureBoxArrowClickDarkMode); + CombineControls(textBoxColorArrowClickBackgroundDarkMode, pictureBoxArrowClickBackgroundDarkMode); + CombineControls(textBoxColorArrowHoverDarkMode, pictureBoxArrowHoverDarkMode); + CombineControls(textBoxColorArrowHoverBackgroundDarkMode, pictureBoxArrowHoverBackgroundDarkMode); + void CombineControls(Control textBoxColor, Control pictureBox) + { + textBoxColor.Tag = pictureBox; + pictureBox.Tag = textBoxColor; + } + + Translate(); + void Translate() + { + Text = Global.Utilities.Translator.GetText("Settings"); + tabPageGeneral.Text = Global.Utilities.Translator.GetText("General"); + groupBoxFolder.Text = Global.Utilities.Translator.GetText("Directory"); + buttonChangeFolder.Text =Global.Utilities.Translator.GetText("Changing directory"); + buttonOpenFolder.Text = Global.Utilities.Translator.GetText("Open directory"); + checkBoxSetFolderByWindowsContextMenu.Text =Global.Utilities.Translator.GetText("Set by context menu "); + groupBoxConfigAndLogfile.Text = Global.Utilities.Translator.GetText("Configuration and log files"); + buttonChangeRelativeFolder.Text = Global.Utilities.Translator.GetText("Relative directory"); + checkBoxSaveConfigInApplicationDirectory.Text = Global.Utilities.Translator.GetText("Save configuration file in application directory"); + checkBoxSaveLogFileInApplicationDirectory.Text = Global.Utilities.Translator.GetText("Saving log file in application directory"); + buttonOpenAssemblyLocation.Text = Global.Utilities.Translator.GetText("Open application directory"); + groupBoxAutostart.Text = Global.Utilities.Translator.GetText("App start"); + if (IsStartupTask()) + { + groupBoxAutostart.Text += $" ({Global.Utilities.Translator.GetText("Task Manager")})"; + } + + checkBoxAutostart.Text = Global.Utilities.Translator.GetText("Start with Windows"); + checkBoxCheckForUpdates.Text = Global.Utilities.Translator.GetText("Check for updates"); + buttonAddStartup.Text = Global.Utilities.Translator.GetText("Start with Windows"); + groupBoxHotkey.Text = Global.Utilities.Translator.GetText("Hotkey"); + buttonHotkeyDefault.Text = Global.Utilities.Translator.GetText("Default"); + groupBoxLanguage.Text = Global.Utilities.Translator.GetText("Language"); + buttonGeneralDefault.Text = Global.Utilities.Translator.GetText("Default"); + + tabPageSizeAndLocation.Text = Global.Utilities.Translator.GetText("Size and location"); + groupBoxSize.Text = Global.Utilities.Translator.GetText("Sizes in percent"); + labelSizeInPercent.Text = Global.Utilities.Translator.GetText("Application size"); + labelIconSizeInPercent.Text = Global.Utilities.Translator.GetText("Icon size"); + labelRowHeightInPercentage.Text = Global.Utilities.Translator.GetText("Row height"); + labelMaxMenuWidth.Text = Global.Utilities.Translator.GetText("Maximum menu width"); + labelMaxMenuHeight.Text = Global.Utilities.Translator.GetText("Maximum menu height"); + groupBoxMenuAppearAt.Text = Global.Utilities.Translator.GetText("Main menu appears"); + radioButtonAppearAtTheBottomLeft.Text = Global.Utilities.Translator.GetText("Bottom left"); + radioButtonAppearAtTheBottomRight.Text = Global.Utilities.Translator.GetText("Bottom right"); + radioButtonUseCustomLocation.Text = Global.Utilities.Translator.GetText("Custom (drag it to the appropriate position)"); + radioButtonAppearAtMouseLocation.Text = Global.Utilities.Translator.GetText("At mouse location"); + groupBoxSubMenuAppearAt.Text = Global.Utilities.Translator.GetText("Sub menu appears"); + radioButtonNextToPreviousMenu.Text = Global.Utilities.Translator.GetText("Next to the previous one"); + radioButtonOverlapping.Text = Global.Utilities.Translator.GetText("Overlapping"); + labelOverlappingByPixelsOffset.Text = Global.Utilities.Translator.GetText("Offset by pixels"); + buttonSizeAndLocationDefault.Text = Global.Utilities.Translator.GetText("Default"); + + tabPageAdvanced.Text = Global.Utilities.Translator.GetText("Advanced"); + groupBoxOptionalFeatures.Text = Global.Utilities.Translator.GetText("Optional Features"); + checkBoxResolveLinksToFolders.Text = Global.Utilities.Translator.GetText("Resolve links to folders and show content"); + checkBoxShowInTaskbar.Text = Global.Utilities.Translator.GetText("Show in Taskbar"); + checkBoxSendHotkeyInsteadKillOtherInstances.Text = Global.Utilities.Translator.GetText("Send hotkey to other instance"); + checkBoxSupportGamepad.Text = Global.Utilities.Translator.GetText("Support Gamepad"); + groupBoxClick.Text = Global.Utilities.Translator.GetText("Click"); + checkBoxOpenItemWithOneClick.Text = Global.Utilities.Translator.GetText("Single click to open an element"); + checkBoxOpenDirectoryWithOneClick.Text = Global.Utilities.Translator.GetText("Single click to open a directory"); + groupBoxDrag.Text = Global.Utilities.Translator.GetText("Drag"); + checkBoxDragDropItems.Text = Global.Utilities.Translator.GetText("Copy row element via drag and drop"); + checkBoxSwipeScrolling.Text = Global.Utilities.Translator.GetText("Scroll via swipe"); + groupBoxInternetShortcutIcons.Text = Global.Utilities.Translator.GetText("Directory of Internet Shortcut Icons"); + buttonChangeIcoFolder.Text = Global.Utilities.Translator.GetText("Changing directory"); + groupBoxSorting.Text = Global.Utilities.Translator.GetText("Sorting"); + radioButtonSortByTypeAndName.Text = Global.Utilities.Translator.GetText("Sorted by type (folder or file) and name"); + radioButtonSortByTypeAndDate.Text = Global.Utilities.Translator.GetText("Sorted by type (folder or file) and date"); + radioButtonSortByFileExtensionAndName.Text = Global.Utilities.Translator.GetText("Sorted by file extension and name"); + radioButtonSortByName.Text = Global.Utilities.Translator.GetText("Sorted by name"); + radioButtonSortByDate.Text = Global.Utilities.Translator.GetText("Sorted by date"); + groupBoxHiddenFilesAndFolders.Text = Global.Utilities.Translator.GetText("Hidden files and directories"); + radioButtonSystemSettingsShowHiddenFiles.Text = Global.Utilities.Translator.GetText("Use operating system settings"); + radioButtonNeverShowHiddenFiles.Text = Global.Utilities.Translator.GetText("Never show"); + radioButtonAlwaysShowHiddenFiles.Text = Global.Utilities.Translator.GetText("Always show"); + buttonAdvancedDefault.Text = Global.Utilities.Translator.GetText("Default"); + + tabPageFolders.Text = Global.Utilities.Translator.GetText("Directories"); + groupBoxFoldersInRootFolder.Text = Global.Utilities.Translator.GetText("Add content of directory to root directory"); + checkBoxShowOnlyAsSearchResult.Text = Global.Utilities.Translator.GetText("Show only as search result"); + buttonAddFolderToRootFolder.Text = Global.Utilities.Translator.GetText("Add directory"); + buttonRemoveFolder.Text = Global.Utilities.Translator.GetText("Remove directory"); + ColumnFolder.HeaderText = Global.Utilities.Translator.GetText("Directory paths"); + ColumnRecursiveLevel.HeaderText = Global.Utilities.Translator.GetText("Recursive"); + ColumnOnlyFiles.HeaderText = Global.Utilities.Translator.GetText("Only Files"); + buttonAddSampleStartMenuFolder.Text = Global.Utilities.Translator.GetText("Add sample directory 'Start Menu'"); + buttonDefaultFolders.Text = Global.Utilities.Translator.GetText("Default"); + checkBoxGenerateShortcutsToDrives.Text = Global.Utilities.Translator.GetText("Generate drive shortcuts on startup"); + + tabPageExpert.Text = Global.Utilities.Translator.GetText("Expert"); + groupBoxStaysOpen.Text = Global.Utilities.Translator.GetText("Menu stays open"); + checkBoxStayOpenWhenItemClicked.Text = Global.Utilities.Translator.GetText("If an element was clicked"); + checkBoxStayOpenWhenFocusLost.Text = Global.Utilities.Translator.GetText("If the focus is lost and the mouse is still on the menu"); + labelTimeUntilCloses.Text = Global.Utilities.Translator.GetText("Milliseconds until the menu closes if the mouse then leaves the menu"); + groupBoxOpenSubmenus.Text = Global.Utilities.Translator.GetText("Time until a menu opens"); + labelTimeUntilOpen.Text = Global.Utilities.Translator.GetText("Milliseconds until a menu opens when the mouse is on it"); + checkBoxStayOpenWhenFocusLostAfterEnterPressed.Text = Global.Utilities.Translator.GetText("If the focus is lost and the Enter key was pressed"); + labelTimeUntilClosesAfterEnterPressed.Text = Global.Utilities.Translator.GetText("Milliseconds until the menu closes if the menu is not reactivated"); + groupBoxCache.Text = Global.Utilities.Translator.GetText("Cache"); + labelClearCacheIfMoreThanThisNumberOfItems.Text = Global.Utilities.Translator.GetText("Clear cache if more than this number of items"); + groupBoxSearchPattern.Text = Global.Utilities.Translator.GetText("Filter menu by file type e.g.: *.exe|*.dll"); + buttonExpertDefault.Text = Global.Utilities.Translator.GetText("Default"); + + tabPageCustomize.Text = Global.Utilities.Translator.GetText("Customize"); + groupBoxAppearance.Text = Global.Utilities.Translator.GetText("Appearance"); + checkBoxUseIconFromRootFolder.Text = Global.Utilities.Translator.GetText("Use icon from directory"); + checkBoxRoundCorners.Text = Global.Utilities.Translator.GetText("Round corners"); + checkBoxDarkModeAlwaysOn.Text = Global.Utilities.Translator.GetText("Color scheme dark always active"); + checkBoxUseFading.Text = Global.Utilities.Translator.GetText("Fading"); + checkBoxShowLinkOverlay.Text = Global.Utilities.Translator.GetText("Show link overlay"); + checkBoxShowDirectoryTitleAtTop.Text = Global.Utilities.Translator.GetText("Show directory title at top"); + checkBoxShowCountOfElementsBelow.Text = Global.Utilities.Translator.GetText("Show count of elements"); + checkBoxShowSearchBar.Text = Global.Utilities.Translator.GetText("Show search bar"); + checkBoxShowFunctionKeyOpenFolder.Text = Global.Utilities.Translator.GetText("Show function key 'Open Folder'"); + checkBoxShowFunctionKeyPinMenu.Text = Global.Utilities.Translator.GetText("Show function key 'Pin menu'"); + checkBoxShowFunctionKeySettings.Text = Global.Utilities.Translator.GetText("Show function key 'Settings'"); + checkBoxShowFunctionKeyRestart.Text = Global.Utilities.Translator.GetText("Show function key 'Restart'"); + buttonAppearanceDefault.Text = Global.Utilities.Translator.GetText("Default"); + groupBoxColorsLightMode.Text = Global.Utilities.Translator.GetText("Color scheme bright"); + groupBoxColorsDarkMode.Text = Global.Utilities.Translator.GetText("Color scheme dark"); + labelMenuLightMode.Text = Global.Utilities.Translator.GetText("App menu"); + labelMenuDarkMode.Text = Global.Utilities.Translator.GetText("App menu"); + labelScrollbarLightMode.Text = Global.Utilities.Translator.GetText("Scrollbar"); + labelScrollbarDarkMode.Text = Global.Utilities.Translator.GetText("Scrollbar"); + labelIcons.Text = Global.Utilities.Translator.GetText("Icons"); + labelIconsDarkMode.Text = Global.Utilities.Translator.GetText("Icons"); + labelBackground.Text = Global.Utilities.Translator.GetText("Background"); + labelBackgroundDarkMode.Text = Global.Utilities.Translator.GetText("Background"); + labelBackgroundBorder.Text = Global.Utilities.Translator.GetText("Border of menu"); + labelBackgroundBorderDarkMode.Text = Global.Utilities.Translator.GetText("Border of menu"); + labelSearchField.Text = Global.Utilities.Translator.GetText("Search field"); + labelSearchFieldDarkMode.Text = Global.Utilities.Translator.GetText("Search field"); + labelOpenFolder.Text = Global.Utilities.Translator.GetText("Opened directory"); + labelOpenFolderDarkMode.Text = Global.Utilities.Translator.GetText("Opened directory"); + labelOpenFolderBorder.Text = Global.Utilities.Translator.GetText("Border of opened directory"); + labelOpenFolderBorderDarkMode.Text = Global.Utilities.Translator.GetText("Border of opened directory"); + labelSelectedItem.Text = Global.Utilities.Translator.GetText("Selected element"); + labelSelectedItemDarkMode.Text = Global.Utilities.Translator.GetText("Selected element"); + labelSelectedItemBorder.Text = Global.Utilities.Translator.GetText("Border of selected element"); + labelSelectedItemBorderDarkMode.Text = Global.Utilities.Translator.GetText("Border of selected element"); + labelScrollbarBackground.Text = Global.Utilities.Translator.GetText("Background"); + labelColorDarkModeScrollbarBackground.Text = Global.Utilities.Translator.GetText("Background"); + labelSlider.Text = Global.Utilities.Translator.GetText("Slider"); + labelColorDarkModeSlider.Text = Global.Utilities.Translator.GetText("Slider"); + labelSliderDragging.Text = Global.Utilities.Translator.GetText("Slider while dragging"); + labelColorDarkModeSliderDragging.Text = Global.Utilities.Translator.GetText("Slider while dragging"); + labelSliderHover.Text = Global.Utilities.Translator.GetText("Slider while mouse hovers over it 1"); + labelColorDarkModeSliderHover.Text = Global.Utilities.Translator.GetText("Slider while mouse hovers over it 1"); + labelSliderArrowsAndTrackHover.Text = Global.Utilities.Translator.GetText("Slider while mouse hovers over it 2"); + labelColorDarkModeSliderArrowsAndTrackHover.Text = Global.Utilities.Translator.GetText("Slider while mouse hovers over it 2"); + labelArrow.Text = Global.Utilities.Translator.GetText("Arrow"); + labelColorDarkModeArrow.Text = Global.Utilities.Translator.GetText("Arrow"); + labelArrowClick.Text = Global.Utilities.Translator.GetText("Arrow when clicking"); + labelColorDarkModeArrowClick.Text = Global.Utilities.Translator.GetText("Arrow when clicking"); + labelArrowClickBackground.Text = Global.Utilities.Translator.GetText("Background of arrow when clicking"); + labelColorDarkModeArrowClickBackground.Text = Global.Utilities.Translator.GetText("Background of arrow when clicking"); + labelArrowHover.Text = Global.Utilities.Translator.GetText("Arrow while mouse hovers over it"); + labelColorDarkModeArrowHover.Text = Global.Utilities.Translator.GetText("Arrow while mouse hovers over it"); + labelArrowHoverBackground.Text = Global.Utilities.Translator.GetText("Background of arrow while mouse hovers over it"); + labelColorDarkModeArrowHoverBackground.Text = Global.Utilities.Translator.GetText("Background of arrow while mouse hovers over it"); + + buttonColorsDefault.Text = Global.Utilities.Translator.GetText("Default"); + buttonColorsDefaultDarkMode.Text = Global.Utilities.Translator.GetText("Default"); + buttonOk.Text = Global.Utilities.Translator.GetText("OK"); + buttonCancel.Text = Global.Utilities.Translator.GetText("Abort"); + } + + textBoxFolder.Text = Tools.SystemTrayMenu.Config.Path; + checkBoxSetFolderByWindowsContextMenu.Checked = Global.Vars.SystemTrayMenuSettings.SetFolderByWindowsContextMenu; + //checkBoxSaveConfigInApplicationDirectory.Checked = CustomSettingsProvider.IsActivatedConfigPathAssembly(); + checkBoxSaveLogFileInApplicationDirectory.Checked = Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory; + + if (IsStartupTask()) + { + checkBoxAutostart.Visible = false; + labelStartupStatus.Text = string.Empty; + } + else + { + buttonAddStartup.Visible = false; + labelStartupStatus.Visible = false; + checkBoxAutostart.Checked = Global.Vars.SystemTrayMenuSettings.IsAutostartActivated; + } + + checkBoxCheckForUpdates.Checked = Global.Vars.SystemTrayMenuSettings.CheckForUpdates; + textBoxHotkey.SetHotkey(Global.Vars.SystemTrayMenuSettings.HotKey); + + InitializeLanguage(); + void InitializeLanguage() + { + List dataSource = new() + { + new Language() { Name = "Deutsch", Value = "de" }, + new Language() { Name = "English", Value = "en" }, + }; + comboBoxLanguage.DataSource = dataSource; + comboBoxLanguage.DisplayMember = "Name"; + comboBoxLanguage.ValueMember = "Value"; + comboBoxLanguage.SelectedValue = + Global.Vars.SystemTrayMenuSettings.CurrentCultureInfoName; + comboBoxLanguage.SelectedValue ??= "en"; + } + + numericUpDownSizeInPercent.Minimum = 100; + numericUpDownSizeInPercent.Maximum = 200; + numericUpDownSizeInPercent.Increment = 5; + numericUpDownSizeInPercent.MouseWheel += NumericUpDown_MouseWheel; + void NumericUpDown_MouseWheel(object sender, MouseEventArgs e) + { + NumericUpDown numericUpDown = (NumericUpDown)sender; + decimal newValue = numericUpDown.Value; + if (e.Delta > 0) + { + newValue += numericUpDown.Increment; + if (newValue > numericUpDown.Maximum) + { + newValue = (int)numericUpDown.Maximum; + } + } + else + { + newValue -= numericUpDown.Increment; + if (newValue < numericUpDown.Minimum) + { + newValue = (int)numericUpDown.Minimum; + } + } + + numericUpDown.Value = newValue; + ((HandledMouseEventArgs)e).Handled = true; + } + + numericUpDownSizeInPercent.Value = Global.Vars.SystemTrayMenuSettings.SizeInPercent; + + numericUpDownIconSizeInPercent.Minimum = 50; + numericUpDownIconSizeInPercent.Maximum = 200; + numericUpDownIconSizeInPercent.Increment = 5; + numericUpDownIconSizeInPercent.MouseWheel += NumericUpDown_MouseWheel; + numericUpDownIconSizeInPercent.Value = Global.Vars.SystemTrayMenuSettings.IconSizeInPercent; + + numericUpDownRowHeighteInPercentage.Minimum = 50; + numericUpDownRowHeighteInPercentage.Maximum = 200; + numericUpDownRowHeighteInPercentage.Increment = 5; + numericUpDownRowHeighteInPercentage.MouseWheel += NumericUpDown_MouseWheel; + if (Global.DllImports.NativeMethods.IsTouchEnabled()) + { + numericUpDownRowHeighteInPercentage.Value = Global.Vars.SystemTrayMenuSettings.RowHeighteInPercentageTouch; + } + else + { + numericUpDownRowHeighteInPercentage.Value = Global.Vars.SystemTrayMenuSettings.RowHeighteInPercentage; + } + + numericUpDownMenuWidth.Minimum = 25; + numericUpDownMenuWidth.Maximum = 400; + numericUpDownMenuWidth.Increment = 5; + numericUpDownMenuWidth.Value = Global.Vars.SystemTrayMenuSettings.WidthMaxInPercent; + + numericUpDownMenuHeight.Minimum = 25; + numericUpDownMenuHeight.Maximum = 400; + numericUpDownMenuHeight.Increment = 5; + numericUpDownMenuHeight.Value = Global.Vars.SystemTrayMenuSettings.HeightMaxInPercent; + + if (Global.Vars.SystemTrayMenuSettings.UseCustomLocation) + { + radioButtonUseCustomLocation.Checked = true; + } + else if (Global.Vars.SystemTrayMenuSettings.AppearAtMouseLocation) + { + radioButtonAppearAtMouseLocation.Checked = true; + } + else if (Global.Vars.SystemTrayMenuSettings.AppearAtTheBottomLeft) + { + radioButtonAppearAtTheBottomLeft.Checked = true; + } + else + { + radioButtonAppearAtTheBottomRight.Checked = true; + } + + numericUpDownOverlappingOffsetPixels.Value = Global.Vars.SystemTrayMenuSettings.OverlappingOffsetPixels; + if (Global.Vars.SystemTrayMenuSettings.AppearNextToPreviousMenu) + { + radioButtonNextToPreviousMenu.Checked = true; + numericUpDownOverlappingOffsetPixels.Enabled = false; + } + else + { + radioButtonOverlapping.Checked = true; + numericUpDownOverlappingOffsetPixels.Enabled = true; + } + + checkBoxResolveLinksToFolders.Checked = Global.Vars.SystemTrayMenuSettings.ResolveLinksToFolders; + checkBoxShowInTaskbar.Checked = Global.Vars.SystemTrayMenuSettings.ShowInTaskbar; + checkBoxSendHotkeyInsteadKillOtherInstances.Checked = Global.Vars.SystemTrayMenuSettings.SendHotkeyInsteadKillOtherInstances; + checkBoxSupportGamepad.Checked = Global.Vars.SystemTrayMenuSettings.SupportGamepad; + checkBoxOpenItemWithOneClick.Checked = Global.Vars.SystemTrayMenuSettings.OpenItemWithOneClick; + checkBoxOpenDirectoryWithOneClick.Checked = Global.Vars.SystemTrayMenuSettings.OpenDirectoryWithOneClick; + + if (Global.DllImports.NativeMethods.IsTouchEnabled()) + { + checkBoxDragDropItems.Checked = Global.Vars.SystemTrayMenuSettings.DragDropItemsEnabledTouch; + checkBoxSwipeScrolling.Checked = Global.Vars.SystemTrayMenuSettings.SwipeScrollingEnabledTouch; + } + else + { + checkBoxDragDropItems.Checked = Global.Vars.SystemTrayMenuSettings.DragDropItemsEnabled; + checkBoxSwipeScrolling.Checked = Global.Vars.SystemTrayMenuSettings.SwipeScrollingEnabled; + } + + textBoxIcoFolder.Text = Global.Vars.SystemTrayMenuSettings.PathIcoDirectory; + radioButtonSortByTypeAndName.Checked = Global.Vars.SystemTrayMenuSettings.SortByTypeAndNameWindowsExplorerSort; + radioButtonSortByTypeAndDate.Checked = Global.Vars.SystemTrayMenuSettings.SortByTypeAndDate; + radioButtonSortByFileExtensionAndName.Checked = Global.Vars.SystemTrayMenuSettings.SortByFileExtensionAndName; + radioButtonSortByName.Checked = Global.Vars.SystemTrayMenuSettings.SortByName; + radioButtonSortByDate.Checked = Global.Vars.SystemTrayMenuSettings.SortByDate; + radioButtonSystemSettingsShowHiddenFiles.Checked = Global.Vars.SystemTrayMenuSettings.SystemSettingsShowHiddenFiles; + radioButtonNeverShowHiddenFiles.Checked = Global.Vars.SystemTrayMenuSettings.NeverShowHiddenFiles; + radioButtonAlwaysShowHiddenFiles.Checked = Global.Vars.SystemTrayMenuSettings.AlwaysShowHiddenFiles; + + checkBoxShowOnlyAsSearchResult.Checked = Global.Vars.SystemTrayMenuSettings.ShowOnlyAsSearchResult; + try + { + foreach (string pathAndRecursivString in Global.Vars.SystemTrayMenuSettings.PathsAddToMainMenu.Split(@"|")) + { + if (string.IsNullOrEmpty(pathAndRecursivString)) + { + continue; + } + + string pathAddToMainMenu = pathAndRecursivString.Split("recursiv:")[0].Trim(); + bool recursive = pathAndRecursivString.Split("recursiv:")[1].StartsWith("True"); + bool onlyFiles = pathAndRecursivString.Split("onlyFiles:")[1].StartsWith("True"); + dataGridViewFolders.Rows.Add(pathAddToMainMenu, recursive, onlyFiles); + } + } + catch (Exception ex) + { + Log.Warn("PathsAddToMainMenu", ex); + } + + checkBoxGenerateShortcutsToDrives.Checked = Global.Vars.SystemTrayMenuSettings.GenerateShortcutsToDrives; + + checkBoxStayOpenWhenItemClicked.Checked = Global.Vars.SystemTrayMenuSettings.StaysOpenWhenItemClicked; + checkBoxStayOpenWhenFocusLost.Checked = Global.Vars.SystemTrayMenuSettings.StaysOpenWhenFocusLost; + + numericUpDownTimeUntilClose.Minimum = 200; + numericUpDownTimeUntilClose.Maximum = 5000; + numericUpDownTimeUntilClose.Increment = 10; + numericUpDownTimeUntilClose.Value = Global.Vars.SystemTrayMenuSettings.TimeUntilCloses; + + numericUpDownTimeUntilOpens.Minimum = 20; + numericUpDownTimeUntilOpens.Maximum = 1000; + numericUpDownTimeUntilOpens.Increment = 10; + numericUpDownTimeUntilOpens.Value = Global.Vars.SystemTrayMenuSettings.TimeUntilOpens; + + checkBoxStayOpenWhenFocusLostAfterEnterPressed.Checked = Global.Vars.SystemTrayMenuSettings.StaysOpenWhenFocusLostAfterEnterPressed; + + numericUpDownTimeUntilClosesAfterEnterPressed.Minimum = 20; + numericUpDownTimeUntilClosesAfterEnterPressed.Maximum = 1000; + numericUpDownTimeUntilClosesAfterEnterPressed.Increment = 10; + numericUpDownTimeUntilClosesAfterEnterPressed.Value = Global.Vars.SystemTrayMenuSettings.TimeUntilClosesAfterEnterPressed; + + numericUpDownClearCacheIfMoreThanThisNumberOfItems.Value = Global.Vars.SystemTrayMenuSettings.ClearCacheIfMoreThanThisNumberOfItems; + + textBoxSearchPattern.Text = Global.Vars.SystemTrayMenuSettings.SearchPattern; + + checkBoxUseIconFromRootFolder.Checked = Global.Vars.SystemTrayMenuSettings.UseIconFromRootFolder; + checkBoxRoundCorners.Checked = Global.Vars.SystemTrayMenuSettings.RoundCorners; + checkBoxDarkModeAlwaysOn.Checked = Global.Vars.SystemTrayMenuSettings.IsDarkModeAlwaysOn; + checkBoxUseFading.Checked = Global.Vars.SystemTrayMenuSettings.UseFading; + checkBoxShowLinkOverlay.Checked = Global.Vars.SystemTrayMenuSettings.ShowLinkOverlay; + checkBoxShowDirectoryTitleAtTop.Checked = Global.Vars.SystemTrayMenuSettings.ShowDirectoryTitleAtTop; + checkBoxShowSearchBar.Checked = Global.Vars.SystemTrayMenuSettings.ShowSearchBar; + checkBoxShowCountOfElementsBelow.Checked = Global.Vars.SystemTrayMenuSettings.ShowCountOfElementsBelow; + checkBoxShowFunctionKeyOpenFolder.Checked = Global.Vars.SystemTrayMenuSettings.ShowFunctionKeyOpenFolder; + checkBoxShowFunctionKeyPinMenu.Checked = Global.Vars.SystemTrayMenuSettings.ShowFunctionKeyPinMenu; + checkBoxShowFunctionKeySettings.Checked = Global.Vars.SystemTrayMenuSettings.ShowFunctionKeySettings; + checkBoxShowFunctionKeyRestart.Checked = Global.Vars.SystemTrayMenuSettings.ShowFunctionKeyRestart; + + textBoxColorSelectedItem.Text = Global.Vars.SystemTrayMenuSettings.ColorSelectedItem; + textBoxColorSelecetedItemDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorDarkModeSelecetedItem; + textBoxColorSelectedItemBorder.Text = Global.Vars.SystemTrayMenuSettings.ColorSelectedItemBorder; + textBoxColorSelectedItemBorderDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorDarkModeSelectedItemBorder; + textBoxColorOpenFolder.Text = Global.Vars.SystemTrayMenuSettings.ColorOpenFolder; + textBoxColorOpenFolderDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorDarkModeOpenFolder; + textBoxColorOpenFolderBorder.Text = Global.Vars.SystemTrayMenuSettings.ColorOpenFolderBorder; + textBoxColorOpenFolderBorderDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorDarkModeOpenFolderBorder; + textBoxColorIcons.Text = Global.Vars.SystemTrayMenuSettings.ColorIcons; + textBoxColorIconsDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorDarkModeIcons; + textBoxColorBackground.Text = Global.Vars.SystemTrayMenuSettings.ColorBackground; + textBoxColorBackgroundDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorDarkModeBackground; + textBoxColorBackgroundBorder.Text = Global.Vars.SystemTrayMenuSettings.ColorBackgroundBorder; + textBoxColorBackgroundBorderDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorDarkModeBackgroundBorder; + textBoxColorSearchField.Text = Global.Vars.SystemTrayMenuSettings.ColorSearchField; + textBoxColorSearchFieldDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorDarkModeSearchField; + + textBoxColorScrollbarBackground.Text = Global.Vars.SystemTrayMenuSettings.ColorScrollbarBackground; + textBoxColorSlider.Text = Global.Vars.SystemTrayMenuSettings.ColorSlider; + textBoxColorSliderDragging.Text = Global.Vars.SystemTrayMenuSettings.ColorSliderDragging; + textBoxColorSliderHover.Text = Global.Vars.SystemTrayMenuSettings.ColorSliderHover; + textBoxColorSliderArrowsAndTrackHover.Text = Global.Vars.SystemTrayMenuSettings.ColorSliderArrowsAndTrackHover; + textBoxColorArrow.Text = Global.Vars.SystemTrayMenuSettings.ColorArrow; + textBoxColorArrowClick.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowClick; + textBoxColorArrowClickBackground.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowClickBackground; + textBoxColorArrowHover.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowHover; + textBoxColorArrowHoverBackground.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowHoverBackground; + textBoxColorScrollbarBackgroundDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorScrollbarBackgroundDarkMode; + textBoxColorSliderDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorSliderDarkMode; + textBoxColorSliderDraggingDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorSliderDraggingDarkMode; + textBoxColorSliderHoverDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorSliderHoverDarkMode; + textBoxColorSliderArrowsAndTrackHoverDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorSliderArrowsAndTrackHoverDarkMode; + textBoxColorArrowDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowDarkMode; + textBoxColorArrowClickDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowClickDarkMode; + textBoxColorArrowClickBackgroundDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowClickBackgroundDarkMode; + textBoxColorArrowHoverDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowHoverDarkMode; + textBoxColorArrowHoverBackgroundDarkMode.Text = Global.Vars.SystemTrayMenuSettings.ColorArrowHoverBackgroundDarkMode; + } + + /// + /// Gets NewHotKey. + /// + public string NewHotKey { get; } = string.Empty; + + /// + /// Registers all hotkeys as configured, displaying a dialog in case of hotkey conflicts with other tools. + /// + /// Whether the hotkeys could be registered to the users content. This also applies if conflicts arise and the user decides to ignore these (i.e. not to register the conflicting hotkey). + public static bool RegisterHotkeys() + { + return RegisterHotkeys(false); + } + + public static void ShowSingleInstance() + { + if (IsOpen()) + { + settingsForm.HandleInvoke(settingsForm.Activate); + } + else + { + settingsForm = new(); + settingsForm.ShowDialog(); + } + } + + public static bool IsOpen() + { + return settingsForm != null; + } + + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + switch (keyData) + { + case Keys.Escape: + if (!inHotkey) + { + DialogResult = DialogResult.Cancel; + } + else + { + return base.ProcessCmdKey(ref msg, keyData); + } + + break; + default: + return base.ProcessCmdKey(ref msg, keyData); + } + + return true; + } + + /// + /// Helper method to cleanly register a hotkey. + /// + /// failedKeys. + /// hotkeyString. + /// handler. + /// bool success. + private static bool RegisterHotkey(StringBuilder failedKeys, string hotkeyString, HotKeyHandler handler) + { + Keys modifierKeyCode = HotkeyModifiersFromString(hotkeyString); + Keys virtualKeyCode = HotkeyFromString(hotkeyString); + if (!Keys.None.Equals(virtualKeyCode)) + { + if (RegisterHotKey(modifierKeyCode, virtualKeyCode, handler) < 0) + { + if (failedKeys.Length > 0) + { + failedKeys.Append(", "); + } + + failedKeys.Append(hotkeyString); + return false; + } + } + + return true; + } + + private static bool RegisterWrapper(StringBuilder failedKeys, HotKeyHandler handler) + { + bool success = RegisterHotkey( + failedKeys, + Global.Vars.SystemTrayMenuSettings.HotKey, + handler); + return success; + } + + /// + /// Registers all hotkeys as configured, displaying a dialog in case of hotkey conflicts with other tools. + /// + /// if true, a failed hotkey registration will not be reported to the user - the hotkey will simply not be registered. + /// Whether the hotkeys could be registered to the users content. This also applies if conflicts arise and the user decides to ignore these (i.e. not to register the conflicting hotkey). + private static bool RegisterHotkeys(bool ignoreFailedRegistration) + { + bool success = true; + StringBuilder failedKeys = new(); + if (!RegisterWrapper(failedKeys, Handler)) + { + success = false; + } + + if (!success) + { + if (!ignoreFailedRegistration) + { + success = HandleFailedHotkeyRegistration(failedKeys.ToString()); + } + } + + return success || ignoreFailedRegistration; + } + + private static void Handler() + { + } + + /// + /// Displays a dialog for the user to choose how to handle hotkey registration failures: + /// retry (allowing to shut down the conflicting application before), + /// ignore (not registering the conflicting hotkey and resetting the respective config to "None", i.e. not trying to register it again on next startup) + /// abort (do nothing about it). + /// + /// comma separated list of the hotkeys that could not be registered, for display in dialog text. + /// bool success. + private static bool HandleFailedHotkeyRegistration(string failedKeys) + { + bool success = false; + string warningTitle = Global.Utilities.Translator.GetText("Warning"); + string message = Global.Utilities.Translator.GetText("Could not register the hot key.") + failedKeys; + DialogResult dr = MessageBox.Show(message, warningTitle, MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Exclamation); + if (dr == DialogResult.Retry) + { + UnregisterHotkeys(); + success = RegisterHotkeys(false); + } + else if (dr == DialogResult.Ignore) + { + UnregisterHotkeys(); + success = RegisterHotkeys(true); + } + + return success; + } + + private static void AdjustControlMultilineIfNecessary(Control control) + { + if (control.Width > control.Parent.Width) + { + control.MaximumSize = new Size(control.Parent.Width, 0); + control.MinimumSize = new Size(0, control.Height * 2); + } + } + + private static void AddSetFolderByWindowsContextMenu() + { + RegistryKey registryKeyContextMenu = null; + RegistryKey registryKeyContextMenuCommand = null; + + try + { + registryKeyContextMenu = Registry.CurrentUser.CreateSubKey(MenuName); + string binLocation = Environment.ProcessPath; + if (registryKeyContextMenu != null) + { + registryKeyContextMenu.SetValue(string.Empty, Global.Utilities.Translator.GetText("Set as directory")); + registryKeyContextMenu.SetValue("Icon", binLocation); + } + + registryKeyContextMenuCommand = Registry.CurrentUser.CreateSubKey(Command); + + if (registryKeyContextMenuCommand != null) + { + registryKeyContextMenuCommand.SetValue(string.Empty, binLocation + " \"%1\""); + } + + Global.Vars.SystemTrayMenuSettings.SetFolderByWindowsContextMenu = true; + } + catch (Exception ex) + { + Log.Warn("SaveSetFolderByWindowsContextMenu failed", ex); + } + finally + { + if (registryKeyContextMenu != null) + { + registryKeyContextMenu.Close(); + } + + if (registryKeyContextMenuCommand != null) + { + registryKeyContextMenuCommand.Close(); + } + } + } + + private static void RemoveSetFolderByWindowsContextMenu() + { + try + { + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(Command); + if (registryKey != null) + { + registryKey.Close(); + Registry.CurrentUser.DeleteSubKey(Command); + } + + registryKey = Registry.CurrentUser.OpenSubKey(MenuName); + if (registryKey != null) + { + registryKey.Close(); + Registry.CurrentUser.DeleteSubKey(MenuName); + } + + Global.Vars.SystemTrayMenuSettings.SetFolderByWindowsContextMenu = false; + } + catch (Exception ex) + { + Log.Warn("DeleteSetFolderByWindowsContextMenu failed", ex); + } + } + + private static bool IsStartupTask() + { + bool useStartupTask = false; +#if RELEASEPACKAGE + useStartupTask = true; +#endif + return useStartupTask; + } + + private void SettingsForm_Load(object sender, EventArgs e) + { + AdjustControlMultilineIfNecessary(checkBoxStayOpenWhenFocusLost); + dataGridViewFolders.ClearSelection(); + tabPageGeneral.AutoScrollMinSize = tableLayoutPanelGeneral.Size; + tabPageSizeAndLocation.AutoScrollMinSize = tableLayoutPanelSizeAndLocation.Size; + tabPageAdvanced.AutoScrollMinSize = tableLayoutPanelAdvanced.Size; + tabPageFolders.AutoScrollMinSize = tableLayoutPanelFoldersInRootFolder.Size; + tabPageExpert.AutoScrollMinSize = tableLayoutPanelExpert.Size; + tabPageCustomize.AutoScrollMinSize = tableLayoutPanelCustomize.Size; + tableLayoutPanelMain.Dock = DockStyle.Fill; + tabControl.Dock = DockStyle.Fill; + tabPageGeneral.Dock = DockStyle.Fill; + tableLayoutPanelGeneral.Dock = DockStyle.Fill; + tabPageSizeAndLocation.Dock = DockStyle.Fill; + tableLayoutPanelSizeAndLocation.Dock = DockStyle.Fill; + tabPageAdvanced.Dock = DockStyle.Fill; + tableLayoutPanelAdvanced.Dock = DockStyle.Fill; + tabPageFolders.Dock = DockStyle.Fill; + tableLayoutPanelFoldersInRootFolder.Dock = DockStyle.Fill; + tabPageExpert.Dock = DockStyle.Fill; + tableLayoutPanelExpert.Dock = DockStyle.Fill; + tabPageCustomize.Dock = DockStyle.Fill; + tableLayoutPanelCustomize.Dock = DockStyle.Fill; + } + + private void SettingsForm_Shown(object sender, EventArgs e) + { + Size size = Size; + SuspendLayout(); + AutoSize = false; + AutoSizeMode = AutoSizeMode.GrowOnly; + Size = size; + textBoxFolder.Anchor = AnchorStyles.Left | AnchorStyles.Right; + textBoxHotkey.Anchor = AnchorStyles.Left | AnchorStyles.Right; + textBoxIcoFolder.Anchor = AnchorStyles.Left | AnchorStyles.Right; + dataGridViewFolders.Dock = DockStyle.Fill; + textBoxSearchPattern.Anchor = AnchorStyles.Left | AnchorStyles.Right; + Opacity = 1; + ResumeLayout(); + } + + private void ButtonOk_Click(object sender, EventArgs e) + { + if (checkBoxSetFolderByWindowsContextMenu.Checked) + { + AddSetFolderByWindowsContextMenu(); + } + else + { + RemoveSetFolderByWindowsContextMenu(); + } + + Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory = checkBoxSaveLogFileInApplicationDirectory.Checked; + if (Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory) + { + try + { + string fileNameToCheckWriteAccess = "CheckWriteAccess"; + File.WriteAllText(fileNameToCheckWriteAccess, fileNameToCheckWriteAccess); + File.Delete(fileNameToCheckWriteAccess); + Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory = true; + } + catch (Exception ex) + { + Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory = false; + Log.Warn($"Failed to save log file in application folder {Log.GetLogFilePath()}", ex); + } + } + + if (!IsStartupTask()) + { + if (checkBoxAutostart.Checked) + { + RegistryKey key = Registry.CurrentUser.OpenSubKey( + @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); + key.SetValue( + Assembly.GetExecutingAssembly().GetName().Name, + Environment.ProcessPath); + + Global.Vars.SystemTrayMenuSettings.IsAutostartActivated = true; + } + else + { + RegistryKey key = Registry.CurrentUser.OpenSubKey( + @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); + key.DeleteValue("FSI.BT.Tools.SystemTrayMenu", false); + + Global.Vars.SystemTrayMenuSettings.IsAutostartActivated = false; + } + } + + Global.Vars.SystemTrayMenuSettings.CheckForUpdates = checkBoxCheckForUpdates.Checked; + + Global.Vars.SystemTrayMenuSettings.HotKey = new KeysConverter().ConvertToInvariantString(textBoxHotkey.Hotkey | textBoxHotkey.HotkeyModifiers); + Global.Vars.SystemTrayMenuSettings.CurrentCultureInfoName = comboBoxLanguage.SelectedValue.ToString(); + + Global.Vars.SystemTrayMenuSettings.SizeInPercent = (int)numericUpDownSizeInPercent.Value; + Global.Vars.SystemTrayMenuSettings.IconSizeInPercent = (int)numericUpDownIconSizeInPercent.Value; + if (Global.DllImports.NativeMethods.IsTouchEnabled()) + { + Global.Vars.SystemTrayMenuSettings.RowHeighteInPercentageTouch = (int)numericUpDownRowHeighteInPercentage.Value; + } + else + { + Global.Vars.SystemTrayMenuSettings.RowHeighteInPercentage = (int)numericUpDownRowHeighteInPercentage.Value; + } + + Global.Vars.SystemTrayMenuSettings.WidthMaxInPercent = (int)numericUpDownMenuWidth.Value; + Global.Vars.SystemTrayMenuSettings.HeightMaxInPercent = (int)numericUpDownMenuHeight.Value; + + if (radioButtonUseCustomLocation.Checked) + { + Global.Vars.SystemTrayMenuSettings.UseCustomLocation = true; + Global.Vars.SystemTrayMenuSettings.AppearAtMouseLocation = false; + Global.Vars.SystemTrayMenuSettings.AppearAtTheBottomLeft = false; + } + else if (radioButtonAppearAtMouseLocation.Checked) + { + Global.Vars.SystemTrayMenuSettings.UseCustomLocation = false; + Global.Vars.SystemTrayMenuSettings.AppearAtMouseLocation = true; + Global.Vars.SystemTrayMenuSettings.AppearAtTheBottomLeft = false; + } + else if (radioButtonAppearAtTheBottomLeft.Checked) + { + Global.Vars.SystemTrayMenuSettings.UseCustomLocation = false; + Global.Vars.SystemTrayMenuSettings.AppearAtMouseLocation = false; + Global.Vars.SystemTrayMenuSettings.AppearAtTheBottomLeft = true; + } + else + { + Global.Vars.SystemTrayMenuSettings.UseCustomLocation = false; + Global.Vars.SystemTrayMenuSettings.AppearAtMouseLocation = false; + Global.Vars.SystemTrayMenuSettings.AppearAtTheBottomLeft = false; + } + + Global.Vars.SystemTrayMenuSettings.OverlappingOffsetPixels = (int)numericUpDownOverlappingOffsetPixels.Value; + if (radioButtonNextToPreviousMenu.Checked) + { + Global.Vars.SystemTrayMenuSettings.AppearNextToPreviousMenu = true; + } + else + { + Global.Vars.SystemTrayMenuSettings.AppearNextToPreviousMenu = false; + } + + Global.Vars.SystemTrayMenuSettings.ResolveLinksToFolders = checkBoxResolveLinksToFolders.Checked; + Global.Vars.SystemTrayMenuSettings.ShowInTaskbar = checkBoxShowInTaskbar.Checked; + Global.Vars.SystemTrayMenuSettings.SendHotkeyInsteadKillOtherInstances = checkBoxSendHotkeyInsteadKillOtherInstances.Checked; + Global.Vars.SystemTrayMenuSettings.SupportGamepad = checkBoxSupportGamepad.Checked; + Global.Vars.SystemTrayMenuSettings.OpenItemWithOneClick = checkBoxOpenItemWithOneClick.Checked; + Global.Vars.SystemTrayMenuSettings.OpenDirectoryWithOneClick = checkBoxOpenDirectoryWithOneClick.Checked; + + if (Global.DllImports.NativeMethods.IsTouchEnabled()) + { + Global.Vars.SystemTrayMenuSettings.DragDropItemsEnabledTouch = checkBoxDragDropItems.Checked; + Global.Vars.SystemTrayMenuSettings.SwipeScrollingEnabledTouch = checkBoxSwipeScrolling.Checked; + } + else + { + Global.Vars.SystemTrayMenuSettings.DragDropItemsEnabled = checkBoxDragDropItems.Checked; + Global.Vars.SystemTrayMenuSettings.SwipeScrollingEnabled = checkBoxSwipeScrolling.Checked; + } + + Global.Vars.SystemTrayMenuSettings.PathIcoDirectory = textBoxIcoFolder.Text; + Global.Vars.SystemTrayMenuSettings.SortByTypeAndNameWindowsExplorerSort = radioButtonSortByTypeAndName.Checked; + Global.Vars.SystemTrayMenuSettings.SortByTypeAndDate = radioButtonSortByTypeAndDate.Checked; + Global.Vars.SystemTrayMenuSettings.SortByFileExtensionAndName = radioButtonSortByFileExtensionAndName.Checked; + Global.Vars.SystemTrayMenuSettings.SortByName = radioButtonSortByName.Checked; + Global.Vars.SystemTrayMenuSettings.SortByDate = radioButtonSortByDate.Checked; + Global.Vars.SystemTrayMenuSettings.SystemSettingsShowHiddenFiles = radioButtonSystemSettingsShowHiddenFiles.Checked; + Global.Vars.SystemTrayMenuSettings.AlwaysShowHiddenFiles = radioButtonAlwaysShowHiddenFiles.Checked; + Global.Vars.SystemTrayMenuSettings.NeverShowHiddenFiles = radioButtonNeverShowHiddenFiles.Checked; + + Global.Vars.SystemTrayMenuSettings.ShowOnlyAsSearchResult = checkBoxShowOnlyAsSearchResult.Checked; + Global.Vars.SystemTrayMenuSettings.PathsAddToMainMenu = string.Empty; + foreach (DataGridViewRow row in dataGridViewFolders.Rows) + { + string pathAddToMainMenu = row.Cells[0].Value.ToString(); + bool recursiv = (bool)row.Cells[1].Value; + bool onlyFiles = (bool)row.Cells[2].Value; + Global.Vars.SystemTrayMenuSettings.PathsAddToMainMenu += $"{pathAddToMainMenu} recursiv:{recursiv} onlyFiles:{onlyFiles}|"; + } + + Global.Vars.SystemTrayMenuSettings.GenerateShortcutsToDrives = checkBoxGenerateShortcutsToDrives.Checked; + + Global.Vars.SystemTrayMenuSettings.StaysOpenWhenItemClicked = checkBoxStayOpenWhenItemClicked.Checked; + Global.Vars.SystemTrayMenuSettings.StaysOpenWhenFocusLost = checkBoxStayOpenWhenFocusLost.Checked; + Global.Vars.SystemTrayMenuSettings.TimeUntilCloses = (int)numericUpDownTimeUntilClose.Value; + Global.Vars.SystemTrayMenuSettings.TimeUntilOpens = (int)numericUpDownTimeUntilOpens.Value; + Global.Vars.SystemTrayMenuSettings.StaysOpenWhenFocusLostAfterEnterPressed = checkBoxStayOpenWhenFocusLostAfterEnterPressed.Checked; + Global.Vars.SystemTrayMenuSettings.TimeUntilClosesAfterEnterPressed = (int)numericUpDownTimeUntilClosesAfterEnterPressed.Value; + Global.Vars.SystemTrayMenuSettings.ClearCacheIfMoreThanThisNumberOfItems = (int)numericUpDownClearCacheIfMoreThanThisNumberOfItems.Value; + Global.Vars.SystemTrayMenuSettings.SearchPattern = textBoxSearchPattern.Text; + + Global.Vars.SystemTrayMenuSettings.UseIconFromRootFolder = checkBoxUseIconFromRootFolder.Checked; + Global.Vars.SystemTrayMenuSettings.RoundCorners = checkBoxRoundCorners.Checked; + Global.Vars.SystemTrayMenuSettings.IsDarkModeAlwaysOn = checkBoxDarkModeAlwaysOn.Checked; + Global.Vars.SystemTrayMenuSettings.UseFading = checkBoxUseFading.Checked; + Global.Vars.SystemTrayMenuSettings.ShowLinkOverlay = checkBoxShowLinkOverlay.Checked; + Global.Vars.SystemTrayMenuSettings.ShowDirectoryTitleAtTop = checkBoxShowDirectoryTitleAtTop.Checked; + Global.Vars.SystemTrayMenuSettings.ShowSearchBar = checkBoxShowSearchBar.Checked; + Global.Vars.SystemTrayMenuSettings.ShowCountOfElementsBelow = checkBoxShowCountOfElementsBelow.Checked; + Global.Vars.SystemTrayMenuSettings.ShowFunctionKeyOpenFolder = checkBoxShowFunctionKeyOpenFolder.Checked; + Global.Vars.SystemTrayMenuSettings.ShowFunctionKeyPinMenu = checkBoxShowFunctionKeyPinMenu.Checked; + Global.Vars.SystemTrayMenuSettings.ShowFunctionKeySettings = checkBoxShowFunctionKeySettings.Checked; + Global.Vars.SystemTrayMenuSettings.ShowFunctionKeyRestart = checkBoxShowFunctionKeyRestart.Checked; + + //if (checkBoxSaveConfigInApplicationDirectory.Checked) + //{ + // CustomSettingsProvider.ActivateConfigPathAssembly(); + // TrySettingsDefaultSave(); + //} + //else + //{ + // TrySettingsDefaultSave(); + // CustomSettingsProvider.DeactivateConfigPathAssembly(); + //} + + static void TrySettingsDefaultSave() + { + //try + //{ + // //Global.Vars.SystemTrayMenuSettings.Save(); + //} + //catch (Exception ex) + //{ + // Log.Warn($"Failed to save configuration file in application folder {CustomSettingsProvider.ConfigPathAssembly}", ex); + //} + } + + DialogResult = DialogResult.OK; + AppRestart.ByConfigChange(); + Close(); + } + + private void ButtonAddStartup_Click(object sender, EventArgs e) + { + _ = AddStartUpAsync(); + async Task AddStartUpAsync() + { + // Pass the task ID you specified in the appxmanifest file + StartupTask startupTask = await StartupTask.GetAsync("MyStartupId"); + Log.Info($"Autostart {startupTask.State}."); + + switch (startupTask.State) + { + case StartupTaskState.Enabled: + case StartupTaskState.EnabledByPolicy: + UpdateLabelStartupStatus(startupTask.State); + break; + case StartupTaskState.Disabled: + // Task is disabled but can be enabled. + StartupTaskState newState = await startupTask.RequestEnableAsync(); + UpdateLabelStartupStatus(newState); + break; + case StartupTaskState.DisabledByUser: + UpdateLabelStartupStatus(startupTask.State); + break; + case StartupTaskState.DisabledByPolicy: + UpdateLabelStartupStatus(startupTask.State); + break; + default: + break; + } + } + } + + private void UpdateLabelStartupStatus(StartupTaskState newState) + { + switch (newState) + { + case StartupTaskState.Disabled: + case StartupTaskState.DisabledByUser: + case StartupTaskState.DisabledByPolicy: + labelStartupStatus.Text = Global.Utilities.Translator.GetText("Deactivated"); + break; + case StartupTaskState.Enabled: + case StartupTaskState.EnabledByPolicy: + labelStartupStatus.Text = Global.Utilities.Translator.GetText("Activated"); + break; + default: + break; + } + } + + private void ButtonChange_Click(object sender, EventArgs e) + { + Tools.SystemTrayMenu.Config.SetFolderByUser(false); + textBoxFolder.Text = Tools.SystemTrayMenu.Config.Path; + } + + private void ButtonOpenFolder_Click(object sender, EventArgs e) + { + Log.ProcessStart("explorer.exe", Tools.SystemTrayMenu.Config.Path, true); + } + + private void ButtonChangeRelativeFolder_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(Tools.SystemTrayMenu.Config.Path)) + { + Global.Vars.SystemTrayMenuSettings.PathDirectory = Path.GetRelativePath( + Directory.GetParent(Assembly.GetEntryAssembly().Location).FullName, + Tools.SystemTrayMenu.Config.Path); + textBoxFolder.Text = Tools.SystemTrayMenu.Config.Path; + } + } + + private void ButtonOpenAssemblyLocation_Click(object sender, EventArgs e) + { + Log.ProcessStart(Directory.GetParent(Assembly.GetEntryAssembly().Location).FullName); + } + + private void TextBoxHotkeyEnter(object sender, EventArgs e) + { + UnregisterHotkeys(); + inHotkey = true; + } + + private void TextBoxHotkey_Leave(object sender, EventArgs e) + { + Global.Vars.SystemTrayMenuSettings.HotKey = + new KeysConverter().ConvertToInvariantString( + textBoxHotkey.Hotkey | textBoxHotkey.HotkeyModifiers); + RegisterHotkeys(); + inHotkey = false; + } + + private void ButtonHotkeyDefault_Click(object sender, EventArgs e) + { + textBoxHotkey.SetHotkey("Ctrl+LWin"); + } + + private void ButtonGeneralDefault_Click(object sender, EventArgs e) + { + checkBoxSetFolderByWindowsContextMenu.Checked = false; + checkBoxSaveConfigInApplicationDirectory.Checked = false; + checkBoxSaveLogFileInApplicationDirectory.Checked = false; + checkBoxAutostart.Checked = false; + checkBoxCheckForUpdates.Checked = false; + } + + private void ButtonChangeIcoFolder_Click(object sender, EventArgs e) + { + Tools.SystemTrayMenu.Config.SetFolderIcoByUser(); + textBoxIcoFolder.Text = Global.Vars.SystemTrayMenuSettings.PathIcoDirectory; + } + + private void ButtonAddSampleStartMenuFolder_Click(object sender, EventArgs e) + { + dataGridViewFolders.Rows.Clear(); + string folderPathCommonStartMenu = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu); + dataGridViewFolders.Rows.Add(folderPathCommonStartMenu, true, true); + dataGridViewFolders.ClearSelection(); + } + + private void ButtonClearFolders_Click(object sender, EventArgs e) + { + checkBoxShowOnlyAsSearchResult.Checked = false; + dataGridViewFolders.Rows.Clear(); + checkBoxGenerateShortcutsToDrives.Checked = false; + } + + private void ButtonAddFolderToRootFolder_Click(object sender, EventArgs e) + { + using FolderDialog dialog = new(); + dialog.InitialFolder = Tools.SystemTrayMenu.Config.Path; + + if (dialog.ShowDialog() == DialogResult.OK) + { + dataGridViewFolders.Rows.Add(dialog.Folder, false, true); + } + + dataGridViewFolders.ClearSelection(); + } + + private void ButtonRemoveFolder_Click(object sender, EventArgs e) + { + int selectedRowCount = dataGridViewFolders.Rows.GetRowCount(DataGridViewElementStates.Selected); + if (selectedRowCount > 0) + { + for (int i = 0; i < selectedRowCount; i++) + { + dataGridViewFolders.Rows.RemoveAt(dataGridViewFolders.SelectedRows[0].Index); + } + } + + dataGridViewFolders.ClearSelection(); + } + + private void DataGridViewFolders_SelectionChanged(object sender, EventArgs e) + { + buttonRemoveFolder.Enabled = dataGridViewFolders.SelectedRows.Count > 0; + } + + private void DataGridViewFolders_MouseClick(object sender, MouseEventArgs e) + { + if (dataGridViewFolders.HitTest(e.X, e.Y).RowIndex < 0) + { + dataGridViewFolders.ClearSelection(); + } + } + + private void DataGridViewFolders_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) + { + if (e.ColumnIndex == 0) + { + dataGridViewFolders.CancelEdit(); + } + } + + private void DataGridViewFolders_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) + { + EnableButtonAddStartMenu(); + } + + private void DataGridViewFolders_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) + { + EnableButtonAddStartMenu(); + } + + private void DataGridViewFolders_CurrentCellDirtyStateChanged(object sender, EventArgs e) + { + EnableButtonAddStartMenu(); + } + + private void EnableButtonAddStartMenu() + { + bool doesStartMenuFolderExist = false; + foreach (DataGridViewRow row in dataGridViewFolders.Rows) + { + string folderPathCommonStartMenu = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu); + string pathAddToMainMenu = row.Cells[0].Value.ToString(); + bool recursiv = (bool)row.Cells[1].EditedFormattedValue; + bool onlyFiles = (bool)row.Cells[2].EditedFormattedValue; + if (folderPathCommonStartMenu == pathAddToMainMenu && + recursiv == true && + onlyFiles == true) + { + doesStartMenuFolderExist = true; + } + } + + buttonAddSampleStartMenuFolder.Enabled = !doesStartMenuFolderExist; + } + + private void ButtonSizeAndLocationDefault_Click(object sender, EventArgs e) + { + numericUpDownSizeInPercent.Value = 100; + numericUpDownIconSizeInPercent.Value = 100; + numericUpDownRowHeighteInPercentage.Value = 100; + numericUpDownMenuWidth.Value = 100; + numericUpDownMenuHeight.Value = 100; + + radioButtonAppearAtTheBottomRight.Checked = false; + radioButtonAppearAtTheBottomLeft.Checked = true; + radioButtonUseCustomLocation.Checked = false; + radioButtonAppearAtMouseLocation.Checked = false; + + radioButtonNextToPreviousMenu.Checked = true; + numericUpDownOverlappingOffsetPixels.Value = 150; + } + + private void ButtonAdvancedDefault_Click(object sender, EventArgs e) + { + checkBoxResolveLinksToFolders.Checked = true; + checkBoxShowInTaskbar.Checked = true; + checkBoxSendHotkeyInsteadKillOtherInstances.Checked = false; + checkBoxSupportGamepad.Checked = false; + checkBoxOpenItemWithOneClick.Checked = true; + checkBoxOpenDirectoryWithOneClick.Checked = false; + if (Global.DllImports.NativeMethods.IsTouchEnabled()) + { + checkBoxDragDropItems.Checked = false; + checkBoxSwipeScrolling.Checked = true; + } + else + { + checkBoxDragDropItems.Checked = true; + checkBoxSwipeScrolling.Checked = false; + } + + textBoxIcoFolder.Text = Path.Combine( + Path.Combine( + Environment.GetFolderPath( + Environment.SpecialFolder.ApplicationData), $"FSI.BT.Tools.SystemTrayMenu"), "ico"); + if (!Directory.Exists(Global.Vars.SystemTrayMenuSettings.PathIcoDirectory)) + { + Directory.CreateDirectory(Global.Vars.SystemTrayMenuSettings.PathIcoDirectory); + } + + radioButtonSortByName.Checked = true; + radioButtonSortByDate.Checked = false; + radioButtonSystemSettingsShowHiddenFiles.Checked = true; + radioButtonNeverShowHiddenFiles.Checked = false; + radioButtonAlwaysShowHiddenFiles.Checked = false; + } + + private void CheckBoxStayOpenWhenFocusLost_CheckedChanged(object sender, EventArgs e) + { + numericUpDownTimeUntilClose.Enabled = checkBoxStayOpenWhenFocusLost.Checked; + } + + private void CheckBoxStayOpenWhenFocusLostAfterEnterPressed_CheckedChanged(object sender, EventArgs e) + { + numericUpDownTimeUntilClosesAfterEnterPressed.Enabled = checkBoxStayOpenWhenFocusLostAfterEnterPressed.Checked; + } + + private void ButtonExpertDefault_Click(object sender, EventArgs e) + { + checkBoxStayOpenWhenItemClicked.Checked = true; + checkBoxStayOpenWhenFocusLost.Checked = true; + numericUpDownTimeUntilClose.Value = 400; + numericUpDownTimeUntilOpens.Value = 100; + checkBoxStayOpenWhenFocusLostAfterEnterPressed.Checked = true; + numericUpDownTimeUntilClosesAfterEnterPressed.Value = 200; + numericUpDownClearCacheIfMoreThanThisNumberOfItems.Value = 200; + textBoxSearchPattern.Text = string.Empty; + } + + private void TextBoxColorsChanged(object sender, EventArgs e) + { + TextBox textBox = (TextBox)sender; + PictureBox pictureBox = (PictureBox)textBox.Tag; + pictureBox.BackColor = GetConvertFromStringOrDefault(textBox.Text.Trim()); + + SaveColorsTemporarily(); + } + + private Color GetConvertFromStringOrDefault(string text) + { + try + { + return (Color)colorConverter.ConvertFromString(text); + } + catch + { + return Color.White; + } + } + + private void SaveColorsTemporarily() + { + if (Visible) + { + Global.Vars.SystemTrayMenuSettings.ColorSelectedItem = textBoxColorSelectedItem.Text; + Global.Vars.SystemTrayMenuSettings.ColorDarkModeSelecetedItem = textBoxColorSelecetedItemDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorSelectedItemBorder = textBoxColorSelectedItemBorder.Text; + Global.Vars.SystemTrayMenuSettings.ColorDarkModeSelectedItemBorder = textBoxColorSelectedItemBorderDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorOpenFolder = textBoxColorOpenFolder.Text; + Global.Vars.SystemTrayMenuSettings.ColorDarkModeOpenFolder = textBoxColorOpenFolderDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorOpenFolderBorder = textBoxColorOpenFolderBorder.Text; + Global.Vars.SystemTrayMenuSettings.ColorDarkModeOpenFolderBorder = textBoxColorOpenFolderBorderDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorIcons = textBoxColorIcons.Text; + Global.Vars.SystemTrayMenuSettings.ColorDarkModeIcons = textBoxColorIconsDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorBackground = textBoxColorBackground.Text; + Global.Vars.SystemTrayMenuSettings.ColorDarkModeBackground = textBoxColorBackgroundDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorBackgroundBorder = textBoxColorBackgroundBorder.Text; + Global.Vars.SystemTrayMenuSettings.ColorDarkModeBackgroundBorder = textBoxColorBackgroundBorderDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorSearchField = textBoxColorSearchField.Text; + Global.Vars.SystemTrayMenuSettings.ColorDarkModeSearchField = textBoxColorSearchFieldDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorScrollbarBackground = textBoxColorScrollbarBackground.Text; + Global.Vars.SystemTrayMenuSettings.ColorSlider = textBoxColorSlider.Text; + Global.Vars.SystemTrayMenuSettings.ColorSliderDragging = textBoxColorSliderDragging.Text; + Global.Vars.SystemTrayMenuSettings.ColorSliderHover = textBoxColorSliderHover.Text; + Global.Vars.SystemTrayMenuSettings.ColorSliderArrowsAndTrackHover = textBoxColorSliderArrowsAndTrackHover.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrow = textBoxColorArrow.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowClick = textBoxColorArrowClick.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowClickBackground = textBoxColorArrowClickBackground.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowHover = textBoxColorArrowHover.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowHoverBackground = textBoxColorArrowHoverBackground.Text; + Global.Vars.SystemTrayMenuSettings.ColorScrollbarBackgroundDarkMode = textBoxColorScrollbarBackgroundDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorSliderDarkMode = textBoxColorSliderDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorSliderDraggingDarkMode = textBoxColorSliderDraggingDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorSliderHoverDarkMode = textBoxColorSliderHoverDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorSliderArrowsAndTrackHoverDarkMode = textBoxColorSliderArrowsAndTrackHoverDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowDarkMode = textBoxColorArrowDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowClickDarkMode = textBoxColorArrowClickDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowClickBackgroundDarkMode = textBoxColorArrowClickBackgroundDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowHoverDarkMode = textBoxColorArrowHoverDarkMode.Text; + Global.Vars.SystemTrayMenuSettings.ColorArrowHoverBackgroundDarkMode = textBoxColorArrowHoverBackgroundDarkMode.Text; + + Tools.SystemTrayMenu.Config.InitializeColors(false); + } + } + + private void CheckBoxDarkModeAlwaysOnCheckedChanged(object sender, EventArgs e) + { + Global.Vars.SystemTrayMenuSettings.IsDarkModeAlwaysOn = checkBoxDarkModeAlwaysOn.Checked; + Tools.SystemTrayMenu.Config.ResetReadDarkModeDone(); + SaveColorsTemporarily(); + } + + private void PictureBoxClick(object sender, EventArgs e) + { + PictureBox pictureBox = (PictureBox)sender; + TextBox textBox = (TextBox)pictureBox.Tag; + colorDialog.Color = pictureBox.BackColor; + if (colorDialog.ShowDialog() == DialogResult.OK) + { + textBox.Text = ColorTranslator.ToHtml(colorDialog.Color); + pictureBox.BackColor = colorDialog.Color; + } + } + + private void ButtonAppearanceDefault_Click(object sender, EventArgs e) + { + checkBoxUseIconFromRootFolder.Checked = false; + checkBoxRoundCorners.Checked = false; + checkBoxUseFading.Checked = false; + checkBoxDarkModeAlwaysOn.Checked = true; + checkBoxShowLinkOverlay.Checked = false; + checkBoxShowDirectoryTitleAtTop.Checked = false; + checkBoxShowSearchBar.Checked = true; + checkBoxShowCountOfElementsBelow.Checked = false; + checkBoxShowFunctionKeyOpenFolder.Checked = false; + checkBoxShowFunctionKeyPinMenu.Checked = false; + checkBoxShowFunctionKeySettings.Checked = false; + checkBoxShowFunctionKeyRestart.Checked = false; + } + + private void ButtonDefaultColors_Click(object sender, EventArgs e) + { + textBoxColorIcons.Text = "#95a0a6"; + textBoxColorOpenFolder.Text = "#C2F5DE"; + textBoxColorOpenFolderBorder.Text = "#99FFA5"; + textBoxColorBackground.Text = "#ffffff"; + textBoxColorBackgroundBorder.Text = "#000000"; + textBoxColorSearchField.Text = "#ffffff"; + textBoxColorSelectedItem.Text = "#CCE8FF"; + textBoxColorSelectedItemBorder.Text = "#99D1FF"; + textBoxColorArrow.Text = "#606060"; + textBoxColorArrowHoverBackground.Text = "#dadada"; + textBoxColorArrowHover.Text = "#000000"; + textBoxColorArrowClick.Text = "#ffffff"; + textBoxColorArrowClickBackground.Text = "#606060"; + textBoxColorSliderArrowsAndTrackHover.Text = "#c0c0c0"; + textBoxColorSlider.Text = "#cdcdcd"; + textBoxColorSliderHover.Text = "#a6a6a6"; + textBoxColorSliderDragging.Text = "#606060"; + textBoxColorScrollbarBackground.Text = "#f0f0f0"; + } + + private void ButtonDefaultColorsDark_Click(object sender, EventArgs e) + { + textBoxColorIconsDarkMode.Text = "#95a0a6"; + textBoxColorOpenFolderDarkMode.Text = "#14412A"; + textBoxColorOpenFolderBorderDarkMode.Text = "#144B55"; + textBoxColorBackgroundDarkMode.Text = "#202020"; + textBoxColorBackgroundBorderDarkMode.Text = "#000000"; + textBoxColorSearchFieldDarkMode.Text = "#191919"; + textBoxColorSelecetedItemDarkMode.Text = "#333333"; + textBoxColorSelectedItemBorderDarkMode.Text = "#141D4B"; + textBoxColorArrowDarkMode.Text = "#676767"; + textBoxColorArrowHoverBackgroundDarkMode.Text = "#373737"; + textBoxColorArrowHoverDarkMode.Text = "#676767"; + textBoxColorArrowClickDarkMode.Text = "#171717"; + textBoxColorArrowClickBackgroundDarkMode.Text = "#a6a6a6"; + textBoxColorSliderArrowsAndTrackHoverDarkMode.Text = "#4d4d4d"; + textBoxColorSliderDarkMode.Text = "#4d4d4d"; + textBoxColorSliderHoverDarkMode.Text = "#7a7a7a"; + textBoxColorSliderDraggingDarkMode.Text = "#a6a6a6"; + textBoxColorScrollbarBackgroundDarkMode.Text = "#171717"; + } + + private void StopPlayingDingSoundEnterKeyPressed_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + e.Handled = e.SuppressKeyPress = true; + } + } + + private void StopPlayingDingSoundEnterKeyPressed_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + e.Handled = e.SuppressKeyPress = true; + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) + { + //Global.Vars.SystemTrayMenuSettings.Reload(); + DialogResult = DialogResult.Cancel; + Close(); + } + + private void SettingsForm_FormClosed(object sender, FormClosedEventArgs e) + { + settingsForm?.Dispose(); + settingsForm = null; + } + + private void RadioButtonNextToPreviousMenu_CheckedChanged(object sender, EventArgs e) + { + radioButtonOverlapping.CheckedChanged -= RadioButtonOverlapping_CheckedChanged; + radioButtonOverlapping.Checked = false; + radioButtonOverlapping.CheckedChanged += RadioButtonOverlapping_CheckedChanged; + numericUpDownOverlappingOffsetPixels.Enabled = false; + } + + private void RadioButtonOverlapping_CheckedChanged(object sender, EventArgs e) + { + radioButtonNextToPreviousMenu.CheckedChanged -= RadioButtonNextToPreviousMenu_CheckedChanged; + radioButtonNextToPreviousMenu.Checked = false; + radioButtonNextToPreviousMenu.CheckedChanged += RadioButtonNextToPreviousMenu_CheckedChanged; + numericUpDownOverlappingOffsetPixels.Enabled = true; + } + } +} diff --git a/FSI.BT.Tools/Global/UserInterface/Settings.resx b/FSI.BT.Tools/Global/UserInterface/Settings.resx new file mode 100644 index 0000000..b279572 --- /dev/null +++ b/FSI.BT.Tools/Global/UserInterface/Settings.resx @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + 17, 17 + + + 42 + + \ No newline at end of file diff --git a/FSI.BT.Tools/Global/Utilities/Admin.cs b/FSI.BT.Tools/Global/Utilities/Admin.cs new file mode 100644 index 0000000..07b57fe --- /dev/null +++ b/FSI.BT.Tools/Global/Utilities/Admin.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FSI.Lib.Helpers; + +namespace FSI.BT.Tools.Global.Utilities +{ + internal class Admin + { + public static bool CheckSuperAdminRight() + { + if (Vars.GlobalSettings.SuperAdmin == null) + { + return false; + } + + System.Security.Principal.WindowsIdentity windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent(); + + if (string.Equals(Lib.DeEncryptString.DeEncrypt.DecryptString(Lib.DeEncryptString.DeEncrypt.DecryptString(Vars.GlobalSettings.SuperAdmin, AppDomain.CurrentDomain.FriendlyName), AppDomain.CurrentDomain.FriendlyName), windowsIdentity.ShortName(), StringComparison.OrdinalIgnoreCase)) + return true; + + return false; + } + + public static bool CheckAdminRight() + { + if (Vars.GlobalSettings.Admins == null) + { + return false; + } + + List users = Vars.GlobalSettings.Admins.ToList(); + + System.Security.Principal.WindowsIdentity windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent(); + + foreach (var user in users) + { + if (string.Equals(Lib.DeEncryptString.DeEncrypt.DecryptString(user.Value, AppDomain.CurrentDomain.FriendlyName), windowsIdentity.ShortName(), StringComparison.OrdinalIgnoreCase)) + return true; + } + + return false; + } + + public static bool CheckUserRight() + { + if (Vars.GlobalSettings.Users == null) + { + return false; + } + + List users = Vars.GlobalSettings.Users.ToList(); + + System.Security.Principal.WindowsIdentity windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent(); + + foreach (var user in users) + { + if (string.Equals(Lib.DeEncryptString.DeEncrypt.DecryptString(user.Value, AppDomain.CurrentDomain.FriendlyName), windowsIdentity.ShortName(), StringComparison.OrdinalIgnoreCase)) + return true; + } + + return false; + } + } +} diff --git a/FSI.BT.Tools/Global/Utilities/AppRestart.cs b/FSI.BT.Tools/Global/Utilities/AppRestart.cs new file mode 100644 index 0000000..2712dde --- /dev/null +++ b/FSI.BT.Tools/Global/Utilities/AppRestart.cs @@ -0,0 +1,70 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.Utilities +{ + using System; + using System.ComponentModel; + using System.Diagnostics; + using System.Runtime.CompilerServices; + using System.Windows.Forms; + + internal class AppRestart + { + public static event Action BeforeRestarting; + + internal static void ByThreadException() + { + Restart(GetCurrentMethod()); + } + + internal static void ByAppContextMenu() + { + Restart(GetCurrentMethod()); + } + + internal static void ByConfigChange() + { + Restart(GetCurrentMethod()); + } + + internal static void ByMenuButton() + { + Restart(GetCurrentMethod()); + } + + private static void Restart(string reason) + { + BeforeRestarting?.Invoke(); + Log.Info($"Restart by '{reason}'"); + Log.Close(); + + using (Process p = new()) + { + string fileName = System.Environment.ProcessPath; + p.StartInfo = new ProcessStartInfo(fileName); + + try + { + p.Start(); + } + catch (Win32Exception ex) + { + Log.Warn("Restart failed", ex); + } + } + + Application.Exit(); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private static string GetCurrentMethod() + { + StackTrace st = new(); + StackFrame sf = st.GetFrame(1); + + return sf.GetMethod().Name; + } + } +} diff --git a/FSI.BT.Tools/Global/Utilities/ExtractEmbeddedZip.cs b/FSI.BT.Tools/Global/Utilities/ExtractEmbeddedZip.cs new file mode 100644 index 0000000..d67f9ec --- /dev/null +++ b/FSI.BT.Tools/Global/Utilities/ExtractEmbeddedZip.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.Global.Utilities +{ + internal static class ExtractEmbeddedZip + { + internal static void Extract(string zipName, string destPath) + { + System.IO.Directory.CreateDirectory(destPath); // Erstellt alle fehlenden Verzeichnisse + using Stream _pluginZipResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(zipName); + using ZipArchive zip = new(_pluginZipResourceStream); + zip.ExtractToDirectory(destPath, true); + Vars.Log.Info("Externes Tool \"{0}\" wurde in das Verzeichnis \"{1}\" entpackt", zipName, destPath); + } + + } +} diff --git a/FSI.BT.Tools/Global/Utilities/Log.cs b/FSI.BT.Tools/Global/Utilities/Log.cs new file mode 100644 index 0000000..457785d --- /dev/null +++ b/FSI.BT.Tools/Global/Utilities/Log.cs @@ -0,0 +1,199 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.Utilities +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.Diagnostics; + using System.IO; + using System.Reflection; + using System.Threading; + using System.Windows.Forms; + using Clearcove.Logging; + + internal static class Log + { + private const string LogfileLastExtension = "_last"; + private static readonly Logger LogValue = new(string.Empty); + private static readonly List Warnings = new(); + private static readonly List Infos = new(); + + internal static void Initialize() + { + bool warnFailedToSaveLogFile = false; + Exception exceptionWarnFailedToSaveLogFile = new(); + if (Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory) + { + try + { + string fileNameToCheckWriteAccess = "CheckWriteAccess"; + File.WriteAllText(fileNameToCheckWriteAccess, fileNameToCheckWriteAccess); + File.Delete(fileNameToCheckWriteAccess); + } + catch (Exception ex) + { + Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory = false; + warnFailedToSaveLogFile = true; + exceptionWarnFailedToSaveLogFile = ex; + } + } + + bool warnCanNotClearLogfile = false; + Exception exceptionWarnCanNotClearLogfile = new(); + string fileNamePath = GetLogFilePath(); + FileInfo fileInfo = new(fileNamePath); + string fileNamePathLast = string.Empty; + if (fileInfo.Exists && fileInfo.Length > 2000000) + { + fileNamePathLast = GetLogFilePath(LogfileLastExtension); + + try + { + File.Delete(fileNamePathLast); + File.Move(fileNamePath, fileNamePathLast); + } + catch (Exception ex) + { + warnCanNotClearLogfile = true; + exceptionWarnCanNotClearLogfile = ex; + } + } + + Logger.Start(fileInfo); + + if (warnFailedToSaveLogFile) + { + Warn($"Failed to save log file in application folder {GetLogFilePath()}", exceptionWarnFailedToSaveLogFile); + } + + if (warnCanNotClearLogfile) + { + Warn($"Can not clear logfile:'{fileNamePathLast}'", exceptionWarnCanNotClearLogfile); + } + } + + internal static void Info(string message) + { + if (!Infos.Contains(message)) + { + Infos.Add(message); + LogValue.Info(message); + } + } + + internal static void Warn(string message, Exception ex) + { + string warning = $"{message} {ex.ToString().Replace(Environment.NewLine, " ", StringComparison.InvariantCulture)}"; + if (!Warnings.Contains(warning)) + { + Warnings.Add(warning); + LogValue.Warn(warning); + } + } + + internal static void Error(string message, Exception ex) + { + LogValue.Error($"{message}{Environment.NewLine}" + + $"{ex}"); + } + + internal static string GetLogFilePath(string backup = "") + { + string logFilePath = string.Empty; + if (!Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory) + { + logFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), $"FSI.BT.Tools.SystemTrayMenu"); + } + + return Path.Combine(logFilePath, $"log-{Environment.MachineName}{backup}.txt"); + } + + internal static void OpenLogFile() + { + string lastLogfile = GetLogFilePath(LogfileLastExtension); + if (File.Exists(lastLogfile)) + { + ProcessStart(lastLogfile); + } + + ProcessStart(GetLogFilePath()); + } + + internal static void WriteApplicationRuns() + { + Assembly assembly = Assembly.GetExecutingAssembly(); + LogValue.Info($"Application Start " + + assembly.ManifestModule.Name + " | " + + assembly.GetName().Version.ToString() + " | " + + $"ScalingFactor={Scaling.Factor}"); + } + + internal static void Close() + { + try + { + Logger.ShutDown(); + } + catch (Exception ex) + { + Global.Vars.SystemTrayMenuSettings.SaveLogFileInApplicationDirectory = false; + Warn($"Failed to save log file in application folder {GetLogFilePath()}", ex); + } + } + + internal static void ProcessStart( + string fileName, + string arguments = "", + bool doubleQuoteArg = false, + string workingDirectory = "", + bool createNoWindow = false, + string resolvedPath = "") + { + if (doubleQuoteArg && !string.IsNullOrEmpty(arguments)) + { + arguments = "\"" + arguments + "\""; + } + + try + { + using Process p = new() + { + StartInfo = new ProcessStartInfo(fileName) + { + FileName = fileName, + Arguments = arguments, + WorkingDirectory = workingDirectory, + CreateNoWindow = createNoWindow, + UseShellExecute = true, + }, + }; + p.Start(); + } + catch (Win32Exception ex) + { + Warn($"fileName:'{fileName}' arguments:'{arguments}'", ex); + + if ((ex.NativeErrorCode == 2 || ex.NativeErrorCode == 1223) && + (string.IsNullOrEmpty(resolvedPath) || !File.Exists(resolvedPath))) + { + new Thread(ShowProblemWithShortcut).Start(); + static void ShowProblemWithShortcut() + { + _ = MessageBox.Show( + Global.Utilities.Translator.GetText("The item that this shortcut refers to has been changed or moved, so this shortcut will no longer work properly."), + Global.Utilities.Translator.GetText("Problem with shortcut link"), + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + } + } + } + catch (Exception ex) + { + Warn($"fileName:'{fileName}' arguments:'{arguments}'", ex); + } + } + } +} diff --git a/FSI.BT.Tools/Global/Utilities/Scaling.cs b/FSI.BT.Tools/Global/Utilities/Scaling.cs new file mode 100644 index 0000000..c6ac935 --- /dev/null +++ b/FSI.BT.Tools/Global/Utilities/Scaling.cs @@ -0,0 +1,31 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.Utilities +{ + using System; + using System.Drawing; + + internal static class Scaling + { + public static float Factor { get; private set; } = 1; + + public static float FactorByDpi { get; private set; } = 1; + + public static void Initialize() + { + Factor = Global.Vars.SystemTrayMenuSettings.SizeInPercent / 100f; + } + + public static int Scale(int width) + { + return (int)Math.Round(width * Factor, 0, MidpointRounding.AwayFromZero); + } + + public static void CalculateFactorByDpi(Graphics graphics) + { + FactorByDpi = graphics.DpiX / 96; + } + } +} diff --git a/FSI.BT.Tools/Global/Utilities/Translator.cs b/FSI.BT.Tools/Global/Utilities/Translator.cs new file mode 100644 index 0000000..adbf403 --- /dev/null +++ b/FSI.BT.Tools/Global/Utilities/Translator.cs @@ -0,0 +1,36 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.Global.Utilities +{ + using System.Globalization; + using System.Resources; + using FSI.BT.Tools.SystemTrayMenu.UserInterface; + + internal static class Translator + { + private static CultureInfo culture; + + internal static void Initialize() + { + if (string.IsNullOrEmpty( + Vars.SystemTrayMenuSettings.CurrentCultureInfoName)) + { + Vars.SystemTrayMenuSettings.CurrentCultureInfoName = "de"; + //Global.Vars.SystemTrayMenuSettings.Save(); + } + + culture = CultureInfo.CreateSpecificCulture( + Vars.SystemTrayMenuSettings.CurrentCultureInfoName); + } + + internal static string GetText(string id) + { + ResourceManager rm = new( + "FSI.BT.Tools.Global.Resources.Languages.lang", + typeof(Menu).Assembly); + return rm.GetString(id, culture); + } + } +} diff --git a/FSI.BT.Tools/NotifyIconResources.xaml b/FSI.BT.Tools/NotifyIconResources.xaml deleted file mode 100644 index e728892..0000000 --- a/FSI.BT.Tools/NotifyIconResources.xaml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/FSI.BT.Tools/Program.cs b/FSI.BT.Tools/Program.cs new file mode 100644 index 0000000..1686d92 --- /dev/null +++ b/FSI.BT.Tools/Program.cs @@ -0,0 +1,207 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools +{ + using System; + using System.Drawing; + using System.IO; + using System.IO.Compression; + using System.Reflection; + using System.Windows.Forms; + using System.Windows.Input; + using Config.Net; + using Config.Net.Stores; + using FSI.BT.Tools.Global.Utilities; + using FSI.BT.Tools.SystemTrayMenu; + using FSI.BT.Tools.SystemTrayMenu.Utilities; + using Tulpep.NotificationWindow; + + internal static class Program + { + private static bool isStartup = true; + + public static void CopyStream(Stream input, Stream output) + { + // Insert null checking here for production + byte[] buffer = new byte[8192]; + + int bytesRead; + while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer, 0, bytesRead); + } + } + + [STAThread] + private static void Main(string[] args) + { + + // Json-Files, die kopiert werden sollen + string[] jsonFiles = { + "FSI.BT.Tools.Global.json", + "FSI.BT.Tools.RadialMenu.json", + "FSI.BT.Tools.SystemTrayMenu.json", + "FSI.BT.Tools.TimeStamp.json", + }; + + // Zielpfad zusammenstellen (aktuelles User-Verzeichnis + FSI.BT.Tools) + var jsonPath = Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\OneDrive - Fondium Group GmbH\\.FSI.BT.Tools"); + + // alle json-Files Durchlaufen und ins Userverzeichnis speichern + foreach (string jsonFile in jsonFiles) + { + Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(jsonFile); + + try + { + FileStream fileStream = new FileStream(Path.Combine(jsonPath.FullName, jsonFile.Replace("FSI.BT.Tools.", string.Empty)), FileMode.CreateNew); + for (int i = 0; i < stream.Length; i++) + fileStream.WriteByte((byte)stream.ReadByte()); + fileStream.Close(); + } + catch (Exception ex) + { + Global.Vars.Log.Error(ex.Message); + } + } + + + string[] externalTools = + { + "FSI.BT.Tools.ExtTools.kalk.zip", + "FSI.BT.Tools.ExtTools.AudioSwitch.zip", + "FSI.BT.Tools.ExtTools.SmartSystemMenu_v2.21.2.zip", + }; + + try + { + foreach (var externalTool in externalTools) + { + ExtractEmbeddedZip.Extract(externalTool, Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\ExtTools\\"); + } + } + catch (Exception ex) + { + Global.Vars.Log.Error(ex.Message); + } + + try + { + // Einstellungen Global + JsonConfigStore _storeGlobal = new(Path.Combine(jsonPath.FullName, jsonFiles[0].Replace("FSI.BT.Tools.", String.Empty)), true); + Global.Vars.GlobalSettings = new ConfigurationBuilder() + .UseConfigStore(_storeGlobal) + .Build(); + + // Einstellungen für Radial-Menü + JsonConfigStore _storeRadialMenu = new(Path.Combine(jsonPath.FullName, jsonFiles[1].Replace("FSI.BT.Tools.", String.Empty)), true); + Global.Vars.RadialMenuSettings = new ConfigurationBuilder() + .UseConfigStore(_storeRadialMenu) + .Build(); + + // Einstellungen für System-Tray-Menü + JsonConfigStore _storeSystemTrayMenu = new(Path.Combine(jsonPath.FullName, jsonFiles[2].Replace("FSI.BT.Tools.", String.Empty)), true); + Global.Vars.SystemTrayMenuSettings = new ConfigurationBuilder() + .UseConfigStore(_storeSystemTrayMenu) + .Build(); + + // Einstellungen für Zeitstempel in Zwischenablage kopieren + JsonConfigStore _storeTimeStamp = new(Path.Combine(jsonPath.FullName, jsonFiles[3].Replace("FSI.BT.Tools.", String.Empty)), true); + Global.Vars.TimeStampSettings = new ConfigurationBuilder() + .UseConfigStore(_storeTimeStamp) + .Build(); + + + Global.Vars.UserRights = Admin.CheckUserRight(); + Global.Vars.AdminRights = Admin.CheckAdminRight(); + Global.Vars.SuperAdminRights = Admin.CheckSuperAdminRight(); + + Log.Initialize(); + Translator.Initialize(); + Config.SetFolderByWindowsContextMenu(args); + Config.LoadOrSetByUser(); + Config.Initialize(); + + if (SingleAppInstance.Initialize()) + { + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.ThreadException += Application_ThreadException; + Scaling.Initialize(); + FolderOptions.Initialize(); + + using (new ClipboardMgt.App()) + { + isStartup = false; + } + + using (new TimeStampToClipboard.App()) + { + isStartup = false; + } + + using (new FSI.BT.Tools.RadialMenu.App()) + { + isStartup = false; + } + + using (new FSI.BT.Tools.SystemTrayMenu.App()) + { + isStartup = false; + Log.WriteApplicationRuns(); + Application.Run(); + } + } + + + + Application.ThreadException -= Application_ThreadException; + Config.Dispose(); + } + catch (Exception ex) + { + AskUserSendError(ex); + } + finally + { + Log.Close(); + } + } + + + private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) + { + AskUserSendError(e.Exception); + } + + private static void AskUserSendError(Exception ex) + { + Log.Error("Application Crashed", ex); + + DialogResult dialogResult = MessageBox.Show( + "A problem has been encountered and the application needs to restart. " + + "Reporting this error will help us make our product better. " + + "Press 'Yes' to open your standard email app (emailto: Markus@Hofknecht.eu). " + Environment.NewLine + + @"You can also create an issue manually here https://github.com/Hofknecht/SystemTrayMenu/issues" + Environment.NewLine + + "Press 'Cancel' to quit SystemTrayMenu.", + "SystemTrayMenu Crashed", + MessageBoxButtons.YesNoCancel); + + if (dialogResult == DialogResult.Yes) + { + Log.ProcessStart("mailto:" + "markus@hofknecht.eu" + + "?subject=SystemTrayMenu Bug reported " + + Assembly.GetEntryAssembly().GetName().Version + + "&body=" + ex.ToString()); + } + + if (!isStartup && dialogResult != DialogResult.Cancel) + { + AppRestart.ByThreadException(); + } + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/Properties/AssemblyInfo.cs b/FSI.BT.Tools/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2c3081a --- /dev/null +++ b/FSI.BT.Tools/Properties/AssemblyInfo.cs @@ -0,0 +1,43 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +using System.Reflection; +using System.Resources; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FSI.BT.Tools")] +[assembly: AssemblyDescription("FSI.BT.Tools")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("FSI")] +[assembly: AssemblyProduct("FSI FSI.BT.Tools.SystemTrayMenu")] +[assembly: AssemblyCopyright("Copyright © 2023, FSI FSI.BT.Tools.SystemTrayMenu")] +[assembly: AssemblyTrademark("FSI")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("116c8741-a9b0-4560-8e82-7cf412894340")] + + +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("3.0.0.0")] +[assembly: AssemblyFileVersion("3.0.0.0")] diff --git a/FSI.BT.Tools/RadialMenu.json b/FSI.BT.Tools/RadialMenu.json new file mode 100644 index 0000000..8ddc31d --- /dev/null +++ b/FSI.BT.Tools/RadialMenu.json @@ -0,0 +1,4 @@ +{ + "HotKey": "Ctrl+Y" +} + diff --git a/FSI.BT.Tools/RadialMenu/Buisness/App.cs b/FSI.BT.Tools/RadialMenu/Buisness/App.cs new file mode 100644 index 0000000..192a7b7 --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/Buisness/App.cs @@ -0,0 +1,34 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// +namespace FSI.BT.Tools.RadialMenu +{ + using System; + using Microsoft.Win32; + using FSI.BT.Tools.Global.Utilities; + using FSI.BT.Tools.RadialMenu.Business; + + /// + /// App contains the notifyicon, the taskbarform and the menus. + /// + internal class App : IDisposable + { + private readonly Main menus = new(); + + public App() + { + AppRestart.BeforeRestarting += Dispose; + SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; + } + + public void Dispose() + { + + } + + private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/RadialMenu/Buisness/KeyboardInput.cs b/FSI.BT.Tools/RadialMenu/Buisness/KeyboardInput.cs new file mode 100644 index 0000000..b2cd10d --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/Buisness/KeyboardInput.cs @@ -0,0 +1,59 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.RadialMenu.Handler +{ + using FSI.BT.Tools.RadialMenu.Helper; + using System; + using System.Drawing; + using System.Globalization; + using System.Linq; + using System.Windows.Forms; + + + internal class KeyboardInput : IDisposable + { + + private readonly KeyboardHook hook = new(); + + + + public KeyboardInput() + { + } + + public event Action HotKeyPressed; + + + + public void Dispose() + { + hook.KeyPressed -= Hook_KeyPressed; + hook.Dispose(); + } + + public void RegisterHotKey() + { + if (!string.IsNullOrEmpty(Global.Vars.RadialMenuSettings.HotKey)) + { + try + { + hook.RegisterHotKey(); + hook.KeyPressed += Hook_KeyPressed; + } + catch (InvalidOperationException ex) + { + //Log.Warn($"key:'{Properties.Settings.Default.HotKey}'", ex); + Global.Vars.RadialMenuSettings.HotKey = string.Empty; + //Properties.Settings.Default.Save(); + } + } + } + + private void Hook_KeyPressed(object sender, KeyPressedEventArgs e) + { + HotKeyPressed?.Invoke(); + } + } +} \ No newline at end of file diff --git a/FSI.BT.Tools/RadialMenu/Buisness/Main.cs b/FSI.BT.Tools/RadialMenu/Buisness/Main.cs new file mode 100644 index 0000000..3b16ab8 --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/Buisness/Main.cs @@ -0,0 +1,59 @@ +namespace FSI.BT.Tools.RadialMenu.Business +{ + using System; + using System.Threading; + using System.Windows; + using FSI.BT.Tools.RadialMenu.Handler; + using FSI.Lib.Wpf.ExtensionMethods; + + internal class Main : IDisposable + { + + private readonly KeyboardInput keyboardInput; + private UserInterface.FrmRadialMenu frmRadialMenu; + public Main() + { + keyboardInput = new(); + keyboardInput.RegisterHotKey(); + keyboardInput.HotKeyPressed += KeyboardInput_HotKeyPressed; + + frmRadialMenu = new UserInterface.FrmRadialMenu(); + + } + + public void Dispose() + { + keyboardInput.HotKeyPressed -= KeyboardInput_HotKeyPressed; + keyboardInput.Dispose(); + } + + private void KeyboardInput_HotKeyPressed() + { + + + Thread thread = new(() => + { + UserInterface.FrmRadialMenu frmRadialMenu = new(); + + if (Global.Vars.UserRights || Global.Vars.AdminRights) + { + if (frmRadialMenu.Visibility == Visibility.Collapsed) + { + frmRadialMenu.ShowCenteredToMouse(); + frmRadialMenu.ActivateCenteredToMouse(); + + } + + frmRadialMenu.Closed += (sender2, e2) => frmRadialMenu.Dispatcher.InvokeShutdown(); + + System.Windows.Threading.Dispatcher.Run(); + } + }); + + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + } + + + } +} diff --git a/FSI.BT.Tools/RadialMenu/Buisness/MainViewModel.cs b/FSI.BT.Tools/RadialMenu/Buisness/MainViewModel.cs new file mode 100644 index 0000000..d554656 --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/Buisness/MainViewModel.cs @@ -0,0 +1,443 @@ +using FSI.BT.Tools.Global.Helpers; +using FSI.BT.Tools.RadialMenu.Provider; +using FSI.Lib.MVVM; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Windows; +using System.Windows.Input; + +namespace FSI.BT.Tools.RadialMenu +{ + public class MainViewModel : ViewModelBase + { + public MainViewModel(Window win, List cmds) + { + _window = win; + _window.Deactivated += _window_Deactivated; + _isOpenHome = true; + + Cmds = new(); + + if (cmds != null) + { + foreach (string cmd in cmds) + Cmds.Add(cmd); + } + + Provider = new(ref _cmds); + } + + + private ObservableCollection _cmds; + + public ObservableCollection Cmds + { + get { return _cmds; } + set + { + _cmds = value; + OnPropertyChanged(); + } + } + + private CmdProvider _cmdProvider; + + public CmdProvider Provider + { + get { return _cmdProvider; } + set { _cmdProvider = value; } + } + + + private string _cmd; + + public string Cmd + { + get { return _cmd; } + set + { + _cmd = value; + OnPropertyChanged(); + } + } + + + private Window _window; + + public Window Window + { + get { return _window; } + set { _window = value; } + } + + #region Home + private bool _isOpenHome = true; + public bool IsOpenHome + { + get + { + return _isOpenHome; + } + set + { + _isOpenHome = value; + OnPropertyChanged(); + } + } + + public ICommand CloseRadialMenuHome + { + get + { + return new RelayCommand(() => _window.Visibility = Visibility.Hidden); + } + } + + public ICommand OpenRadialMenuHome + { + get + { + return new RelayCommand(() => + { + IsOpenHome = true; + IsOpenEpl = + IsOpenTools = + IsOpenSie = + IsOpenApps = + IsOpenPlantLinksPl1 = + IsOpenPlantLinksPl2 = + IsOpenPlantLinksPl3 = + IsOpenAppsVncRdp = + IsOpenLinks = false; + }); + } + } + #endregion + + #region Epl + + private bool _isOpenEpl = false; + public bool IsOpenEpl + { + get + { + return _isOpenEpl; + } + set + { + _isOpenEpl = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuEpl + { + get + { + return new RelayCommand(() => + { + IsOpenEpl = true; + IsOpenHome = false; + }); + } + } + + #endregion + + #region Tools + + private bool _isOpenTools = false; + public bool IsOpenTools + { + get + { + return _isOpenTools; + } + set + { + _isOpenTools = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuTools + { + get + { + return new RelayCommand(() => + { + IsOpenTools = true; + IsOpenHome = false; + }); + } + } + + #endregion + + #region Siemens + + private bool _isOpenSie = false; + public bool IsOpenSie + { + get + { + return _isOpenSie; + } + set + { + _isOpenSie = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuSie + { + get + { + return new RelayCommand(() => + { + IsOpenSie = true; + IsOpenHome = false; + }); + } + } + + #endregion + + #region Links + + private bool _isOpenLinks = false; + public bool IsOpenLinks + { + get + { + return _isOpenLinks; + } + set + { + _isOpenLinks = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuLinks + { + get + { + return new RelayCommand(() => + { + IsOpenLinks = true; + IsOpenPlantLinks = + IsOpenHome = false; + }); + } + } + + #endregion + + #region Anlagen Links + + private bool _isOpenPlantLinks = false; + public bool IsOpenPlantLinks + { + get + { + return _isOpenPlantLinks; + } + set + { + _isOpenPlantLinks = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuPlantLinks + { + get + { + return new RelayCommand(() => + { + IsOpenPlantLinks = true; + IsOpenPlantLinksPl1 = + IsOpenPlantLinksPl2 = + IsOpenPlantLinksPl3 = + IsOpenLinks = false; + }); + } + } + + #endregion + + #region Anlagen Links Pl1 + + private bool _isOpenPlantLinksPl1 = false; + public bool IsOpenPlantLinksPl1 + { + get + { + return _isOpenPlantLinksPl1; + } + set + { + _isOpenPlantLinksPl1 = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuPlantLinksPl1 + { + get + { + return new RelayCommand(() => + { + IsOpenPlantLinksPl1 = true; + IsOpenPlantLinks = false; + + }); + } + } + + #endregion + + #region Anlagen Links Pl2 + + private bool _isOpenPlantLinksPl2 = false; + public bool IsOpenPlantLinksPl2 + { + get + { + return _isOpenPlantLinksPl2; + } + set + { + _isOpenPlantLinksPl2 = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuPlantLinksPl2 + { + get + { + return new RelayCommand(() => + { + IsOpenPlantLinksPl2 = true; + IsOpenPlantLinks = false; + + }); + } + } + + #endregion + + #region Anlagen Links Pl3 + + private bool _isOpenPlantLinksPl3 = false; + public bool IsOpenPlantLinksPl3 + { + get + { + return _isOpenPlantLinksPl3; + } + set + { + _isOpenPlantLinksPl3 = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuPlantLinksPl3 + { + get + { + return new RelayCommand(() => + { + IsOpenPlantLinksPl3 = true; + IsOpenPlantLinks = false; + + }); + } + } + + #endregion + + #region Apps + + private bool _isOpenApps = false; + public bool IsOpenApps + { + get + { + return _isOpenApps; + } + set + { + _isOpenApps = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuApps + { + get + { + return new RelayCommand(() => + { + IsOpenApps = true; + IsOpenAppsVncRdp = + IsOpenHome = false; + }); + } + } + + #endregion + + #region Apps RDP VNC + + private bool _isOpenAppsVncRdp = false; + public bool IsOpenAppsVncRdp + { + get + { + return _isOpenAppsVncRdp; + } + set + { + _isOpenAppsVncRdp = value; + OnPropertyChanged(); + } + } + + public ICommand OpenRadialMenuAppsVncRdp + { + get + { + return new RelayCommand(() => + { + IsOpenAppsVncRdp = true; + IsOpenApps = false; + }); + } + } + + #endregion + + private void _window_Deactivated(object sender, EventArgs e) + { + _window.Visibility = Visibility.Hidden; + + IsOpenHome = true; + IsOpenEpl = + IsOpenTools = + IsOpenSie = + IsOpenLinks = + IsOpenApps = + IsOpenPlantLinksPl1 = + IsOpenPlantLinksPl2 = + IsOpenPlantLinksPl3 = + IsOpenAppsVncRdp = + IsOpenPlantLinks = false; + } + } +} diff --git a/FSI.BT.Tools/RadialMenu/Helpers/KeyPressedEventArgs.cs b/FSI.BT.Tools/RadialMenu/Helpers/KeyPressedEventArgs.cs new file mode 100644 index 0000000..da2f06b --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/Helpers/KeyPressedEventArgs.cs @@ -0,0 +1,27 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.RadialMenu.Helper +{ + using System; + using System.Windows.Forms; + + /// + /// Event Args for the event that is fired after the hot key has been pressed. + /// + internal class KeyPressedEventArgs : EventArgs + { + private readonly Keys key; + + internal KeyPressedEventArgs(KeyboardHookModifierKeys modifier, Keys key) + { + Modifier = modifier; + this.key = key; + } + + internal KeyboardHookModifierKeys Modifier { get; } + + internal Keys Key => key; + } +} diff --git a/FSI.BT.Tools/RadialMenu/Helpers/KeyboardHook.cs b/FSI.BT.Tools/RadialMenu/Helpers/KeyboardHook.cs new file mode 100644 index 0000000..94e9a36 --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/Helpers/KeyboardHook.cs @@ -0,0 +1,166 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace FSI.BT.Tools.RadialMenu.Helper +{ + using System; + using System.Windows.Forms; + using FSI.BT.Tools.Global.DllImports; + using FSI.BT.Tools.Global.UserInterface.HotkeyTextboxControl; + + /// + /// The enumeration of possible modifiers. + /// + [Flags] + public enum KeyboardHookModifierKeys : uint + { + None = 0, + Alt = 1, + Control = 2, + Shift = 4, + Win = 8, + } + + public sealed class KeyboardHook : IDisposable + { + private readonly Window window = new(); + private int currentId; + + public KeyboardHook() + { + // register the event of the inner native window. + window.KeyPressed += Window_KeyPressed; + } + + /// + /// A hot key has been pressed. + /// + internal event EventHandler KeyPressed; + + public void Dispose() + { + // unregister all the registered hot keys. + for (int i = currentId; i > 0; i--) + { + NativeMethods.User32UnregisterHotKey(window.Handle, i); + } + + // dispose the inner native window. + window.KeyPressed -= Window_KeyPressed; + window.Dispose(); + } + + /// + /// Registers a hot key in the system. + /// + /// The key itself that is associated with the hot key. + internal void RegisterHotKey(Keys key) + { + uint keyModifiersNone = 0; + RegisterHotKey(keyModifiersNone, key); + } + + internal void RegisterHotKey() + { + KeyboardHookModifierKeys modifiers = KeyboardHookModifierKeys.None; + string modifiersString = Global.Vars.RadialMenuSettings.HotKey; + if (!string.IsNullOrEmpty(modifiersString)) + { + if (modifiersString.ToUpperInvariant().Contains("ALT", StringComparison.InvariantCulture)) + { + modifiers |= KeyboardHookModifierKeys.Alt; + } + + if (modifiersString.ToUpperInvariant().Contains("CTRL", StringComparison.InvariantCulture) || + modifiersString.ToUpperInvariant().Contains("STRG", StringComparison.InvariantCulture)) + { + modifiers |= KeyboardHookModifierKeys.Control; + } + + if (modifiersString.ToUpperInvariant().Contains("SHIFT", StringComparison.InvariantCulture)) + { + modifiers |= KeyboardHookModifierKeys.Shift; + } + + if (modifiersString.ToUpperInvariant().Contains("WIN", StringComparison.InvariantCulture)) + { + modifiers |= KeyboardHookModifierKeys.Win; + } + } + + RegisterHotKey( + modifiers, + HotkeyControl.HotkeyFromString( + Global.Vars.RadialMenuSettings.HotKey)); + } + + /// + /// Registers a hot key in the system. + /// + /// The modifiers that are associated with the hot key. + /// The key itself that is associated with the hot key. + internal void RegisterHotKey(KeyboardHookModifierKeys modifier, Keys key) + { + RegisterHotKey((uint)modifier, key); + } + + private void Window_KeyPressed(object sender, KeyPressedEventArgs e) + { + KeyPressed?.Invoke(this, e); + } + + private void RegisterHotKey(uint modifier, Keys key) + { + currentId += 1; + + if (!NativeMethods.User32RegisterHotKey( + window.Handle, currentId, modifier, (uint)key)) + { + throw new InvalidOperationException( + Global.Utilities.Translator.GetText("Could not register the hot key.")); + } + } + + /// + /// Represents the window that is used internally to get the messages. + /// + private class Window : NativeWindow, IDisposable + { + private const int WmHotkey = 0x0312; + + public Window() + { + // create the handle for the window. + CreateHandle(new CreateParams()); + } + + public event EventHandler KeyPressed; + + public void Dispose() + { + DestroyHandle(); + } + + /// + /// Overridden to get the notifications. + /// + /// m. + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + + // check if we got a hot key pressed. + if (m.Msg == WmHotkey) + { + // get the keys. + Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF); + KeyboardHookModifierKeys modifier = (KeyboardHookModifierKeys)((int)m.LParam & 0xFFFF); + + // invoke the event to notify the parent. + KeyPressed?.Invoke(this, new KeyPressedEventArgs(modifier, key)); + } + } + } + } +} diff --git a/FSI.BT.Tools/RadialMenu/Provider/CmdProvider.cs b/FSI.BT.Tools/RadialMenu/Provider/CmdProvider.cs new file mode 100644 index 0000000..7e15fc1 --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/Provider/CmdProvider.cs @@ -0,0 +1,26 @@ +using AutoCompleteTextBox.Editors; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.RadialMenu.Provider +{ + public class CmdProvider : ISuggestionProvider + { + private readonly ObservableCollection _cmds; + + public IEnumerable GetSuggestions(string filter) + { + return _cmds.Where(x => x.StartsWith(filter, StringComparison.InvariantCultureIgnoreCase)); + } + + public CmdProvider(ref ObservableCollection cmds) + { + this._cmds = cmds; + } + } +} diff --git a/FSI.BT.Tools/RadialMenu/Settings/IInterface.cs b/FSI.BT.Tools/RadialMenu/Settings/IInterface.cs new file mode 100644 index 0000000..4662a70 --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/Settings/IInterface.cs @@ -0,0 +1,19 @@ +using Config.Net; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FSI.BT.Tools.RadialMenu.Settings +{ + public class Interface + { + public interface IInterface + { + [Option(DefaultValue = "Ctrl+RWin")] + string HotKey { get; set; } + + } + } +} diff --git a/FSI.BT.Tools/Gui/FrmAdmin.xaml b/FSI.BT.Tools/RadialMenu/UserInterface/FrmAdmin.xaml similarity index 92% rename from FSI.BT.Tools/Gui/FrmAdmin.xaml rename to FSI.BT.Tools/RadialMenu/UserInterface/FrmAdmin.xaml index ee7dd1a..67d2f20 100644 --- a/FSI.BT.Tools/Gui/FrmAdmin.xaml +++ b/FSI.BT.Tools/RadialMenu/UserInterface/FrmAdmin.xaml @@ -1,9 +1,9 @@ - /// Interaktionslogik für FrmAdmin.xaml @@ -30,8 +30,13 @@ namespace FSI.BT.Tools.Gui private void btnOk_Click(object sender, RoutedEventArgs e) { +#if NET472 + Admins = tbAdmins.Text.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); + Users = tbUsers.Text.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); +#elif NET6_0 Admins = tbAdmins.Text.Split(Environment.NewLine); Users = tbUsers.Text.Split(Environment.NewLine); +#endif DialogResult = true; Close(); } diff --git a/FSI.BT.Tools/RadialMenu/UserInterface/FrmProcesses.xaml b/FSI.BT.Tools/RadialMenu/UserInterface/FrmProcesses.xaml new file mode 100644 index 0000000..5698968 --- /dev/null +++ b/FSI.BT.Tools/RadialMenu/UserInterface/FrmProcesses.xaml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +