26 Commits

Author SHA1 Message Date
34006ba1e9 Merge branch 'release-2.0.0-alpha.5' 2015-08-04 02:46:21 +02:00
204139d16b Prepare release 2.0.0-alpha.5. 2015-08-04 02:46:12 +02:00
41b155e8be Begin implemenation of format and choose style commands. 2015-08-04 02:43:17 +02:00
b6209731ec Fix salutation regex in DanielsStyle.
- FIX: Daniels Spezial löscht nicht mehr die Unterschriften.
2015-08-04 01:19:19 +02:00
a128b76522 Implement tests for SettingsViewModel add and add child commands. 2015-08-04 01:17:14 +02:00
805da69d47 Implement passing test for ElementPickerViewModel. 2015-08-03 14:31:35 +02:00
8437f0907c Implement Demo feature.
- NEU: Eingebautes Demo-Dokument zum Ausprobieren.
2015-08-03 12:11:30 +02:00
db8f88c563 Fix SettingsViewModelTest.CannotAddChildElementToFormatElement. 2015-08-03 06:32:05 +02:00
14b09f89c5 Merge branch 'release-2.0.0-alpha.4' into develop 2015-08-02 22:05:39 +02:00
305baf2402 Merge branch 'release-2.0.0-alpha.4' 2015-08-02 22:05:08 +02:00
e4edd0f197 Prepare release 2.0.0-alpha.4. 2015-08-02 22:04:58 +02:00
23acb13019 Improve Daniel's style. 2015-08-02 22:01:51 +02:00
1e4c3681f2 Implement ElementPickerViewModel; initial SettingsViewModelTest. 2015-08-02 21:51:58 +02:00
9fd0907310 Implement unique IDs for settings. 2015-08-02 07:19:12 +02:00
286ddb1641 Fix cloning of SettingsViewModels. 2015-08-02 07:11:16 +02:00
d0be7524d3 Make some classes ICloneable; implement SettingsRepositoryViewModel. 2015-08-01 21:23:56 +02:00
5197c294b9 Merge branch 'release-2.0.0-alpha.3' into develop 2015-07-31 17:24:28 +02:00
088422b8a1 Merge branch 'release-2.0.0-alpha.3' 2015-07-31 17:23:51 +02:00
09b3decd03 Prepare release 2.0.0-alpha.3 2015-07-31 17:23:41 +02:00
12cd58180f Create rudimentary view models, default settings. 2015-07-31 17:19:49 +02:00
a725246f27 Use large ribbon buttons rather than splitbutton. 2015-07-28 18:19:54 +02:00
f2e75b1abe Put license into About view; adjust install license file. 2015-07-28 18:16:39 +02:00
4bae35b665 Check for updates at startup.
- FIX: Beim Start wird jetzt nach Updates gesucht.
2015-07-28 13:25:17 +02:00
4d614e0be5 Fix versioninfo.txt. 2015-07-28 13:24:41 +02:00
4ca9e21e80 Fix versioninfo.txt for alpha.2. 2015-07-28 12:07:22 +02:00
cf1b75e6a0 Merge branch 'release-2.0.0-alpha.2' into develop 2015-07-28 12:05:00 +02:00
43 changed files with 2357 additions and 423 deletions

View File

@ -1,3 +1,21 @@
Version 2.0.0-alpha.5 (2015-08-04)
========================================================================
- FIX: Daniels Spezial löscht nicht mehr die Unterschriften.
- NEU: Eingebautes Demo-Dokument zum Ausprobieren.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Version 2.0.0-alpha.3 (2015-07-31)
========================================================================
- FIX: Beim Start wird jetzt nach Updates gesucht.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Version 2.0.0-alpha.2 (2015-07-28)
========================================================================

View File

@ -49,12 +49,12 @@ namespace Tests.Controller
Settings s = new Settings();
string testName = "test";
s.Name = testName;
sr.Settings.Add(s);
sr.SettingsList.Add(s);
sr.Store();
sr = null;
sr = SettingsRepository.Load();
Assert.AreEqual(1, sr.Settings.Count);
Assert.AreEqual(testName, sr.Settings[0].Name);
Assert.AreEqual(1, sr.SettingsList.Count);
Assert.AreEqual(testName, sr.SettingsList[0].Name);
}
}
}

View File

@ -41,6 +41,10 @@
<AssemblyOriginatorKeyFile>zaaReloaded2.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="Bovender, Version=0.2.0.0, Culture=neutral, PublicKeyToken=df1c15557d8b6df8, processorArchitecture=MSIL">
<HintPath>..\packages\Bovender.0.2.0.0\lib\net40\Bovender.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
@ -48,10 +52,18 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Expression.Blend.Sdk.1.0.2\lib\net40-client\System.Windows.Interactivity.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Xaml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<Choose>
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
@ -79,6 +91,9 @@
<Compile Include="Thesaurus\TestThesaurus.cs" />
<Compile Include="Importer\ZaaImporter\TimePointTest.cs" />
<Compile Include="TestHelpers.cs" />
<Compile Include="ViewModels\ElementPickerViewModelTest.cs" />
<Compile Include="ViewModels\SettingsRepositoryViewModelTest.cs" />
<Compile Include="ViewModels\SettingsViewModelTest.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />

View File

@ -0,0 +1,54 @@
/* ElementPickerViewModelTest.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Bovender.Mvvm.ViewModels;
using zaaReloaded2.ViewModels;
namespace Tests.ViewModels
{
[TestFixture]
class ElementPickerViewModelTest
{
[Test]
public void ChooseElement()
{
ElementPickerViewModel vm = new ElementPickerViewModel(true);
ViewModelBase elementVM = vm.Categories.First().Children.First();
elementVM.IsSelected = true;
string expectedLabel = elementVM.DisplayString;
Assert.IsTrue(vm.ChooseElementCommand.CanExecute(null),
"Cannot execute ChooseElementCommand");
bool messageSent = false;
vm.ElementChosenMessage.Sent += (sender, args) =>
{
messageSent = true;
ViewModelBase messageContentVM = args.Content.ViewModel as ViewModelBase;
Assert.AreEqual(expectedLabel, messageContentVM.DisplayString);
};
vm.ChooseElementCommand.Execute(null);
Assert.IsTrue(messageSent, "No message was sent when element was chosen");
}
}
}

View File

@ -0,0 +1,72 @@
/* SettingsRepositoryViewModel.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using zaaReloaded2.Controller;
using zaaReloaded2.ViewModels;
namespace Tests.ViewModels
{
[TestFixture]
class SettingsRepositoryViewModelTest
{
SettingsRepositoryViewModel _vm;
const string TESTNAME = "hello world";
[SetUp]
public void SetUp()
{
SettingsRepository rep = new SettingsRepository();
rep.SettingsList.Add(new Settings(TESTNAME));
_vm = new SettingsRepositoryViewModel(rep);
}
[Test]
public void CanDeleteNonDefaultSettings()
{
_vm.SettingsList[_vm.SettingsList.Count - 1].IsSelected = true;
Assert.IsTrue(_vm.DeleteSettingsCommand.CanExecute(null));
}
[Test]
public void CannotDeleteDefaultSettings()
{
_vm.SettingsList[0].IsSelected = true;
Assert.IsFalse(_vm.DeleteSettingsCommand.CanExecute(null));
}
[Test]
public void CopySettings()
{
SettingsViewModel orig = _vm.SettingsList[0];
orig.IsSelected = true;
_vm.CopySettingsCommand.Execute(null);
SettingsViewModel copy = _vm.SettingsList[_vm.SettingsList.Count-1];
// Make sure we have a new object
Assert.AreNotSame(orig, copy);
Assert.AreNotSame(orig.RevealModelObject(), copy.RevealModelObject());
Assert.AreEqual(String.Format("Kopie von {0}", orig.Name), copy.Name);
Assert.IsTrue(copy.IsSelected);
}
}
}

View File

@ -0,0 +1,118 @@
/* SettingsViewModelTest.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using zaaReloaded2.ViewModels;
using zaaReloaded2.Controller;
using zaaReloaded2.Controller.Elements;
namespace Tests.ViewModels
{
[TestFixture]
class SettingsViewModelTest
{
SettingsViewModel _settingsVM;
[SetUp]
public void SetUp()
{
_settingsVM = new SettingsViewModel();
}
[Test]
public void AddElement()
{
bool messageSent = false;
Settings model = _settingsVM.RevealModelObject() as Settings;
int oldViewModelElementCount = _settingsVM.Elements.Count;
int oldModelElementCount = model.Elements.Count;
_settingsVM.AddElementMessage.Sent += (sender, args) =>
{
messageSent = true;
ElementPickerViewModel picker = args.Content.ViewModel as ElementPickerViewModel;
Assert.IsNotNull(picker, "ViewModel in MessageContent is not an ElementPickerViewModel");
picker.Categories.First().Children.First().IsSelected = true;
picker.ChooseElementCommand.Execute(null);
};
_settingsVM.AddElementCommand.Execute(null);
Assert.IsTrue(messageSent, "Message was not sent");
Assert.AreEqual(oldViewModelElementCount + 1, _settingsVM.Elements.Count,
"Count of elements in ViewModel was not increased by 1");
Assert.AreEqual(oldModelElementCount + 1, model.Elements.Count,
"Count of elements in settings Model was not increased by 1");
}
[Test]
public void AddChildElement()
{
bool messageSent = false;
SelectEachDay model = new SelectEachDay();
ControlElementViewModel viewModel = new ControlElementViewModel(model);
_settingsVM.AddElementViewModel(viewModel);
viewModel.IsSelected = true;
int oldViewModelChildrenCount = viewModel.Elements.Count;
int oldModelChildrenCount = model.FormatElements.Count;
_settingsVM.AddChildElementMessage.Sent += (sender, args) =>
{
messageSent = true;
ElementPickerViewModel picker = args.Content.ViewModel as ElementPickerViewModel;
Assert.IsNotNull(picker, "ViewModel in MessageContent is not an ElementPickerViewModel");
picker.Categories.First().Children.First().IsSelected = true;
Assert.IsTrue(picker.ChooseElementCommand.CanExecute(null),
"Cannot execute element picker's ChooseElementCommand.");
picker.ChooseElementCommand.Execute(null);
};
_settingsVM.AddChildElementCommand.Execute(null);
Assert.IsTrue(messageSent, "Message was not sent");
Assert.AreEqual(oldViewModelChildrenCount + 1, viewModel.Elements.Count,
"Count of children in ViewModel was not increased by 1");
Assert.AreEqual(oldModelChildrenCount + 1, model.FormatElements.Count,
"Count of children in Model was not increased by 1");
}
[Test]
public void CannotAddChildElementToFormatElement()
{
ControlElementViewModel parent = new ControlElementViewModel(
new SelectFirstDay());
_settingsVM.AddElementViewModel(parent);
parent.IsSelected = true;
Assert.IsTrue(_settingsVM.AddChildElementCommand.CanExecute(null));
FormatElementViewModel child = new FormatElementViewModel(new Items());
_settingsVM.AddChildElementViewModel(parent, child);
parent.IsSelected = false;
child.IsSelected = true;
Assert.IsFalse(_settingsVM.AddChildElementCommand.CanExecute(null));
}
[Test]
public void DeleteElement()
{
throw new NotImplementedException();
}
[Test]
public void CopyElement()
{
throw new NotImplementedException();
}
}
}

View File

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Bovender" version="0.2.0.0" targetFramework="net40" />
<package id="Expression.Blend.Sdk" version="1.0.2" targetFramework="net40" />
<package id="NUnit" version="2.6.4" targetFramework="net40" />
</packages>

BIN
gimp/d.xcf Normal file

Binary file not shown.

View File

@ -1,345 +1,120 @@
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff41\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f40\fbidi \fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}Liberation Sans{\*\falt Arial};}{\f41\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0502040204020203}Segoe UI;}
{\f43\fbidi \fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}@Liberation Sans;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f44\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f45\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f47\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f48\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f49\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f50\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f51\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f52\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f44\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f45\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f47\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f48\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f49\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f50\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f51\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f52\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f414\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f415\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
{\f417\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f418\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f421\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f422\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}
{\f454\fbidi \fswiss\fcharset238\fprq2 Segoe UI CE;}{\f455\fbidi \fswiss\fcharset204\fprq2 Segoe UI Cyr;}{\f457\fbidi \fswiss\fcharset161\fprq2 Segoe UI Greek;}{\f458\fbidi \fswiss\fcharset162\fprq2 Segoe UI Tur;}
{\f460\fbidi \fswiss\fcharset178\fprq2 Segoe UI (Arabic);}{\f461\fbidi \fswiss\fcharset186\fprq2 Segoe UI Baltic;}{\f462\fbidi \fswiss\fcharset163\fprq2 Segoe UI (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp
\fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{
\ql \li0\ri0\sa170\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\f41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \snext0 \sqformat \spriority0 Normal;}{\*
\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 \snext11 \ssemihidden \sunhideused
Normal Table;}{\*\cs15 \additive \ul\cf9\lang255\langfe255\langnp255\langfenp255\ulc1 Internet Link;}{\s16\ql \li0\ri0\sb240\sa120\keepn\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs28\alang1081 \ltrch\fcs0
\fs28\cf1\lang1031\langfe1031\kerning1\loch\f40\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext17 Heading;}{\s17\ql \li0\ri0\sa140\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081
\ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\f41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext17 Text Body;}{\s18\ql \li0\ri0\sa140\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
\af40\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\f40\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon17 \snext18 List;}{\s19\ql \li0\ri0\sb120\sa120\nowidctlpar\noline\wrapdefault\faauto\rin0\lin0\itap0
\rtlch\fcs1 \ai\af40\afs20\alang1081 \ltrch\fcs0 \i\fs20\cf1\lang1031\langfe1031\kerning1\loch\f40\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext19 \sqformat caption;}{
\s20\ql \li0\ri0\sa170\nowidctlpar\noline\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs20\alang1081 \ltrch\fcs0 \fs20\cf1\lang1031\langfe1031\kerning1\loch\f40\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext20 Index;}}
{\*\rsidtbl \rsid4605650\rsid15302586}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Daniel Kraus}{\operator Daniel Kraus}{\creatim\yr2015\mo1\dy28\hr17\min3}
{\revtim\yr2015\mo1\dy28\hr17\min5}{\version2}{\edmins0}{\nofpages3}{\nofwords1381}{\nofchars8701}{\nofcharsws10062}{\vern49247}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect
\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\formshade\horzdoc\dghspace120\dgvspace120
\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale150\rsidroot4605650 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0{\*\ftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
\af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\cf0\kerning0\loch\af40\dbch\af40\insrsid15302586
\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {
\rtlch\fcs1 \af41 \ltrch\fcs0 \insrsid15302586 \chftnsepc
\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {
\rtlch\fcs1 \af41 \ltrch\fcs0 \insrsid15302586 \chftnsep
\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {
\rtlch\fcs1 \af41 \ltrch\fcs0 \insrsid15302586 \chftnsepc
\par }}\ltrpar \sectd \ltrsect\sbknone\linex0\sectunlocked1\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang
{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7
\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar
\qj \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1
\ai\af41\afs18 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Daniel}{\rtlch\fcs1 \ai\af41\afs18 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\loch\af41\dbch\af0\hich\f31506 \rquote }{\rtlch\fcs1 \ai\af41\afs18 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 s XL Toolbox NG is distributed under the A
\hich\af31506\dbch\af0\loch\f41 pache License, Version 2.0, which allows you to use this add-in free of charge in any environment (e.g., academic or commercial), but does not give any warranty. Please see the license text below for details.}{\rtlch\fcs1
\af41 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 The add-in contains code whose copyright is own\hich\af31506\dbch\af0\loch\f41 ed by others:}{\rtlch\fcs1
\af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
DLLs from the Visual Studio Tools for Office runtime and the Expression Blend software development kit (SDK) are }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\loch\af41\dbch\af0\hich\f31506 \'a9}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 copyright Microsoft Corporation.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 The FreeImage library is }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'a9}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
copyright Herv}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'e9}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Drolon and others and is used under the FreeImage P\hich\af31506\dbch\af0\loch\f41
ublic License (FIPL). The source code of the FreeImage library is available at }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
HYPERLINK "http://freeimage.sf.net" }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \insrsid4605650 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4a00000068007400740070003a002f002f00660072006500650069006d006100670065002e00730066002e006e00650074002f000000795881f43b1d7f48af2c825dc485276300000000a5ab0000}}}{\fldrslt {
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\ul\cf9\lang255\langfe255\langnp255\langfenp255\ulc1\insrsid15302586 \hich\af31506\dbch\af0\loch\f41 http://freeimage.sf.net}}}\sectd \ltrsect\sbknone\linex0\sectunlocked1\sectdefaultcl\sftnbj {\rtlch\fcs1
\af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 and in the XL Toolbox code repository at }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 HYPERLINK "http://sf.net/p/xltoolbox/ng-code" }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \insrsid4605650 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5c00000068007400740070003a002f002f00730066002e006e00650074002f0070002f0078006c0074006f006f006c0062006f0078002f006e0067002d0063006f00640065000000795881f43b1d7f48af2c825dc485
276300000000a5ab0000}}}{\fldrslt {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\ul\cf9\lang255\langfe255\langnp255\langfenp255\ulc1\insrsid15302586 \hich\af31506\dbch\af0\loch\f41 http://sf.net/p/xltoolbox/n\hich\af31506\dbch\af0\loch\f41 g-code}}}
\sectd \ltrsect\sbknone\linex0\sectunlocked1\sectdefaultcl\sftnbj {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 .}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650 \hich\af31506\dbch\af0\loch\f41 The LittleCMS2 library is }{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0
\i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'a9}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 copyright
}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650 \hich\af31506\dbch\af0\loch\f41 }{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650\charrsid4605650
\hich\af31506\dbch\af0\loch\f41 Marti Maria Saguer}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650 \hich\af31506\dbch\af0\loch\f41 and is used under the MIT license.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid4605650\charrsid4605650
\par }\pard \ltrpar\qc \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \emdash \emdash
\emdash \emdash \emdash }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Apache License}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \line }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Version 2.0, January 2004}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 HYPERLINK "http://www.apache.org/licenses/" }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\insrsid4605650 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f000000795881f43b1d7f48af2c825dc48527630000
0000a5ab0000}}}{\fldrslt {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\ul\cf9\lang255\langfe255\langnp255\langfenp255\ulc1\insrsid15302586 \hich\af31506\dbch\af0\loch\f41 http://www.apache.org/licenses/}}}\sectd \ltrsect
\sbknone\linex0\sectunlocked1\sectdefaultcl\sftnbj {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }\pard \ltrpar\qj \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 1. Definitions}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 .}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 License}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}
{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall mean the terms and conditi\hich\af31506\dbch\af0\loch\f41
ons for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Licensor}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94
}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Legal Entity}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506
\'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall mean the union of the \hich\af31506\dbch\af0\loch\f41
acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 control}
{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\hich\af31506\dbch\af0\loch\f41 means (i) the power, direct or indirect, to cause the direction or management of such entity,\hich\af31506\dbch\af0\loch\f41
whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 You}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 (or }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Your}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
) shall mean an individual or Legal Entity exercising permissions granted by this L\hich\af31506\dbch\af0\loch\f41 icense.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Source}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Object}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 form shall mean any form resulting from mechanical transformation or tr\hich\af31506\dbch\af0\loch\f41
anslation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Work}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).}{\rtlch\fcs1
\af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Derivative Works}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall \hich\af31506\dbch\af0\loch\f41
mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes o
\hich\af31506\dbch\af0\loch\f41 f\hich\af31506\dbch\af0\loch\f41 this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Contribution}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506
\'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall mean any work of authorship, including the original versi\hich\af31506\dbch\af0\loch\f41
on of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of
\hich\af31506\dbch\af0\loch\f41 t\hich\af31506\dbch\af0\loch\f41 he copyright owner. For the purposes of this definition, }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 submitted}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source \hich\af31506\dbch\af0\loch\f41
code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the co
\hich\af31506\dbch\af0\loch\f41 p\hich\af31506\dbch\af0\loch\f41 yright owner as }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1
\af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Not a Contribution.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Contributor}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506
\'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 2. Grant of Copyright License}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicl
\hich\af31506\dbch\af0\loch\f41 y\hich\af31506\dbch\af0\loch\f41 perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 3. Grant of Patent License}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
\hich\af31506\dbch\af0\loch\f41
no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contrib
\hich\af31506\dbch\af0\loch\f41 u\hich\af31506\dbch\af0\loch\f41
tor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or count
\hich\af31506\dbch\af0\loch\f41 e\hich\af31506\dbch\af0\loch\f41
rclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such
\hich\af31506\dbch\af0\loch\f41 \hich\af31506\dbch\af0\loch\f41 litigation is filed.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 4. Redistribution}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }\pard \ltrpar\qj \fi-360\li360\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 1.\tab
You must\hich\af31506\dbch\af0\loch\f41 give any other recipients of the Work or Derivative Works a copy of this License; and}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 2.\tab You must cause any modified files to carry prominent notices stating that You changed the files; and}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 3.\tab You must retain, in the Source form of any Derivative Works th\hich\af31506\dbch\af0\loch\f41
at You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 4.\tab If the Work includes a }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 NOTICE}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\hich\af31506\dbch\af0\loch\f41 text file as part of its \hich\af31506\dbch\af0\loch\f41
distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the
\hich\af31506\dbch\af0\loch\f41 f\hich\af31506\dbch\af0\loch\f41
ollowing places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such thir
\hich\af31506\dbch\af0\loch\f41 d\hich\af31506\dbch\af0\loch\f41
-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOT
\hich\af31506\dbch\af0\loch\f41 I\hich\af31506\dbch\af0\loch\f41 CE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\line \line
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions fo\hich\af31506\dbch\af0\loch\f41 r\hich\af31506\dbch\af0\loch\f41
use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.}{\rtlch\fcs1
\af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }\pard \ltrpar\qj \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
5. Submission of Contributi\hich\af31506\dbch\af0\loch\f41 ons}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the a
\hich\af31506\dbch\af0\loch\f41 bove, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 6. Trademarks}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 . This License does not grant permission to use the trade names, trademarks, service m\hich\af31506\dbch\af0\loch\f41
arks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 7. Disclaimer of Warranty}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 . Unless required by applicable law or agreed to in wr\hich\af31506\dbch\af0\loch\f41
iting, Licensor provides the Work (and each Contributor provides its Contributions) on an }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1
\af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 AS IS}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFR\hich\af31506\dbch\af0\loch\f41
INGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 8. Limi\hich\af31506\dbch\af0\loch\f41 tation of Liability}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be
\hich\af31506\dbch\af0\loch\f41
liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of
\hich\af31506\dbch\af0\loch\f41 g\hich\af31506\dbch\af0\loch\f41 oodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.}{
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 9. Accepting Warranty or Additional Liability}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 . While redistributing t\hich\af31506\dbch\af0\loch\f41
he Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act
\hich\af31506\dbch\af0\loch\f41 o\hich\af31506\dbch\af0\loch\f41
nly on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by r
\hich\af31506\dbch\af0\loch\f41 e\hich\af31506\dbch\af0\loch\f41 ason of your accepting any such warranty or additional liability.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
\par }\pard \ltrpar\qc \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\insrsid15302586 \loch\af41\dbch\af0\hich\f31506 \emdash \emdash \emdash \emdash \emdash }{\rtlch\fcs1
\af31507\afs24 \ltrch\fcs0 \insrsid15302586
\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210060ffbff5a4060000a21b0000160000007468656d652f7468656d652f
7468656d65312e786d6cec594f6f1b4514bf23f11d467b6f6327761a4775aad8b11b6852a2d82dea71bc3bde9d66766735334eea1b6a8f484888823850891b07
04546a252ee5d3048aa048fd0abc99d95defc46b92b411ada039b4f6ec6fdefff79b37ebabd7eec50c1d1221294fda5efd72cd4324f1794093b0eddd1af62fad
79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607f22d771db8b944ad79796a40fcb585ee62949e0d9988b182bf82ac2a540e023901bb3a5e55a6d
7529c634f150826310bb830595127b1bb9dc1e03e189927ac16762a0a5920a707050d71039955d26d021666d0f7404fc6848ee290f312c153c687b35f3e72d6d
5c5dc2ebd926a616ec2dedeb9bbf6c5fb6213858363a45382a94d6fb8dd695ad42be0130358febf57add5ebd906700d8f7c1556b4b5966a3bf56efe4324b20fb
715e76b7d6ac355c7c49feca9ccdad4ea7d36c65b658a106643f36e6f06bb5d5c6e6b28337208b6fcee11b9dcd6e77d5c11b90c5afcee1fb575aab0d176f4011
a3c9c11c5a27b4dfcfa417903167db95f03580afd532f80c05d55094975631e6895a586c31becb451f101ac9b0a20952d3948cb10f25dcc5f14850ac35e07582
4b4fec922fe796b432247d4153d5f63e4c31b4c34cdecb673fbc7cf6041ddf7f7a7cffe7e3070f8eefff640539bbb671129677bdf8eef3bf1e7d82fe7cf2ed8b
875f56e36519ffdb8f9ffefacb17d540e89f9939cfbf7afcfbd3c7cfbffeec8fef1f56c037051e95e1431a13896e9223b4cf6370cc44c5b59c8cc4f9760c234c
cb3b369350e2046b2d15f27b2a72d037a79865d971ece8103782b705f04715f0fae4ae63f0201213452b34df886207b8cb39eb705119851b5a5729ccc3491256
2b1793326e1fe3c32add5d9c38f9ed4d5260cebc2c1dc7bb1171ccdc63385138240951483fe30784547877875227aebbd4175cf2b1427728ea605a1992211d39
d534dbb44d63c8cbb4ca67c8b7139bdddba8c35995d75be4d0454257605661fc9030278cd7f144e1b84ae410c7ac1cf01daca22a230753e197713da920d32161
1cf502a2cfb4f9d2ff4880bfa5a4dfc040599569df65d3d8450a450faa64ee60cecbc82d7ed08d709c5661073489cad80fe4019428467b5c55c177b9db21fa3b
e401270bd37d9b1227dda7b3c12d1a3a26cd0a443f99888a285e27dca9dfc1948d31315403acee70754c937f226e4681b9ad868b236ea0cae7df3caab0fb6da5
ec4d38bdaa7a66fb04512fc29da4e72e17017dfbd9790b4f923d020d31dfa7efc8f91d397bff79725ed4cf174fc933160682d6b3889db4cddc1d2f1ebbc794b1
819a32b223cde42de1f009fab0a8379afb2629ee6169041f752b830607170a6cf620c1d5c754458308a730b5d73d2d249499e850a2944bb82e9ae54ad91a0f93
bfb297cda6be8658ea9058edf2c02eafe8e5fcb65188315685e64e9b2b5ad102ceaa6ce54a26147c7b1565756dd499b5d58d6986151d6d85cb3ac4e65e0e212f
5c83c5229a30d520988520caab70e3d7aae1b683190974dc6d8ef2b4982c5c648a64840392e548fb3d9fa3ba49525e2b738e683f6c31e8abe329512b696b69b1
afa1ed2c492aab6b2c509767ef75b29457f02c4b20ed643bb2a4dc9c2c41476dafd55c6e7ac8c769db1bc345193ec629645dea4112b3105e35f94ad8b23fb599
4d97cfb2d9ca1d739ba00e2f3f6cdce71c76782015526d6119d9d2308fb2126089d664ed5f6e42582fca810a363a9b152b6b500c6fcc0a88a39b5a321e135f95
935d5ad1b1b35f332ae51345c4200a8ed0884dc43e86f4eb52057f022ae17d876104fd05decee9689b472e39674d577e276670761db334c219ddea16cd3bd9c2
0d211536986f25f3c0b74adb8d73e777c5b4fc05b9522ee3ff992bfa3c81d70f2b81ce800f2f860546ba53da1e172ae2c0426944fdbe80c9c17007540bbce185
c75054f07adafc2fc8a1fedff69c9561da1a6e916a9f864850388f542408d9035a32d5778ab07a767659912c13642aaa64ae4cadd9237248d85073e0aa3edb3d
1441a91b36c968c0e04ed69ffb3deba051a8879c72bf394c569cbdb607feedc9c7363338e5f2b01968f2f8172616e3c1ec54b5fbcdf6fcec2d3ba21fccc6ac46
de15a0ac7414b4b2b67f4513ce79d45ac69af378b9991b07599cf718168b812885974848ff03e71f153e23a68cf5813ae4fbc0ad087ebed0c2a06ca0aa2fd9c1
036982b48b23189ceca22d262dca86361b9d74d4f2c3fa8227dd42ef89606bcbce92ef7306bb18ce5c754e2f5e64b0b3083bb1b66b0b430d993dd9a2b034ce6f
322631e647b2f28f597c741712bd053f1a4c9892a698e0972a8161861e983e80e6b71acdd68dbf010000ffff0300504b0304140006000800000021000dd1909f
b60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f
6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b0
60828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509a
ffb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000
001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c000
0000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c
00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210060ffbf
f5a4060000a21b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021
000dd1909fb60000001b0100002700000000000000000000000000ae0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a90a00000000}
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 caption;\lsdunhideused0 \lsdlocked0 List;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;
\lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;
\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000010db
9f3f143bd001feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000105000000000000}}
{\rtf1\ansi\deff4\adeflang1025
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset128 Liberation Sans{\*\falt Arial};}{\f5\fswiss\fprq2\fcharset128 Segoe UI;}{\f6\fswiss\fprq2\fcharset128 Calibri;}{\f7\fnil\fprq2\fcharset0 Times New Roman;}{\f8\fswiss\fprq2\fcharset128 FreeSans;}{\f9\fnil\fprq2\fcharset0 Calibri;}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red128\green128\blue128;}
{\stylesheet{\s0\snext0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031 Normal;}
{\*\cs15\snext15 Default Paragraph Font;}
{\*\cs16\snext16\cf2\ul\ulc0\langfe255\lang255 Internet Link;}
{\s17\sbasedon0\snext18\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb240\sa120\keepn\ltrpar\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs28\alang1081\loch\f4\fs28\lang1031 Heading;}
{\s18\sbasedon0\snext18\sl288\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa140\ltrpar\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031 Text Body;}
{\s19\sbasedon18\snext19\sl288\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa140\ltrpar\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f4\fs22\lang1031 List;}
{\s20\sbasedon0\snext20\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb120\sa120\noline\ltrpar\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af8\afs24\alang1081\ai\loch\f4\fs20\lang1031 Caption;}
{\s21\sbasedon0\snext21\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs20\alang1081\loch\f4\fs20\lang1031 Index;}
{\s22\snext22\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\dbch\af7\langfe1031\dbch\af9\afs22\alang1025\cf0\kerning1\loch\f6\fs22\lang1031 DocumentMap;}
{\s23\sbasedon0\snext23\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb120\sa120\ltrpar\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs20\alang1081\ai\loch\f4\fs20\lang1031 caption;}
}{\*\generator LibreOffice/4.4.2.2$Linux_X86_64 LibreOffice_project/40m0$Build-2}{\info{\author Daniel Kraus}{\creatim\yr2015\mo1\dy28\hr17\min3}{\author Daniel Kraus}{\revtim\yr2015\mo7\dy28\hr18\min16}{\printim\yr0\mo0\dy0\hr0\min0}}\deftab720\deftab720
\viewscale150
{\*\pgdsctbl
{\pgdsc0\pgdscuse451\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\pgdscnxt0 Default Style;}}
\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1800\margr1800\margt1440\margb1440\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
{\*\ftnsep}\pgndec\pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs18\alang1081\ai\rtlch \ltrch\loch\fs18\lang1033
zaaReloaded2 ist mit der \uc2 \u8220\'81\'67Apache 2.0 License\u8221\'81\'68 lizensiert.\uc1 }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs18\alang1081\ai\rtlch \ltrch\loch\fs18\lang1033
}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs18\alang1081\ai\rtlch \ltrch\loch\fs18\lang1033
Diese Lizenz erlaubt kostenfreie Nutzung und schlie\u223\'3ft jedwede Haftung aus. Bitte lesen Sie sich den unten stehenden Lizenztext vor der Nutzung genau durch und stimmen Sie den Bedingungen zu.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Diese Software enth\u228\'3flt Code von Dritten:}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
DLLs }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
der}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Visual Studio Tools for Office }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Laufzeit und des }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Expression Blend }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
S}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
oftware }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
D}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
evelopment }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
K}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
it}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
s}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
(SDK), \u169\'3f }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
C}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
opyright Microsoft Corporation.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qc\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qc\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Apache License}{\rtlch \ltrch\loch
\line }{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Version 2.0, January 2004}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qc\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{{\field{\*\fldinst HYPERLINK "http://www.apache.org/licenses/" }{\fldrslt {\cf2\ul\ulc0\langfe255\lang255\cf2\ul\ulc0\kerning1\dbch\af7\langfe255\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang255
http://www.apache.org/licenses/}}}}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
1. Definitions}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af7\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
License\uc2 \u8221\'81\'68 shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Licensor\uc2 \u8221\'81\'68 shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Legal Entity\uc2 \u8221\'81\'68 shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \u8220\'81\'67control\u8221\'81\'68 means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
You\uc2 \u8221\'81\'68 (or \u8220\'81\'67Your\u8221\'81\'68) shall mean an individual or Legal Entity exercising permissions granted by this License.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Source\uc2 \u8221\'81\'68 form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Object\uc2 \u8221\'81\'68 form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Work\uc2 \u8221\'81\'68 shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Derivative Works\uc2 \u8221\'81\'68 shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Contribution\uc2 \u8221\'81\'68 shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \u8220\'81\'67submitted\u8221\'81\'68 means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \u8220\'81\'67Not a Contribution.\u8221\'81\'68\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
Contributor\uc2 \u8221\'81\'68 shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
2. Grant of Copyright License}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
3. Grant of Patent License}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
4. Redistribution}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
1.\tab You must give any other recipients of the Work or Derivative Works a copy of this License; and}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
2.\tab You must cause any modified files to carry prominent notices stating that You changed the files; and}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
3.\tab You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
4.\tab If the Work includes a \uc2 \u8220\'81\'67NOTICE\u8221\'81\'68 text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\uc1 }{\rtlch \ltrch\loch
\line \line }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
5. Submission of Contributions}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
6. Trademarks}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
7. Disclaimer of Warranty}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \uc2 \u8220\'81\'67AS IS\u8221\'81\'68 BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\uc1 }
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
8. Limitation of Liability}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
9. Accepting Warranty or Additional Liability}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.}
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qc\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1031
\uc2 \u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\uc1 }
\par }

View File

@ -1,4 +1,4 @@
2.0.0-alpha.1
0e0620c09c28cc494352dd3901245e7402ea5b64 publish/release/zaaReloaded-2.0.0-alpha.1.exe
http://zaa.nephrowiki.de/downloads/zaaReloaded-2.0.0-alpha.1.exe
2.0.0-alpha.5
http://zaa.nephrowiki.de/downloads/zaaReloaded-2.0.0-alpha.5.exe
423cbe81b42ddfc293cf5b387c1d8d269dce3f61 publish/release/zaaReloaded-2.0.0-alpha.5.exe

View File

@ -31,7 +31,9 @@ namespace zaaReloaded2.Controller.Elements
/// </summary>
public IList<FormatElementBase> FormatElements { get; private set; }
public ControlElementBase() { }
public ControlElementBase()
: this(new List<FormatElementBase>())
{ }
public ControlElementBase(IList<FormatElementBase> formatElements)
{

View File

@ -25,22 +25,23 @@ namespace zaaReloaded2.Controller.Elements
/// <summary>
/// Controller element that writes arbitrary text to the document.
/// </summary>
class CustomText : ElementBase
class CustomText : FormatElementBase
{
public override string Label
{
get { return String.Format("\"{0}\"", Text); }
get { return String.Format("\"{0}\"", Content); }
}
public override void Run(Formatter.Formatter formatter)
{
formatter.Write(Text);
formatter.WriteParagraph(Content);
}
/// <summary>
/// Gets or sets the arbitrary text that will be written
/// to the document.
/// </summary>
public string Text { get; set; }
protected override ElementBase CreateInstance()
{
CustomText clone = new CustomText();
clone.Content = Content;
return clone;
}
}
}

View File

@ -28,7 +28,7 @@ namespace zaaReloaded2.Controller.Elements
/// Base class for formatting elements.
/// </summary>
[Serializable]
public abstract class ElementBase
public abstract class ElementBase : ICloneable
{
/// <summary>
/// Returns the label for this formatting element.
@ -44,5 +44,16 @@ namespace zaaReloaded2.Controller.Elements
/// Element belongs to. The Formatter object provides access
/// to the current Word document etc.</param>
abstract public void Run(zaaReloaded2.Formatter.Formatter formatter);
public object Clone()
{
return CreateInstance();
}
/// <summary>
/// Creates a new instance that can be used for cloning.
/// </summary>
/// <returns>New instance of a derived class.</returns>
protected abstract ElementBase CreateInstance();
}
}

View File

@ -23,5 +23,24 @@ namespace zaaReloaded2.Controller.Elements
/// </summary>
public abstract class FormatElementBase : ElementBase
{
/// <summary>
/// Gets or sets the content of this format element.
/// </summary>
public string Content
{
get { return _content; }
set
{
_content = value;
}
}
/// <summary>
/// Is called whenever the Content is changed.
/// </summary>
protected virtual void OnContentChanged() {}
private string _content;
}
}

View File

@ -31,17 +31,18 @@ namespace zaaReloaded2.Controller.Elements
/// to a Word document.
/// </summary>
[Serializable]
class Items : FormatElementBase
class Items : CustomText
{
#region ElementBase implementation
public override string Label
{
get { return Line; }
get { return Content; }
}
public override void Run(zaaReloaded2.Formatter.Formatter formatter)
{
ParseLine();
if (_items == null || _items.Count == 0) return;
bool _needComma = false;
@ -75,37 +76,14 @@ namespace zaaReloaded2.Controller.Elements
#endregion
#region Properties
/// <summary>
/// Gets or sets a text line that contains a comma-separated list of
/// parsable laboratory item names. The list may optionally be preceded
/// with a caption followed by a colon.
/// </summary>
public string Line
{
[DebuggerStepThrough]
get
{
return _line;
}
set
{
_line = value;
ParseLine();
}
}
#endregion
#region Constructors
public Items() : base() { }
public Items(string line)
public Items(string content)
: this()
{
Line = line;
Content = content;
}
#endregion
@ -121,7 +99,7 @@ namespace zaaReloaded2.Controller.Elements
_items = null;
_caption = null;
Regex r = new Regex(@"((?<caption>[^:]+):\s*)?((?<items>[^,]+),\s*)*(?<items>[^,]+)");
Match m = r.Match(Line);
Match m = r.Match(Content);
if (m.Success)
{
if (m.Groups["caption"].Success)
@ -203,7 +181,6 @@ namespace zaaReloaded2.Controller.Elements
#region Fields
string _line;
string _caption;
List<string> _items;
static Regex _wildcard = new Regex(@"(?<material>[^-]+-)?\*");

View File

@ -39,5 +39,14 @@ namespace zaaReloaded2.Controller.Elements
public SelectEachDay(FormatElementBase formatElement)
: base(formatElement)
{ }
public SelectEachDay(IList<FormatElementBase> formatElements)
: base(formatElements)
{ }
protected override ElementBase CreateInstance()
{
return new SelectEachDay();
}
}
}

View File

@ -43,5 +43,14 @@ namespace zaaReloaded2.Controller.Elements
public SelectFirstDay(FormatElementBase formatElement)
: base(formatElement)
{ }
public SelectFirstDay(IList<FormatElementBase> formatElements)
: base(formatElements)
{ }
protected override ElementBase CreateInstance()
{
return new SelectFirstDay();
}
}
}

View File

@ -44,5 +44,14 @@ namespace zaaReloaded2.Controller.Elements
public SelectLastDay(FormatElementBase formatElement)
: base(formatElement)
{ }
public SelectLastDay(IList<FormatElementBase> formatElements)
: base(formatElements)
{ }
protected override ElementBase CreateInstance()
{
return new SelectLastDay();
}
}
}

View File

@ -28,7 +28,7 @@ namespace zaaReloaded2.Controller
/// Holds settings related to controlling laboratory output.
/// </summary>
[Serializable]
public class Settings
public class Settings : ICloneable
{
#region Properties
@ -47,13 +47,73 @@ namespace zaaReloaded2.Controller
/// </summary>
public IList<ElementBase> Elements { get; private set; }
/// <summary>
/// Gets the unique ID of this Settings object. The unique
/// ID is not included in deep-copying (cloning).
/// </summary>
public Guid Uid { get; private set; }
#endregion
#region Constructor
#region Constructors
public Settings()
: this(string.Empty, new List<ElementBase>())
{ }
public Settings(string name)
: this(name, null)
{ }
/// <summary>
/// Creates a new Settings object with an initial
/// set of elements.
/// </summary>
/// <param name="initialElements">Set of ElementBase
/// object (or derived ones).</param>
public Settings(IList<ElementBase> initialElements)
: this(String.Empty, initialElements)
{ }
/// <summary>
/// Creates a new Settings object with an initial
/// set of elements and a name.
/// </summary>
/// <param name="initialElements">Set of ElementBase
/// object (or derived ones).</param>
/// <param name="name">Name of these settings.</param>
public Settings(string name, IList<ElementBase> initialElements)
{
Elements = new List<ElementBase>();
Uid = Guid.NewGuid();
Name = name;
Elements = initialElements;
}
#endregion
#region Public methods
/// <summary>
/// Adds an element to the list of Elements.
/// </summary>
/// <param name="element">Element to add.</param>
public void AddElement(ElementBase element)
{
Elements.Add(element);
}
#endregion
#region Implementation of ICloneable
public object Clone()
{
Settings clone = new Settings(
String.Format("Kopie von {0}", Name),
Elements.Select(e => e.Clone() as ElementBase).ToList()
);
clone.ReferenceStyle = ReferenceStyle;
return clone;
}
#endregion

View File

@ -21,9 +21,19 @@ using System.Collections.ObjectModel;
using System.Configuration;
using System.Linq;
using System.Text;
using zaaReloaded2.Controller.Elements;
namespace zaaReloaded2.Controller
{
/// <summary>
/// A repository for zaaReloaded2.Controller.Settings.
/// </summary>
/// <remarks>
/// This class is derived from ApplicationSettingsBase to be able
/// to simply store it in the assembly's properties. However, this
/// causes some confusion because .NET's ApplicationSettings are
/// different from zaaReloaded's Settings.
/// </remarks>
[Serializable]
public class SettingsRepository : ApplicationSettingsBase
{
@ -48,15 +58,91 @@ namespace zaaReloaded2.Controller
[UserScopedSetting()]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
public IList<Settings> Settings { get; private set; }
public IList<Settings> SettingsList { get; private set; }
#endregion
#region Constructor
#region Constructors
/// <summary>
/// Creates a new instance of a settings repository that will
/// contain a default set of settings.
/// </summary>
public SettingsRepository()
{
Settings = new List<Settings>();
SettingsList = new List<Settings>();
CreateDefault();
}
#endregion
#region Public methods
/// <summary>
/// Looks up a Settings object contained in this repository
/// by unique ID.
/// </summary>
/// <param name="uid">GUID to look for.</param>
/// <returns>Settings object with this GUID, or null if the
/// GUID was not found.</returns>
public Settings FindByGuid(Guid uid)
{
return SettingsList.FirstOrDefault(s => s.Uid == uid);
}
#endregion
#region Private methods
/// <summary>
/// Resets the Settings contained in this SettingsRepository
/// to the default set of settings.
/// </summary>
private void CreateDefault()
{
SettingsList.Clear();
// Shortcut to assembly properties
zaaReloaded2.Properties.Settings def = zaaReloaded2.Properties.Settings.Default;
// TODO: May want to create deep copies of this list below
List<FormatElementBase> defaultItems = new List<FormatElementBase>()
{
new Items(def.DefaultItemsClinicalChem),
new Items(def.DefaultItemsInflammation),
new Items(def.DefaultItemsCardio),
new Items(def.DefaultItemsKidney),
new Items(def.DefaultItemsLiver),
new Items(def.DefaultItemsLipids),
new Items(def.DefaultItemsHematology),
new Items(def.DefaultItemsCoagulation),
new Items(def.DefaultItemsDrugs),
new Items(def.DefaultItemsCollectedUrine),
new Items(def.DefaultItemsSpotUrine),
new Items(def.DefaultItemsOther),
};
// Configure the settings for the ward
SettingsList.Add(
new Settings(
def.SettingsNameWard,
new List<ElementBase>()
{
new SelectFirstDay(defaultItems),
new SelectLastDay(defaultItems)
}
)
);
// Configure the settings for the outpatient clinic
SettingsList.Add(
new Settings(
def.SettingsNameClinic,
new List<ElementBase>()
{
new SelectEachDay(defaultItems),
}
)
);
}
#endregion

75
zaaReloaded2/Demo/Demo.cs Executable file
View File

@ -0,0 +1,75 @@
/* Demo.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Word;
namespace zaaReloaded2.Demo
{
/// <summary>
/// Static class that serves to load an embedded Word document
/// into a temporary file and open that temporary file in Word.
/// </summary>
static class Demo
{
#region Public methods
/// <summary>
/// Opens a demo document. The document's Saved property is set to
/// false so that a user who wants to save changes will be prompted
/// for a file name.
/// </summary>
public static void OpenDemoDocument()
{
string tempFile = CreateTempFileFromResource();
Document demoDoc = Globals.ThisAddIn.Application.Documents
.Add(Template: tempFile);
File.Delete(tempFile);
}
#endregion
#region Private methods
/// <summary>
/// Copies the built-in demo file from a resource stream to a
/// temporary file and returns the path to that file.
/// </summary>
/// <returns>Path to the newly created temporary file.</returns>
static string CreateTempFileFromResource()
{
string resourceName = "zaaReloaded2.Demo.Demo.docx";
Stream resourceStream = typeof(Demo).Assembly
.GetManifestResourceStream(resourceName);
if (resourceStream == null)
{
throw new IOException("Unable to open stream " + resourceName);
}
string fileName = Path.GetTempFileName() + ".docx";
Stream tempStream = File.Create(fileName);
resourceStream.CopyTo(tempStream);
tempStream.Close();
return fileName;
}
#endregion
}
}

BIN
zaaReloaded2/Demo/Demo.docx Executable file

Binary file not shown.

View File

@ -20,6 +20,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Word;
using System.Text.RegularExpressions;
namespace zaaReloaded2.Formatter
{
@ -32,6 +33,7 @@ namespace zaaReloaded2.Formatter
{
FixWords(document);
FormatDiagnoses(selection);
FixSalutation(document);
}
static void FormatDiagnoses(Selection selection)
@ -59,6 +61,7 @@ namespace zaaReloaded2.Formatter
static void FixWords(Document document)
{
Find find = document.Range().Find;
find.Execute2007(FindText: "Körperlicher Untersuchungsbefund", ReplaceWith: "Körperl. Untersuchung", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "Dr.D.Kraus", ReplaceWith: "Dr. D. Kraus", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "Z. n.", ReplaceWith: "Z.n.", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "Zust. n.", ReplaceWith: "Z.n.", Replace: WdReplace.wdReplaceAll);
@ -66,6 +69,23 @@ namespace zaaReloaded2.Formatter
find.Execute2007(FindText: "Assistent der Klinik", ReplaceWith: "Internist/Nephrologe", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "Professor Dr.", ReplaceWith: "Prof. Dr.", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "mmHg", ReplaceWith: "mm Hg", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "RR ", ReplaceWith: "", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "HF ", ReplaceWith: "", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "TAC-Spiegel", ReplaceWith: "Tacrolimus-Talspiegel", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "4-7", ReplaceWith: "4 bis 7", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "5-8", ReplaceWith: "5 bis 8", Replace: WdReplace.wdReplaceAll);
find.Execute2007(FindText: "8-10", ReplaceWith: "8 bis 10", Replace: WdReplace.wdReplaceAll);
}
static void FixSalutation(Document document)
{
Regex sal = new Regex(@"^Mit.*?Grüßen");
Regex med = new Regex(@"^((Häusl|Empf).*?Medikat)|Therapieempf");
foreach (Paragraph p in document.Paragraphs)
{
if (sal.IsMatch(p.Range.Text)) p.Range.Text = "Mit freundlichen, kollegialen Grüßen,";
if (med.IsMatch(p.Range.Text)) p.Range.Text = "Aktuelle Medikation:";
}
}
}
}

BIN
zaaReloaded2/Icons/d.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1012 B

View File

@ -98,5 +98,152 @@ namespace zaaReloaded2.Properties {
this["LastUpdateCheck"] = value;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("http://www.apache.org/licenses/LICENSE-2.0")]
public global::System.Uri LicenseUrl {
get {
return ((global::System.Uri)(this["LicenseUrl"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Standard für Station")]
public string SettingsNameWard {
get {
return ((string)(this["SettingsNameWard"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Standard für NepA")]
public string SettingsNameClinic {
get {
return ((string)(this["SettingsNameClinic"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Klinische Chemie: Na, K, Cl, Mg, Pi, Alb, Prot, LDH, Hsre")]
public string DefaultItemsClinicalChem {
get {
return ((string)(this["DefaultItemsClinicalChem"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Hämatologie: Hb, Hkt, Reti, Leu, Thr, Neu, HbA1c")]
public string DefaultItemsHematology {
get {
return ((string)(this["DefaultItemsHematology"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa")]
public string DefaultItemsCoagulation {
get {
return ((string)(this["DefaultItemsCoagulation"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Spot-Urin: U-*")]
public string DefaultItemsSpotUrine {
get {
return ((string)(this["DefaultItemsSpotUrine"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Sammelurin: SU-*")]
public string DefaultItemsCollectedUrine {
get {
return ((string)(this["DefaultItemsCollectedUrine"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Weitere Werte: *")]
public string DefaultItemsOther {
get {
return ((string)(this["DefaultItemsOther"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Kardiale Marker: CK, CKMB, Trop, NTproBNP")]
public string DefaultItemsCardio {
get {
return ((string)(this["DefaultItemsCardio"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Blutfette: TG, Chol, LDL, HDL, Lp(a)")]
public string DefaultItemsLipids {
get {
return ((string)(this["DefaultItemsLipids"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Leber: GOT, GGT, GPT, AP, Bili, CHE")]
public string DefaultItemsLiver {
get {
return ((string)(this["DefaultItemsLiver"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Niere: Krea, Hst, eGFR")]
public string DefaultItemsKidney {
get {
return ((string)(this["DefaultItemsKidney"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Entzündung/Immunsystem: CRP, Pct, C3, C4")]
public string DefaultItemsInflammation {
get {
return ((string)(this["DefaultItemsInflammation"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Medikamente: TAC, CSA, SIR, Vancomycin, Gentamicin, Tobramicin")]
public string DefaultItemsDrugs {
get {
return ((string)(this["DefaultItemsDrugs"]));
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")]
public global::System.Guid LastSettings {
get {
return ((global::System.Guid)(this["LastSettings"]));
}
set {
this["LastSettings"] = value;
}
}
}
}

View File

@ -26,5 +26,53 @@
<Setting Name="LastUpdateCheck" Type="System.DateTime" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="LicenseUrl" Type="System.Uri" Scope="Application">
<Value Profile="(Default)">http://www.apache.org/licenses/LICENSE-2.0</Value>
</Setting>
<Setting Name="SettingsNameWard" Type="System.String" Scope="Application">
<Value Profile="(Default)">Standard für Station</Value>
</Setting>
<Setting Name="SettingsNameClinic" Type="System.String" Scope="Application">
<Value Profile="(Default)">Standard für NepA</Value>
</Setting>
<Setting Name="DefaultItemsClinicalChem" Type="System.String" Scope="Application">
<Value Profile="(Default)">Klinische Chemie: Na, K, Cl, Mg, Pi, Alb, Prot, LDH, Hsre</Value>
</Setting>
<Setting Name="DefaultItemsHematology" Type="System.String" Scope="Application">
<Value Profile="(Default)">Hämatologie: Hb, Hkt, Reti, Leu, Thr, Neu, HbA1c</Value>
</Setting>
<Setting Name="DefaultItemsCoagulation" Type="System.String" Scope="Application">
<Value Profile="(Default)">Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa</Value>
</Setting>
<Setting Name="DefaultItemsSpotUrine" Type="System.String" Scope="Application">
<Value Profile="(Default)">Spot-Urin: U-*</Value>
</Setting>
<Setting Name="DefaultItemsCollectedUrine" Type="System.String" Scope="Application">
<Value Profile="(Default)">Sammelurin: SU-*</Value>
</Setting>
<Setting Name="DefaultItemsOther" Type="System.String" Scope="Application">
<Value Profile="(Default)">Weitere Werte: *</Value>
</Setting>
<Setting Name="DefaultItemsCardio" Type="System.String" Scope="Application">
<Value Profile="(Default)">Kardiale Marker: CK, CKMB, Trop, NTproBNP</Value>
</Setting>
<Setting Name="DefaultItemsLipids" Type="System.String" Scope="Application">
<Value Profile="(Default)">Blutfette: TG, Chol, LDL, HDL, Lp(a)</Value>
</Setting>
<Setting Name="DefaultItemsLiver" Type="System.String" Scope="Application">
<Value Profile="(Default)">Leber: GOT, GGT, GPT, AP, Bili, CHE</Value>
</Setting>
<Setting Name="DefaultItemsKidney" Type="System.String" Scope="Application">
<Value Profile="(Default)">Niere: Krea, Hst, eGFR</Value>
</Setting>
<Setting Name="DefaultItemsInflammation" Type="System.String" Scope="Application">
<Value Profile="(Default)">Entzündung/Immunsystem: CRP, Pct, C3, C4</Value>
</Setting>
<Setting Name="DefaultItemsDrugs" Type="System.String" Scope="Application">
<Value Profile="(Default)">Medikamente: TAC, CSA, SIR, Vancomycin, Gentamicin, Tobramicin</Value>
</Setting>
<Setting Name="LastSettings" Type="System.Guid" Scope="User">
<Value Profile="(Default)">00000000-0000-0000-0000-000000000000</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@ -26,6 +26,11 @@ using System.Windows;
using System.Drawing;
using System.Windows.Resources;
using Office = Microsoft.Office.Core;
using zaaReloaded2.Views;
using zaaReloaded2.ViewModels;
using zaaReloaded2.Importer.ZaaImporter;
using zaaReloaded2.Formatter;
using zaaReloaded2.Controller;
// TODO: Follow these steps to enable the Ribbon (XML) item:
@ -51,12 +56,14 @@ namespace zaaReloaded2
[ComVisible(true)]
public class Ribbon : Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
#region Constructor
public Ribbon()
{
}
#endregion
#region IRibbonExtensibility Members
public string GetCustomUI(string ribbonID)
@ -71,7 +78,8 @@ namespace zaaReloaded2
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
_ribbon = ribbonUI;
Globals.ThisAddIn.Application.WindowSelectionChange += Application_WindowSelectionChange;
}
/// <summary>
@ -86,6 +94,12 @@ namespace zaaReloaded2
{
switch (control.Id)
{
case "zrlFormat":
DoFormat();
break;
case "zrlSettings":
DoChooseSettings();
break;
case "zrlAbout":
ViewModels.AboutViewModel vm = new ViewModels.AboutViewModel();
vm.InjectInto<Views.AboutView>().ShowDialog();
@ -95,6 +109,9 @@ namespace zaaReloaded2
Globals.ThisAddIn.Application.ActiveDocument,
Globals.ThisAddIn.Application.Selection);
break;
case "zrlDemo":
Demo.Demo.OpenDemoDocument();
break;
default:
throw new InvalidOperationException("No operation defined for " + control.Id);
}
@ -135,6 +152,67 @@ namespace zaaReloaded2
}
}
public bool CanFormat(Office.IRibbonControl control)
{
return Globals.ThisAddIn.Application.Selection.Paragraphs.Count > 0;
}
#endregion
#region Private methods
void DoFormat()
{
if (CanFormat(null))
{
SettingsRepository repository = SettingsRepository.Load();
Guid lastSettingsUid = Properties.Settings.Default.LastSettings;
Settings lastSettings = repository.FindByGuid(lastSettingsUid);
if (lastSettings != null)
{
DoFormat(lastSettings);
}
else
{
DoChooseSettings();
}
}
}
void DoFormat(Settings settings)
{
ZaaImporter importer = new ZaaImporter();
importer.Import(Globals.ThisAddIn.Application.Selection.Text);
Formatter.Formatter formatter =new Formatter.Formatter(
Globals.ThisAddIn.Application.ActiveDocument);
formatter.Settings = settings;
formatter.Laboratory = importer.Laboratory;
formatter.Run();
}
void DoChooseSettings()
{
SettingsRepository repository = SettingsRepository.Load();
SettingsRepositoryViewModel vm = new SettingsRepositoryViewModel(repository);
vm.UseSettingsMessage.Sent += (sender, args) =>
{
SettingsViewModel settingsVM = args.Content.ViewModel as SettingsViewModel;
Settings settings = settingsVM.RevealModelObject() as Settings;
DoFormat(settings);
Properties.Settings.Default.LastSettings = settings.Uid;
};
vm.RequestCloseView += (sender, args) =>
{
repository.Save();
};
vm.InjectInto<SettingsRepositoryView>().ShowDialog();
}
public void Application_WindowSelectionChange(Microsoft.Office.Interop.Word.Selection Sel)
{
_ribbon.Invalidate();
}
#endregion
#region Helpers
@ -160,5 +238,11 @@ namespace zaaReloaded2
}
#endregion
#region Fields
private Office.IRibbonUI _ribbon;
#endregion
}
}

View File

@ -20,28 +20,28 @@
-->
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="Ribbon_Load" loadImage="Ribbon_LoadImage">
<ribbon>
<tabs>
<tab id="zaaReloaded2" label="zaaReloaded2">
<group id="zrlFormatGroup" label="Formatieren">
<splitButton id="zrlFormatSplitButton" size="large">
<button id="zrlFormat" label="Formatieren" image="f.png" onAction="Ribbon_Click"
supertip="Formatiert den ausgewählten Bereich mit dem zuletzt verwendeten Stil." />
<menu id="zrlFormatMenu" screentip="Formatierungsmenü" supertip="Öffnet ein Menü mit einem weiteren Befehl.">
<button id="zrlChooseFormat" label="Stil auswählen/bearbeiten" image="fff.png" onAction="Ribbon_Click"
supertip="Zeigt eine Liste vorhandener Stile an. Stile können bearbeitet, hinzugefügt, gelöscht werden." />
</menu>
</splitButton>
<button id="zrlDaniel" label="Daniels Spezial" image="dk.png" onAction="Ribbon_Click" size="large"
getVisible="Daniel_GetVisible"/>
</group>
<group id="zrlInfoGroup" label="Info">
<button id="zrlAbout" label="Über..." image="i.png" onAction="Ribbon_Click" size="large"
screentip="Über zaaReloaded"
supertip="Zeigt Informationen über das Add-in an." />
</group>
</tab>
</tabs>
</ribbon>
<ribbon>
<tabs>
<tab id="zaaReloaded2" label="zaaReloaded2">
<group id="zrlFormatGroup" label="Formatieren">
<button id="zrlFormat" label="Formatieren" image="f.png" onAction="Ribbon_Click" size="large"
supertip="Formatiert den ausgewählten Bereich mit dem zuletzt verwendeten Stil."
getEnabled="CanFormat" />
<button id="zrlSettings" label="Stilauswahl" image="fff.png" onAction="Ribbon_Click" size="large"
supertip="Zeigt eine Liste vorhandener Stile an. Stile können bearbeitet, hinzugefügt, gelöscht werden." />
<button id="zrlDaniel" label="Daniels Spezial" image="dk.png" onAction="Ribbon_Click" size="large"
getVisible="Daniel_GetVisible"/>
</group>
<group id="zrlInfoGroup" label="Info">
<button id="zrlDemo" label="Demo" image="d.png" onAction="Ribbon_Click" size="large"
screentip="Demo-Dokument öffnen"
supertip="Öffnet ein eingebautes Demo-Dokument, das zum Ausprobieren verwendet werden kann." />
<button id="zrlAbout" label="Über..." image="i.png" onAction="Ribbon_Click" size="large"
screentip="Über zaaReloaded"
supertip="Zeigt Informationen über das Add-in an." />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

View File

@ -48,6 +48,7 @@ namespace zaaReloaded2
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Bovender.ExceptionHandler.CentralHandler.ManageExceptionCallback += CentralHandler_ManageExceptionCallback;
CheckForUpdates();
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
@ -118,6 +119,7 @@ namespace zaaReloaded2
ExceptionViewModel vm = new ExceptionViewModel(e.Exception);
vm.InjectInto<ExceptionView>().ShowDialog();
}
#endregion
#region Private fields

View File

@ -1,2 +1,2 @@
2.0.0-alpha.2
2.0.0.2
2.0.0-alpha.5
2.0.0.5

View File

@ -79,6 +79,14 @@ namespace zaaReloaded2.ViewModels
}
}
public string LicenseUrl
{
get
{
return Properties.Settings.Default.LicenseUrl.ToString();
}
}
#endregion
#region Commands
@ -96,6 +104,19 @@ namespace zaaReloaded2.ViewModels
}
}
public DelegatingCommand GotoLicenseCommand
{
get
{
if (_gotoLicenseCommand == null)
{
_gotoLicenseCommand = new DelegatingCommand(
param => { Process.Start(new ProcessStartInfo(LicenseUrl)); });
}
return _gotoLicenseCommand;
}
}
#endregion
#region ViewModelBase implementation
@ -110,6 +131,7 @@ namespace zaaReloaded2.ViewModels
#region Fields
DelegatingCommand _gotoHomepageCommand;
DelegatingCommand _gotoLicenseCommand;
#endregion
}

View File

@ -0,0 +1,46 @@
/* CategoryViewModel.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Bovender.Mvvm.ViewModels;
namespace zaaReloaded2.ViewModels
{
/// <summary>
/// A simple view model that can be used to categorize items
/// in a tree view. It has a custom DisplayString and holds
/// a collection of child view model items.
/// </summary>
class CategoryViewModel : ViewModelBase
{
public IEnumerable<ViewModelBase> Children { get; private set; }
public CategoryViewModel(string name, IEnumerable<ViewModelBase> children)
{
DisplayString = name;
Children = children;
}
public override object RevealModelObject()
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,71 @@
/* ElementViewModelBase.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Bovender.Mvvm.ViewModels;
using zaaReloaded2.Controller.Elements;
using System.Diagnostics;
using System.Collections.ObjectModel;
namespace zaaReloaded2.ViewModels
{
public class ControlElementViewModel : ElementViewModel
{
#region Properties
/// <summary>
/// Gets a collection of child ElementViewModels.
/// </summary>
public ObservableCollection<ElementViewModel> Elements { get; protected set; }
#endregion
#region Constructors
public ControlElementViewModel() : this(null) { }
public ControlElementViewModel(ControlElementBase controlElement)
: base(controlElement)
{
Elements = new ObservableCollection<ElementViewModel>();
if (controlElement != null)
{
foreach (FormatElementBase childElement in controlElement.FormatElements)
{
FormatElementViewModel childVM = new FormatElementViewModel(childElement);
Elements.Add(childVM);
}
}
}
#endregion
#region Public methods
public void AddChildElement(FormatElementViewModel viewModel)
{
Elements.Add(viewModel);
ControlElementBase e = Element as ControlElementBase;
e.FormatElements.Add(viewModel.RevealModelObject() as FormatElementBase);
}
#endregion
}
}

View File

@ -0,0 +1,196 @@
/* ElementPickerViewModel.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Bovender.Mvvm;
using Bovender.Mvvm.Messaging;
using Bovender.Mvvm.ViewModels;
using System.Collections.ObjectModel;
using zaaReloaded2.Controller.Elements;
namespace zaaReloaded2.ViewModels
{
/// <summary>
/// View model that presents a list of zaaReloaded2.Contorller.Elements.ElementBase
/// classes to choose from.
/// </summary>
class ElementPickerViewModel : ViewModelBase
{
#region Properties
/// <summary>
/// A two-dimensional tree
/// </summary>
public IList<CategoryViewModel> Categories { get; private set; }
/// <summary>
/// Gets the currently selected element, or null if no element is selected.
/// </summary>
/// <remarks>
/// TODO: Raise PropertyChanged event.
/// </remarks>
public ElementViewModel Selected { get; private set; }
#endregion
#region Commands
public DelegatingCommand ChooseElementCommand
{
get
{
if (_chooseElementCommand == null)
{
_chooseElementCommand = new DelegatingCommand(
param => DoChooseElement(),
param => CanChooseElement());
}
return _chooseElementCommand;
}
}
#endregion
#region Messages
/// <summary>
/// A message that is sent out when an element has been chosen;
/// the message content is the element's view model with the element
/// wrapped inside.
/// </summary>
public Message<ViewModelMessageContent> ElementChosenMessage
{
get
{
if (_elementChosenMessage == null)
{
_elementChosenMessage = new Message<ViewModelMessageContent>();
}
return _elementChosenMessage;
}
}
#endregion
#region Constructors
public ElementPickerViewModel(bool allowControlElements)
{
Categories = new List<CategoryViewModel>();
if (allowControlElements)
{
Categories.Add(
new CategoryViewModel(
"Kontroll-Elemente",
new Collection<ViewModelBase>()
{
CreateControlElementViewModel(new SelectFirstDay()),
CreateControlElementViewModel(new SelectLastDay()),
CreateControlElementViewModel(new SelectEachDay())
}
)
);
}
Categories.Add(
new CategoryViewModel(
"Ausgabe-Elemente",
new Collection<ViewModelBase>()
{
CreateFormatElementViewModel("Laborparameter", new Items()),
CreateFormatElementViewModel("Beliebiger Text", new CustomText()),
}
)
);
}
#endregion
#region Private methods
/// <summary>
/// Creates a new ControlElementViewModel that wraps a ControlElementBase
/// object. The display string of the ControlElementViewModel is taken
/// from the canonical Label of the control element.
/// </summary>
ViewModelBase CreateControlElementViewModel(ControlElementBase element)
{
ControlElementViewModel vm = new ControlElementViewModel(element);
vm.DisplayString = element.Label;
vm.PropertyChanged += ElementViewModel_PropertyChanged;
return vm;
}
/// <summary>
/// Creates a new FormatElementViewModel that wraps a FormatElementBase
/// object and has a custom display string. The custom display string
/// is necessary because format elements do not have a canonical label.
/// </summary>
ViewModelBase CreateFormatElementViewModel(string name, FormatElementBase element)
{
FormatElementViewModel vm = new FormatElementViewModel(element);
vm.DisplayString = name;
vm.PropertyChanged += ElementViewModel_PropertyChanged;
return vm;
}
void ElementViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsSelected")
{
// Casting sender as ElementViewModel may result in Null, but this
// is a desired effect because category headings may be selected
// in a view, but are not valid ElementViewModels that we could
// 'choose'.
Selected = sender as ElementViewModel;
}
}
void DoChooseElement()
{
if (CanChooseElement())
{
ElementChosenMessage.Send(new ViewModelMessageContent(Selected));
}
}
bool CanChooseElement()
{
return Selected != null;
}
#endregion
#region Implementation ov ViewModelBase
public override object RevealModelObject()
{
throw new NotImplementedException();
}
#endregion
#region Fields
DelegatingCommand _chooseElementCommand;
Message<ViewModelMessageContent> _elementChosenMessage;
#endregion
}
}

View File

@ -0,0 +1,73 @@
/* ElementViewModel.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using Bovender.Mvvm.ViewModels;
using zaaReloaded2.Controller.Elements;
using System.Collections.ObjectModel;
namespace zaaReloaded2.ViewModels
{
public abstract class ElementViewModel : ViewModelBase
{
#region Properties
/// <summary>
/// Gets the label of the wrapped element.
/// </summary>
public virtual string Label
{
[DebuggerStepThrough]
get
{
return Element.Label;
}
}
#endregion
#region Constructors
public ElementViewModel() { }
public ElementViewModel(ElementBase element)
{
Element = element;
}
#endregion
#region Protected properties
protected ElementBase Element { get; set; }
#endregion
#region Implementation of ViewModelBase
public override object RevealModelObject()
{
return Element;
}
#endregion
}
}

View File

@ -0,0 +1,56 @@
/* FormatElementViewModel.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using zaaReloaded2.Controller.Elements;
namespace zaaReloaded2.ViewModels
{
public class FormatElementViewModel : ElementViewModel
{
#region Public properties
public string Content
{
[DebuggerStepThrough]
get { return ((FormatElementBase)Element).Content; }
set
{
((FormatElementBase)Element).Content = value;
OnPropertyChanged("Content");
}
}
#endregion
#region Constructors
public FormatElementViewModel() : base() { }
public FormatElementViewModel(FormatElementBase formatElement)
: this()
{
Element = formatElement;
}
#endregion
}
}

View File

@ -0,0 +1,343 @@
/* SettingsRepositoryViewModel.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Bovender.Mvvm;
using Bovender.Mvvm.ViewModels;
using Bovender.Mvvm.Messaging;
using zaaReloaded2.Controller;
using System.Collections.ObjectModel;
namespace zaaReloaded2.ViewModels
{
public class SettingsRepositoryViewModel : ViewModelBase
{
#region Properties
public ObservableCollection<SettingsViewModel> SettingsList { get; private set; }
public SettingsViewModel Selected { get; private set; }
#endregion
#region Commands
public DelegatingCommand AddSettingsCommand
{
get
{
if (_addSettingsCommand == null)
{
_addSettingsCommand = new DelegatingCommand(
param => DoAddSettings());
}
return _addSettingsCommand;
}
}
public DelegatingCommand EditSettingsCommand
{
get
{
if (_editSettingsCommand == null)
{
_editSettingsCommand = new DelegatingCommand(
param => DoEditSettings(),
param => CanEditSettings());
}
return _editSettingsCommand;
}
}
public DelegatingCommand UseSettingsCommand
{
get
{
if (_useSettingsCommand == null)
{
_useSettingsCommand = new DelegatingCommand(
param => DoUseSettings(),
param => CanUseSettings());
}
return _useSettingsCommand;
}
}
public DelegatingCommand DeleteSettingsCommand
{
get
{
if (_deleteSettingsCommand == null)
{
_deleteSettingsCommand = new DelegatingCommand(
param => DoDeleteSettings(),
param => CanDeleteSettings());
}
return _deleteSettingsCommand;
}
}
public DelegatingCommand CopySettingsCommand
{
get
{
if (_copySettingsCommand == null)
{
_copySettingsCommand = new DelegatingCommand(
param => DoCopySettings());
}
return _copySettingsCommand;
}
}
public DelegatingCommand ResetSettingsCommand
{
get
{
if (_resetSettingsCommand == null)
{
_resetSettingsCommand = new DelegatingCommand(
param => DoResetSettings());
}
return _resetSettingsCommand;
}
}
#endregion
#region Messages
public Message<ViewModelMessageContent> EditSettingsMessage
{
get
{
if (_editSettingsMessage == null)
{
_editSettingsMessage = new Message<ViewModelMessageContent>();
}
return _editSettingsMessage;
}
}
public Message<ViewModelMessageContent> UseSettingsMessage
{
get
{
if (_useSettingsMessage == null)
{
_useSettingsMessage = new Message<ViewModelMessageContent>();
}
return _useSettingsMessage;
}
}
public Message<ViewModelMessageContent> ConfirmDeleteSettingsMessage
{
get
{
if (_confirmDeleteSettingsMessage == null)
{
_confirmDeleteSettingsMessage = new Message<ViewModelMessageContent>();
}
return _confirmDeleteSettingsMessage;
}
}
public Message<ViewModelMessageContent> ConfirmResetSettingsMessage
{
get
{
if (_confirmResetSettingsMessage == null)
{
_confirmResetSettingsMessage = new Message<ViewModelMessageContent>();
}
return _confirmResetSettingsMessage;
}
}
#endregion
#region Constructors
public SettingsRepositoryViewModel(SettingsRepository repository)
{
_repository = repository;
SettingsList = new ObservableCollection<SettingsViewModel>();
foreach (Settings s in repository.SettingsList)
{
SettingsViewModel vm = new SettingsViewModel(s);
AddSettingsViewModel(vm);
}
}
#endregion
#region Private methods
void DoEditSettings()
{
if (CanEditSettings())
{
EditSettingsMessage.Send(new ViewModelMessageContent(Selected));
}
}
bool CanEditSettings()
{
return Selected != null && !IsDefaultSettings();
}
void DoUseSettings()
{
UseSettingsMessage.Send(new ViewModelMessageContent(Selected));
}
bool CanUseSettings()
{
return Selected != null;
}
void DoAddSettings()
{
Settings s = new Settings("Neu");
SettingsViewModel vm = new SettingsViewModel(s);
_repository.SettingsList.Add(s);
SettingsList.Add(vm);
vm.IsSelected = true;
}
bool CanDeleteSettings()
{
return Selected != null && !IsDefaultSettings();
}
void DoDeleteSettings()
{
if (CanDeleteSettings())
{
ConfirmDeleteSettingsMessage.Send(
new ViewModelMessageContent(Selected),
param => ConfirmDeleteSettings(param));
}
}
void ConfirmDeleteSettings(ViewModelMessageContent content)
{
SettingsViewModel vm = content.ViewModel as SettingsViewModel;
if (CanDeleteSettings() && content.Confirmed)
{
_repository.SettingsList.Remove(vm.RevealModelObject() as Settings);
SettingsList.Remove(vm);
}
}
void DoResetSettings()
{
ConfirmResetSettingsMessage.Send(
new ViewModelMessageContent(this),
param => ConfirmResetSettings(param));
}
void ConfirmResetSettings(ViewModelMessageContent content)
{
if (content.Confirmed)
{
}
}
void DoCopySettings()
{
if (Selected != null)
{
SettingsViewModel copy = Selected.Clone() as SettingsViewModel;
_repository.SettingsList.Add(copy.RevealModelObject() as Settings);
AddSettingsViewModel(copy);
Selected.IsSelected = false;
copy.IsSelected = true;
}
}
void SettingsViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
SettingsViewModel vm = sender as SettingsViewModel;
if (vm != null && e.PropertyName == "IsSelected")
{
Selected = vm.IsSelected ? vm : null;
}
}
/// <summary>
/// Determines whether the selected SettingsViewModel belongs
/// to one of the default settings.
/// </summary>
bool IsDefaultSettings()
{
if (Selected != null)
{
return
(Selected.Name == zaaReloaded2.Properties.Settings.Default.SettingsNameClinic
|| Selected.Name == zaaReloaded2.Properties.Settings.Default.SettingsNameWard);
}
else
{
return false;
}
}
/// <summary>
/// Adds a settings view model to the collection and wires the
/// PropertyChanged event.
/// </summary>
/// <param name="settingsViewModel">SettingsViewModel to add.</param>
void AddSettingsViewModel(SettingsViewModel settingsViewModel)
{
settingsViewModel.PropertyChanged += SettingsViewModel_PropertyChanged;
SettingsList.Add(settingsViewModel);
}
#endregion
#region Implementation of ViewModelBase
public override object RevealModelObject()
{
return _repository;
}
#endregion
#region Fields
SettingsRepository _repository;
DelegatingCommand _useSettingsCommand;
DelegatingCommand _addSettingsCommand;
DelegatingCommand _editSettingsCommand;
DelegatingCommand _deleteSettingsCommand;
DelegatingCommand _resetSettingsCommand;
DelegatingCommand _copySettingsCommand;
Message<ViewModelMessageContent> _confirmDeleteSettingsMessage;
Message<ViewModelMessageContent> _confirmResetSettingsMessage;
Message<ViewModelMessageContent> _editSettingsMessage;
Message<ViewModelMessageContent> _useSettingsMessage;
#endregion
}
}

View File

@ -0,0 +1,348 @@
/* SettingsViewModel.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using Bovender.Mvvm;
using Bovender.Mvvm.ViewModels;
using Bovender.Mvvm.Messaging;
using zaaReloaded2.Controller;
using zaaReloaded2.Controller.Elements;
using zaaReloaded2.Formatter;
namespace zaaReloaded2.ViewModels
{
/// <summary>
/// View model for the zaaReloaded2.Controller.Settings class.
/// </summary>
public class SettingsViewModel : ViewModelBase, ICloneable
{
#region Properties
/// <summary>
/// Gets or sets the name of the Settings
/// </summary>
public string Name
{
[DebuggerStepThrough]
get
{
return _settings.Name;
}
[DebuggerStepThrough]
set
{
_settings.Name = value;
OnPropertyChanged("Name");
}
}
/// <summary>
/// Is true if the settings' name is editable.
/// If the settings' name is a default, preconfigured name,
/// this will be false.
/// </summary>
public bool IsNameEnabled
{
get
{
return (Name != Properties.Settings.Default.SettingsNameClinic) &&
(Name != Properties.Settings.Default.SettingsNameWard);
}
}
/// <summary>
/// Gets a list of element view models.
/// </summary>
public IList<ElementViewModel> Elements { get; private set; }
/// <summary>
/// Gets or sets the currently selected element.
/// </summary>
public ElementViewModel SelectedElement
{
get { return _selectedElement; }
set
{
_selectedElement = value;
OnPropertyChanged("SelectedElement");
}
}
/// <summary>
/// Returns an EnumProvider object for the ReferenceStyle
/// </summary>
public EnumProvider<ReferenceStyle> ReferenceStyle
{
get
{
if (_referenceStyle == null)
{
_referenceStyle = new EnumProvider<ReferenceStyle>(_settings.ReferenceStyle);
}
return _referenceStyle;
}
}
#endregion
#region Constructors
public SettingsViewModel()
: this(new Settings())
{ }
public SettingsViewModel(Settings settings)
: base()
{
_settings = settings;
Elements = new List<ElementViewModel>();
foreach (ElementBase element in settings.Elements)
{
ElementViewModel vm;
if (element is FormatElementBase)
{
vm = new FormatElementViewModel(element as FormatElementBase);
}
else if (element is ControlElementBase)
{
vm = new ControlElementViewModel(element as ControlElementBase);
foreach (FormatElementViewModel childVM in ((ControlElementViewModel)vm).Elements)
{
childVM.PropertyChanged += ElementViewModel_PropertyChanged;
}
}
else
{
throw new InvalidOperationException(
"Cannot create ViewModel for " + element.GetType().ToString());
}
vm.PropertyChanged += ElementViewModel_PropertyChanged;
Elements.Add(vm);
}
}
#endregion
#region Messages
public Message<ViewModelMessageContent> AddElementMessage
{
get
{
if (_addElementMessage == null)
{
_addElementMessage = new Message<ViewModelMessageContent>();
}
return _addElementMessage;
}
}
public Message<ViewModelMessageContent> AddChildElementMessage
{
get
{
if (_addChildElementMessage == null)
{
_addChildElementMessage = new Message<ViewModelMessageContent>();
}
return _addChildElementMessage;
}
}
#endregion
#region Commands
public DelegatingCommand AddElementCommand
{
get
{
if (_addElementCommand == null)
{
_addElementCommand = new DelegatingCommand(
param => DoAddElement());
}
return _addElementCommand;
}
}
public DelegatingCommand AddChildElementCommand
{
get
{
if (_addChildElementCommand == null)
{
_addChildElementCommand = new DelegatingCommand(
param => DoAddChildElement(),
param => CanAddChildElement());
}
return _addChildElementCommand;
}
}
public DelegatingCommand DeleteElementCommand
{
get
{
if (_deleteElementCommand == null)
{
_deleteElementCommand = new DelegatingCommand(
param => DoDeleteElement(),
param => CanDeleteElement());
}
return _deleteElementCommand;
}
}
public DelegatingCommand CopyElementCommand
{
get
{
if (_copyElementCommand == null)
{
_copyElementCommand = new DelegatingCommand(
param => DoCopyElement(),
param => CanCopyElement());
}
return _copyElementCommand;
}
}
#endregion
#region Public methods
/// <summary>
/// Wires the OnProperty changed event of an ElementViewModel's
/// wrapped model and adds the view model to the Elements collection.
/// </summary>
public void AddElementViewModel(ElementViewModel elementViewModel)
{
elementViewModel.PropertyChanged += ElementViewModel_PropertyChanged;
Elements.Add(elementViewModel);
_settings.Elements.Add(elementViewModel.RevealModelObject() as ElementBase);
}
/// <summary>
/// Wires the OnProperty changed event of an ElementViewModel's
/// wrapped model and adds the view model as a child of another
/// view model.
/// </summary>
public void AddChildElementViewModel(ControlElementViewModel parent, FormatElementViewModel child)
{
child.PropertyChanged += ElementViewModel_PropertyChanged;
parent.AddChildElement(child);
}
#endregion
#region Private methods
void DoAddElement()
{
// Create a new element picker; it will automatically create and
// send us a new element view model if one is chosen by the view.
ElementPickerViewModel picker = new ElementPickerViewModel(true);
picker.ElementChosenMessage.Sent += (sender, args) =>
{
ElementViewModel newVM = args.Content.ViewModel as ElementViewModel;
AddElementViewModel(newVM);
};
AddElementMessage.Send(new ViewModelMessageContent(picker));
}
void DoAddChildElement()
{
if (CanAddChildElement())
{
// Create a new element picker; it will automatically create and
// send us a new element view model if one is chosen by the view.
ElementPickerViewModel picker = new ElementPickerViewModel(false);
picker.ElementChosenMessage.Sent += (sender, args) =>
{
FormatElementViewModel newVM = args.Content.ViewModel as FormatElementViewModel;
AddChildElementViewModel(SelectedElement as ControlElementViewModel, newVM);
};
AddChildElementMessage.Send(new ViewModelMessageContent(picker));
}
}
bool CanAddChildElement()
{
return SelectedElement is ControlElementViewModel;
}
void DoDeleteElement() { }
bool CanDeleteElement() { return _selectedElement != null; }
void DoCopyElement() { }
bool CanCopyElement() { return _selectedElement != null; }
/// <summary>
/// Sets or unsets the SelectedElement property whenever the IsSelected
/// property of an ElementViewModel changes.
/// </summary>
void ElementViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
ElementViewModel vm = sender as ElementViewModel;
if (vm != null && e.PropertyName == "IsSelected")
{
SelectedElement = vm.IsSelected ? vm : null;
}
}
#endregion
#region Implementation of ViewModelBase
public override object RevealModelObject()
{
return _settings;
}
#endregion
#region Implementation of ICloneable
public object Clone()
{
return new SettingsViewModel(_settings.Clone() as Settings);
}
#endregion
#region Fields
Settings _settings;
DelegatingCommand _addElementCommand;
DelegatingCommand _addChildElementCommand;
DelegatingCommand _deleteElementCommand;
DelegatingCommand _copyElementCommand;
Message<ViewModelMessageContent> _addElementMessage;
Message<ViewModelMessageContent> _addChildElementMessage;
ElementViewModel _selectedElement;
EnumProvider<ReferenceStyle> _referenceStyle;
#endregion
}
}

View File

@ -32,9 +32,15 @@
<TextBlock TextAlignment="Center" Text="{Binding Version}" Margin="0, 5, 0, 10" />
<TextBlock TextAlignment="Center" Text="{Binding CopyrightString}" Margin="0, 0, 0, 10" />
<TextBlock TextAlignment="Center" Margin="0, 10, 0, 10">
Homepage:
<Hyperlink Command="{Binding GotoHomepageCommand}">
<TextBlock Text="{Binding Homepage}" />
</Hyperlink>
<LineBreak />
Lizenz:
<Hyperlink Command="{Binding GotoLicenseCommand}">
<TextBlock Text="Apache 2.0" />
</Hyperlink>
</TextBlock>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0, 10, 0, 0">
<Button Content="Schließen" Command="{Binding CloseViewCommand}" />

View File

@ -0,0 +1,60 @@
<!--
AboutView - Copy.xaml
part of zaaReloaded2
Copyright 2015 Daniel Kraus
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<Window x:Class="zaaReloaded2.Views.SettingsRepositoryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
SizeToContent="WidthAndHeight" ResizeMode="CanResizeWithGrip" ShowInTaskbar="False"
b:WindowState.CenterScreen="True" b:WindowState.Save="True"
Title="Stil auswählen"
>
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/zaaReloaded2;component/style.xaml" />
<ResourceDictionary>
<Style x:Key="settingsListItem" TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<StackPanel Margin="10">
<Label Target="{Binding ElementName=settingsList}">Bitte Stil auswählen:</Label>
<DockPanel Margin="0 5 0 0">
<StackPanel DockPanel.Dock="Right" Margin="10 0 0 0">
<Button Command="{Binding UseSettingsCommand}" Content="Wählen" Margin="0 0 0 5" />
<Button Command="{Binding AddSettingsCommand}" Content="Hinzufügen" Margin="0 10 0 5" />
<Button Command="{Binding EditSettingsCommand}" Content="Bearbeiten" Margin="0 0 0 5" />
<Button Command="{Binding DeleteSettingsCommand}" Content="Entfernen" Margin="0 0 0 5" />
<Button Command="{Binding CopySettingsCommand}" Content="Kopieren" Margin="0 0 0 5" />
<Button Command="{Binding CloseViewCommand}" Content="Abbruch" Margin="0 10 0 0" IsCancel="True" />
</StackPanel>
<StackPanel>
<ListBox ItemsSource="{Binding SettingsList}"
DisplayMemberPath="Name"
ItemContainerStyle="{StaticResource settingsListItem}"
x:Name="settingsList"
MinWidth="240" MinHeight="240" />
</StackPanel>
</DockPanel>
</StackPanel>
</Window>

View File

@ -0,0 +1,33 @@
/* SettingsRepositoryView.xaml.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System.Windows;
namespace zaaReloaded2.Views
{
/// <summary>
/// Interaction logic for SettingsRepositoryView.xaml
/// </summary>
public partial class SettingsRepositoryView : Window
{
public SettingsRepositoryView()
{
InitializeComponent();
}
}
}

View File

@ -47,6 +47,51 @@
<setting name="ExceptionPostUrl" serializeAs="String">
<value>http://zaa.nephrowiki.de/postreport.php</value>
</setting>
<setting name="LicenseUrl" serializeAs="String">
<value>http://www.apache.org/licenses/LICENSE-2.0</value>
</setting>
<setting name="SettingsNameWard" serializeAs="String">
<value>Standard für Station</value>
</setting>
<setting name="SettingsNameClinic" serializeAs="String">
<value>Standard für NepA</value>
</setting>
<setting name="DefaultItemsClinicalChem" serializeAs="String">
<value>Klinische Chemie: Na, K, Cl, Mg, Pi, Alb, Prot, LDH, Hsre</value>
</setting>
<setting name="DefaultItemsHematology" serializeAs="String">
<value>Hämatologie: Hb, Hkt, Reti, Leu, Thr, Neu, HbA1c</value>
</setting>
<setting name="DefaultItemsCoagulation" serializeAs="String">
<value>Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa</value>
</setting>
<setting name="DefaultItemsSpotUrine" serializeAs="String">
<value>Spot-Urin: U-*</value>
</setting>
<setting name="DefaultItemsCollectedUrine" serializeAs="String">
<value>Sammelurin: SU-*</value>
</setting>
<setting name="DefaultItemsOther" serializeAs="String">
<value>Weitere Werte: *</value>
</setting>
<setting name="DefaultItemsCardio" serializeAs="String">
<value>Kardiale Marker: CK, CKMB, Trop, NTproBNP</value>
</setting>
<setting name="DefaultItemsLipids" serializeAs="String">
<value>Blutfette: TG, Chol, LDL, HDL, Lp(a)</value>
</setting>
<setting name="DefaultItemsLiver" serializeAs="String">
<value>Leber: GOT, GGT, GPT, AP, Bili, CHE</value>
</setting>
<setting name="DefaultItemsKidney" serializeAs="String">
<value>Niere: Krea, Hst, eGFR</value>
</setting>
<setting name="DefaultItemsInflammation" serializeAs="String">
<value>Entzündung/Immunsystem: CRP, Pct, C3, C4</value>
</setting>
<setting name="DefaultItemsDrugs" serializeAs="String">
<value>Medikamente: TAC, CSA, SIR, Vancomycin, Gentamicin, Tobramicin</value>
</setting>
</zaaReloaded2.Properties.Settings>
</applicationSettings>
<userSettings>
@ -54,6 +99,9 @@
<setting name="LastUpdateCheck" serializeAs="String">
<value />
</setting>
<setting name="LastSettings" serializeAs="String">
<value>00000000-0000-0000-0000-000000000000</value>
</setting>
</zaaReloaded2.Properties.Settings>
</userSettings>
</configuration>

View File

@ -176,6 +176,7 @@
<Compile Include="Controller\Elements\CustomText.cs" />
<Compile Include="Controller\Settings.cs" />
<Compile Include="Controller\SettingsRepository.cs" />
<Compile Include="Demo\Demo.cs" />
<Compile Include="ExceptionHandler\ExceptionDetailView.xaml.cs" />
<Compile Include="ExceptionHandler\ExceptionView.xaml.cs" />
<Compile Include="ExceptionHandler\ExceptionViewModel.cs" />
@ -219,10 +220,20 @@
</Compile>
<Compile Include="Updater\Updater.cs" />
<Compile Include="ViewModels\AboutViewModel.cs" />
<Compile Include="ViewModels\CategoryViewModel.cs" />
<Compile Include="ViewModels\ElementPickerViewModel.cs" />
<Compile Include="ViewModels\ElementViewModel.cs" />
<Compile Include="ViewModels\FormatElementViewModel.cs" />
<Compile Include="ViewModels\ControlElementViewModel.cs" />
<Compile Include="ViewModels\SettingsRepositoryViewModel.cs" />
<Compile Include="Views\SettingsRepositoryView.xaml.cs">
<DependentUpon>SettingsRepositoryView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\AboutView.xaml.cs">
<DependentUpon>AboutView.xaml</DependentUpon>
</Compile>
<Compile Include="Updater\Version.cs" />
<Compile Include="ViewModels\SettingsViewModel.cs" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
@ -233,6 +244,7 @@
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="app.config" />
<EmbeddedResource Include="Demo\Demo.docx" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
@ -285,6 +297,10 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Resource>
<Page Include="Views\SettingsRepositoryView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\AboutView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@ -310,6 +326,9 @@
<ItemGroup>
<Resource Include="Icons\fff.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Icons\d.png" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>