From 67c1d352795802dae0c045cedeed82c883819d4e Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Thu, 30 May 2019 06:34:12 +0200 Subject: [PATCH] Renamed project folders to match the respective project name --- .../.classpath | 0 .../.gitignore | 0 {era.mi => net.mograsim.logic.core}/.project | 0 .../.settings/org.eclipse.jdt.core.prefs | 0 .../.settings/org.eclipse.jdt.ui.prefs | 0 .../META-INF/MANIFEST.MF | 0 .../build.properties | 0 .../src/net/mograsim/logic/core/Util.java | 0 .../logic/core/components/BasicComponent.java | 72 +- .../logic/core/components/BitDisplay.java | 102 +- .../mograsim/logic/core/components/Clock.java | 122 +- .../logic/core/components/Component.java | 56 +- .../logic/core/components/Connector.java | 152 +- .../mograsim/logic/core/components/Demux.java | 164 +- .../logic/core/components/ManualSwitch.java | 148 +- .../logic/core/components/Merger.java | 170 +- .../mograsim/logic/core/components/Mux.java | 190 +- .../logic/core/components/Splitter.java | 118 +- .../logic/core/components/TriStateBuffer.java | 102 +- .../logic/core/components/gates/AndGate.java | 28 +- .../core/components/gates/MultiInputGate.java | 112 +- .../logic/core/components/gates/NotGate.java | 100 +- .../logic/core/components/gates/OrGate.java | 28 +- .../logic/core/components/gates/XorGate.java | 40 +- .../logic/core/tests/ComponentTest.java | 866 +-- .../mograsim/logic/core/tests/GUITest.java | 602 +- .../logic/core/tests/TestBitDisplay.java | 94 +- .../logic/core/timeline/Timeline.java | 0 .../logic/core/timeline/TimelineEvent.java | 0 .../core/timeline/TimelineEventHandler.java | 0 .../net/mograsim/logic/core/types/Bit.java | 0 .../mograsim/logic/core/types/BitVector.java | 0 .../logic/core/types/BitVectorFormatter.java | 0 .../logic/core/types/ColorDefinition.java | 0 .../mograsim/logic/core/types/LogicType.java | 0 .../logic/core/types/MutationOperation.java | 0 .../logic/core/types/StrictLogicType.java | 0 .../net/mograsim/logic/core/wires/Wire.java | 982 +-- .../logic/core/wires/WireObserver.java | 18 +- {LogicUI => net.mograsim.logic.ui}/.classpath | 0 {LogicUI => net.mograsim.logic.ui}/.gitignore | 0 {LogicUI => net.mograsim.logic.ui}/.project | 0 .../.settings/org.eclipse.jdt.core.prefs | 912 +-- .../.settings/org.eclipse.jdt.ui.prefs | 126 +- .../META-INF/MANIFEST.MF | 0 .../build.properties | 0 .../oldsrc/GUIMerger.java | 0 .../oldsrc/GUIMux.java | 0 .../oldsrc/GUISplitter.java | 0 .../net/mograsim/logic/ui/ColorHelper.java | 0 .../net/mograsim/logic/ui/LogicExecuter.java | 0 .../net/mograsim/logic/ui/LogicUICanvas.java | 0 .../logic/ui/LogicUIStandaloneGUI.java | 0 .../logic/ui/SimpleLogicUIStandalone.java | 0 .../logic/ui/examples/RSLatchExample.java | 0 .../mograsim/logic/ui/model/ViewModel.java | 0 .../logic/ui/model/components/GUIAndGate.java | 0 .../ui/model/components/GUIComponent.java | 0 .../ui/model/components/GUIManualSwitch.java | 0 .../logic/ui/model/components/GUINotGate.java | 0 .../logic/ui/model/components/GUIOrGate.java | 0 .../components/SimpleRectangularGUIGate.java | 0 .../logic/ui/model/wires/GUIWire.java | 0 .../logic/ui/model/wires/MovablePin.java | 0 .../mograsim/logic/ui/model/wires/Pin.java | 0 .../logic/ui/model/wires/WireCrossPoint.java | 0 .../ui/modeladapter/LogicModelParameters.java | 0 .../modeladapter/ViewLogicModelAdapter.java | 0 .../componentadapters/ComponentAdapter.java | 0 .../ManualSwitchAdapter.java | 0 .../componentadapters/SimpleGateAdapter.java | 0 {SampleERCP => net.mograsim.rcp}/.classpath | 22 +- {SampleERCP => net.mograsim.rcp}/.gitignore | 0 {SampleERCP => net.mograsim.rcp}/.project | 70 +- .../.settings/org.eclipse.jdt.core.prefs | 930 +-- .../.settings/org.eclipse.jdt.ui.prefs | 128 +- .../org.eclipse.ltk.core.refactoring.prefs | 4 +- .../.settings/org.eclipse.pde.prefs | 68 +- .../.settings/org.eclipse.wst.sse.core.prefs | 4 +- .../org.sonarlint.eclipse.core.prefs | 8 +- .../Application.e4xmi | 110 +- {SampleERCP => net.mograsim.rcp}/LICENSE | 0 .../META-INF/MANIFEST.MF | 0 .../OSGI-INF/l10n/bundle.properties | 10 +- .../build.properties | 36 +- .../css/default.css | 0 {SampleERCP => net.mograsim.rcp}/icons/af.png | Bin .../icons/app/ico_128t.png | Bin .../icons/app/ico_16t.png | Bin .../icons/app/ico_24t.png | Bin .../icons/app/ico_256t.icns | Bin .../icons/app/ico_256t.png | Bin .../icons/app/ico_256t.xpm | 6018 ++++++++--------- .../icons/app/ico_32t.png | Bin .../icons/app/ico_48t.png | Bin .../icons/app/ico_64t.png | Bin .../icons/app/ico_all.ico | Bin .../icons/embedded.png | Bin .../icons/enterprise.png | Bin .../icons/home.png | Bin .../icons/languages.png | Bin .../icons/open_in_app.png | Bin .../icons/rcp.png | Bin .../icons/save_edit.png | Bin .../net.mograsim.rcp.product | 0 {SampleERCP => net.mograsim.rcp}/plugin.xml | 140 +- .../schema/splashExtension.exsd | 0 {SampleERCP => net.mograsim.rcp}/splash.bmp | Bin .../mograsim/rcp/handlers/AboutHandler.java | 28 +- .../mograsim/rcp/handlers/OpenHandler.java | 32 +- .../mograsim/rcp/handlers/QuitHandler.java | 36 +- .../mograsim/rcp/handlers/SaveHandler.java | 48 +- .../net/mograsim/rcp/parts/LogicUIPart.java | 0 .../net/mograsim/rcp/parts/SamplePart.java | 120 +- .../ExtensibleSplashHandler.java | 656 +- 115 files changed, 6886 insertions(+), 6886 deletions(-) rename {era.mi => net.mograsim.logic.core}/.classpath (100%) rename {era.mi => net.mograsim.logic.core}/.gitignore (100%) rename {era.mi => net.mograsim.logic.core}/.project (100%) rename {era.mi => net.mograsim.logic.core}/.settings/org.eclipse.jdt.core.prefs (100%) rename {era.mi => net.mograsim.logic.core}/.settings/org.eclipse.jdt.ui.prefs (100%) rename {era.mi => net.mograsim.logic.core}/META-INF/MANIFEST.MF (100%) rename {LogicUI => net.mograsim.logic.core}/build.properties (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/Util.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/BasicComponent.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/BitDisplay.java (95%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/Clock.java (95%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/Component.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/Connector.java (95%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/Demux.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/ManualSwitch.java (94%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/Merger.java (95%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/Mux.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/Splitter.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/TriStateBuffer.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/gates/AndGate.java (97%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/gates/MultiInputGate.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/gates/NotGate.java (94%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/gates/OrGate.java (97%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/components/gates/XorGate.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/tests/ComponentTest.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/tests/GUITest.java (96%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/tests/TestBitDisplay.java (95%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/timeline/Timeline.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/timeline/TimelineEvent.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/timeline/TimelineEventHandler.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/types/Bit.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/types/BitVector.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/types/BitVectorFormatter.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/types/ColorDefinition.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/types/LogicType.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/types/MutationOperation.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/types/StrictLogicType.java (100%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/wires/Wire.java (95%) rename {era.mi => net.mograsim.logic.core}/src/net/mograsim/logic/core/wires/WireObserver.java (96%) rename {LogicUI => net.mograsim.logic.ui}/.classpath (100%) rename {LogicUI => net.mograsim.logic.ui}/.gitignore (100%) rename {LogicUI => net.mograsim.logic.ui}/.project (100%) rename {LogicUI => net.mograsim.logic.ui}/.settings/org.eclipse.jdt.core.prefs (98%) rename {LogicUI => net.mograsim.logic.ui}/.settings/org.eclipse.jdt.ui.prefs (97%) rename {LogicUI => net.mograsim.logic.ui}/META-INF/MANIFEST.MF (100%) rename {era.mi => net.mograsim.logic.ui}/build.properties (100%) rename {LogicUI => net.mograsim.logic.ui}/oldsrc/GUIMerger.java (100%) rename {LogicUI => net.mograsim.logic.ui}/oldsrc/GUIMux.java (100%) rename {LogicUI => net.mograsim.logic.ui}/oldsrc/GUISplitter.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/ColorHelper.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/LogicExecuter.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/LogicUICanvas.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/examples/RSLatchExample.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/ViewModel.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/components/GUIAndGate.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/components/GUIComponent.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/components/GUINotGate.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/components/GUIOrGate.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/wires/GUIWire.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/wires/MovablePin.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/wires/Pin.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/modeladapter/LogicModelParameters.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java (100%) rename {LogicUI => net.mograsim.logic.ui}/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java (100%) rename {SampleERCP => net.mograsim.rcp}/.classpath (97%) rename {SampleERCP => net.mograsim.rcp}/.gitignore (100%) rename {SampleERCP => net.mograsim.rcp}/.project (96%) rename {SampleERCP => net.mograsim.rcp}/.settings/org.eclipse.jdt.core.prefs (98%) rename {SampleERCP => net.mograsim.rcp}/.settings/org.eclipse.jdt.ui.prefs (97%) rename {SampleERCP => net.mograsim.rcp}/.settings/org.eclipse.ltk.core.refactoring.prefs (98%) rename {SampleERCP => net.mograsim.rcp}/.settings/org.eclipse.pde.prefs (97%) rename {SampleERCP => net.mograsim.rcp}/.settings/org.eclipse.wst.sse.core.prefs (97%) rename {SampleERCP => net.mograsim.rcp}/.settings/org.sonarlint.eclipse.core.prefs (95%) rename {SampleERCP => net.mograsim.rcp}/Application.e4xmi (99%) rename {SampleERCP => net.mograsim.rcp}/LICENSE (100%) rename {SampleERCP => net.mograsim.rcp}/META-INF/MANIFEST.MF (100%) rename {SampleERCP => net.mograsim.rcp}/OSGI-INF/l10n/bundle.properties (79%) rename {SampleERCP => net.mograsim.rcp}/build.properties (96%) rename {SampleERCP => net.mograsim.rcp}/css/default.css (100%) rename {SampleERCP => net.mograsim.rcp}/icons/af.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_128t.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_16t.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_24t.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_256t.icns (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_256t.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_256t.xpm (98%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_32t.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_48t.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_64t.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/app/ico_all.ico (100%) rename {SampleERCP => net.mograsim.rcp}/icons/embedded.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/enterprise.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/home.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/languages.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/open_in_app.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/rcp.png (100%) rename {SampleERCP => net.mograsim.rcp}/icons/save_edit.png (100%) rename {SampleERCP => net.mograsim.rcp}/net.mograsim.rcp.product (100%) rename {SampleERCP => net.mograsim.rcp}/plugin.xml (97%) rename {SampleERCP => net.mograsim.rcp}/schema/splashExtension.exsd (100%) rename {SampleERCP => net.mograsim.rcp}/splash.bmp (100%) rename {SampleERCP => net.mograsim.rcp}/src/net/mograsim/rcp/handlers/AboutHandler.java (95%) rename {SampleERCP => net.mograsim.rcp}/src/net/mograsim/rcp/handlers/OpenHandler.java (95%) rename {SampleERCP => net.mograsim.rcp}/src/net/mograsim/rcp/handlers/QuitHandler.java (96%) rename {SampleERCP => net.mograsim.rcp}/src/net/mograsim/rcp/handlers/SaveHandler.java (95%) rename {SampleERCP => net.mograsim.rcp}/src/net/mograsim/rcp/parts/LogicUIPart.java (100%) rename {SampleERCP => net.mograsim.rcp}/src/net/mograsim/rcp/parts/SamplePart.java (96%) rename {SampleERCP => net.mograsim.rcp}/src/net/mograsim/rcp/splashhandlers/ExtensibleSplashHandler.java (96%) diff --git a/era.mi/.classpath b/net.mograsim.logic.core/.classpath similarity index 100% rename from era.mi/.classpath rename to net.mograsim.logic.core/.classpath diff --git a/era.mi/.gitignore b/net.mograsim.logic.core/.gitignore similarity index 100% rename from era.mi/.gitignore rename to net.mograsim.logic.core/.gitignore diff --git a/era.mi/.project b/net.mograsim.logic.core/.project similarity index 100% rename from era.mi/.project rename to net.mograsim.logic.core/.project diff --git a/era.mi/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.logic.core/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from era.mi/.settings/org.eclipse.jdt.core.prefs rename to net.mograsim.logic.core/.settings/org.eclipse.jdt.core.prefs diff --git a/era.mi/.settings/org.eclipse.jdt.ui.prefs b/net.mograsim.logic.core/.settings/org.eclipse.jdt.ui.prefs similarity index 100% rename from era.mi/.settings/org.eclipse.jdt.ui.prefs rename to net.mograsim.logic.core/.settings/org.eclipse.jdt.ui.prefs diff --git a/era.mi/META-INF/MANIFEST.MF b/net.mograsim.logic.core/META-INF/MANIFEST.MF similarity index 100% rename from era.mi/META-INF/MANIFEST.MF rename to net.mograsim.logic.core/META-INF/MANIFEST.MF diff --git a/LogicUI/build.properties b/net.mograsim.logic.core/build.properties similarity index 100% rename from LogicUI/build.properties rename to net.mograsim.logic.core/build.properties diff --git a/era.mi/src/net/mograsim/logic/core/Util.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/Util.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/Util.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/Util.java diff --git a/era.mi/src/net/mograsim/logic/core/components/BasicComponent.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/BasicComponent.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/components/BasicComponent.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/BasicComponent.java index 05225571..426c6a11 100644 --- a/era.mi/src/net/mograsim/logic/core/components/BasicComponent.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/BasicComponent.java @@ -1,36 +1,36 @@ -package net.mograsim.logic.core.components; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.wires.WireObserver; -import net.mograsim.logic.core.wires.Wire.ReadEnd; - -/** - * A basic component that recomputes all outputs (with a delay), when it is updated. - * - * @author Fabian Stemmler - */ -public abstract class BasicComponent extends Component implements WireObserver -{ - private int processTime; - - /** - * - * @param processTime Amount of time this component takes to update its outputs. Must be more than 0, otherwise 1 is assumed. - * - * @author Fabian Stemmler - */ - public BasicComponent(Timeline timeline, int processTime) - { - super(timeline); - this.processTime = processTime > 0 ? processTime : 1; - } - - @Override - public void update(ReadEnd initiator, BitVector oldValues) - { - timeline.addEvent(e -> compute(), processTime); - } - - protected abstract void compute(); -} +package net.mograsim.logic.core.components; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.WireObserver; +import net.mograsim.logic.core.wires.Wire.ReadEnd; + +/** + * A basic component that recomputes all outputs (with a delay), when it is updated. + * + * @author Fabian Stemmler + */ +public abstract class BasicComponent extends Component implements WireObserver +{ + private int processTime; + + /** + * + * @param processTime Amount of time this component takes to update its outputs. Must be more than 0, otherwise 1 is assumed. + * + * @author Fabian Stemmler + */ + public BasicComponent(Timeline timeline, int processTime) + { + super(timeline); + this.processTime = processTime > 0 ? processTime : 1; + } + + @Override + public void update(ReadEnd initiator, BitVector oldValues) + { + timeline.addEvent(e -> compute(), processTime); + } + + protected abstract void compute(); +} diff --git a/era.mi/src/net/mograsim/logic/core/components/BitDisplay.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/BitDisplay.java similarity index 95% rename from era.mi/src/net/mograsim/logic/core/components/BitDisplay.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/BitDisplay.java index a4830446..268d1572 100644 --- a/era.mi/src/net/mograsim/logic/core/components/BitDisplay.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/BitDisplay.java @@ -1,51 +1,51 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class BitDisplay extends BasicComponent -{ - private final ReadEnd in; - private BitVector displayedValue; - - public BitDisplay(Timeline timeline, ReadEnd in) - { - super(timeline, 1); - this.in = in; - in.addObserver(this); - compute(); - } - - @Override - protected void compute() - { - displayedValue = in.getValues(); - } - - public BitVector getDisplayedValue() - { - return displayedValue; - } - - public boolean isDisplaying(Bit... values) - { - return displayedValue.equals(BitVector.of(values)); - } - - @Override - public List getAllInputs() - { - return List.of(in); - } - - @Override - public List getAllOutputs() - { - return List.of(); - } -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class BitDisplay extends BasicComponent +{ + private final ReadEnd in; + private BitVector displayedValue; + + public BitDisplay(Timeline timeline, ReadEnd in) + { + super(timeline, 1); + this.in = in; + in.addObserver(this); + compute(); + } + + @Override + protected void compute() + { + displayedValue = in.getValues(); + } + + public BitVector getDisplayedValue() + { + return displayedValue; + } + + public boolean isDisplaying(Bit... values) + { + return displayedValue.equals(BitVector.of(values)); + } + + @Override + public List getAllInputs() + { + return List.of(in); + } + + @Override + public List getAllOutputs() + { + return List.of(); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/Clock.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Clock.java similarity index 95% rename from era.mi/src/net/mograsim/logic/core/components/Clock.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/Clock.java index 1cbb697a..65621358 100644 --- a/era.mi/src/net/mograsim/logic/core/components/Clock.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Clock.java @@ -1,61 +1,61 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.timeline.TimelineEvent; -import net.mograsim.logic.core.timeline.TimelineEventHandler; -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.wires.Wire; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class Clock extends Component implements TimelineEventHandler -{ - private boolean toggle = false; - private ReadWriteEnd out; - private int delta; - - /** - * - * @param out {@link Wire} the clock's impulses are fed into - * @param delta ticks between rising and falling edge - */ - public Clock(Timeline timeline, ReadWriteEnd out, int delta) - { - super(timeline); - this.delta = delta; - this.out = out; - addToTimeline(); - } - - @Override - public void handle(TimelineEvent e) - { - addToTimeline(); - out.feedSignals(toggle ? Bit.ONE : Bit.ZERO); - toggle = !toggle; - } - - public ReadWriteEnd getOut() - { - return out; - } - - private void addToTimeline() - { - timeline.addEvent(this, delta); - } - - @Override - public List getAllInputs() - { - return List.of(); - } - - @Override - public List getAllOutputs() - { - return List.of(out); - } -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.timeline.TimelineEvent; +import net.mograsim.logic.core.timeline.TimelineEventHandler; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class Clock extends Component implements TimelineEventHandler +{ + private boolean toggle = false; + private ReadWriteEnd out; + private int delta; + + /** + * + * @param out {@link Wire} the clock's impulses are fed into + * @param delta ticks between rising and falling edge + */ + public Clock(Timeline timeline, ReadWriteEnd out, int delta) + { + super(timeline); + this.delta = delta; + this.out = out; + addToTimeline(); + } + + @Override + public void handle(TimelineEvent e) + { + addToTimeline(); + out.feedSignals(toggle ? Bit.ONE : Bit.ZERO); + toggle = !toggle; + } + + public ReadWriteEnd getOut() + { + return out; + } + + private void addToTimeline() + { + timeline.addEvent(this, delta); + } + + @Override + public List getAllInputs() + { + return List.of(); + } + + @Override + public List getAllOutputs() + { + return List.of(out); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/Component.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Component.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/components/Component.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/Component.java index 71e0f923..834f4b5b 100644 --- a/era.mi/src/net/mograsim/logic/core/components/Component.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Component.java @@ -1,28 +1,28 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public abstract class Component -{ - protected Timeline timeline; - - public Component(Timeline timeline) - { - this.timeline = timeline; - } - - /** - * Returns immutable list of all inputs to the {@link Component} (including e.g. the select bits to a MUX). Intended for visualization - * in the UI. - */ - public abstract List getAllInputs(); - - /** - * Returns immutable list of all outputs to the {@link Component}. Intended for visualization in the UI. - */ - public abstract List getAllOutputs(); -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public abstract class Component +{ + protected Timeline timeline; + + public Component(Timeline timeline) + { + this.timeline = timeline; + } + + /** + * Returns immutable list of all inputs to the {@link Component} (including e.g. the select bits to a MUX). Intended for visualization + * in the UI. + */ + public abstract List getAllInputs(); + + /** + * Returns immutable list of all outputs to the {@link Component}. Intended for visualization in the UI. + */ + public abstract List getAllOutputs(); +} diff --git a/era.mi/src/net/mograsim/logic/core/components/Connector.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Connector.java similarity index 95% rename from era.mi/src/net/mograsim/logic/core/components/Connector.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/Connector.java index 0b2e55ae..16b8e709 100644 --- a/era.mi/src/net/mograsim/logic/core/components/Connector.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Connector.java @@ -1,76 +1,76 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.wires.WireObserver; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class Connector extends Component implements WireObserver -{ - private boolean connected; - private final ReadWriteEnd a; - private final ReadWriteEnd b; - - public Connector(Timeline timeline, ReadWriteEnd a, ReadWriteEnd b) - { - super(timeline); - if (a.length() != b.length()) - throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length(), b.length())); - this.a = a; - this.b = b; - a.addObserver(this); - b.addObserver(this); - } - - public void connect() - { - connected = true; - update(a); - update(b); - } - - public void disconnect() - { - connected = false; - a.clearSignals(); - b.clearSignals(); - } - - public void setConnection(boolean connected) - { - if (connected) - connect(); - else - disconnect(); - } - - @Override - public void update(ReadEnd initiator, BitVector oldValues) - { - if (connected) - timeline.addEvent(e -> update(initiator), 1); - } - - private void update(ReadEnd initiator) - { - if (initiator == a) - b.feedSignals(a.wireValuesExcludingMe()); - else - a.feedSignals(b.wireValuesExcludingMe()); - } - - @Override - public List getAllInputs() - { - return List.of(a, b); - } - - @Override - public List getAllOutputs() - { - return List.of(a, b); - } -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.WireObserver; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class Connector extends Component implements WireObserver +{ + private boolean connected; + private final ReadWriteEnd a; + private final ReadWriteEnd b; + + public Connector(Timeline timeline, ReadWriteEnd a, ReadWriteEnd b) + { + super(timeline); + if (a.length() != b.length()) + throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length(), b.length())); + this.a = a; + this.b = b; + a.addObserver(this); + b.addObserver(this); + } + + public void connect() + { + connected = true; + update(a); + update(b); + } + + public void disconnect() + { + connected = false; + a.clearSignals(); + b.clearSignals(); + } + + public void setConnection(boolean connected) + { + if (connected) + connect(); + else + disconnect(); + } + + @Override + public void update(ReadEnd initiator, BitVector oldValues) + { + if (connected) + timeline.addEvent(e -> update(initiator), 1); + } + + private void update(ReadEnd initiator) + { + if (initiator == a) + b.feedSignals(a.wireValuesExcludingMe()); + else + a.feedSignals(b.wireValuesExcludingMe()); + } + + @Override + public List getAllInputs() + { + return List.of(a, b); + } + + @Override + public List getAllOutputs() + { + return List.of(a, b); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/Demux.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Demux.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/components/Demux.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/Demux.java index a0514578..5da1bf6a 100644 --- a/era.mi/src/net/mograsim/logic/core/components/Demux.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Demux.java @@ -1,82 +1,82 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.wires.Wire; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -/** - * Models a multiplexer. Takes an arbitrary amount of input {@link Wire}s, one of which, as determined by select, is put through to the - * output. - * - * @author Fabian Stemmler - * - */ -public class Demux extends BasicComponent -{ - private final ReadEnd select, in; - private final ReadWriteEnd[] outputs; - private final int outputSize; - private int selected = -1; - - /** - * Output {@link Wire}s and in must be of uniform length - * - * @param in Must be of uniform length with all outputs. - * @param select Indexes the output array to which the input is mapped. Must have enough bits to index all outputs. - * @param outputs One of these outputs receives the input signal, depending on the select bits - */ - public Demux(Timeline timeline, int processTime, ReadEnd in, ReadEnd select, ReadWriteEnd... outputs) - { - super(timeline, processTime); - outputSize = in.length(); - - this.in = in; - this.outputs = outputs; - for (int i = 0; i < this.outputs.length; i++) - { - if (outputs[i].length() != outputSize) - throw new IllegalArgumentException("All DEMUX wire arrays must be of uniform length!"); - this.outputs[i] = outputs[i]; - } - - this.select = select; - select.addObserver(this); - - int maxInputs = 1 << select.length(); - if (this.outputs.length > maxInputs) - throw new IllegalArgumentException("There are more outputs (" + this.outputs.length + ") to the DEMUX than supported by " - + select.length() + " select bits (" + maxInputs + ")."); - in.addObserver(this); - } - - @Override - public void compute() - { - int selectValue = select.hasNumericValue() ? (int) select.getUnsignedValue() : -1; - if (selectValue >= outputs.length) - selectValue = -1; - - if (selected != selectValue && selected != -1) - outputs[selected].clearSignals(); - - selected = selectValue; - - if (selectValue != -1) - outputs[selectValue].feedSignals(in.getValues()); - } - - @Override - public List getAllInputs() - { - return List.of(in, select); - } - - @Override - public List getAllOutputs() - { - return List.of(outputs); - } -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +/** + * Models a multiplexer. Takes an arbitrary amount of input {@link Wire}s, one of which, as determined by select, is put through to the + * output. + * + * @author Fabian Stemmler + * + */ +public class Demux extends BasicComponent +{ + private final ReadEnd select, in; + private final ReadWriteEnd[] outputs; + private final int outputSize; + private int selected = -1; + + /** + * Output {@link Wire}s and in must be of uniform length + * + * @param in Must be of uniform length with all outputs. + * @param select Indexes the output array to which the input is mapped. Must have enough bits to index all outputs. + * @param outputs One of these outputs receives the input signal, depending on the select bits + */ + public Demux(Timeline timeline, int processTime, ReadEnd in, ReadEnd select, ReadWriteEnd... outputs) + { + super(timeline, processTime); + outputSize = in.length(); + + this.in = in; + this.outputs = outputs; + for (int i = 0; i < this.outputs.length; i++) + { + if (outputs[i].length() != outputSize) + throw new IllegalArgumentException("All DEMUX wire arrays must be of uniform length!"); + this.outputs[i] = outputs[i]; + } + + this.select = select; + select.addObserver(this); + + int maxInputs = 1 << select.length(); + if (this.outputs.length > maxInputs) + throw new IllegalArgumentException("There are more outputs (" + this.outputs.length + ") to the DEMUX than supported by " + + select.length() + " select bits (" + maxInputs + ")."); + in.addObserver(this); + } + + @Override + public void compute() + { + int selectValue = select.hasNumericValue() ? (int) select.getUnsignedValue() : -1; + if (selectValue >= outputs.length) + selectValue = -1; + + if (selected != selectValue && selected != -1) + outputs[selected].clearSignals(); + + selected = selectValue; + + if (selectValue != -1) + outputs[selectValue].feedSignals(in.getValues()); + } + + @Override + public List getAllInputs() + { + return List.of(in, select); + } + + @Override + public List getAllOutputs() + { + return List.of(outputs); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/ManualSwitch.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/ManualSwitch.java similarity index 94% rename from era.mi/src/net/mograsim/logic/core/components/ManualSwitch.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/ManualSwitch.java index 04a8d835..fc6e9432 100644 --- a/era.mi/src/net/mograsim/logic/core/components/ManualSwitch.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/ManualSwitch.java @@ -1,74 +1,74 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -/** - * This class models a simple on/off (ONE/ZERO) switch for user interaction. - * - * @author Christian Femers - * - */ -public class ManualSwitch extends Component -{ - private ReadWriteEnd output; - private boolean isOn; - - public ManualSwitch(Timeline timeline, ReadWriteEnd output) - { - super(timeline); - if (output.length() != 1) - throw new IllegalArgumentException("Switch output can be only a single wire"); - this.output = output; - } - - public void switchOn() - { - setState(true); - } - - public void switchOff() - { - setState(false); - } - - public void toggle() - { - setState(!isOn); - } - - public void setState(boolean isOn) - { - if (this.isOn == isOn) - return; - this.isOn = isOn; - output.feedSignals(getValue()); - } - - public boolean isOn() - { - return isOn; - } - - public Bit getValue() - { - return isOn ? Bit.ONE : Bit.ZERO; - } - - @Override - public List getAllInputs() - { - return List.of(); - } - - @Override - public List getAllOutputs() - { - return List.of(output); - } - -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +/** + * This class models a simple on/off (ONE/ZERO) switch for user interaction. + * + * @author Christian Femers + * + */ +public class ManualSwitch extends Component +{ + private ReadWriteEnd output; + private boolean isOn; + + public ManualSwitch(Timeline timeline, ReadWriteEnd output) + { + super(timeline); + if (output.length() != 1) + throw new IllegalArgumentException("Switch output can be only a single wire"); + this.output = output; + } + + public void switchOn() + { + setState(true); + } + + public void switchOff() + { + setState(false); + } + + public void toggle() + { + setState(!isOn); + } + + public void setState(boolean isOn) + { + if (this.isOn == isOn) + return; + this.isOn = isOn; + output.feedSignals(getValue()); + } + + public boolean isOn() + { + return isOn; + } + + public Bit getValue() + { + return isOn ? Bit.ONE : Bit.ZERO; + } + + @Override + public List getAllInputs() + { + return List.of(); + } + + @Override + public List getAllOutputs() + { + return List.of(output); + } + +} diff --git a/era.mi/src/net/mograsim/logic/core/components/Merger.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Merger.java similarity index 95% rename from era.mi/src/net/mograsim/logic/core/components/Merger.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/Merger.java index 7088aa5d..c4c71701 100644 --- a/era.mi/src/net/mograsim/logic/core/components/Merger.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Merger.java @@ -1,85 +1,85 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.wires.Wire; -import net.mograsim.logic.core.wires.WireObserver; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class Merger extends Component implements WireObserver -{ - private ReadWriteEnd out; - private ReadEnd[] inputs; - private int[] beginningIndex; - - /** - * - * @param union The output of merging n {@link Wire}s into one. Must have length = a1.length() + a2.length() + ... + an.length(). - * @param inputs The inputs to be merged into the union - */ - public Merger(Timeline timeline, ReadWriteEnd union, ReadEnd... inputs) - { - super(timeline); - this.inputs = inputs; - this.out = union; - this.beginningIndex = new int[inputs.length]; - - int length = 0; - for (int i = 0; i < inputs.length; i++) - { - beginningIndex[i] = length; - length += inputs[i].length(); - inputs[i].addObserver(this); - } - - if (length != union.length()) - throw new IllegalArgumentException( - "The output of merging n WireArrays into one must have length = a1.length() + a2.length() + ... + an.length()."); - } - - public ReadEnd getInput(int index) - { - return inputs[index]; - } - - public ReadEnd getUnion() - { - return out; - } - - @Override - public void update(ReadEnd initiator, BitVector oldValues) - { - int index = find(initiator); - int beginning = beginningIndex[index]; - out.feedSignals(beginning, inputs[index].getValues()); - } - - private int find(ReadEnd r) - { - for (int i = 0; i < inputs.length; i++) - if (inputs[i] == r) - return i; - return -1; - } - - public ReadEnd[] getInputs() - { - return inputs.clone(); - } - - @Override - public List getAllInputs() - { - return List.of(inputs); - } - - @Override - public List getAllOutputs() - { - return List.of(out); - } -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.core.wires.WireObserver; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class Merger extends Component implements WireObserver +{ + private ReadWriteEnd out; + private ReadEnd[] inputs; + private int[] beginningIndex; + + /** + * + * @param union The output of merging n {@link Wire}s into one. Must have length = a1.length() + a2.length() + ... + an.length(). + * @param inputs The inputs to be merged into the union + */ + public Merger(Timeline timeline, ReadWriteEnd union, ReadEnd... inputs) + { + super(timeline); + this.inputs = inputs; + this.out = union; + this.beginningIndex = new int[inputs.length]; + + int length = 0; + for (int i = 0; i < inputs.length; i++) + { + beginningIndex[i] = length; + length += inputs[i].length(); + inputs[i].addObserver(this); + } + + if (length != union.length()) + throw new IllegalArgumentException( + "The output of merging n WireArrays into one must have length = a1.length() + a2.length() + ... + an.length()."); + } + + public ReadEnd getInput(int index) + { + return inputs[index]; + } + + public ReadEnd getUnion() + { + return out; + } + + @Override + public void update(ReadEnd initiator, BitVector oldValues) + { + int index = find(initiator); + int beginning = beginningIndex[index]; + out.feedSignals(beginning, inputs[index].getValues()); + } + + private int find(ReadEnd r) + { + for (int i = 0; i < inputs.length; i++) + if (inputs[i] == r) + return i; + return -1; + } + + public ReadEnd[] getInputs() + { + return inputs.clone(); + } + + @Override + public List getAllInputs() + { + return List.of(inputs); + } + + @Override + public List getAllOutputs() + { + return List.of(out); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/Mux.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Mux.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/components/Mux.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/Mux.java index 9046585c..bbb10f5e 100644 --- a/era.mi/src/net/mograsim/logic/core/components/Mux.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Mux.java @@ -1,95 +1,95 @@ -package net.mograsim.logic.core.components; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.wires.Wire; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -/** - * Models a multiplexer. Takes an arbitrary amount of input {@link Wire}s, one of which, as determined by select, is put through to the - * output. - * - * @author Fabian Stemmler - * - */ -public class Mux extends BasicComponent -{ - private ReadEnd select; - private ReadWriteEnd out; - private ReadEnd[] inputs; - private final int outputSize; - - /** - * Input {@link Wire}s and out must be of uniform length - * - * @param out Must be of uniform length with all inputs. - * @param select Indexes the input array which is to be mapped to the output. Must have enough bits to index all inputs. - * @param inputs One of these inputs is mapped to the output, depending on the select bits - */ - public Mux(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd select, ReadEnd... inputs) - { - super(timeline, processTime); - outputSize = out.length(); - - this.inputs = inputs.clone(); - for (int i = 0; i < this.inputs.length; i++) - { - if (inputs[i].length() != outputSize) - throw new IllegalArgumentException("All MUX wire arrays must be of uniform length!"); - inputs[i].addObserver(this); - } - - this.select = select; - select.addObserver(this); - - int maxInputs = 1 << select.length(); - if (this.inputs.length > maxInputs) - throw new IllegalArgumentException("There are more inputs (" + this.inputs.length + ") to the MUX than supported by " - + select.length() + " select bits (" + maxInputs + ")."); - - this.out = out; - } - - public ReadEnd getOut() - { - return out; - } - - public ReadEnd getSelect() - { - return select; - } - - @Override - public void compute() - { - int selectValue; - if (!select.hasNumericValue() || (selectValue = (int) select.getUnsignedValue()) >= inputs.length) - { - out.clearSignals(); - return; - } - - ReadEnd active = inputs[selectValue]; - out.feedSignals(active.getValues()); - } - - @Override - public List getAllInputs() - { - ArrayList wires = new ArrayList(Arrays.asList(inputs)); - wires.add(select); - return Collections.unmodifiableList(wires); - } - - @Override - public List getAllOutputs() - { - return List.of(out); - } -} +package net.mograsim.logic.core.components; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +/** + * Models a multiplexer. Takes an arbitrary amount of input {@link Wire}s, one of which, as determined by select, is put through to the + * output. + * + * @author Fabian Stemmler + * + */ +public class Mux extends BasicComponent +{ + private ReadEnd select; + private ReadWriteEnd out; + private ReadEnd[] inputs; + private final int outputSize; + + /** + * Input {@link Wire}s and out must be of uniform length + * + * @param out Must be of uniform length with all inputs. + * @param select Indexes the input array which is to be mapped to the output. Must have enough bits to index all inputs. + * @param inputs One of these inputs is mapped to the output, depending on the select bits + */ + public Mux(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd select, ReadEnd... inputs) + { + super(timeline, processTime); + outputSize = out.length(); + + this.inputs = inputs.clone(); + for (int i = 0; i < this.inputs.length; i++) + { + if (inputs[i].length() != outputSize) + throw new IllegalArgumentException("All MUX wire arrays must be of uniform length!"); + inputs[i].addObserver(this); + } + + this.select = select; + select.addObserver(this); + + int maxInputs = 1 << select.length(); + if (this.inputs.length > maxInputs) + throw new IllegalArgumentException("There are more inputs (" + this.inputs.length + ") to the MUX than supported by " + + select.length() + " select bits (" + maxInputs + ")."); + + this.out = out; + } + + public ReadEnd getOut() + { + return out; + } + + public ReadEnd getSelect() + { + return select; + } + + @Override + public void compute() + { + int selectValue; + if (!select.hasNumericValue() || (selectValue = (int) select.getUnsignedValue()) >= inputs.length) + { + out.clearSignals(); + return; + } + + ReadEnd active = inputs[selectValue]; + out.feedSignals(active.getValues()); + } + + @Override + public List getAllInputs() + { + ArrayList wires = new ArrayList(Arrays.asList(inputs)); + wires.add(select); + return Collections.unmodifiableList(wires); + } + + @Override + public List getAllOutputs() + { + return List.of(out); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/Splitter.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Splitter.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/components/Splitter.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/Splitter.java index bc834e1f..9eb5b2c0 100644 --- a/era.mi/src/net/mograsim/logic/core/components/Splitter.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Splitter.java @@ -1,59 +1,59 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.wires.WireObserver; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class Splitter extends Component implements WireObserver -{ - private ReadEnd input; - private ReadWriteEnd[] outputs; - - public Splitter(Timeline timeline, ReadEnd input, ReadWriteEnd... outputs) - { - super(timeline); - this.input = input; - this.outputs = outputs; - input.addObserver(this); - int length = 0; - for (ReadEnd out : outputs) - length += out.length(); - - if (input.length() != length) - throw new IllegalArgumentException( - "The input of splitting one into n WireArrays must have length = a1.length() + a2.length() + ... + an.length()."); - } - - protected void compute() - { - BitVector inputBits = input.getValues(); - int startIndex = 0; - for (int i = 0; i < outputs.length; i++) - { - outputs[i].feedSignals(inputBits.subVector(startIndex, startIndex + outputs[i].length())); - startIndex += outputs[i].length(); - } - } - - @Override - public void update(ReadEnd initiator, BitVector oldValues) - { - compute(); - } - - @Override - public List getAllInputs() - { - return List.of(input); - } - - @Override - public List getAllOutputs() - { - return List.of(outputs); - } -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.WireObserver; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class Splitter extends Component implements WireObserver +{ + private ReadEnd input; + private ReadWriteEnd[] outputs; + + public Splitter(Timeline timeline, ReadEnd input, ReadWriteEnd... outputs) + { + super(timeline); + this.input = input; + this.outputs = outputs; + input.addObserver(this); + int length = 0; + for (ReadEnd out : outputs) + length += out.length(); + + if (input.length() != length) + throw new IllegalArgumentException( + "The input of splitting one into n WireArrays must have length = a1.length() + a2.length() + ... + an.length()."); + } + + protected void compute() + { + BitVector inputBits = input.getValues(); + int startIndex = 0; + for (int i = 0; i < outputs.length; i++) + { + outputs[i].feedSignals(inputBits.subVector(startIndex, startIndex + outputs[i].length())); + startIndex += outputs[i].length(); + } + } + + @Override + public void update(ReadEnd initiator, BitVector oldValues) + { + compute(); + } + + @Override + public List getAllInputs() + { + return List.of(input); + } + + @Override + public List getAllOutputs() + { + return List.of(outputs); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/TriStateBuffer.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/TriStateBuffer.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/components/TriStateBuffer.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/TriStateBuffer.java index 321f5bb5..f4f1b491 100644 --- a/era.mi/src/net/mograsim/logic/core/components/TriStateBuffer.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/TriStateBuffer.java @@ -1,51 +1,51 @@ -package net.mograsim.logic.core.components; - -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class TriStateBuffer extends BasicComponent -{ - ReadEnd in, enable; - ReadWriteEnd out; - - public TriStateBuffer(Timeline timeline, int processTime, ReadEnd in, ReadWriteEnd out, ReadEnd enable) - { - super(timeline, processTime); - if (in.length() != out.length()) - throw new IllegalArgumentException( - "Tri-state output must have the same amount of bits as the input. Input: " + in.length() + " Output: " + out.length()); - if (enable.length() != 1) - throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length() + "."); - this.in = in; - in.addObserver(this); - this.enable = enable; - enable.addObserver(this); - this.out = out; - } - - @Override - protected void compute() - { - if (enable.getValue() == Bit.ONE) - out.feedSignals(in.getValues()); - else - out.clearSignals(); - } - - @Override - public List getAllInputs() - { - return List.of(in, enable); - } - - @Override - public List getAllOutputs() - { - return List.of(out); - } - -} +package net.mograsim.logic.core.components; + +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class TriStateBuffer extends BasicComponent +{ + ReadEnd in, enable; + ReadWriteEnd out; + + public TriStateBuffer(Timeline timeline, int processTime, ReadEnd in, ReadWriteEnd out, ReadEnd enable) + { + super(timeline, processTime); + if (in.length() != out.length()) + throw new IllegalArgumentException( + "Tri-state output must have the same amount of bits as the input. Input: " + in.length() + " Output: " + out.length()); + if (enable.length() != 1) + throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length() + "."); + this.in = in; + in.addObserver(this); + this.enable = enable; + enable.addObserver(this); + this.out = out; + } + + @Override + protected void compute() + { + if (enable.getValue() == Bit.ONE) + out.feedSignals(in.getValues()); + else + out.clearSignals(); + } + + @Override + public List getAllInputs() + { + return List.of(in, enable); + } + + @Override + public List getAllOutputs() + { + return List.of(out); + } + +} diff --git a/era.mi/src/net/mograsim/logic/core/components/gates/AndGate.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/AndGate.java similarity index 97% rename from era.mi/src/net/mograsim/logic/core/components/gates/AndGate.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/AndGate.java index 650ee528..fa1e94b6 100644 --- a/era.mi/src/net/mograsim/logic/core/components/gates/AndGate.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/AndGate.java @@ -1,14 +1,14 @@ -package net.mograsim.logic.core.components.gates; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.BitVector.BitVectorMutator; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class AndGate extends MultiInputGate -{ - public AndGate(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd... in) - { - super(timeline, processTime, BitVectorMutator::and, out, in); - } -} +package net.mograsim.logic.core.components.gates; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.BitVector.BitVectorMutator; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class AndGate extends MultiInputGate +{ + public AndGate(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd... in) + { + super(timeline, processTime, BitVectorMutator::and, out, in); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/gates/MultiInputGate.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/MultiInputGate.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/components/gates/MultiInputGate.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/MultiInputGate.java index 508e21c0..afc89511 100644 --- a/era.mi/src/net/mograsim/logic/core/components/gates/MultiInputGate.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/MultiInputGate.java @@ -1,56 +1,56 @@ -package net.mograsim.logic.core.components.gates; - -import java.util.List; - -import net.mograsim.logic.core.components.BasicComponent; -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.MutationOperation; -import net.mograsim.logic.core.types.BitVector.BitVectorMutator; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public abstract class MultiInputGate extends BasicComponent -{ - protected ReadEnd[] in; - protected ReadWriteEnd out; - protected final int length; - protected MutationOperation op; - - protected MultiInputGate(Timeline timeline, int processTime, MutationOperation op, ReadWriteEnd out, ReadEnd... in) - { - super(timeline, processTime); - this.op = op; - length = out.length(); - this.in = in.clone(); - if (in.length < 1) - throw new IllegalArgumentException(String.format("Cannot create gate with %d wires.", in.length)); - for (ReadEnd w : in) - { - if (w.length() != length) - throw new IllegalArgumentException("All wires connected to the gate must be of uniform length."); - w.addObserver(this); - } - this.out = out; - } - - @Override - public List getAllInputs() - { - return List.of(in); - } - - @Override - public List getAllOutputs() - { - return List.of(out); - } - - @Override - protected void compute() - { - BitVectorMutator mutator = BitVectorMutator.empty(); - for (ReadEnd w : in) - op.apply(mutator, w.getValues()); - out.feedSignals(mutator.get()); - } -} +package net.mograsim.logic.core.components.gates; + +import java.util.List; + +import net.mograsim.logic.core.components.BasicComponent; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.MutationOperation; +import net.mograsim.logic.core.types.BitVector.BitVectorMutator; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public abstract class MultiInputGate extends BasicComponent +{ + protected ReadEnd[] in; + protected ReadWriteEnd out; + protected final int length; + protected MutationOperation op; + + protected MultiInputGate(Timeline timeline, int processTime, MutationOperation op, ReadWriteEnd out, ReadEnd... in) + { + super(timeline, processTime); + this.op = op; + length = out.length(); + this.in = in.clone(); + if (in.length < 1) + throw new IllegalArgumentException(String.format("Cannot create gate with %d wires.", in.length)); + for (ReadEnd w : in) + { + if (w.length() != length) + throw new IllegalArgumentException("All wires connected to the gate must be of uniform length."); + w.addObserver(this); + } + this.out = out; + } + + @Override + public List getAllInputs() + { + return List.of(in); + } + + @Override + public List getAllOutputs() + { + return List.of(out); + } + + @Override + protected void compute() + { + BitVectorMutator mutator = BitVectorMutator.empty(); + for (ReadEnd w : in) + op.apply(mutator, w.getValues()); + out.feedSignals(mutator.get()); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/gates/NotGate.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/NotGate.java similarity index 94% rename from era.mi/src/net/mograsim/logic/core/components/gates/NotGate.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/NotGate.java index 552e1d70..b1cfefee 100644 --- a/era.mi/src/net/mograsim/logic/core/components/gates/NotGate.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/NotGate.java @@ -1,50 +1,50 @@ -package net.mograsim.logic.core.components.gates; - -import java.util.List; - -import net.mograsim.logic.core.components.BasicComponent; -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class NotGate extends BasicComponent -{ - private ReadEnd in; - private ReadWriteEnd out; - - public NotGate(Timeline timeline, int processTime, ReadEnd in, ReadWriteEnd out) - { - super(timeline, processTime); - this.in = in; - in.addObserver(this); - this.out = out; - } - - @Override - protected void compute() - { - out.feedSignals(in.getValues().not()); - } - - public ReadEnd getIn() - { - return in; - } - - public ReadEnd getOut() - { - return out; - } - - @Override - public List getAllInputs() - { - return List.of(in); - } - - @Override - public List getAllOutputs() - { - return List.of(out); - } -} +package net.mograsim.logic.core.components.gates; + +import java.util.List; + +import net.mograsim.logic.core.components.BasicComponent; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class NotGate extends BasicComponent +{ + private ReadEnd in; + private ReadWriteEnd out; + + public NotGate(Timeline timeline, int processTime, ReadEnd in, ReadWriteEnd out) + { + super(timeline, processTime); + this.in = in; + in.addObserver(this); + this.out = out; + } + + @Override + protected void compute() + { + out.feedSignals(in.getValues().not()); + } + + public ReadEnd getIn() + { + return in; + } + + public ReadEnd getOut() + { + return out; + } + + @Override + public List getAllInputs() + { + return List.of(in); + } + + @Override + public List getAllOutputs() + { + return List.of(out); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/gates/OrGate.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/OrGate.java similarity index 97% rename from era.mi/src/net/mograsim/logic/core/components/gates/OrGate.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/OrGate.java index 987da5e0..0072d506 100644 --- a/era.mi/src/net/mograsim/logic/core/components/gates/OrGate.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/OrGate.java @@ -1,14 +1,14 @@ -package net.mograsim.logic.core.components.gates; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.BitVector.BitVectorMutator; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -public class OrGate extends MultiInputGate -{ - public OrGate(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd... in) - { - super(timeline, processTime, BitVectorMutator::or, out, in); - } -} +package net.mograsim.logic.core.components.gates; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.BitVector.BitVectorMutator; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +public class OrGate extends MultiInputGate +{ + public OrGate(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd... in) + { + super(timeline, processTime, BitVectorMutator::or, out, in); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/components/gates/XorGate.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/XorGate.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/components/gates/XorGate.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/XorGate.java index eaf0bc16..15c24e27 100644 --- a/era.mi/src/net/mograsim/logic/core/components/gates/XorGate.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/XorGate.java @@ -1,20 +1,20 @@ -package net.mograsim.logic.core.components.gates; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.BitVector.BitVectorMutator; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -/** - * Outputs 1 when the number of 1 inputs is odd. - * - * @author Fabian Stemmler - */ -public class XorGate extends MultiInputGate -{ - public XorGate(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd... in) - { - super(timeline, processTime, BitVectorMutator::xor, out, in); - } - -} +package net.mograsim.logic.core.components.gates; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.BitVector.BitVectorMutator; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +/** + * Outputs 1 when the number of 1 inputs is odd. + * + * @author Fabian Stemmler + */ +public class XorGate extends MultiInputGate +{ + public XorGate(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd... in) + { + super(timeline, processTime, BitVectorMutator::xor, out, in); + } + +} diff --git a/era.mi/src/net/mograsim/logic/core/tests/ComponentTest.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/tests/ComponentTest.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/tests/ComponentTest.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/tests/ComponentTest.java index 0ed90243..a47f7921 100644 --- a/era.mi/src/net/mograsim/logic/core/tests/ComponentTest.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/tests/ComponentTest.java @@ -1,433 +1,433 @@ -package net.mograsim.logic.core.tests; - -import static org.junit.Assert.assertTrue; -import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; - -import java.util.function.LongConsumer; - -import org.junit.jupiter.api.Test; - -import net.mograsim.logic.core.components.Connector; -import net.mograsim.logic.core.components.Demux; -import net.mograsim.logic.core.components.Merger; -import net.mograsim.logic.core.components.Mux; -import net.mograsim.logic.core.components.Splitter; -import net.mograsim.logic.core.components.TriStateBuffer; -import net.mograsim.logic.core.components.gates.AndGate; -import net.mograsim.logic.core.components.gates.NotGate; -import net.mograsim.logic.core.components.gates.OrGate; -import net.mograsim.logic.core.components.gates.XorGate; -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.wires.Wire; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; - -class ComponentTest -{ - private Timeline t = new Timeline(11); - - @Test - void circuitExampleTest() - { - Wire a = new Wire(t, 1, 1), b = new Wire(t, 1, 1), c = new Wire(t, 1, 10), d = new Wire(t, 2, 1), e = new Wire(t, 1, 1), - f = new Wire(t, 1, 1), g = new Wire(t, 1, 1), h = new Wire(t, 2, 1), i = new Wire(t, 2, 1), j = new Wire(t, 1, 1), - k = new Wire(t, 1, 1); - new AndGate(t, 1, f.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd()); - new NotGate(t, 1, f.createReadOnlyEnd(), g.createReadWriteEnd()); - new Merger(t, h.createReadWriteEnd(), c.createReadOnlyEnd(), g.createReadOnlyEnd()); - new Mux(t, 1, i.createReadWriteEnd(), e.createReadOnlyEnd(), h.createReadOnlyEnd(), d.createReadOnlyEnd()); - new Splitter(t, i.createReadOnlyEnd(), k.createReadWriteEnd(), j.createReadWriteEnd()); - - a.createReadWriteEnd().feedSignals(Bit.ZERO); - b.createReadWriteEnd().feedSignals(Bit.ONE); - c.createReadWriteEnd().feedSignals(Bit.ZERO); - d.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE); - e.createReadWriteEnd().feedSignals(Bit.ZERO); - - t.executeAll(); - - assertEquals(Bit.ONE, j.getValue()); - assertEquals(Bit.ZERO, k.getValue()); - } - - @Test - void splitterTest() - { - t.reset(); - Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), in = new Wire(t, 8, 1); - in.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); - new Splitter(t, in.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(), c.createReadWriteEnd()); - - t.executeAll(); - - assertBitArrayEquals(a.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO); - assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.ZERO); - assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE); - } - - @Test - void mergerTest() - { - t.reset(); - Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), out = new Wire(t, 8, 1); - a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO); - b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO); - c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE); - - new Merger(t, out.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd()); - - t.executeAll(); - - assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); - } - - @Test - void triStateBufferTest() - { - Wire a = new Wire(t, 1, 1), b = new Wire(t, 1, 1), en = new Wire(t, 1, 1), notEn = new Wire(t, 1, 1); - new NotGate(t, 1, en.createReadOnlyEnd(), notEn.createReadWriteEnd()); - new TriStateBuffer(t, 1, a.createReadOnlyEnd(), b.createReadWriteEnd(), en.createReadOnlyEnd()); - new TriStateBuffer(t, 1, b.createReadOnlyEnd(), a.createReadWriteEnd(), notEn.createReadOnlyEnd()); - - ReadWriteEnd enI = en.createReadWriteEnd(), aI = a.createReadWriteEnd(), bI = b.createReadWriteEnd(); - enI.feedSignals(Bit.ONE); - aI.feedSignals(Bit.ONE); - bI.feedSignals(Bit.Z); - - t.executeAll(); - - assertEquals(Bit.ONE, b.getValue()); - - bI.feedSignals(Bit.ZERO); - - t.executeAll(); - - assertEquals(Bit.X, b.getValue()); - assertEquals(Bit.ONE, a.getValue()); - - aI.clearSignals(); - enI.feedSignals(Bit.ZERO); - - t.executeAll(); - - assertEquals(Bit.ZERO, a.getValue()); - - } - - @Test - void muxTest() - { - t.reset(); - Wire a = new Wire(t, 4, 3), b = new Wire(t, 4, 6), c = new Wire(t, 4, 4), select = new Wire(t, 2, 5), out = new Wire(t, 4, 1); - ReadWriteEnd selectIn = select.createReadWriteEnd(); - - selectIn.feedSignals(Bit.ZERO, Bit.ZERO); - a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); - c.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); - - new Mux(t, 1, out.createReadWriteEnd(), select.createReadOnlyEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), - c.createReadOnlyEnd()); - t.executeAll(); - - assertBitArrayEquals(out.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); - selectIn.feedSignals(Bit.ZERO, Bit.ONE); - t.executeAll(); - - assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); - - selectIn.feedSignals(Bit.ONE, Bit.ONE); - t.executeAll(); - - assertBitArrayEquals(out.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z); - - } - - @Test - void demuxTest() - { - t.reset(); - Wire a = new Wire(t, 4, 3), b = new Wire(t, 4, 6), c = new Wire(t, 4, 4), select = new Wire(t, 2, 5), in = new Wire(t, 4, 1); - ReadWriteEnd selectIn = select.createReadWriteEnd(); - - selectIn.feedSignals(Bit.ZERO, Bit.ZERO); - in.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); - - new Demux(t, 1, in.createReadOnlyEnd(), select.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(), - c.createReadWriteEnd()); - t.executeAll(); - - assertBitArrayEquals(a.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); - assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U); - assertBitArrayEquals(c.getValues(), Bit.U, Bit.U, Bit.U, Bit.U); - selectIn.feedSignals(Bit.ZERO, Bit.ONE); - t.executeAll(); - - assertBitArrayEquals(a.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z); - assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U); - assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); - - selectIn.feedSignals(Bit.ONE, Bit.ONE); - t.executeAll(); - - assertBitArrayEquals(a.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z); - assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U); - assertBitArrayEquals(c.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z); - - } - - @Test - void andTest() - { - t.reset(); - Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1); - new AndGate(t, 1, c.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd()); - a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO); - b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); - - t.executeAll(); - - assertBitArrayEquals(c.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ZERO); - } - - @Test - void orTest() - { - t.reset(); - Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1); - new OrGate(t, 1, c.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd()); - a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO); - b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); - - t.executeAll(); - - assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ONE); - } - - @Test - void xorTest() - { - t.reset(); - Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 2), c = new Wire(t, 3, 1), d = new Wire(t, 3, 1); - new XorGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd()); - a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ONE); - b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE); - c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE); - - t.executeAll(); - - assertBitArrayEquals(d.getValues(), Bit.ZERO, Bit.ONE, Bit.ONE); - } - - @Test - void notTest() - { - t.reset(); - Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 2); - new NotGate(t, 1, a.createReadOnlyEnd(), b.createReadWriteEnd()); - a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ONE); - - t.executeAll(); - - assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.ZERO, Bit.ZERO); - } - - @Test - void rsLatchCircuitTest() - { - t.reset(); - Wire r = new Wire(t, 1, 1), s = new Wire(t, 1, 1), t1 = new Wire(t, 1, 15), t2 = new Wire(t, 1, 1), q = new Wire(t, 1, 1), - nq = new Wire(t, 1, 1); - - new OrGate(t, 1, t2.createReadWriteEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd()); - new OrGate(t, 1, t1.createReadWriteEnd(), s.createReadOnlyEnd(), q.createReadOnlyEnd()); - new NotGate(t, 1, t2.createReadOnlyEnd(), q.createReadWriteEnd()); - new NotGate(t, 1, t1.createReadOnlyEnd(), nq.createReadWriteEnd()); - - ReadWriteEnd sIn = s.createReadWriteEnd(), rIn = r.createReadWriteEnd(); - - sIn.feedSignals(Bit.ONE); - rIn.feedSignals(Bit.ZERO); - - t.executeAll(); - - assertEquals(Bit.ONE, q.getValue()); - assertEquals(Bit.ZERO, nq.getValue()); - - sIn.feedSignals(Bit.ZERO); - - t.executeAll(); - assertEquals(Bit.ONE, q.getValue()); - assertEquals(Bit.ZERO, nq.getValue()); - - rIn.feedSignals(Bit.ONE); - - t.executeAll(); - - assertEquals(Bit.ZERO, q.getValue()); - assertEquals(Bit.ONE, nq.getValue()); - } - - @Test - void numericValueTest() - { - t.reset(); - - Wire a = new Wire(t, 4, 1); - a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ONE, Bit.ONE); - - t.executeAll(); - - assertEquals(15, a.getUnsignedValue()); - assertEquals(-1, a.getSignedValue()); - } - - boolean flag = false; - - @Test - void simpleTimelineTest() - { - Timeline t = new Timeline(3); - flag = false; - t.addEvent((e) -> - { - if (!flag) - fail(); - flag = false; - }, 15); - t.addEvent((e) -> - { - if (flag) - fail(); - flag = true; - }, 10); - t.addEvent((e) -> - { - if (flag) - fail(); - flag = true; - }, 20); - t.addEvent((e) -> - { - fail("Only supposed to execute until timestamp 20, not 25"); - }, 25); - - t.executeUntil(t.laterThan(20), 100); - - if (!flag) - fail(); - } - - @Test - void multipleInputs() - { - t.reset(); - Wire w = new Wire(t, 2, 1); - ReadWriteEnd wI1 = w.createReadWriteEnd(), wI2 = w.createReadWriteEnd(); - wI1.feedSignals(Bit.ONE, Bit.Z); - wI2.feedSignals(Bit.Z, Bit.X); - t.executeAll(); - assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.X); - - wI2.feedSignals(Bit.ZERO, Bit.Z); - t.executeAll(); - assertBitArrayEquals(w.getValues(), Bit.X, Bit.Z); - - wI2.feedSignals(Bit.Z, Bit.Z); - t.executeAll(); - assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z); - - wI2.feedSignals(Bit.ONE, Bit.Z); - ReadEnd rE = w.createReadOnlyEnd(); - rE.addObserver((i, oldValues) -> fail("WireEnd notified observer, although value did not change.")); - t.executeAll(); - rE.close(); - wI1.feedSignals(Bit.X, Bit.X); - t.executeAll(); - wI1.addObserver((i, oldValues) -> fail("WireEnd notified observer, although it was closed.")); - wI1.close(); - assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z); - } - - @Test - void wireConnections() - { - // Nur ein Experiment, was über mehrere 'passive' Bausteine hinweg passieren würde - - t.reset(); - - Wire a = new Wire(t, 1, 2); - Wire b = new Wire(t, 1, 2); - Wire c = new Wire(t, 1, 2); - ReadWriteEnd aI = a.createReadWriteEnd(); - ReadWriteEnd bI = b.createReadWriteEnd(); - ReadWriteEnd cI = c.createReadWriteEnd(); - - TestBitDisplay test = new TestBitDisplay(t, c.createReadOnlyEnd()); - TestBitDisplay test2 = new TestBitDisplay(t, a.createReadOnlyEnd()); - LongConsumer print = time -> System.out.format("Time %2d\n a: %s\n b: %s\n c: %s\n", time, a, b, c); - - cI.feedSignals(Bit.ONE); - test.assertAfterSimulationIs(print, Bit.ONE); - - cI.feedSignals(Bit.X); - test.assertAfterSimulationIs(print, Bit.X); - - cI.feedSignals(Bit.X); - cI.feedSignals(Bit.Z); - test.assertAfterSimulationIs(print, Bit.Z); - - new Connector(t, b.createReadWriteEnd(), c.createReadWriteEnd()).connect(); - test.assertAfterSimulationIs(print, Bit.Z); - System.err.println("ONE"); - bI.feedSignals(Bit.ONE); - test.assertAfterSimulationIs(print, Bit.ONE); - System.err.println("ZERO"); - bI.feedSignals(Bit.ZERO); - test.assertAfterSimulationIs(print, Bit.ZERO); - System.err.println("Z"); - bI.feedSignals(Bit.Z); - test.assertAfterSimulationIs(print, Bit.Z); - - new Connector(t, a.createReadWriteEnd(), b.createReadWriteEnd()).connect(); - System.err.println("Z 2"); - aI.feedSignals(Bit.Z); - test.assertAfterSimulationIs(print, Bit.Z); - test2.assertAfterSimulationIs(Bit.Z); - System.err.println("ONE 2"); - aI.feedSignals(Bit.ONE); - test.assertAfterSimulationIs(print, Bit.ONE); - test2.assertAfterSimulationIs(Bit.ONE); - System.err.println("ZERO 2"); - aI.feedSignals(Bit.ZERO); - test.assertAfterSimulationIs(print, Bit.ZERO); - test2.assertAfterSimulationIs(Bit.ZERO); - System.err.println("Z 2 II"); - aI.feedSignals(Bit.Z); - test.assertAfterSimulationIs(print, Bit.Z); - test2.assertAfterSimulationIs(Bit.Z); - - System.err.println("No Conflict yet"); - bI.feedSignals(Bit.ONE); - test.assertAfterSimulationIs(print, Bit.ONE); - test2.assertAfterSimulationIs(Bit.ONE); - aI.feedSignals(Bit.ONE); - test.assertAfterSimulationIs(print, Bit.ONE); - test2.assertAfterSimulationIs(Bit.ONE); - System.err.println("Conflict"); - aI.feedSignals(Bit.ZERO); - test.assertAfterSimulationIs(print, Bit.X); - test2.assertAfterSimulationIs(Bit.X); - aI.feedSignals(Bit.ONE); - test.assertAfterSimulationIs(print, Bit.ONE); - test2.assertAfterSimulationIs(Bit.ONE); - } - - private static void assertBitArrayEquals(BitVector actual, Bit... expected) - { - assertArrayEquals(expected, actual.getBits()); - } -} +package net.mograsim.logic.core.tests; + +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +import java.util.function.LongConsumer; + +import org.junit.jupiter.api.Test; + +import net.mograsim.logic.core.components.Connector; +import net.mograsim.logic.core.components.Demux; +import net.mograsim.logic.core.components.Merger; +import net.mograsim.logic.core.components.Mux; +import net.mograsim.logic.core.components.Splitter; +import net.mograsim.logic.core.components.TriStateBuffer; +import net.mograsim.logic.core.components.gates.AndGate; +import net.mograsim.logic.core.components.gates.NotGate; +import net.mograsim.logic.core.components.gates.OrGate; +import net.mograsim.logic.core.components.gates.XorGate; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +class ComponentTest +{ + private Timeline t = new Timeline(11); + + @Test + void circuitExampleTest() + { + Wire a = new Wire(t, 1, 1), b = new Wire(t, 1, 1), c = new Wire(t, 1, 10), d = new Wire(t, 2, 1), e = new Wire(t, 1, 1), + f = new Wire(t, 1, 1), g = new Wire(t, 1, 1), h = new Wire(t, 2, 1), i = new Wire(t, 2, 1), j = new Wire(t, 1, 1), + k = new Wire(t, 1, 1); + new AndGate(t, 1, f.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd()); + new NotGate(t, 1, f.createReadOnlyEnd(), g.createReadWriteEnd()); + new Merger(t, h.createReadWriteEnd(), c.createReadOnlyEnd(), g.createReadOnlyEnd()); + new Mux(t, 1, i.createReadWriteEnd(), e.createReadOnlyEnd(), h.createReadOnlyEnd(), d.createReadOnlyEnd()); + new Splitter(t, i.createReadOnlyEnd(), k.createReadWriteEnd(), j.createReadWriteEnd()); + + a.createReadWriteEnd().feedSignals(Bit.ZERO); + b.createReadWriteEnd().feedSignals(Bit.ONE); + c.createReadWriteEnd().feedSignals(Bit.ZERO); + d.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE); + e.createReadWriteEnd().feedSignals(Bit.ZERO); + + t.executeAll(); + + assertEquals(Bit.ONE, j.getValue()); + assertEquals(Bit.ZERO, k.getValue()); + } + + @Test + void splitterTest() + { + t.reset(); + Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), in = new Wire(t, 8, 1); + in.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); + new Splitter(t, in.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(), c.createReadWriteEnd()); + + t.executeAll(); + + assertBitArrayEquals(a.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO); + assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.ZERO); + assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE); + } + + @Test + void mergerTest() + { + t.reset(); + Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), out = new Wire(t, 8, 1); + a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO); + b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO); + c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE); + + new Merger(t, out.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd()); + + t.executeAll(); + + assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); + } + + @Test + void triStateBufferTest() + { + Wire a = new Wire(t, 1, 1), b = new Wire(t, 1, 1), en = new Wire(t, 1, 1), notEn = new Wire(t, 1, 1); + new NotGate(t, 1, en.createReadOnlyEnd(), notEn.createReadWriteEnd()); + new TriStateBuffer(t, 1, a.createReadOnlyEnd(), b.createReadWriteEnd(), en.createReadOnlyEnd()); + new TriStateBuffer(t, 1, b.createReadOnlyEnd(), a.createReadWriteEnd(), notEn.createReadOnlyEnd()); + + ReadWriteEnd enI = en.createReadWriteEnd(), aI = a.createReadWriteEnd(), bI = b.createReadWriteEnd(); + enI.feedSignals(Bit.ONE); + aI.feedSignals(Bit.ONE); + bI.feedSignals(Bit.Z); + + t.executeAll(); + + assertEquals(Bit.ONE, b.getValue()); + + bI.feedSignals(Bit.ZERO); + + t.executeAll(); + + assertEquals(Bit.X, b.getValue()); + assertEquals(Bit.ONE, a.getValue()); + + aI.clearSignals(); + enI.feedSignals(Bit.ZERO); + + t.executeAll(); + + assertEquals(Bit.ZERO, a.getValue()); + + } + + @Test + void muxTest() + { + t.reset(); + Wire a = new Wire(t, 4, 3), b = new Wire(t, 4, 6), c = new Wire(t, 4, 4), select = new Wire(t, 2, 5), out = new Wire(t, 4, 1); + ReadWriteEnd selectIn = select.createReadWriteEnd(); + + selectIn.feedSignals(Bit.ZERO, Bit.ZERO); + a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); + c.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); + + new Mux(t, 1, out.createReadWriteEnd(), select.createReadOnlyEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), + c.createReadOnlyEnd()); + t.executeAll(); + + assertBitArrayEquals(out.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); + selectIn.feedSignals(Bit.ZERO, Bit.ONE); + t.executeAll(); + + assertBitArrayEquals(out.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); + + selectIn.feedSignals(Bit.ONE, Bit.ONE); + t.executeAll(); + + assertBitArrayEquals(out.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z); + + } + + @Test + void demuxTest() + { + t.reset(); + Wire a = new Wire(t, 4, 3), b = new Wire(t, 4, 6), c = new Wire(t, 4, 4), select = new Wire(t, 2, 5), in = new Wire(t, 4, 1); + ReadWriteEnd selectIn = select.createReadWriteEnd(); + + selectIn.feedSignals(Bit.ZERO, Bit.ZERO); + in.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); + + new Demux(t, 1, in.createReadOnlyEnd(), select.createReadOnlyEnd(), a.createReadWriteEnd(), b.createReadWriteEnd(), + c.createReadWriteEnd()); + t.executeAll(); + + assertBitArrayEquals(a.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); + assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U); + assertBitArrayEquals(c.getValues(), Bit.U, Bit.U, Bit.U, Bit.U); + selectIn.feedSignals(Bit.ZERO, Bit.ONE); + t.executeAll(); + + assertBitArrayEquals(a.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z); + assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U); + assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ZERO, Bit.ONE, Bit.ZERO); + + selectIn.feedSignals(Bit.ONE, Bit.ONE); + t.executeAll(); + + assertBitArrayEquals(a.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z); + assertBitArrayEquals(b.getValues(), Bit.U, Bit.U, Bit.U, Bit.U); + assertBitArrayEquals(c.getValues(), Bit.Z, Bit.Z, Bit.Z, Bit.Z); + + } + + @Test + void andTest() + { + t.reset(); + Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1); + new AndGate(t, 1, c.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd()); + a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO); + b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); + + t.executeAll(); + + assertBitArrayEquals(c.getValues(), Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ZERO); + } + + @Test + void orTest() + { + t.reset(); + Wire a = new Wire(t, 4, 1), b = new Wire(t, 4, 3), c = new Wire(t, 4, 1); + new OrGate(t, 1, c.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd()); + a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ZERO); + b.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO, Bit.ONE); + + t.executeAll(); + + assertBitArrayEquals(c.getValues(), Bit.ONE, Bit.ONE, Bit.ZERO, Bit.ONE); + } + + @Test + void xorTest() + { + t.reset(); + Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 2), c = new Wire(t, 3, 1), d = new Wire(t, 3, 1); + new XorGate(t, 1, d.createReadWriteEnd(), a.createReadOnlyEnd(), b.createReadOnlyEnd(), c.createReadOnlyEnd()); + a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ONE); + b.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE); + c.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ZERO, Bit.ONE); + + t.executeAll(); + + assertBitArrayEquals(d.getValues(), Bit.ZERO, Bit.ONE, Bit.ONE); + } + + @Test + void notTest() + { + t.reset(); + Wire a = new Wire(t, 3, 1), b = new Wire(t, 3, 2); + new NotGate(t, 1, a.createReadOnlyEnd(), b.createReadWriteEnd()); + a.createReadWriteEnd().feedSignals(Bit.ZERO, Bit.ONE, Bit.ONE); + + t.executeAll(); + + assertBitArrayEquals(b.getValues(), Bit.ONE, Bit.ZERO, Bit.ZERO); + } + + @Test + void rsLatchCircuitTest() + { + t.reset(); + Wire r = new Wire(t, 1, 1), s = new Wire(t, 1, 1), t1 = new Wire(t, 1, 15), t2 = new Wire(t, 1, 1), q = new Wire(t, 1, 1), + nq = new Wire(t, 1, 1); + + new OrGate(t, 1, t2.createReadWriteEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd()); + new OrGate(t, 1, t1.createReadWriteEnd(), s.createReadOnlyEnd(), q.createReadOnlyEnd()); + new NotGate(t, 1, t2.createReadOnlyEnd(), q.createReadWriteEnd()); + new NotGate(t, 1, t1.createReadOnlyEnd(), nq.createReadWriteEnd()); + + ReadWriteEnd sIn = s.createReadWriteEnd(), rIn = r.createReadWriteEnd(); + + sIn.feedSignals(Bit.ONE); + rIn.feedSignals(Bit.ZERO); + + t.executeAll(); + + assertEquals(Bit.ONE, q.getValue()); + assertEquals(Bit.ZERO, nq.getValue()); + + sIn.feedSignals(Bit.ZERO); + + t.executeAll(); + assertEquals(Bit.ONE, q.getValue()); + assertEquals(Bit.ZERO, nq.getValue()); + + rIn.feedSignals(Bit.ONE); + + t.executeAll(); + + assertEquals(Bit.ZERO, q.getValue()); + assertEquals(Bit.ONE, nq.getValue()); + } + + @Test + void numericValueTest() + { + t.reset(); + + Wire a = new Wire(t, 4, 1); + a.createReadWriteEnd().feedSignals(Bit.ONE, Bit.ONE, Bit.ONE, Bit.ONE); + + t.executeAll(); + + assertEquals(15, a.getUnsignedValue()); + assertEquals(-1, a.getSignedValue()); + } + + boolean flag = false; + + @Test + void simpleTimelineTest() + { + Timeline t = new Timeline(3); + flag = false; + t.addEvent((e) -> + { + if (!flag) + fail(); + flag = false; + }, 15); + t.addEvent((e) -> + { + if (flag) + fail(); + flag = true; + }, 10); + t.addEvent((e) -> + { + if (flag) + fail(); + flag = true; + }, 20); + t.addEvent((e) -> + { + fail("Only supposed to execute until timestamp 20, not 25"); + }, 25); + + t.executeUntil(t.laterThan(20), 100); + + if (!flag) + fail(); + } + + @Test + void multipleInputs() + { + t.reset(); + Wire w = new Wire(t, 2, 1); + ReadWriteEnd wI1 = w.createReadWriteEnd(), wI2 = w.createReadWriteEnd(); + wI1.feedSignals(Bit.ONE, Bit.Z); + wI2.feedSignals(Bit.Z, Bit.X); + t.executeAll(); + assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.X); + + wI2.feedSignals(Bit.ZERO, Bit.Z); + t.executeAll(); + assertBitArrayEquals(w.getValues(), Bit.X, Bit.Z); + + wI2.feedSignals(Bit.Z, Bit.Z); + t.executeAll(); + assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z); + + wI2.feedSignals(Bit.ONE, Bit.Z); + ReadEnd rE = w.createReadOnlyEnd(); + rE.addObserver((i, oldValues) -> fail("WireEnd notified observer, although value did not change.")); + t.executeAll(); + rE.close(); + wI1.feedSignals(Bit.X, Bit.X); + t.executeAll(); + wI1.addObserver((i, oldValues) -> fail("WireEnd notified observer, although it was closed.")); + wI1.close(); + assertBitArrayEquals(w.getValues(), Bit.ONE, Bit.Z); + } + + @Test + void wireConnections() + { + // Nur ein Experiment, was über mehrere 'passive' Bausteine hinweg passieren würde + + t.reset(); + + Wire a = new Wire(t, 1, 2); + Wire b = new Wire(t, 1, 2); + Wire c = new Wire(t, 1, 2); + ReadWriteEnd aI = a.createReadWriteEnd(); + ReadWriteEnd bI = b.createReadWriteEnd(); + ReadWriteEnd cI = c.createReadWriteEnd(); + + TestBitDisplay test = new TestBitDisplay(t, c.createReadOnlyEnd()); + TestBitDisplay test2 = new TestBitDisplay(t, a.createReadOnlyEnd()); + LongConsumer print = time -> System.out.format("Time %2d\n a: %s\n b: %s\n c: %s\n", time, a, b, c); + + cI.feedSignals(Bit.ONE); + test.assertAfterSimulationIs(print, Bit.ONE); + + cI.feedSignals(Bit.X); + test.assertAfterSimulationIs(print, Bit.X); + + cI.feedSignals(Bit.X); + cI.feedSignals(Bit.Z); + test.assertAfterSimulationIs(print, Bit.Z); + + new Connector(t, b.createReadWriteEnd(), c.createReadWriteEnd()).connect(); + test.assertAfterSimulationIs(print, Bit.Z); + System.err.println("ONE"); + bI.feedSignals(Bit.ONE); + test.assertAfterSimulationIs(print, Bit.ONE); + System.err.println("ZERO"); + bI.feedSignals(Bit.ZERO); + test.assertAfterSimulationIs(print, Bit.ZERO); + System.err.println("Z"); + bI.feedSignals(Bit.Z); + test.assertAfterSimulationIs(print, Bit.Z); + + new Connector(t, a.createReadWriteEnd(), b.createReadWriteEnd()).connect(); + System.err.println("Z 2"); + aI.feedSignals(Bit.Z); + test.assertAfterSimulationIs(print, Bit.Z); + test2.assertAfterSimulationIs(Bit.Z); + System.err.println("ONE 2"); + aI.feedSignals(Bit.ONE); + test.assertAfterSimulationIs(print, Bit.ONE); + test2.assertAfterSimulationIs(Bit.ONE); + System.err.println("ZERO 2"); + aI.feedSignals(Bit.ZERO); + test.assertAfterSimulationIs(print, Bit.ZERO); + test2.assertAfterSimulationIs(Bit.ZERO); + System.err.println("Z 2 II"); + aI.feedSignals(Bit.Z); + test.assertAfterSimulationIs(print, Bit.Z); + test2.assertAfterSimulationIs(Bit.Z); + + System.err.println("No Conflict yet"); + bI.feedSignals(Bit.ONE); + test.assertAfterSimulationIs(print, Bit.ONE); + test2.assertAfterSimulationIs(Bit.ONE); + aI.feedSignals(Bit.ONE); + test.assertAfterSimulationIs(print, Bit.ONE); + test2.assertAfterSimulationIs(Bit.ONE); + System.err.println("Conflict"); + aI.feedSignals(Bit.ZERO); + test.assertAfterSimulationIs(print, Bit.X); + test2.assertAfterSimulationIs(Bit.X); + aI.feedSignals(Bit.ONE); + test.assertAfterSimulationIs(print, Bit.ONE); + test2.assertAfterSimulationIs(Bit.ONE); + } + + private static void assertBitArrayEquals(BitVector actual, Bit... expected) + { + assertArrayEquals(expected, actual.getBits()); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/tests/GUITest.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/tests/GUITest.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/tests/GUITest.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/tests/GUITest.java index 4232710f..7d066219 100644 --- a/era.mi/src/net/mograsim/logic/core/tests/GUITest.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/tests/GUITest.java @@ -1,301 +1,301 @@ -package net.mograsim.logic.core.tests; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Rectangle; -import java.awt.RenderingHints; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.WindowConstants; - -import net.mograsim.logic.core.components.ManualSwitch; -import net.mograsim.logic.core.components.gates.NotGate; -import net.mograsim.logic.core.components.gates.OrGate; -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.timeline.Timeline.ExecutionResult; -import net.mograsim.logic.core.wires.Wire; - -public class GUITest extends JPanel -{ - - private static final long serialVersionUID = 1L; - - private static final int WIRE_DELAY = 40; - private static final int OR_DELAY = 100; - private static final int NOT_DELAY = 100; - - private Timeline t = new Timeline(11); - - Wire r = new Wire(t, 1, WIRE_DELAY); - Wire s = new Wire(t, 1, WIRE_DELAY); - Wire t1 = new Wire(t, 1, WIRE_DELAY); - Wire t2 = new Wire(t, 1, WIRE_DELAY); - Wire q = new Wire(t, 1, WIRE_DELAY); - Wire nq = new Wire(t, 1, WIRE_DELAY); - - ManualSwitch rIn = new ManualSwitch(t, r.createReadWriteEnd()); - ManualSwitch sIn = new ManualSwitch(t, s.createReadWriteEnd()); - - OrGate or1 = new OrGate(t, OR_DELAY, t2.createReadWriteEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd()); - OrGate or2 = new OrGate(t, OR_DELAY, t1.createReadWriteEnd(), s.createReadOnlyEnd(), q.createReadOnlyEnd()); - NotGate not1 = new NotGate(t, NOT_DELAY, t2.createReadOnlyEnd(), q.createReadWriteEnd()); - NotGate not2 = new NotGate(t, NOT_DELAY, t1.createReadOnlyEnd(), nq.createReadWriteEnd()); - - Map switchMap = new HashMap<>(); - - int height; - int width; - boolean sizeChanged; - - public GUITest() - { - addMouseListener(new MouseListener() - { - - @Override - public void mouseReleased(MouseEvent e) - { - for (Entry dim : switchMap.entrySet()) - { - if (dim.getValue().contains(e.getPoint())) - { - dim.getKey().switchOff(); - repaint(); - } - } - } - - @Override - public void mousePressed(MouseEvent e) - { - for (Entry dim : switchMap.entrySet()) - { - if (dim.getValue().contains(e.getPoint())) - { - dim.getKey().switchOn(); - repaint(); - } - } - } - - @Override - public void mouseExited(MouseEvent e) - { - // none - } - - @Override - public void mouseEntered(MouseEvent e) - { - // none - } - - @Override - public void mouseClicked(MouseEvent e) - { - // If you want toggle buttons, use this code instead -// for (Entry dim : switchMap.entrySet()) { -// if (dim.getValue().contains(e.getPoint())) { -// dim.getKey().toggle(); -// repaint(); -// } -// } - } - }); - } - - public Timeline getTimeline() - { - return t; - }; - - @Override - public void paint(Graphics some_g) - { - super.paint(some_g); - Graphics2D g = ((Graphics2D) some_g); - g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP); - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); - - checkSizeChange(); - adaptFont(g); - - drawWire(g, r, "r", 2, 9, 4, 9); - - drawWire(g, s, "s", 2, 3, 4, 3); - - drawWire(g, t2, "t2", 5, 8.5, 6, 8.5); - - drawWire(g, t1, "t1", 5, 3.5, 6, 3.5); - - drawWire(g, q, "q", 7, 8.5, 9, 8.5); - - drawWire(g, nq, "nq", 7, 3.5, 9, 3.5); - - drawWire(g, q, "", 7.5, 8.5, 7.5, 7.5); - drawWire(g, q, "", 7.5, 7.5, 3, 4.5); - drawWire(g, q, "", 3, 4.5, 3, 4); - drawWire(g, q, "q", 3, 4, 4, 4); - - drawWire(g, nq, "", 7.5, 3.5, 7.5, 4.5); - drawWire(g, nq, "", 7.5, 4.5, 3, 7.5); - drawWire(g, nq, "", 3, 7.5, 3, 8); - drawWire(g, nq, "nq", 3, 8, 4, 8); - - drawSquare(g, 4, 8, "OR"); - drawSquare(g, 4, 3, "OR"); - - drawSquare(g, 6, 8, "NOT"); - drawSquare(g, 6, 3, "NOT"); - - drawSwitch(g, rIn, "Switch R", 0.5, 8.25, 2, 9.75); - drawSwitch(g, sIn, "Switch S", 0.5, 2.25, 2, 3.75); - - drawString(g, "Hint: drag the cursor out of the pressed switch to keep it's state", 5, 0, 0.0, 1.0); - } - - private void checkSizeChange() - { - sizeChanged = height != getHeight() || width != getWidth(); - if (sizeChanged) - { - height = getHeight(); - width = getWidth(); - } - } - - private void adaptFont(Graphics g) - { - g.setFont(g.getFont().deriveFont(Math.min(height, width) / 40f)); - } - - private void drawString(Graphics g, String s, int x, int y, double anchorX, double anchorY) - { - int h = g.getFontMetrics().getAscent(); - int w = g.getFontMetrics().stringWidth(s); - g.drawString(s, x - (int) (w * anchorX), y + (int) (h * anchorY)); - } - - private void drawWire(Graphics g, Wire wa, String name, double x1, double y1, double x2, double y2) - { - setTo(g, wa); - g.drawLine(gX(x1), gY(y1), gX(x2), gY(y2)); - drawString(g, name, (gX(x1) + gX(x2)) / 2, (gY(y1) + gY(y2)) / 2 - 5, 0, 0); - } - - private void drawSquare(Graphics g, int posX, int posY, String text) - { - int x1 = gX(posX) - 5; - int x2 = gX(posX + 1) + 5; - int y1 = gY(posY) - 5; - int y2 = gY(posY + 1) + 5; - - g.setColor(Color.WHITE); - g.fillRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); - setBlack(g); - g.drawRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); - drawString(g, text, (x1 + x2) / 2, (y1 + y2) / 2, 0.5, 0.5); - - } - - private void drawSwitch(Graphics g, ManualSwitch ms, String text, double posX1, double posY1, double posX2, double posY2) - { - int x1 = gX(posX1) - 5; - int x2 = gX(posX2) + 5; - int y1 = gY(posY1) - 5; - int y2 = gY(posY2) + 5; - - if (sizeChanged) - { - Rectangle r = new Rectangle(x1, y1, x2 - x1, y2 - y1); - switchMap.put(ms, r); - } - - g.setColor(ms.isOn() ? Color.getHSBColor(.3f, .5f, 1f) : Color.WHITE); - g.fillRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); - setBlack(g); - g.drawRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); - drawString(g, text, (x1 + x2) / 2, (y1 + y2) / 2, 0.5, 0.5); - } - - private static void setBlack(Graphics g) - { - g.setColor(Color.BLACK); - } - - private static void setTo(Graphics g, Wire wa) - { - switch (wa.getValue()) - { - case ONE: - g.setColor(Color.GREEN); - break; - case X: - g.setColor(Color.RED); - break; - case Z: - g.setColor(Color.DARK_GRAY); - break; - case ZERO: - g.setColor(Color.BLACK); - break; - case U: - g.setColor(Color.MAGENTA); - break; - default: - throw new IllegalArgumentException(); - } - } - - private int gY(double pos) - { - return (int) (pos * height / 11); - } - - private int gX(double pos) - { - return (int) (pos * width / 11) + 50; - } - - public static void main(String[] args) - { - JFrame f = new JFrame("Test circuit 1.0.0"); - GUITest gt = new GUITest(); - f.add(gt); - f.setSize(800, 600); - f.setLocation(500, 400); - f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - f.setVisible(true); - - long begin = System.currentTimeMillis(); - - long lastFrame = begin; - long updateT = 16; - - while (f.isVisible()) - { - ExecutionResult er = gt.getTimeline().executeUntil(gt.getTimeline().laterThan((lastFrame - begin) * 3), lastFrame + 14); -// if (t.hasNext()) -// t.executeNext(); - if (er != ExecutionResult.NOTHING_DONE) - gt.repaint(12); - try - { - Thread.sleep(Math.max(updateT - System.currentTimeMillis() + lastFrame, 0)); - } - catch (Exception e) - { - e.printStackTrace(); - } - lastFrame = System.currentTimeMillis(); - } - } -} +package net.mograsim.logic.core.tests; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.WindowConstants; + +import net.mograsim.logic.core.components.ManualSwitch; +import net.mograsim.logic.core.components.gates.NotGate; +import net.mograsim.logic.core.components.gates.OrGate; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.timeline.Timeline.ExecutionResult; +import net.mograsim.logic.core.wires.Wire; + +public class GUITest extends JPanel +{ + + private static final long serialVersionUID = 1L; + + private static final int WIRE_DELAY = 40; + private static final int OR_DELAY = 100; + private static final int NOT_DELAY = 100; + + private Timeline t = new Timeline(11); + + Wire r = new Wire(t, 1, WIRE_DELAY); + Wire s = new Wire(t, 1, WIRE_DELAY); + Wire t1 = new Wire(t, 1, WIRE_DELAY); + Wire t2 = new Wire(t, 1, WIRE_DELAY); + Wire q = new Wire(t, 1, WIRE_DELAY); + Wire nq = new Wire(t, 1, WIRE_DELAY); + + ManualSwitch rIn = new ManualSwitch(t, r.createReadWriteEnd()); + ManualSwitch sIn = new ManualSwitch(t, s.createReadWriteEnd()); + + OrGate or1 = new OrGate(t, OR_DELAY, t2.createReadWriteEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd()); + OrGate or2 = new OrGate(t, OR_DELAY, t1.createReadWriteEnd(), s.createReadOnlyEnd(), q.createReadOnlyEnd()); + NotGate not1 = new NotGate(t, NOT_DELAY, t2.createReadOnlyEnd(), q.createReadWriteEnd()); + NotGate not2 = new NotGate(t, NOT_DELAY, t1.createReadOnlyEnd(), nq.createReadWriteEnd()); + + Map switchMap = new HashMap<>(); + + int height; + int width; + boolean sizeChanged; + + public GUITest() + { + addMouseListener(new MouseListener() + { + + @Override + public void mouseReleased(MouseEvent e) + { + for (Entry dim : switchMap.entrySet()) + { + if (dim.getValue().contains(e.getPoint())) + { + dim.getKey().switchOff(); + repaint(); + } + } + } + + @Override + public void mousePressed(MouseEvent e) + { + for (Entry dim : switchMap.entrySet()) + { + if (dim.getValue().contains(e.getPoint())) + { + dim.getKey().switchOn(); + repaint(); + } + } + } + + @Override + public void mouseExited(MouseEvent e) + { + // none + } + + @Override + public void mouseEntered(MouseEvent e) + { + // none + } + + @Override + public void mouseClicked(MouseEvent e) + { + // If you want toggle buttons, use this code instead +// for (Entry dim : switchMap.entrySet()) { +// if (dim.getValue().contains(e.getPoint())) { +// dim.getKey().toggle(); +// repaint(); +// } +// } + } + }); + } + + public Timeline getTimeline() + { + return t; + }; + + @Override + public void paint(Graphics some_g) + { + super.paint(some_g); + Graphics2D g = ((Graphics2D) some_g); + g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); + + checkSizeChange(); + adaptFont(g); + + drawWire(g, r, "r", 2, 9, 4, 9); + + drawWire(g, s, "s", 2, 3, 4, 3); + + drawWire(g, t2, "t2", 5, 8.5, 6, 8.5); + + drawWire(g, t1, "t1", 5, 3.5, 6, 3.5); + + drawWire(g, q, "q", 7, 8.5, 9, 8.5); + + drawWire(g, nq, "nq", 7, 3.5, 9, 3.5); + + drawWire(g, q, "", 7.5, 8.5, 7.5, 7.5); + drawWire(g, q, "", 7.5, 7.5, 3, 4.5); + drawWire(g, q, "", 3, 4.5, 3, 4); + drawWire(g, q, "q", 3, 4, 4, 4); + + drawWire(g, nq, "", 7.5, 3.5, 7.5, 4.5); + drawWire(g, nq, "", 7.5, 4.5, 3, 7.5); + drawWire(g, nq, "", 3, 7.5, 3, 8); + drawWire(g, nq, "nq", 3, 8, 4, 8); + + drawSquare(g, 4, 8, "OR"); + drawSquare(g, 4, 3, "OR"); + + drawSquare(g, 6, 8, "NOT"); + drawSquare(g, 6, 3, "NOT"); + + drawSwitch(g, rIn, "Switch R", 0.5, 8.25, 2, 9.75); + drawSwitch(g, sIn, "Switch S", 0.5, 2.25, 2, 3.75); + + drawString(g, "Hint: drag the cursor out of the pressed switch to keep it's state", 5, 0, 0.0, 1.0); + } + + private void checkSizeChange() + { + sizeChanged = height != getHeight() || width != getWidth(); + if (sizeChanged) + { + height = getHeight(); + width = getWidth(); + } + } + + private void adaptFont(Graphics g) + { + g.setFont(g.getFont().deriveFont(Math.min(height, width) / 40f)); + } + + private void drawString(Graphics g, String s, int x, int y, double anchorX, double anchorY) + { + int h = g.getFontMetrics().getAscent(); + int w = g.getFontMetrics().stringWidth(s); + g.drawString(s, x - (int) (w * anchorX), y + (int) (h * anchorY)); + } + + private void drawWire(Graphics g, Wire wa, String name, double x1, double y1, double x2, double y2) + { + setTo(g, wa); + g.drawLine(gX(x1), gY(y1), gX(x2), gY(y2)); + drawString(g, name, (gX(x1) + gX(x2)) / 2, (gY(y1) + gY(y2)) / 2 - 5, 0, 0); + } + + private void drawSquare(Graphics g, int posX, int posY, String text) + { + int x1 = gX(posX) - 5; + int x2 = gX(posX + 1) + 5; + int y1 = gY(posY) - 5; + int y2 = gY(posY + 1) + 5; + + g.setColor(Color.WHITE); + g.fillRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); + setBlack(g); + g.drawRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); + drawString(g, text, (x1 + x2) / 2, (y1 + y2) / 2, 0.5, 0.5); + + } + + private void drawSwitch(Graphics g, ManualSwitch ms, String text, double posX1, double posY1, double posX2, double posY2) + { + int x1 = gX(posX1) - 5; + int x2 = gX(posX2) + 5; + int y1 = gY(posY1) - 5; + int y2 = gY(posY2) + 5; + + if (sizeChanged) + { + Rectangle r = new Rectangle(x1, y1, x2 - x1, y2 - y1); + switchMap.put(ms, r); + } + + g.setColor(ms.isOn() ? Color.getHSBColor(.3f, .5f, 1f) : Color.WHITE); + g.fillRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); + setBlack(g); + g.drawRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); + drawString(g, text, (x1 + x2) / 2, (y1 + y2) / 2, 0.5, 0.5); + } + + private static void setBlack(Graphics g) + { + g.setColor(Color.BLACK); + } + + private static void setTo(Graphics g, Wire wa) + { + switch (wa.getValue()) + { + case ONE: + g.setColor(Color.GREEN); + break; + case X: + g.setColor(Color.RED); + break; + case Z: + g.setColor(Color.DARK_GRAY); + break; + case ZERO: + g.setColor(Color.BLACK); + break; + case U: + g.setColor(Color.MAGENTA); + break; + default: + throw new IllegalArgumentException(); + } + } + + private int gY(double pos) + { + return (int) (pos * height / 11); + } + + private int gX(double pos) + { + return (int) (pos * width / 11) + 50; + } + + public static void main(String[] args) + { + JFrame f = new JFrame("Test circuit 1.0.0"); + GUITest gt = new GUITest(); + f.add(gt); + f.setSize(800, 600); + f.setLocation(500, 400); + f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + f.setVisible(true); + + long begin = System.currentTimeMillis(); + + long lastFrame = begin; + long updateT = 16; + + while (f.isVisible()) + { + ExecutionResult er = gt.getTimeline().executeUntil(gt.getTimeline().laterThan((lastFrame - begin) * 3), lastFrame + 14); +// if (t.hasNext()) +// t.executeNext(); + if (er != ExecutionResult.NOTHING_DONE) + gt.repaint(12); + try + { + Thread.sleep(Math.max(updateT - System.currentTimeMillis() + lastFrame, 0)); + } + catch (Exception e) + { + e.printStackTrace(); + } + lastFrame = System.currentTimeMillis(); + } + } +} diff --git a/era.mi/src/net/mograsim/logic/core/tests/TestBitDisplay.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/tests/TestBitDisplay.java similarity index 95% rename from era.mi/src/net/mograsim/logic/core/tests/TestBitDisplay.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/tests/TestBitDisplay.java index 41a8f58c..015e257f 100644 --- a/era.mi/src/net/mograsim/logic/core/tests/TestBitDisplay.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/tests/TestBitDisplay.java @@ -1,47 +1,47 @@ -package net.mograsim.logic.core.tests; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -import java.util.function.LongConsumer; - -import net.mograsim.logic.core.components.BitDisplay; -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.wires.Wire.ReadEnd; - -public final class TestBitDisplay extends BitDisplay -{ - - public TestBitDisplay(Timeline timeline, ReadEnd in) - { - super(timeline, in); - } - - public void assertDisplays(Bit... expected) - { - assertArrayEquals(expected, getDisplayedValue().getBits()); - } - - public void assertAfterSimulationIs(Bit... expected) - { - timeline.executeAll(); - assertDisplays(expected); - } - - public void assertAfterSimulationIs(LongConsumer r, Bit... expected) - { - while (timeline.hasNext()) - { - timeline.executeNext(); - r.accept(timeline.getSimulationTime()); - } - assertDisplays(expected); - } - - @Override - protected void compute() - { - super.compute(); - System.out.println("update: value is " + getDisplayedValue()); - } -} +package net.mograsim.logic.core.tests; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +import java.util.function.LongConsumer; + +import net.mograsim.logic.core.components.BitDisplay; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.wires.Wire.ReadEnd; + +public final class TestBitDisplay extends BitDisplay +{ + + public TestBitDisplay(Timeline timeline, ReadEnd in) + { + super(timeline, in); + } + + public void assertDisplays(Bit... expected) + { + assertArrayEquals(expected, getDisplayedValue().getBits()); + } + + public void assertAfterSimulationIs(Bit... expected) + { + timeline.executeAll(); + assertDisplays(expected); + } + + public void assertAfterSimulationIs(LongConsumer r, Bit... expected) + { + while (timeline.hasNext()) + { + timeline.executeNext(); + r.accept(timeline.getSimulationTime()); + } + assertDisplays(expected); + } + + @Override + protected void compute() + { + super.compute(); + System.out.println("update: value is " + getDisplayedValue()); + } +} diff --git a/era.mi/src/net/mograsim/logic/core/timeline/Timeline.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/Timeline.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/timeline/Timeline.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/Timeline.java diff --git a/era.mi/src/net/mograsim/logic/core/timeline/TimelineEvent.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/TimelineEvent.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/timeline/TimelineEvent.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/TimelineEvent.java diff --git a/era.mi/src/net/mograsim/logic/core/timeline/TimelineEventHandler.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/TimelineEventHandler.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/timeline/TimelineEventHandler.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/timeline/TimelineEventHandler.java diff --git a/era.mi/src/net/mograsim/logic/core/types/Bit.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/Bit.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/types/Bit.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/types/Bit.java diff --git a/era.mi/src/net/mograsim/logic/core/types/BitVector.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/types/BitVector.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java diff --git a/era.mi/src/net/mograsim/logic/core/types/BitVectorFormatter.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/types/BitVectorFormatter.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java diff --git a/era.mi/src/net/mograsim/logic/core/types/ColorDefinition.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/ColorDefinition.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/types/ColorDefinition.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/types/ColorDefinition.java diff --git a/era.mi/src/net/mograsim/logic/core/types/LogicType.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/LogicType.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/types/LogicType.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/types/LogicType.java diff --git a/era.mi/src/net/mograsim/logic/core/types/MutationOperation.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/MutationOperation.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/types/MutationOperation.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/types/MutationOperation.java diff --git a/era.mi/src/net/mograsim/logic/core/types/StrictLogicType.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/StrictLogicType.java similarity index 100% rename from era.mi/src/net/mograsim/logic/core/types/StrictLogicType.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/types/StrictLogicType.java diff --git a/era.mi/src/net/mograsim/logic/core/wires/Wire.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/wires/Wire.java similarity index 95% rename from era.mi/src/net/mograsim/logic/core/wires/Wire.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/wires/Wire.java index d56ca2a5..d73ee61c 100644 --- a/era.mi/src/net/mograsim/logic/core/wires/Wire.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/wires/Wire.java @@ -1,492 +1,492 @@ -package net.mograsim.logic.core.wires; - -import static net.mograsim.logic.core.types.Bit.U; -import static net.mograsim.logic.core.types.Bit.Z; - -import java.util.ArrayList; -import java.util.List; - -import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.types.BitVector.BitVectorMutator; - -/** - * Represents an array of wires that can store n bits of information. - * - * @author Fabian Stemmler - * - */ -public class Wire -{ - private BitVector values; - public final int travelTime; - private List attached = new ArrayList(); - public final int length; - private List inputs = new ArrayList(); - private Timeline timeline; - - public Wire(Timeline timeline, int length, int travelTime) - { - if (length < 1) - throw new IllegalArgumentException( - String.format("Tried to create an array of wires with length %d, but a length of less than 1 makes no sense.", length)); - this.timeline = timeline; - this.length = length; - this.travelTime = travelTime; - initValues(); - } - - private void initValues() - { - values = U.toVector(length); - } - - private void recalculateSingleInput() - { - setNewValues(inputs.get(0).getInputValues()); - } - - private void recalculateMultipleInputs() - { - BitVectorMutator mutator = BitVectorMutator.empty(); - for (ReadWriteEnd wireArrayEnd : inputs) - mutator.join(wireArrayEnd.getInputValues()); - setNewValues(mutator.get()); - } - - private void setNewValues(BitVector newValues) - { - if (values.equals(newValues)) - return; - BitVector oldValues = values; - values = newValues; - notifyObservers(oldValues); - } - - private void recalculate() - { - switch (inputs.size()) - { - case 0: - return; - case 1: - recalculateSingleInput(); - break; - default: - recalculateMultipleInputs(); - } - } - - /** - * The {@link Wire} is interpreted as an unsigned integer with n bits. - * - * @return true if all bits are either Bit.ONE or Bit.ZERO (they do not all have to have the same - * value), not Bit.X or Bit.Z. false is returned otherwise. - * - * @author Fabian Stemmler - */ - public boolean hasNumericValue() - { - for (Bit b : values) - { - if (b != Bit.ZERO && b != Bit.ONE) - return false; - } - return true; - } - - /** - * The {@link Wire} is interpreted as an unsigned integer with n bits. - * - * @return The unsigned value of the {@link Wire}'s bits, where value 0 corresponds with 2^0, value 1 is 2^1 and so on. - * - * @author Fabian Stemmler - */ - public long getUnsignedValue() - { - long val = 0; - long mask = 1; - for (Bit bit : values) - { - switch (bit) - { - default: - case Z: - case X: - return 0; // TODO: Proper handling for getUnsignedValue(), if not all bits are 1 or 0; - case ONE: - val |= mask; - break; - case ZERO: - } - mask = mask << 1; - } - return val; - } - - /** - * The {@link Wire} is interpreted as a signed integer with n bits. - * - * @return The signed value of the {@link Wire}'s bits, where value 0 corresponds with 2^0, value 1 is 2^1 and so on. - * - * @author Fabian Stemmler - */ - public long getSignedValue() - { - long val = getUnsignedValue(); - long mask = 1 << (length - 1); - if ((mask & val) != 0) - { - int shifts = 64 - length; - return (val << shifts) >> shifts; - } - return val; - } - - public Bit getValue() - { - return getValue(0); - } - - public Bit getValue(int index) - { - return values.getBit(index); - } - - public BitVector getValues(int start, int end) - { - return values.subVector(start, end); - } - - public BitVector getValues() - { - return values; - } - - /** - * Adds an {@link WireObserver}, who will be notified when the value of the {@link Wire} is updated. - * - * @param ob The {@link WireObserver} to be notified of changes. - * @return true if the given {@link WireObserver} was not already registered, false otherwise - * - * @author Fabian Stemmler - */ - private void attachEnd(ReadEnd end) - { - attached.add(end); - } - - private void detachEnd(ReadEnd end) - { - attached.remove(end); - } - - private void notifyObservers(BitVector oldValues) - { - for (ReadEnd o : attached) - o.update(oldValues); - } - - /** - * Create and register a {@link ReadWriteEnd} object, which is tied to this {@link Wire}. This {@link ReadWriteEnd} can be written to. - */ - public ReadWriteEnd createReadWriteEnd() - { - return new ReadWriteEnd(); - } - - /** - * Create a {@link ReadEnd} object, which is tied to this {@link Wire}. This {@link ReadEnd} cannot be written to. - */ - public ReadEnd createReadOnlyEnd() - { - return new ReadEnd(); - } - - private void registerInput(ReadWriteEnd toRegister) - { - inputs.add(toRegister); - } - - /** - * A {@link ReadEnd} feeds a constant signal into the {@link Wire} it is tied to. The combination of all inputs determines the - * {@link Wire}s final value. X dominates all other inputs Z does not affect the final value, unless there are no other inputs than Z 0 - * and 1 turn into X when they are mixed - * - * @author Fabian Stemmler - */ - public class ReadEnd - { - private List observers = new ArrayList(); - - private ReadEnd() - { - super(); - Wire.this.attachEnd(this); - } - - public void update(BitVector oldValues) - { - for (WireObserver ob : observers) - ob.update(this, oldValues); - } - - /** - * Included for convenient use on {@link Wire}s of length 1. - * - * @return The value of bit 0. - * - * @author Fabian Stemmler - */ - public Bit getValue() - { - return Wire.this.getValue(); - } - - /** - * @param index Index of the requested bit. - * @return The value of the indexed bit. - * - * @author Fabian Stemmler - */ - public Bit getValue(int index) - { - return Wire.this.getValue(index); - } - - /** - * @param index Index of the requested bit. - * @return The value of the indexed bit. - * - * @author Fabian Stemmler - */ - public BitVector getValues() - { - return Wire.this.getValues(); - } - - /** - * @param start Start of the wanted segment. (inclusive) - * @param end End of the wanted segment. (exclusive) - * @return The values of the segment of {@link Bit}s indexed. - * - * @author Fabian Stemmler - */ - public BitVector getValues(int start, int end) - { - return Wire.this.getValues(start, end); - } - - /** - * The {@link Wire} is interpreted as an unsigned integer with n bits. - * - * @return true if all bits are either Bit.ONE or Bit.ZERO (they do not all have to have the - * same value), not Bit.X or Bit.Z. false is returned otherwise. - * - * @author Fabian Stemmler - */ - public boolean hasNumericValue() - { - return Wire.this.hasNumericValue(); - } - - /** - * The {@link Wire} is interpreted as an unsigned integer with n bits. - * - * @return The unsigned value of the {@link Wire}'s bits, where value 0 corresponds with 2^0, value 1 is 2^1 and so on. - * - * @author Fabian Stemmler - */ - public long getUnsignedValue() - { - return Wire.this.getUnsignedValue(); - } - - /** - * The {@link Wire} is interpreted as a signed integer with n bits. - * - * @return The signed value of the {@link Wire}'s bits, where value 0 corresponds with 2^0, value 1 is 2^1 and so on. - * - * @author Fabian Stemmler - */ - public long getSignedValue() - { - return Wire.this.getSignedValue(); - } - - @Override - public String toString() - { - return Wire.this.toString(); - } - - public void close() - { - inputs.remove(this); - detachEnd(this); - recalculate(); - } - - public int length() - { - return length; - } - - public boolean addObserver(WireObserver ob) - { - return observers.add(ob); - } - - public Wire getWire() - { - return Wire.this; - } - } - - public class ReadWriteEnd extends ReadEnd - { - private boolean open; - private BitVector inputValues; - - private ReadWriteEnd() - { - super(); - open = true; - initValues(); - registerInput(this); - } - - private void initValues() - { - inputValues = U.toVector(length); - } - - /** - * Sets the wires values. This takes up time, as specified by the {@link Wire}s travel time. - * - * @param newValues The new values the wires should take on. - * - * @author Fabian Stemmler - */ - public void feedSignals(Bit... newValues) - { - feedSignals(BitVector.of(newValues)); - } - - public void feedSignals(BitVector newValues) - { - if (newValues.length() != length) - throw new IllegalArgumentException( - String.format("Attempted to input %d bits instead of %d bits.", newValues.length(), length)); - if (!open) - throw new RuntimeException("Attempted to write to closed WireArrayEnd."); - timeline.addEvent(e -> setValues(newValues), travelTime); - } - - /** - * Sets values of a subarray of wires. This takes up time, as specified by the {@link Wire}s travel time. - * - * @param bitVector The new values the wires should take on. - * @param startingBit The first index of the subarray of wires. - * - * @author Fabian Stemmler - */ - public void feedSignals(int startingBit, BitVector bitVector) - { - if (!open) - throw new RuntimeException("Attempted to write to closed WireArrayEnd."); - timeline.addEvent(e -> setValues(startingBit, bitVector), travelTime); - } - - private void setValues(int startingBit, BitVector newValues) - { - // index check covered in equals - if (!inputValues.equalsWithOffset(newValues, startingBit)) - { - Bit[] vals = inputValues.getBits(); - System.arraycopy(newValues.getBits(), 0, vals, startingBit, newValues.length()); - inputValues = BitVector.of(vals); - Wire.this.recalculate(); - } - } - - private void setValues(BitVector newValues) - { - if (inputValues.equals(newValues)) - return; - inputValues = newValues; - Wire.this.recalculate(); - } - - /** - * @return The value (of bit 0) the {@link ReadEnd} is currently feeding into the associated {@link Wire}. - */ - public Bit getInputValue() - { - return getInputValue(0); - } - - /** - * @return The value which the {@link ReadEnd} is currently feeding into the associated {@link Wire} at the indexed {@link Bit}. - */ - public Bit getInputValue(int index) - { - return inputValues.getBit(index); - } - - /** - * @return A copy (safe to modify) of the values the {@link ReadEnd} is currently feeding into the associated {@link Wire}. - */ - public BitVector getInputValues() - { - return getInputValues(0, length); - } - - public BitVector getInputValues(int start, int end) - { - return inputValues.subVector(start, end); - } - - /** - * {@link ReadEnd} now feeds Z into the associated {@link Wire}. - */ - public void clearSignals() - { - feedSignals(Z.toVector(length)); - } - - public BitVector wireValuesExcludingMe() - { - BitVectorMutator mutator = BitVectorMutator.empty(); - for (ReadWriteEnd wireEnd : inputs) - { - if (wireEnd == this) - continue; - mutator.join(wireEnd.inputValues); - } - return mutator.get(); - } - - @Override - public String toString() - { - return inputValues.toString(); - } - } - - @Override - public String toString() - { - return String.format("wire 0x%08x value: %s inputs: %s", hashCode(), values, inputs); - // Arrays.toString(values), inputs.stream().map(i -> Arrays.toString(i.inputValues)).reduce((s1, s2) -> s1 + s2) - } - - public static ReadEnd[] extractEnds(Wire[] w) - { - ReadEnd[] inputs = new ReadEnd[w.length]; - for (int i = 0; i < w.length; i++) - inputs[i] = w[i].createReadWriteEnd(); - return inputs; - } +package net.mograsim.logic.core.wires; + +import static net.mograsim.logic.core.types.Bit.U; +import static net.mograsim.logic.core.types.Bit.Z; + +import java.util.ArrayList; +import java.util.List; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.types.BitVector.BitVectorMutator; + +/** + * Represents an array of wires that can store n bits of information. + * + * @author Fabian Stemmler + * + */ +public class Wire +{ + private BitVector values; + public final int travelTime; + private List attached = new ArrayList(); + public final int length; + private List inputs = new ArrayList(); + private Timeline timeline; + + public Wire(Timeline timeline, int length, int travelTime) + { + if (length < 1) + throw new IllegalArgumentException( + String.format("Tried to create an array of wires with length %d, but a length of less than 1 makes no sense.", length)); + this.timeline = timeline; + this.length = length; + this.travelTime = travelTime; + initValues(); + } + + private void initValues() + { + values = U.toVector(length); + } + + private void recalculateSingleInput() + { + setNewValues(inputs.get(0).getInputValues()); + } + + private void recalculateMultipleInputs() + { + BitVectorMutator mutator = BitVectorMutator.empty(); + for (ReadWriteEnd wireArrayEnd : inputs) + mutator.join(wireArrayEnd.getInputValues()); + setNewValues(mutator.get()); + } + + private void setNewValues(BitVector newValues) + { + if (values.equals(newValues)) + return; + BitVector oldValues = values; + values = newValues; + notifyObservers(oldValues); + } + + private void recalculate() + { + switch (inputs.size()) + { + case 0: + return; + case 1: + recalculateSingleInput(); + break; + default: + recalculateMultipleInputs(); + } + } + + /** + * The {@link Wire} is interpreted as an unsigned integer with n bits. + * + * @return true if all bits are either Bit.ONE or Bit.ZERO (they do not all have to have the same + * value), not Bit.X or Bit.Z. false is returned otherwise. + * + * @author Fabian Stemmler + */ + public boolean hasNumericValue() + { + for (Bit b : values) + { + if (b != Bit.ZERO && b != Bit.ONE) + return false; + } + return true; + } + + /** + * The {@link Wire} is interpreted as an unsigned integer with n bits. + * + * @return The unsigned value of the {@link Wire}'s bits, where value 0 corresponds with 2^0, value 1 is 2^1 and so on. + * + * @author Fabian Stemmler + */ + public long getUnsignedValue() + { + long val = 0; + long mask = 1; + for (Bit bit : values) + { + switch (bit) + { + default: + case Z: + case X: + return 0; // TODO: Proper handling for getUnsignedValue(), if not all bits are 1 or 0; + case ONE: + val |= mask; + break; + case ZERO: + } + mask = mask << 1; + } + return val; + } + + /** + * The {@link Wire} is interpreted as a signed integer with n bits. + * + * @return The signed value of the {@link Wire}'s bits, where value 0 corresponds with 2^0, value 1 is 2^1 and so on. + * + * @author Fabian Stemmler + */ + public long getSignedValue() + { + long val = getUnsignedValue(); + long mask = 1 << (length - 1); + if ((mask & val) != 0) + { + int shifts = 64 - length; + return (val << shifts) >> shifts; + } + return val; + } + + public Bit getValue() + { + return getValue(0); + } + + public Bit getValue(int index) + { + return values.getBit(index); + } + + public BitVector getValues(int start, int end) + { + return values.subVector(start, end); + } + + public BitVector getValues() + { + return values; + } + + /** + * Adds an {@link WireObserver}, who will be notified when the value of the {@link Wire} is updated. + * + * @param ob The {@link WireObserver} to be notified of changes. + * @return true if the given {@link WireObserver} was not already registered, false otherwise + * + * @author Fabian Stemmler + */ + private void attachEnd(ReadEnd end) + { + attached.add(end); + } + + private void detachEnd(ReadEnd end) + { + attached.remove(end); + } + + private void notifyObservers(BitVector oldValues) + { + for (ReadEnd o : attached) + o.update(oldValues); + } + + /** + * Create and register a {@link ReadWriteEnd} object, which is tied to this {@link Wire}. This {@link ReadWriteEnd} can be written to. + */ + public ReadWriteEnd createReadWriteEnd() + { + return new ReadWriteEnd(); + } + + /** + * Create a {@link ReadEnd} object, which is tied to this {@link Wire}. This {@link ReadEnd} cannot be written to. + */ + public ReadEnd createReadOnlyEnd() + { + return new ReadEnd(); + } + + private void registerInput(ReadWriteEnd toRegister) + { + inputs.add(toRegister); + } + + /** + * A {@link ReadEnd} feeds a constant signal into the {@link Wire} it is tied to. The combination of all inputs determines the + * {@link Wire}s final value. X dominates all other inputs Z does not affect the final value, unless there are no other inputs than Z 0 + * and 1 turn into X when they are mixed + * + * @author Fabian Stemmler + */ + public class ReadEnd + { + private List observers = new ArrayList(); + + private ReadEnd() + { + super(); + Wire.this.attachEnd(this); + } + + public void update(BitVector oldValues) + { + for (WireObserver ob : observers) + ob.update(this, oldValues); + } + + /** + * Included for convenient use on {@link Wire}s of length 1. + * + * @return The value of bit 0. + * + * @author Fabian Stemmler + */ + public Bit getValue() + { + return Wire.this.getValue(); + } + + /** + * @param index Index of the requested bit. + * @return The value of the indexed bit. + * + * @author Fabian Stemmler + */ + public Bit getValue(int index) + { + return Wire.this.getValue(index); + } + + /** + * @param index Index of the requested bit. + * @return The value of the indexed bit. + * + * @author Fabian Stemmler + */ + public BitVector getValues() + { + return Wire.this.getValues(); + } + + /** + * @param start Start of the wanted segment. (inclusive) + * @param end End of the wanted segment. (exclusive) + * @return The values of the segment of {@link Bit}s indexed. + * + * @author Fabian Stemmler + */ + public BitVector getValues(int start, int end) + { + return Wire.this.getValues(start, end); + } + + /** + * The {@link Wire} is interpreted as an unsigned integer with n bits. + * + * @return true if all bits are either Bit.ONE or Bit.ZERO (they do not all have to have the + * same value), not Bit.X or Bit.Z. false is returned otherwise. + * + * @author Fabian Stemmler + */ + public boolean hasNumericValue() + { + return Wire.this.hasNumericValue(); + } + + /** + * The {@link Wire} is interpreted as an unsigned integer with n bits. + * + * @return The unsigned value of the {@link Wire}'s bits, where value 0 corresponds with 2^0, value 1 is 2^1 and so on. + * + * @author Fabian Stemmler + */ + public long getUnsignedValue() + { + return Wire.this.getUnsignedValue(); + } + + /** + * The {@link Wire} is interpreted as a signed integer with n bits. + * + * @return The signed value of the {@link Wire}'s bits, where value 0 corresponds with 2^0, value 1 is 2^1 and so on. + * + * @author Fabian Stemmler + */ + public long getSignedValue() + { + return Wire.this.getSignedValue(); + } + + @Override + public String toString() + { + return Wire.this.toString(); + } + + public void close() + { + inputs.remove(this); + detachEnd(this); + recalculate(); + } + + public int length() + { + return length; + } + + public boolean addObserver(WireObserver ob) + { + return observers.add(ob); + } + + public Wire getWire() + { + return Wire.this; + } + } + + public class ReadWriteEnd extends ReadEnd + { + private boolean open; + private BitVector inputValues; + + private ReadWriteEnd() + { + super(); + open = true; + initValues(); + registerInput(this); + } + + private void initValues() + { + inputValues = U.toVector(length); + } + + /** + * Sets the wires values. This takes up time, as specified by the {@link Wire}s travel time. + * + * @param newValues The new values the wires should take on. + * + * @author Fabian Stemmler + */ + public void feedSignals(Bit... newValues) + { + feedSignals(BitVector.of(newValues)); + } + + public void feedSignals(BitVector newValues) + { + if (newValues.length() != length) + throw new IllegalArgumentException( + String.format("Attempted to input %d bits instead of %d bits.", newValues.length(), length)); + if (!open) + throw new RuntimeException("Attempted to write to closed WireArrayEnd."); + timeline.addEvent(e -> setValues(newValues), travelTime); + } + + /** + * Sets values of a subarray of wires. This takes up time, as specified by the {@link Wire}s travel time. + * + * @param bitVector The new values the wires should take on. + * @param startingBit The first index of the subarray of wires. + * + * @author Fabian Stemmler + */ + public void feedSignals(int startingBit, BitVector bitVector) + { + if (!open) + throw new RuntimeException("Attempted to write to closed WireArrayEnd."); + timeline.addEvent(e -> setValues(startingBit, bitVector), travelTime); + } + + private void setValues(int startingBit, BitVector newValues) + { + // index check covered in equals + if (!inputValues.equalsWithOffset(newValues, startingBit)) + { + Bit[] vals = inputValues.getBits(); + System.arraycopy(newValues.getBits(), 0, vals, startingBit, newValues.length()); + inputValues = BitVector.of(vals); + Wire.this.recalculate(); + } + } + + private void setValues(BitVector newValues) + { + if (inputValues.equals(newValues)) + return; + inputValues = newValues; + Wire.this.recalculate(); + } + + /** + * @return The value (of bit 0) the {@link ReadEnd} is currently feeding into the associated {@link Wire}. + */ + public Bit getInputValue() + { + return getInputValue(0); + } + + /** + * @return The value which the {@link ReadEnd} is currently feeding into the associated {@link Wire} at the indexed {@link Bit}. + */ + public Bit getInputValue(int index) + { + return inputValues.getBit(index); + } + + /** + * @return A copy (safe to modify) of the values the {@link ReadEnd} is currently feeding into the associated {@link Wire}. + */ + public BitVector getInputValues() + { + return getInputValues(0, length); + } + + public BitVector getInputValues(int start, int end) + { + return inputValues.subVector(start, end); + } + + /** + * {@link ReadEnd} now feeds Z into the associated {@link Wire}. + */ + public void clearSignals() + { + feedSignals(Z.toVector(length)); + } + + public BitVector wireValuesExcludingMe() + { + BitVectorMutator mutator = BitVectorMutator.empty(); + for (ReadWriteEnd wireEnd : inputs) + { + if (wireEnd == this) + continue; + mutator.join(wireEnd.inputValues); + } + return mutator.get(); + } + + @Override + public String toString() + { + return inputValues.toString(); + } + } + + @Override + public String toString() + { + return String.format("wire 0x%08x value: %s inputs: %s", hashCode(), values, inputs); + // Arrays.toString(values), inputs.stream().map(i -> Arrays.toString(i.inputValues)).reduce((s1, s2) -> s1 + s2) + } + + public static ReadEnd[] extractEnds(Wire[] w) + { + ReadEnd[] inputs = new ReadEnd[w.length]; + for (int i = 0; i < w.length; i++) + inputs[i] = w[i].createReadWriteEnd(); + return inputs; + } } \ No newline at end of file diff --git a/era.mi/src/net/mograsim/logic/core/wires/WireObserver.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/wires/WireObserver.java similarity index 96% rename from era.mi/src/net/mograsim/logic/core/wires/WireObserver.java rename to net.mograsim.logic.core/src/net/mograsim/logic/core/wires/WireObserver.java index 93cdcb4e..66914b48 100644 --- a/era.mi/src/net/mograsim/logic/core/wires/WireObserver.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/wires/WireObserver.java @@ -1,9 +1,9 @@ -package net.mograsim.logic.core.wires; - -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.wires.Wire.ReadEnd; - -public interface WireObserver -{ - public void update(ReadEnd initiator, BitVector oldValues); -} +package net.mograsim.logic.core.wires; + +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.Wire.ReadEnd; + +public interface WireObserver +{ + public void update(ReadEnd initiator, BitVector oldValues); +} diff --git a/LogicUI/.classpath b/net.mograsim.logic.ui/.classpath similarity index 100% rename from LogicUI/.classpath rename to net.mograsim.logic.ui/.classpath diff --git a/LogicUI/.gitignore b/net.mograsim.logic.ui/.gitignore similarity index 100% rename from LogicUI/.gitignore rename to net.mograsim.logic.ui/.gitignore diff --git a/LogicUI/.project b/net.mograsim.logic.ui/.project similarity index 100% rename from LogicUI/.project rename to net.mograsim.logic.ui/.project diff --git a/LogicUI/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.logic.ui/.settings/org.eclipse.jdt.core.prefs similarity index 98% rename from LogicUI/.settings/org.eclipse.jdt.core.prefs rename to net.mograsim.logic.ui/.settings/org.eclipse.jdt.core.prefs index 712d42c9..2196a4a0 100644 --- a/LogicUI/.settings/org.eclipse.jdt.core.prefs +++ b/net.mograsim.logic.ui/.settings/org.eclipse.jdt.core.prefs @@ -1,456 +1,456 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=10 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=10 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.APILeak=warning -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning -org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error -org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning -org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning -org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled -org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=10 -org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false -org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false -org.eclipse.jdt.core.formatter.align_with_spaces=false -org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 -org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 -org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 -org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 -org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 -org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=next_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line -org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true -org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false -org.eclipse.jdt.core.formatter.comment.indent_root_tags=false -org.eclipse.jdt.core.formatter.comment.indent_tag_description=false -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=140 -org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true -org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true -org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert -org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=true -org.eclipse.jdt.core.formatter.join_wrapped_lines=true -org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false -org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.lineSplit=140 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_on_off_tags=true -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true -org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false -org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true -org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true -org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true -org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true -org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true -org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true -org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true -org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true -org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true -org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=10 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=10 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.APILeak=warning +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning +org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=warning +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=10 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=140 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=140 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=true +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/LogicUI/.settings/org.eclipse.jdt.ui.prefs b/net.mograsim.logic.ui/.settings/org.eclipse.jdt.ui.prefs similarity index 97% rename from LogicUI/.settings/org.eclipse.jdt.ui.prefs rename to net.mograsim.logic.ui/.settings/org.eclipse.jdt.ui.prefs index 9f01be90..8f2c0a47 100644 --- a/LogicUI/.settings/org.eclipse.jdt.ui.prefs +++ b/net.mograsim.logic.ui/.settings/org.eclipse.jdt.ui.prefs @@ -1,63 +1,63 @@ -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -formatter_profile=_MoGraSim -formatter_settings_version=16 -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.insert_inferred_type_arguments=false -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=false -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=false -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=false -sp_cleanup.organize_imports=false -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_redundant_modifiers=false -sp_cleanup.remove_redundant_semicolons=false -sp_cleanup.remove_redundant_type_arguments=false -sp_cleanup.remove_trailing_whitespaces=false -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=false -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_anonymous_class_creation=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_lambda=true -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=false -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=false -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_MoGraSim +formatter_settings_version=16 +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_functional_interfaces=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.make_local_variable_final=true +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=false +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=false +sp_cleanup.organize_imports=false +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=false +sp_cleanup.remove_redundant_semicolons=false +sp_cleanup.remove_redundant_type_arguments=false +sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_lambda=true +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/LogicUI/META-INF/MANIFEST.MF b/net.mograsim.logic.ui/META-INF/MANIFEST.MF similarity index 100% rename from LogicUI/META-INF/MANIFEST.MF rename to net.mograsim.logic.ui/META-INF/MANIFEST.MF diff --git a/era.mi/build.properties b/net.mograsim.logic.ui/build.properties similarity index 100% rename from era.mi/build.properties rename to net.mograsim.logic.ui/build.properties diff --git a/LogicUI/oldsrc/GUIMerger.java b/net.mograsim.logic.ui/oldsrc/GUIMerger.java similarity index 100% rename from LogicUI/oldsrc/GUIMerger.java rename to net.mograsim.logic.ui/oldsrc/GUIMerger.java diff --git a/LogicUI/oldsrc/GUIMux.java b/net.mograsim.logic.ui/oldsrc/GUIMux.java similarity index 100% rename from LogicUI/oldsrc/GUIMux.java rename to net.mograsim.logic.ui/oldsrc/GUIMux.java diff --git a/LogicUI/oldsrc/GUISplitter.java b/net.mograsim.logic.ui/oldsrc/GUISplitter.java similarity index 100% rename from LogicUI/oldsrc/GUISplitter.java rename to net.mograsim.logic.ui/oldsrc/GUISplitter.java diff --git a/LogicUI/src/net/mograsim/logic/ui/ColorHelper.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/ColorHelper.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/ColorHelper.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/ColorHelper.java diff --git a/LogicUI/src/net/mograsim/logic/ui/LogicExecuter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicExecuter.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/LogicExecuter.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicExecuter.java diff --git a/LogicUI/src/net/mograsim/logic/ui/LogicUICanvas.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/LogicUICanvas.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java diff --git a/LogicUI/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java diff --git a/LogicUI/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java diff --git a/LogicUI/src/net/mograsim/logic/ui/examples/RSLatchExample.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/examples/RSLatchExample.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/ViewModel.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/ViewModel.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/components/GUIAndGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/components/GUIAndGate.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/components/GUIComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/components/GUIComponent.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/components/GUINotGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/components/GUINotGate.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/components/GUIOrGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/components/GUIOrGate.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/wires/GUIWire.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/wires/GUIWire.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/wires/MovablePin.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/wires/MovablePin.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/wires/Pin.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/wires/Pin.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java diff --git a/LogicUI/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java diff --git a/LogicUI/src/net/mograsim/logic/ui/modeladapter/LogicModelParameters.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/LogicModelParameters.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/modeladapter/LogicModelParameters.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/LogicModelParameters.java diff --git a/LogicUI/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java diff --git a/LogicUI/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java diff --git a/LogicUI/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java diff --git a/LogicUI/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java similarity index 100% rename from LogicUI/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java diff --git a/SampleERCP/.classpath b/net.mograsim.rcp/.classpath similarity index 97% rename from SampleERCP/.classpath rename to net.mograsim.rcp/.classpath index 53080cfb..c34bb53d 100644 --- a/SampleERCP/.classpath +++ b/net.mograsim.rcp/.classpath @@ -1,11 +1,11 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/SampleERCP/.gitignore b/net.mograsim.rcp/.gitignore similarity index 100% rename from SampleERCP/.gitignore rename to net.mograsim.rcp/.gitignore diff --git a/SampleERCP/.project b/net.mograsim.rcp/.project similarity index 96% rename from SampleERCP/.project rename to net.mograsim.rcp/.project index 3097b7c7..52ed0888 100644 --- a/SampleERCP/.project +++ b/net.mograsim.rcp/.project @@ -1,35 +1,35 @@ - - - net.mograsim.rcp - - - net.mograsim.rcp - - - - org.eclipse.xtext.ui.shared.xtextBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - org.eclipse.xtext.ui.shared.xtextNature - - + + + net.mograsim.rcp + + + net.mograsim.rcp + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.xtext.ui.shared.xtextNature + + diff --git a/SampleERCP/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.rcp/.settings/org.eclipse.jdt.core.prefs similarity index 98% rename from SampleERCP/.settings/org.eclipse.jdt.core.prefs rename to net.mograsim.rcp/.settings/org.eclipse.jdt.core.prefs index f93c2d8a..132b4987 100644 --- a/SampleERCP/.settings/org.eclipse.jdt.core.prefs +++ b/net.mograsim.rcp/.settings/org.eclipse.jdt.core.prefs @@ -1,465 +1,465 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.APILeak=warning -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=warning -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning -org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error -org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning -org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning -org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled -org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=1.8 -org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false -org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false -org.eclipse.jdt.core.formatter.align_with_spaces=false -org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 -org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 -org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 -org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 -org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 -org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 -org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=next_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line -org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true -org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false -org.eclipse.jdt.core.formatter.comment.indent_root_tags=false -org.eclipse.jdt.core.formatter.comment.indent_tag_description=false -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=140 -org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true -org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true -org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert -org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert -org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=true -org.eclipse.jdt.core.formatter.join_wrapped_lines=true -org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false -org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.lineSplit=140 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_on_off_tags=true -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true -org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false -org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true -org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true -org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true -org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true -org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true -org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true -org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true -org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true -org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true -org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.APILeak=warning +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning +org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=warning +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=140 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=140 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=true +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/SampleERCP/.settings/org.eclipse.jdt.ui.prefs b/net.mograsim.rcp/.settings/org.eclipse.jdt.ui.prefs similarity index 97% rename from SampleERCP/.settings/org.eclipse.jdt.ui.prefs rename to net.mograsim.rcp/.settings/org.eclipse.jdt.ui.prefs index 02a82b92..5ae94b62 100644 --- a/SampleERCP/.settings/org.eclipse.jdt.ui.prefs +++ b/net.mograsim.rcp/.settings/org.eclipse.jdt.ui.prefs @@ -1,64 +1,64 @@ -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -formatter_profile=_MoGraSim -formatter_settings_version=16 -org.eclipse.jdt.ui.text.custom_code_templates= -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.insert_inferred_type_arguments=false -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=false -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=false -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=false -sp_cleanup.organize_imports=false -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_redundant_modifiers=false -sp_cleanup.remove_redundant_semicolons=false -sp_cleanup.remove_redundant_type_arguments=false -sp_cleanup.remove_trailing_whitespaces=false -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=false -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_anonymous_class_creation=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_lambda=true -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=false -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=false -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_MoGraSim +formatter_settings_version=16 +org.eclipse.jdt.ui.text.custom_code_templates= +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_functional_interfaces=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.make_local_variable_final=true +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=false +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=false +sp_cleanup.organize_imports=false +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=false +sp_cleanup.remove_redundant_semicolons=false +sp_cleanup.remove_redundant_type_arguments=false +sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_lambda=true +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/SampleERCP/.settings/org.eclipse.ltk.core.refactoring.prefs b/net.mograsim.rcp/.settings/org.eclipse.ltk.core.refactoring.prefs similarity index 98% rename from SampleERCP/.settings/org.eclipse.ltk.core.refactoring.prefs rename to net.mograsim.rcp/.settings/org.eclipse.ltk.core.refactoring.prefs index cfcd1d3c..b196c64a 100644 --- a/SampleERCP/.settings/org.eclipse.ltk.core.refactoring.prefs +++ b/net.mograsim.rcp/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -1,2 +1,2 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/SampleERCP/.settings/org.eclipse.pde.prefs b/net.mograsim.rcp/.settings/org.eclipse.pde.prefs similarity index 97% rename from SampleERCP/.settings/org.eclipse.pde.prefs rename to net.mograsim.rcp/.settings/org.eclipse.pde.prefs index 2c52f05e..90e8aa13 100644 --- a/SampleERCP/.settings/org.eclipse.pde.prefs +++ b/net.mograsim.rcp/.settings/org.eclipse.pde.prefs @@ -1,34 +1,34 @@ -compilers.f.unresolved-features=1 -compilers.f.unresolved-plugins=1 -compilers.incompatible-environment=1 -compilers.p.build=1 -compilers.p.build.bin.includes=1 -compilers.p.build.encodings=1 -compilers.p.build.java.compiler=1 -compilers.p.build.java.compliance=1 -compilers.p.build.missing.output=2 -compilers.p.build.output.library=1 -compilers.p.build.source.library=1 -compilers.p.build.src.includes=1 -compilers.p.deprecated=1 -compilers.p.discouraged-class=1 -compilers.p.internal=1 -compilers.p.missing-packages=1 -compilers.p.missing-version-export-package=2 -compilers.p.missing-version-import-package=2 -compilers.p.missing-version-require-bundle=2 -compilers.p.no-required-att=0 -compilers.p.no.automatic.module=1 -compilers.p.not-externalized-att=1 -compilers.p.service.component.without.lazyactivation=1 -compilers.p.unknown-attribute=1 -compilers.p.unknown-class=1 -compilers.p.unknown-element=1 -compilers.p.unknown-identifier=1 -compilers.p.unknown-resource=1 -compilers.p.unresolved-ex-points=0 -compilers.p.unresolved-import=0 -compilers.s.create-docs=false -compilers.s.doc-folder=doc -compilers.s.open-tags=1 -eclipse.preferences.version=1 +compilers.f.unresolved-features=1 +compilers.f.unresolved-plugins=1 +compilers.incompatible-environment=1 +compilers.p.build=1 +compilers.p.build.bin.includes=1 +compilers.p.build.encodings=1 +compilers.p.build.java.compiler=1 +compilers.p.build.java.compliance=1 +compilers.p.build.missing.output=2 +compilers.p.build.output.library=1 +compilers.p.build.source.library=1 +compilers.p.build.src.includes=1 +compilers.p.deprecated=1 +compilers.p.discouraged-class=1 +compilers.p.internal=1 +compilers.p.missing-packages=1 +compilers.p.missing-version-export-package=2 +compilers.p.missing-version-import-package=2 +compilers.p.missing-version-require-bundle=2 +compilers.p.no-required-att=0 +compilers.p.no.automatic.module=1 +compilers.p.not-externalized-att=1 +compilers.p.service.component.without.lazyactivation=1 +compilers.p.unknown-attribute=1 +compilers.p.unknown-class=1 +compilers.p.unknown-element=1 +compilers.p.unknown-identifier=1 +compilers.p.unknown-resource=1 +compilers.p.unresolved-ex-points=0 +compilers.p.unresolved-import=0 +compilers.s.create-docs=false +compilers.s.doc-folder=doc +compilers.s.open-tags=1 +eclipse.preferences.version=1 diff --git a/SampleERCP/.settings/org.eclipse.wst.sse.core.prefs b/net.mograsim.rcp/.settings/org.eclipse.wst.sse.core.prefs similarity index 97% rename from SampleERCP/.settings/org.eclipse.wst.sse.core.prefs rename to net.mograsim.rcp/.settings/org.eclipse.wst.sse.core.prefs index 5634a909..e6c26be0 100644 --- a/SampleERCP/.settings/org.eclipse.wst.sse.core.prefs +++ b/net.mograsim.rcp/.settings/org.eclipse.wst.sse.core.prefs @@ -1,2 +1,2 @@ -eclipse.preferences.version=1 -task-tags/use-project-settings=true +eclipse.preferences.version=1 +task-tags/use-project-settings=true diff --git a/SampleERCP/.settings/org.sonarlint.eclipse.core.prefs b/net.mograsim.rcp/.settings/org.sonarlint.eclipse.core.prefs similarity index 95% rename from SampleERCP/.settings/org.sonarlint.eclipse.core.prefs rename to net.mograsim.rcp/.settings/org.sonarlint.eclipse.core.prefs index c85f67f4..76926ab0 100644 --- a/SampleERCP/.settings/org.sonarlint.eclipse.core.prefs +++ b/net.mograsim.rcp/.settings/org.sonarlint.eclipse.core.prefs @@ -1,4 +1,4 @@ -autoEnabled=true -eclipse.preferences.version=1 -extraProperties= -fileExclusions= +autoEnabled=true +eclipse.preferences.version=1 +extraProperties= +fileExclusions= diff --git a/SampleERCP/Application.e4xmi b/net.mograsim.rcp/Application.e4xmi similarity index 99% rename from SampleERCP/Application.e4xmi rename to net.mograsim.rcp/Application.e4xmi index 8c9871c4..3caa9c19 100644 --- a/SampleERCP/Application.e4xmi +++ b/net.mograsim.rcp/Application.e4xmi @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleERCP/LICENSE b/net.mograsim.rcp/LICENSE similarity index 100% rename from SampleERCP/LICENSE rename to net.mograsim.rcp/LICENSE diff --git a/SampleERCP/META-INF/MANIFEST.MF b/net.mograsim.rcp/META-INF/MANIFEST.MF similarity index 100% rename from SampleERCP/META-INF/MANIFEST.MF rename to net.mograsim.rcp/META-INF/MANIFEST.MF diff --git a/SampleERCP/OSGI-INF/l10n/bundle.properties b/net.mograsim.rcp/OSGI-INF/l10n/bundle.properties similarity index 79% rename from SampleERCP/OSGI-INF/l10n/bundle.properties rename to net.mograsim.rcp/OSGI-INF/l10n/bundle.properties index 0fdaa9aa..e07734a8 100644 --- a/SampleERCP/OSGI-INF/l10n/bundle.properties +++ b/net.mograsim.rcp/OSGI-INF/l10n/bundle.properties @@ -1,6 +1,6 @@ -#Properties file for Sample -Bundle-Vendor = MYSELF -Bundle-Name = Sample -product.name = Sample -extension-point.name = Splash Extensions +#Properties file for Sample +Bundle-Vendor = MYSELF +Bundle-Name = Sample +product.name = Sample +extension-point.name = Splash Extensions product.name.0 = Simulator WIP \ No newline at end of file diff --git a/SampleERCP/build.properties b/net.mograsim.rcp/build.properties similarity index 96% rename from SampleERCP/build.properties rename to net.mograsim.rcp/build.properties index 1f76983e..d1ae984b 100644 --- a/SampleERCP/build.properties +++ b/net.mograsim.rcp/build.properties @@ -1,18 +1,18 @@ -output.. = bin/ -bin.includes = plugin.xml,\ - META-INF/,\ - .,\ - icons/,\ - Application.e4xmi,\ - css/,\ - splash.bmp,\ - schema/,\ - OSGI-INF/l10n/bundle.properties,\ - OSGI-INF/ -source.. = src/ -src.includes = Application.e4xmi,\ - OSGI-INF/l10n/bundle.properties,\ - css/,\ - icons/,\ - schema/,\ - splash.bmp +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + icons/,\ + Application.e4xmi,\ + css/,\ + splash.bmp,\ + schema/,\ + OSGI-INF/l10n/bundle.properties,\ + OSGI-INF/ +source.. = src/ +src.includes = Application.e4xmi,\ + OSGI-INF/l10n/bundle.properties,\ + css/,\ + icons/,\ + schema/,\ + splash.bmp diff --git a/SampleERCP/css/default.css b/net.mograsim.rcp/css/default.css similarity index 100% rename from SampleERCP/css/default.css rename to net.mograsim.rcp/css/default.css diff --git a/SampleERCP/icons/af.png b/net.mograsim.rcp/icons/af.png similarity index 100% rename from SampleERCP/icons/af.png rename to net.mograsim.rcp/icons/af.png diff --git a/SampleERCP/icons/app/ico_128t.png b/net.mograsim.rcp/icons/app/ico_128t.png similarity index 100% rename from SampleERCP/icons/app/ico_128t.png rename to net.mograsim.rcp/icons/app/ico_128t.png diff --git a/SampleERCP/icons/app/ico_16t.png b/net.mograsim.rcp/icons/app/ico_16t.png similarity index 100% rename from SampleERCP/icons/app/ico_16t.png rename to net.mograsim.rcp/icons/app/ico_16t.png diff --git a/SampleERCP/icons/app/ico_24t.png b/net.mograsim.rcp/icons/app/ico_24t.png similarity index 100% rename from SampleERCP/icons/app/ico_24t.png rename to net.mograsim.rcp/icons/app/ico_24t.png diff --git a/SampleERCP/icons/app/ico_256t.icns b/net.mograsim.rcp/icons/app/ico_256t.icns similarity index 100% rename from SampleERCP/icons/app/ico_256t.icns rename to net.mograsim.rcp/icons/app/ico_256t.icns diff --git a/SampleERCP/icons/app/ico_256t.png b/net.mograsim.rcp/icons/app/ico_256t.png similarity index 100% rename from SampleERCP/icons/app/ico_256t.png rename to net.mograsim.rcp/icons/app/ico_256t.png diff --git a/SampleERCP/icons/app/ico_256t.xpm b/net.mograsim.rcp/icons/app/ico_256t.xpm similarity index 98% rename from SampleERCP/icons/app/ico_256t.xpm rename to net.mograsim.rcp/icons/app/ico_256t.xpm index 5ccc62c6..4e1fa7da 100644 --- a/SampleERCP/icons/app/ico_256t.xpm +++ b/net.mograsim.rcp/icons/app/ico_256t.xpm @@ -1,3009 +1,3009 @@ -/* XPM */ -static char * C:\Users\Christian\Documents\Informatik_Studium\ico_256t_xpm[] = { -"256 256 2750 2", -" c None", -". c #000000", -"+ c #00100E", -"@ c #001312", -"# c #001413", -"$ c #001C1B", -"% c #001A19", -"& c #001515", -"* c #002120", -"= c #002221", -"- c #001918", -"; c #002525", -"> c #002927", -", c #002323", -"' c #000F0E", -") c #001C1A", -"! c #002726", -"~ c #002C2B", -"{ c #002928", -"] c #001110", -"^ c #001E1C", -"/ c #002727", -"( c #002D2C", -"_ c #002B2B", -": c #002827", -"< c #001E1D", -"[ c #001211", -"} c #001F1C", -"| c #002E2E", -"1 c #002625", -"2 c #001D1D", -"3 c #002121", -"4 c #002C2C", -"5 c #001514", -"6 c #002F2E", -"7 c #002B2C", -"8 c #002424", -"9 c #001816", -"0 c #002F2D", -"a c #00302F", -"b c #001A18", -"c c #002725", -"d c #002A29", -"e c #001B1A", -"f c #003130", -"g c #003131", -"h c #002F2F", -"i c #001F1D", -"j c #000D0B", -"k c #001615", -"l c #00110F", -"m c #001010", -"n c #001F1E", -"o c #002B2A", -"p c #002220", -"q c #002321", -"r c #002021", -"s c #00201E", -"t c #001D1C", -"u c #001D1B", -"v c #001917", -"w c #001716", -"x c #001313", -"y c #001111", -"z c #001F1F", -"A c #003333", -"B c #003231", -"C c #003332", -"D c #003232", -"E c #002020", -"F c #002E2C", -"G c #002929", -"H c #002524", -"I c #001E1E", -"J c #001818", -"K c #001717", -"L c #001414", -"M c #002E2F", -"N c #003233", -"O c #002E2D", -"P c #002423", -"Q c #00201F", -"R c #001A1A", -"S c #002F30", -"T c #003434", -"U c #002322", -"V c #003334", -"W c #002D2D", -"X c #002828", -"Y c #002324", -"Z c #002222", -"` c #001817", -" . c #003635", -".. c #003535", -"+. c #003534", -"@. c #003636", -"#. c #003433", -"$. c #002D2E", -"%. c #003533", -"&. c #003837", -"*. c #003736", -"=. c #003836", -"-. c #003735", -";. c #003432", -">. c #002C2A", -",. c #002422", -"'. c #002320", -"). c #001C1C", -"!. c #003331", -"~. c #002A28", -"{. c #002624", -"]. c #003737", -"^. c #002D2B", -"/. c #003839", -"(. c #003838", -"_. c #003939", -":. c #003230", -"<. c #002B29", -"[. c #003637", -"}. c #000C0B", -"|. c #001412", -"1. c #00393A", -"2. c #003A3A", -"3. c #002626", -"4. c #001715", -"5. c #002523", -"6. c #003A3B", -"7. c #003536", -"8. c #003A39", -"9. c #00302E", -"0. c #003C3C", -"a. c #003B3C", -"b. c #003B3B", -"c. c #003B3A", -"d. c #003A3C", -"e. c #003738", -"f. c #003030", -"g. c #00292A", -"h. c #001919", -"i. c #001614", -"j. c #002A2A", -"k. c #003C3D", -"l. c #003B3D", -"m. c #003D3D", -"n. c #003132", -"o. c #003537", -"p. c #003C3E", -"q. c #003D3C", -"r. c #003E3E", -"s. c #003E3D", -"t. c #003F3F", -"u. c #003F3E", -"v. c #003E3F", -"w. c #003C3B", -"x. c #003938", -"y. c #003D3F", -"z. c #004041", -"A. c #004040", -"B. c #003F40", -"C. c #003F41", -"D. c #003E40", -"E. c #004042", -"F. c #00403F", -"G. c #004141", -"H. c #004142", -"I. c #004241", -"J. c #003031", -"K. c #004242", -"L. c #003634", -"M. c #004140", -"N. c #004243", -"O. c #004344", -"P. c #004345", -"Q. c #004445", -"R. c #004244", -"S. c #004343", -"T. c #004444", -"U. c #002C2D", -"V. c #00383A", -"W. c #004546", -"X. c #004446", -"Y. c #004245", -"Z. c #004646", -"`. c #004143", -" + c #004545", -".+ c #004647", -"++ c #004747", -"@+ c #004447", -"#+ c #004547", -"$+ c #004746", -"%+ c #004748", -"&+ c #00484A", -"*+ c #004849", -"=+ c #00474A", -"-+ c #00484B", -";+ c #004749", -">+ c #004848", -",+ c #004A4C", -"'+ c #00494C", -")+ c #004B4C", -"!+ c #00494B", -"~+ c #00494A", -"{+ c #004A4B", -"]+ c #004C4C", -"^+ c #004949", -"/+ c #004B4B", -"(+ c #004C4D", -"_+ c #004C4B", -":+ c #004D4D", -"<+ c #004D4E", -"[+ c #004E4F", -"}+ c #004D4F", -"|+ c #004E4E", -"1+ c #004C4E", -"2+ c #004645", -"3+ c #004E50", -"4+ c #004F4F", -"5+ c #004F50", -"6+ c #004649", -"7+ c #005052", -"8+ c #005051", -"9+ c #004F51", -"0+ c #005053", -"a+ c #005153", -"b+ c #003D3E", -"c+ c #005254", -"d+ c #004B4D", -"e+ c #005253", -"f+ c #005152", -"g+ c #005355", -"h+ c #005255", -"i+ c #005154", -"j+ c #005356", -"k+ c #005354", -"l+ c #005456", -"m+ c #005050", -"n+ c #005455", -"o+ c #005457", -"p+ c #005557", -"q+ c #005556", -"r+ c #005658", -"s+ c #005659", -"t+ c #004A4A", -"u+ c #005759", -"v+ c #005558", -"w+ c #004648", -"x+ c #00575A", -"y+ c #00585A", -"z+ c #005859", -"A+ c #00585B", -"B+ c #004C4F", -"C+ c #00595C", -"D+ c #005A5D", -"E+ c #005A5C", -"F+ c #00595B", -"G+ c #00595D", -"H+ c #005B5D", -"I+ c #00585C", -"J+ c #005A5B", -"K+ c #004D50", -"L+ c #005B5E", -"M+ c #005C5E", -"N+ c #005C5F", -"O+ c #005C5D", -"P+ c #005B5F", -"Q+ c #005D5E", -"R+ c #005E60", -"S+ c #005D5F", -"T+ c #005E5F", -"U+ c #005B5C", -"V+ c #005151", -"W+ c #005F60", -"X+ c #004342", -"Y+ c #005657", -"Z+ c #005F62", -"`+ c #005F63", -" @ c #005E61", -".@ c #005758", -"+@ c #005D62", -"@@ c #005D60", -"#@ c #005C60", -"$@ c #005E62", -"%@ c #006063", -"&@ c #005F61", -"*@ c #006164", -"=@ c #006364", -"-@ c #006264", -";@ c #006265", -">@ c #006163", -",@ c #006365", -"'@ c #006465", -")@ c #006466", -"!@ c #006162", -"~@ c #006064", -"{@ c #006366", -"]@ c #006367", -"^@ c #006062", -"/@ c #006567", -"(@ c #00595A", -"_@ c #006568", -":@ c #006467", -"<@ c #006566", -"[@ c #006267", -"}@ c #006165", -"|@ c #006569", -"1@ c #006469", -"2@ c #004346", -"3@ c #004A4D", -"4@ c #006468", -"5@ c #006769", -"6@ c #006669", -"7@ c #00676A", -"8@ c #006668", -"9@ c #005E63", -"0@ c #00666A", -"a@ c #003A38", -"b@ c #006667", -"c@ c #005D61", -"d@ c #00686B", -"e@ c #00676B", -"f@ c #00686A", -"g@ c #2A5B5C", -"h@ c #00686C", -"i@ c #00696C", -"j@ c #00676C", -"k@ c #004548", -"l@ c #00696B", -"m@ c #00666B", -"n@ c #006B6D", -"o@ c #006A6D", -"p@ c #006A6C", -"q@ c #005458", -"r@ c #00696A", -"s@ c #00696D", -"t@ c #006A6E", -"u@ c #006C6D", -"v@ c #006B6E", -"w@ c #005252", -"x@ c #006C6E", -"y@ c #006B6F", -"z@ c #006C6F", -"A@ c #006E71", -"B@ c #006D6F", -"C@ c #006E70", -"D@ c #006D70", -"E@ c #006C70", -"F@ c #006D6E", -"G@ c #006E6F", -"H@ c #007072", -"I@ c #006F71", -"J@ c #007071", -"K@ c #006D71", -"L@ c #006F72", -"M@ c #007073", -"N@ c #007173", -"O@ c #006F73", -"P@ c #007074", -"Q@ c #006A6B", -"R@ c #00575B", -"S@ c #007172", -"T@ c #007174", -"U@ c #006266", -"V@ c #007175", -"W@ c #00656A", -"X@ c #007274", -"Y@ c #006E72", -"Z@ c #006368", -"`@ c #004F52", -" # c #004E51", -".# c #007376", -"+# c #007275", -"@# c #007276", -"## c #007375", -"$# c #007477", -"%# c #007476", -"&# c #005353", -"*# c #007377", -"=# c #007578", -"-# c #005A5E", -";# c #007577", -"># c #005155", -",# c #007679", -"'# c #007678", -")# c #00777A", -"!# c #007779", -"~# c #00787A", -"{# c #00767A", -"]# c #00787B", -"^# c #007478", -"/# c #00797C", -"(# c #00797B", -"_# c #007A7C", -":# c #007576", -"<# c #007879", -"[# c #007A7B", -"}# c #006263", -"|# c #005C5C", -"1# c #007A7D", -"2# c #007B7E", -"3# c #007B7D", -"4# c #00797D", -"5# c #007273", -"6# c #007C7E", -"7# c #007A7E", -"8# c #007D7F", -"9# c #007D80", -"0# c #007D81", -"a# c #007E80", -"b# c #007B7C", -"c# c #007F81", -"d# c #007D7E", -"e# c #007C7F", -"f# c #007E7F", -"g# c #007E83", -"h# c #007F82", -"i# c #007E81", -"j# c #007E82", -"k# c #007F83", -"l# c #007D82", -"m# c #007C80", -"n# c #008084", -"o# c #004C50", -"p# c #008184", -"q# c #008083", -"r# c #008183", -"s# c #008082", -"t# c #008286", -"u# c #008487", -"v# c #008387", -"w# c #008386", -"x# c #008185", -"y# c #006B6C", -"z# c #008284", -"A# c #008588", -"B# c #008488", -"C# c #008388", -"D# c #008287", -"E# c #008285", -"F# c #008589", -"G# c #00868B", -"H# c #00858A", -"I# c #00858B", -"J# c #00868A", -"K# c #00868C", -"L# c #008489", -"M# c #00797E", -"N# c #004A4E", -"O# c #00878B", -"P# c #00878D", -"Q# c #00878C", -"R# c #00888D", -"S# c #00888C", -"T# c #00888B", -"U# c #00898C", -"V# c #00878E", -"W# c #00898D", -"X# c #008A8E", -"Y# c #00898E", -"Z# c #008A8F", -"`# c #008A8D", -" $ c #00898F", -".$ c #008389", -"+$ c #008990", -"@$ c #00777B", -"#$ c #008C91", -"$$ c #008D91", -"%$ c #008C90", -"&$ c #008D92", -"*$ c #008B90", -"=$ c #006D72", -"-$ c #008B91", -";$ c #008186", -">$ c #008E92", -",$ c #008F93", -"'$ c #008E93", -")$ c #009094", -"!$ c #008F92", -"~$ c #008B8F", -"{$ c #008F94", -"]$ c #009195", -"^$ c #009095", -"/$ c #009194", -"($ c #007F84", -"_$ c #009093", -":$ c #006869", -"<$ c #009296", -"[$ c #009297", -"}$ c #009196", -"|$ c #009397", -"1$ c #009197", -"2$ c #009096", -"3$ c #009498", -"4$ c #009598", -"5$ c #009398", -"6$ c #009497", -"7$ c #008C8F", -"8$ c #009295", -"9$ c #009499", -"0$ c #009599", -"a$ c #00959A", -"b$ c #00969A", -"c$ c #009399", -"d$ c #00969B", -"e$ c #00959B", -"f$ c #00949A", -"g$ c #006061", -"h$ c #009298", -"i$ c #00989F", -"j$ c #00979D", -"k$ c #00989D", -"l$ c #00989E", -"m$ c #00979C", -"n$ c #00979B", -"o$ c #00979E", -"p$ c #00999F", -"q$ c #009A9F", -"r$ c #0099A0", -"s$ c #009AA0", -"t$ c #008C92", -"u$ c #009AA1", -"v$ c #00999E", -"w$ c #008689", -"x$ c #009BA0", -"y$ c #009CA0", -"z$ c #009CA1", -"A$ c #009BA1", -"B$ c #00787C", -"C$ c #009DA2", -"D$ c #009EA3", -"E$ c #009CA2", -"F$ c #009DA3", -"G$ c #009EA2", -"H$ c #009CA3", -"I$ c #009EA5", -"J$ c #009FA5", -"K$ c #009EA4", -"L$ c #009DA4", -"M$ c #00A0A6", -"N$ c #009EA6", -"O$ c #009FA6", -"P$ c #008F95", -"Q$ c #009BA2", -"R$ c #00A1A7", -"S$ c #00A0A7", -"T$ c #007A7F", -"U$ c #00959C", -"V$ c #00A3A9", -"W$ c #00A2A9", -"X$ c #00A1A8", -"Y$ c #00A2A8", -"Z$ c #00A3AA", -"`$ c #009B9F", -" % c #00A4AA", -".% c #00A5AA", -"+% c #00A3A8", -"@% c #008D90", -"#% c #009FA4", -"$% c #00A5AB", -"%% c #00A4A9", -"&% c #00787D", -"*% c #008385", -"=% c #00A4AB", -"-% c #00A5AC", -";% c #00A6AC", -">% c #00A6AD", -",% c #00A6AB", -"'% c #00A7AC", -")% c #00A8AE", -"!% c #00A7AE", -"~% c #00A8B0", -"{% c #00A7AF", -"]% c #00A9AF", -"^% c #00A8AF", -"/% c #007B80", -"(% c #00A7AD", -"_% c #00A6AE", -":% c #00A9B0", -"<% c #00777C", -"[% c #00A9B1", -"}% c #00A4AC", -"|% c #007B7F", -"1% c #00AAB1", -"2% c #00AAB2", -"3% c #00A9B2", -"4% c #01A3AA", -"5% c #01AAB2", -"6% c #01ABB3", -"7% c #01AAB1", -"8% c #01949A", -"9% c #01A5AC", -"0% c #01A8B0", -"a% c #018D91", -"b% c #01A1A6", -"c% c #019498", -"d% c #01A6AC", -"e% c #01ADB4", -"f% c #01ACB3", -"g% c #01ACB4", -"h% c #02ACB5", -"i% c #02ACB4", -"j% c #01ACB5", -"k% c #02A9B2", -"l% c #019DA2", -"m% c #018286", -"n% c #019AA0", -"o% c #02A8B0", -"p% c #00ABB3", -"q% c #01ADB5", -"r% c #01A7AF", -"s% c #02999F", -"t% c #019399", -"u% c #01A6AD", -"v% c #02ADB4", -"w% c #01A9B1", -"x% c #019CA2", -"y% c #018183", -"z% c #02787A", -"A% c #01989D", -"B% c #02A8AF", -"C% c #02AEB5", -"D% c #02ADB5", -"E% c #01AEB4", -"F% c #02AEB4", -"G% c #01ADB3", -"H% c #02A9B1", -"I% c #029BA1", -"J% c #017B7F", -"K% c #018387", -"L% c #019FA5", -"M% c #02AAB2", -"N% c #03AEB6", -"O% c #02A6AD", -"P% c #01787B", -"Q% c #03AEB4", -"R% c #02ACB3", -"S% c #02A8B1", -"T% c #029A9F", -"U% c #017A7C", -"V% c #028084", -"W% c #039EA4", -"X% c #03AAB3", -"Y% c #03AEB5", -"Z% c #03AFB6", -"`% c #03AFB5", -" & c #03B0B6", -".& c #03A8AF", -"+& c #02989D", -"@& c #028B8F", -"#& c #03A3AB", -"$& c #03ACB5", -"%& c #02AFB6", -"&& c #02AEB6", -"*& c #03ADB4", -"=& c #03A5AC", -"-& c #028F93", -";& c #039FA6", -">& c #03ABB3", -",& c #02AFB5", -"'& c #02969A", -")& c #048B8F", -"!& c #03A3AA", -"~& c #04ADB5", -"{& c #04B1B7", -"]& c #05B1B8", -"^& c #04B0B7", -"/& c #04B1B8", -"(& c #05B0B7", -"_& c #05A8AF", -":& c #049399", -"<& c #026C70", -"[& c #039399", -"}& c #03A7AF", -"|& c #05AFB7", -"1& c #04ADB6", -"2& c #04A3AA", -"3& c #048A8D", -"4& c #038C90", -"5& c #03A4AA", -"6& c #04AEB5", -"7& c #049297", -"8& c #036B6D", -"9& c #049296", -"0& c #05B0B6", -"a& c #05B2B9", -"b& c #05A7AD", -"c& c #048D92", -"d& c #03787B", -"e& c #039AA0", -"f& c #05ABB3", -"g& c #05AEB5", -"h& c #049FA5", -"i& c #048185", -"j& c #036C6F", -"k& c #049397", -"l& c #05A9B0", -"m& c #04AFB7", -"n& c #05AFB6", -"o& c #04A5AD", -"p& c #038B8F", -"q& c #037477", -"r& c #04979E", -"s& c #06B3B9", -"t& c #06B3BA", -"u& c #05A3AA", -"v& c #04878B", -"w& c #05A1A6", -"x& c #05B2B8", -"y& c #05ADB4", -"z& c #049CA1", -"A& c #03767A", -"B& c #059BA0", -"C& c #06B2B9", -"D& c #04B2B9", -"E& c #04A2A8", -"F& c #048589", -"G& c #047E82", -"H& c #05A0A6", -"I& c #06AFB7", -"J& c #08B4BB", -"K& c #07B4BB", -"L& c #06B4BB", -"M& c #06B4BA", -"N& c #07B3BA", -"O& c #06B0B7", -"P& c #069FA5", -"Q& c #047F81", -"R& c #058B90", -"S& c #05A6AD", -"T& c #07B4BA", -"U& c #07B2B9", -"V& c #06ABB3", -"W& c #05989C", -"X& c #058084", -"Y& c #059FA6", -"Z& c #07AFB6", -"`& c #059EA4", -" * c #047D81", -".* c #05878C", -"+* c #08A6AC", -"@* c #09B3B9", -"#* c #08B5BC", -"$* c #09B5BC", -"%* c #09B4BB", -"&* c #09AFB6", -"** c #069CA1", -"=* c #069399", -"-* c #07ABB2", -";* c #09B5BB", -">* c #08B6BD", -",* c #09B4BA", -"'* c #07AAB1", -")* c #049298", -"!* c #058A8E", -"~* c #07A5AC", -"{* c #08B2B9", -"]* c #08B4BC", -"^* c #07AEB5", -"/* c #079AA0", -"(* c #079195", -"_* c #09AAB2", -":* c #0AB5BC", -"<* c #0AB7BE", -"[* c #09B6BD", -"}* c #0AB6BD", -"|* c #09ADB5", -"1* c #07979C", -"2* c #057578", -"3* c #08AEB5", -"4* c #0AB7BD", -"5* c #08A9AF", -"6* c #078D91", -"7* c #069296", -"8* c #09ACB3", -"9* c #0AB6BC", -"0* c #06969A", -"a* c #057174", -"b* c #08999F", -"c* c #0AB0B6", -"d* c #0AB8BF", -"e* c #09B7BE", -"f* c #0BB8BF", -"g* c #0BB7BE", -"h* c #09AAB1", -"i* c #089196", -"j* c #067F83", -"k* c #09A1A8", -"l* c #0AB2BA", -"m* c #06868A", -"n* c #067276", -"o* c #099BA0", -"p* c #0AB6BE", -"q* c #0AB5BD", -"r* c #078F93", -"s* c #077C80", -"t* c #0AA1A8", -"u* c #0BB3BA", -"v* c #0DBAC1", -"w* c #0CB9C0", -"x* c #0CBAC1", -"y* c #0BB9C0", -"z* c #0CB6BD", -"A* c #0AA9AF", -"B* c #098B90", -"C* c #07888C", -"D* c #0AA7AF", -"E* c #0DB7BE", -"F* c #0CBAC0", -"G* c #0CB2BA", -"H* c #077E82", -"I* c #0BA2A8", -"J* c #0AB4BB", -"K* c #0BBAC1", -"L* c #0CB9C1", -"M* c #0BB6BE", -"N* c #07888E", -"O* c #08868B", -"P* c #0BA6AE", -"Q* c #0DBBC2", -"R* c #0CBBC2", -"S* c #0EBBC2", -"T* c #0CBBC1", -"U* c #0DBBC1", -"V* c #0DBAC2", -"W* c #0DB9C0", -"X* c #0BB5BB", -"Y* c #0BA4AB", -"Z* c #088488", -"`* c #0A9297", -" = c #0BACB3", -".= c #0EBAC1", -"+= c #0A9CA2", -"@= c #08888D", -"#= c #0BA7AE", -"$= c #0EB7BD", -"%= c #0EBAC2", -"&= c #0CB4BB", -"*= c #0AA3AA", -"== c #088085", -"-= c #05585C", -";= c #098F94", -">= c #0DABB3", -",= c #0CB8BF", -"'= c #0EBCC2", -")= c #0EBCC3", -"!= c #0FBCC3", -"~= c #0EB5BC", -"{= c #0AA0A6", -"]= c #0A999F", -"^= c #0CB1B8", -"/= c #0FBBC1", -"(= c #0DB0B7", -"_= c #0A959B", -":= c #0A9196", -"<= c #0DADB4", -"[= c #0EB9C0", -"}= c #0FBBC2", -"|= c #0EBAC0", -"1= c #0EB3BB", -"2= c #0B9FA4", -"3= c #097B80", -"4= c #0A969C", -"5= c #0DB1B7", -"6= c #0FBDC3", -"7= c #10BDC4", -"8= c #0EBDC3", -"9= c #0FBCC4", -"0= c #10BCC2", -"a= c #0EB4BA", -"b= c #0B9BA0", -"c= c #087C80", -"d= c #0CA3A9", -"e= c #0FB7BD", -"f= c #0FBEC3", -"g= c #0FBDC2", -"h= c #0FBDC4", -"i= c #10BAC1", -"j= c #0DACB3", -"k= c #0A9095", -"l= c #0B999F", -"m= c #0EB2BA", -"n= c #0EBDC2", -"o= c #0FBCC2", -"p= c #10BDC3", -"q= c #0EB2B9", -"r= c #0B989F", -"s= c #0C959A", -"t= c #09787B", -"u= c #0C9FA5", -"v= c #10B6BE", -"w= c #11BEC4", -"x= c #10BEC4", -"y= c #12BFC6", -"z= c #11BEC5", -"A= c #11BFC5", -"B= c #10BFC4", -"C= c #12BEC5", -"D= c #11BFC6", -"E= c #11BDC3", -"F= c #0DB0B8", -"G= c #0B9498", -"H= c #0A868A", -"I= c #0CA7AE", -"J= c #10BBC0", -"K= c #10BFC5", -"L= c #11BDC5", -"M= c #12BFC5", -"N= c #10B9C0", -"O= c #0DAAB0", -"P= c #0A898E", -"Q= c #0A7B7F", -"R= c #0CA2A8", -"S= c #10B7BE", -"T= c #10BEC5", -"U= c #0EB0B7", -"V= c #0A9197", -"W= c #0DA2A9", -"X= c #11B0B8", -"Y= c #0D9DA3", -"Z= c #0B8487", -"`= c #0EA7AF", -" - c #11BBC1", -".- c #13C1C7", -"+- c #12C0C6", -"@- c #14C1C7", -"#- c #12C1C7", -"$- c #13C0C6", -"%- c #11BCC2", -"&- c #0EACB3", -"*- c #0B8D91", -"=- c #0A8E94", -"-- c #10AFB6", -";- c #12C1C6", -">- c #11B9C0", -",- c #0EA7AD", -"'- c #0A8689", -")- c #10A9B0", -"!- c #12BCC2", -"~- c #13C0C5", -"{- c #11C0C6", -"]- c #12C0C5", -"^- c #12BDC4", -"/- c #0B8C90", -"(- c #0FA8B0", -"_- c #12BBC2", -":- c #11B3BB", -"<- c #0D969B", -"[- c #0C8D91", -"}- c #10AEB5", -"|- c #13BEC4", -"1- c #14C2C8", -"2- c #13BCC3", -"3- c #10A9B1", -"4- c #0E999F", -"5- c #10B3BA", -"6- c #13BFC5", -"7- c #13C2C8", -"8- c #15C2C8", -"9- c #15C1C7", -"0- c #12B8BE", -"a- c #0EA0A6", -"b- c #0D8E93", -"c- c #11AEB5", -"d- c #13BDC4", -"e- c #10A9AF", -"f- c #104547", -"g- c #0A8085", -"h- c #11AFB5", -"i- c #14BEC5", -"j- c #11AFB6", -"k- c #0D8F94", -"l- c #0D959B", -"m- c #11B3BA", -"n- c #14BFC6", -"o- c #15C3C9", -"p- c #16C3C9", -"q- c #16C2C8", -"r- c #13B9C0", -"s- c #10A5AB", -"t- c #0A787C", -"u- c #10A2A8", -"v- c #13B9BF", -"w- c #17C3C9", -"x- c #13B6BD", -"y- c #0F9BA1", -"z- c #0D989E", -"A- c #13B4BC", -"B- c #10A3A9", -"C- c #0E8B90", -"D- c #14B4BB", -"E- c #18C3C9", -"F- c #17C4CA", -"G- c #16BFC6", -"H- c #11ABB2", -"I- c #10A0A6", -"J- c #16BAC1", -"K- c #17C2C8", -"L- c #18C5CA", -"M- c #18C5CB", -"N- c #16C1C7", -"O- c #16B9BF", -"P- c #109FA5", -"Q- c #0C8286", -"R- c #12A9AF", -"S- c #15BDC3", -"T- c #13B3B9", -"U- c #0F949A", -"V- c #10A1A7", -"W- c #15BAC2", -"X- c #15B8BF", -"Y- c #0F9DA3", -"Z- c #0F9297", -"`- c #15B7BD", -" ; c #19C6CC", -".; c #19C5CA", -"+; c #17BCC3", -"@; c #12A6AD", -"#; c #0C8185", -"$; c #12A8AF", -"%; c #17BDC4", -"&; c #19C5CB", -"*; c #19C6CD", -"=; c #19C6CB", -"-; c #18C5CC", -";; c #17B6BD", -">; c #10999F", -",; c #0F8D92", -"'; c #15B0B8", -"); c #18C1C8", -"!; c #1AC7CC", -"~; c #18C6CB", -"{; c #17C0C6", -"]; c #14AFB6", -"^; c #0D8388", -"/; c #14AAAF", -"(; c #17BFC5", -"_; c #1AC6CC", -":; c #19C2C9", -"<; c #15B4BA", -"[; c #11979C", -"}; c #11989D", -"|; c #17BAC0", -"1; c #1AC7CD", -"2; c #19C7CC", -"3; c #18BBC2", -"4; c #139FA6", -"5; c #0E8A90", -"6; c #16AFB5", -"7; c #19C1C8", -"8; c #1BC8CD", -"9; c #1AC2C9", -"0; c #15B2B8", -"a; c #109196", -"b; c #16B6BD", -"c; c #1AC5CB", -"d; c #1AC7CE", -"e; c #18BFC5", -"f; c #14AAB1", -"g; c #0F8C92", -"h; c #15B0B7", -"i; c #19C2C8", -"j; c #1BC7CD", -"k; c #1AC7CB", -"l; c #1BC8CE", -"m; c #16B1B9", -"n; c #108F94", -"o; c #139FA4", -"p; c #1ABFC5", -"q; c #1CCACF", -"r; c #1CC9CF", -"s; c #1CC9CE", -"t; c #1BC6CB", -"u; c #19B8BF", -"v; c #1299A0", -"w; c #12949A", -"x; c #18B5BC", -"y; c #1AC4C9", -"z; c #1CC8CE", -"A; c #1BC8CF", -"B; c #1CC9CD", -"C; c #1BC7CE", -"D; c #1AC2C8", -"E; c #17B0B6", -"F; c #13A1A7", -"G; c #19BCC2", -"H; c #1CC8CD", -"I; c #1BC9CE", -"J; c #1CC7CD", -"K; c #1ABEC4", -"L; c #14A5AB", -"M; c #11979D", -"N; c #18B7BD", -"O; c #1AC4CA", -"P; c #1CC8CF", -"Q; c #1AC1C8", -"R; c #16AEB4", -"S; c #15A5AB", -"T; c #1DC3C9", -"U; c #1DCBCF", -"V; c #1ECBD0", -"W; c #1DCACF", -"X; c #1CC6CC", -"Y; c #19B5BB", -"Z; c #129398", -"`; c #159EA4", -" > c #1ABBC1", -".> c #1DC8CD", -"+> c #1DCAD0", -"@> c #1DCBD0", -"#> c #1ECCD0", -"$> c #1CC2C7", -"%> c #17AAB0", -"&> c #0F8084", -"*> c #16A9AF", -"=> c #1CC2C6", -"-> c #1DC9CE", -";> c #1ABCC2", -">> c #14A0A5", -",> c #14A1A7", -"'> c #1ABDC3", -")> c #1DC7CE", -"!> c #1DCBD1", -"~> c #1BC1C7", -"{> c #17ABB1", -"]> c #1DC6CC", -"^> c #20CED2", -"/> c #1FCCD1", -"(> c #1FCDD1", -"_> c #1ECCD1", -":> c #1EC6CB", -"<> c #1AB2B8", -"[> c #17A7AD", -"}> c #1DC1C7", -"|> c #20CCD1", -"1> c #1FCDD2", -"2> c #20CDD2", -"3> c #1FCED2", -"4> c #1FCBD0", -"5> c #1DC0C7", -"6> c #18A5AB", -"7> c #128B90", -"8> c #19B1B8", -"9> c #1DC5CA", -"0> c #1EC8CD", -"a> c #1BBAC0", -"b> c #15999D", -"c> c #107F83", -"d> c #18A9AF", -"e> c #1CC0C7", -"f> c #1FCCD2", -"g> c #1CBEC5", -"h> c #12A0A5", -"i> c #016E73", -"j> c #1AB1B8", -"k> c #1FCACF", -"l> c #20CDD0", -"m> c #1EC3C9", -"n> c #19ABB2", -"o> c #12888B", -"p> c #1AB0B6", -"q> c #1EC5CB", -"r> c #20CDD1", -"s> c #20CBCF", -"t> c #1CBBC1", -"u> c #159CA1", -"v> c #15959B", -"w> c #1CB8BE", -"x> c #1FC7CC", -"y> c #1FC8CD", -"z> c #1BB5BC", -"A> c #138F94", -"B> c #12898F", -"C> c #19B0B7", -"D> c #20CACF", -"E> c #1DBCC2", -"F> c #12888C", -"G> c #1CB8BD", -"H> c #20CCD0", -"I> c #20CFD3", -"J> c #21CFD3", -"K> c #20CED3", -"L> c #1EC1C6", -"M> c #18A4A9", -"N> c #149197", -"O> c #1BB7BD", -"P> c #20C9CF", -"Q> c #1FC9CE", -"R> c #149499", -"S> c #17A0A5", -"T> c #1CBDC3", -"U> c #20CAD0", -"V> c #21CFD2", -"W> c #1FC6CB", -"X> c #1BAFB6", -"Y> c #1CB7BD", -"Z> c #1FCED3", -"`> c #1FC7CD", -" , c #1CB6BD", -"., c #0F8D93", -"+, c #158F94", -"@, c #1EBCC3", -"#, c #22CFD3", -"$, c #21D1D4", -"%, c #21D0D4", -"&, c #21D0D5", -"*, c #21D1D5", -"=, c #20CFD4", -"-, c #22D1D5", -";, c #22D0D4", -">, c #21CDD1", -",, c #1EBFC4", -"', c #179DA2", -"), c #189EA2", -"!, c #1FBEC4", -"~, c #22D1D4", -"{, c #20C8CD", -"], c #1CB4B9", -"^, c #1AA8AE", -"/, c #1FC4C9", -"(, c #21CED2", -"_, c #1FC5CA", -":, c #19A9AF", -"<, c #189FA4", -"[, c #21CDD2", -"}, c #22D0D5", -"|, c #21CFD4", -"1, c #1BB1B7", -"2, c #004B4E", -"3, c #17979D", -"4, c #20C1C7", -"5, c #23D2D6", -"6, c #24D3D5", -"7, c #23D2D5", -"8, c #24D3D7", -"9, c #24D2D6", -"0, c #23CED2", -"a, c #1FBAC1", -"b, c #17969A", -"c, c #1BA8AD", -"d, c #21C4C9", -"e, c #24D3D6", -"f, c #23D0D4", -"g, c #21C8CC", -"h, c #1DAEB5", -"i, c #15888C", -"j, c #1DB1B7", -"k, c #22C9CF", -"l, c #23D1D5", -"m, c #23D3D6", -"n, c #23D0D3", -"o, c #19A3A8", -"p, c #1BA9AF", -"q, c #22C6CB", -"r, c #23D0D5", -"s, c #23D3D5", -"t, c #22C7CC", -"u, c #13A7AD", -"v, c #005256", -"w, c #189EA3", -"x, c #22C5CA", -"y, c #25D3D7", -"z, c #26D4D7", -"A, c #26D4D8", -"B, c #25D2D6", -"C, c #23CCD0", -"D, c #1EB6BC", -"E, c #148588", -"F, c #1DAFB4", -"G, c #22C8CD", -"H, c #25D2D5", -"I, c #26D3D7", -"J, c #25D3D6", -"K, c #26D4D6", -"L, c #25D4D7", -"M, c #21C6CA", -"N, c #1BA8AE", -"O, c #179297", -"P, c #20B9BE", -"Q, c #23CDD0", -"R, c #24CFD3", -"S, c #20BEC3", -"T, c #189AA0", -"U, c #14868B", -"V, c #1DB2B7", -"W, c #24D1D5", -"X, c #1FC2C8", -"Y, c #21A7AD", -"Z, c #1CA6AB", -"`, c #23C9CD", -" ' c #27D5D8", -".' c #27D4D8", -"+' c #26D5D8", -"@' c #23CBCF", -"#' c #1EAFB4", -"$' c #178E93", -"%' c #1FB7BC", -"&' c #24CCD0", -"*' c #27D4D7", -"=' c #27D5D7", -"-' c #25D1D5", -";' c #21C2C7", -">' c #1BA2A6", -",' c #1A9DA2", -"'' c #21BFC4", -")' c #25D0D5", -"!' c #25CED1", -"~' c #20B9BF", -"{' c #179196", -"]' c #20B8BD", -"^' c #24CDD1", -"/' c #25D0D4", -"(' c #19BCC1", -"_' c #10979C", -":' c #1EACB2", -"<' c #27CED2", -"[' c #29D8DA", -"}' c #29D7DA", -"|' c #28D7DA", -"1' c #29D8DB", -"2' c #29D6D9", -"3' c #28D4D7", -"4' c #24C6CB", -"5' c #1DA9AE", -"6' c #1A999E", -"7' c #22BEC3", -"8' c #27D2D5", -"9' c #28D6D9", -"0' c #23BEC4", -"a' c #1A999D", -"b' c #1DA7AC", -"c' c #25C7CA", -"d' c #28D4D8", -"e' c #29D7D9", -"f' c #26CDD0", -"g' c #1FB5B9", -"h' c #1B9DA2", -"i' c #21BFC5", -"j' c #27D2D6", -"k' c #28D1D4", -"l' c #1AB9BE", -"m' c #026D72", -"n' c #20B4B9", -"o' c #28D4D6", -"p' c #23C3C8", -"q' c #1CA1A6", -"r' c #1DA4A8", -"s' c #25C5CA", -"t' c #29D4D8", -"u' c #2AD9DB", -"v' c #28D8DA", -"w' c #2AD8DB", -"x' c #2AD8DA", -"y' c #26CFD3", -"z' c #21B7BD", -"A' c #1FB0B5", -"B' c #27CCD0", -"C' c #28D8DB", -"D' c #28D6D8", -"E' c #26CACF", -"F' c #1EADB3", -"G' c #1EA6AA", -"H' c #26C6CB", -"I' c #29D5D8", -"J' c #27CFD3", -"K' c #1CAFB4", -"L' c #168488", -"M' c #23BABF", -"N' c #2AD5D8", -"O' c #2ADADD", -"P' c #2AD9DC", -"Q' c #2ADADC", -"R' c #2ADADB", -"S' c #2ADBDC", -"T' c #29D9DA", -"U' c #29D2D6", -"V' c #23BFC4", -"W' c #1B999E", -"X' c #1FAEB2", -"Y' c #26CBCF", -"Z' c #2AD7DB", -"`' c #29D9DB", -" ) c #28CDD1", -".) c #20B1B6", -"+) c #198F95", -"@) c #22B9BF", -"#) c #2AD9DD", -"$) c #2BDADC", -"%) c #2AD6D9", -"&) c #1EA5AB", -"*) c #20AFB5", -"=) c #29D8DC", -"-) c #2ADBDD", -";) c #2BD8DA", -">) c #26C8CD", -",) c #178A8F", -"') c #25C0C5", -")) c #2CD9DC", -"!) c #2CDDDF", -"~) c #2BDBDD", -"{) c #2CDBDD", -"]) c #2BDCDD", -"^) c #2DDCDE", -"/) c #2CDCDD", -"() c #2CDBDE", -"_) c #2CDDDE", -":) c #29D2D5", -"<) c #24BAC0", -"[) c #188B90", -"}) c #23B7BD", -"|) c #2AD0D4", -"1) c #2CDCDE", -"2) c #2BDBDC", -"3) c #2DDCDD", -"4) c #2CDBDC", -"5) c #2BD8DB", -"6) c #28CACF", -"7) c #21ADB1", -"8) c #1C9AA0", -"9) c #26C1C6", -"0) c #2DDDDD", -"a) c #2BDADD", -"b) c #2BD7D9", -"c) c #26C3C8", -"d) c #1D9FA4", -"e) c #198D92", -"f) c #23B9BD", -"g) c #2CDDDD", -"h) c #2BD7D8", -"i) c #1A9397", -"j) c #27C6CA", -"k) c #2EDBDD", -"l) c #2DDEDF", -"m) c #2DDDDF", -"n) c #2EDDDF", -"o) c #2DDEDE", -"p) c #2EDEDF", -"q) c #2DDDDE", -"r) c #2EDEDE", -"s) c #2BD1D4", -"t) c #22B5BA", -"u) c #1C969B", -"v) c #27C0C5", -"w) c #2CD6D8", -"x) c #2DDBDD", -"y) c #28C8CC", -"z) c #1FA4AA", -"A) c #1FA5AA", -"B) c #2CD9DB", -"C) c #2AD4D7", -"D) c #26C0C4", -"E) c #1D999D", -"F) c #26C0C5", -"G) c #2BD6D9", -"H) c #2EDDDE", -"I) c #07575A", -"J) c #1E9DA0", -"K) c #29CACE", -"L) c #2EE0E1", -"M) c #2EDFE0", -"N) c #2FDFE0", -"O) c #2EDEE0", -"P) c #2EDCDE", -"Q) c #2ACED2", -"R) c #22AEB2", -"S) c #1FA2A6", -"T) c #29C6CA", -"U) c #2DD9DC", -"V) c #2EDFDF", -"W) c #2CD8DA", -"X) c #27C3C8", -"Y) c #1D9CA1", -"Z) c #23AFB3", -"`) c #2ACED1", -" ! c #2FDFDF", -".! c #2CD4D7", -"+! c #25B9BD", -"@! c #1FA3A8", -"#! c #29C9CC", -"$! c #2DDADC", -"%! c #085E62", -"&! c #21A3A9", -"*! c #2CCFD2", -"=! c #2FE0E1", -"-! c #30E1E1", -";! c #30E0E1", -">! c #2AC9CC", -",! c #22A5AA", -"'! c #22ABB1", -")! c #2BCCD0", -"!! c #2DDBDC", -"~! c #2DD6D9", -"{! c #27BEC4", -"]! c #24B8BD", -"^! c #2CD3D7", -"/! c #2FDEE0", -"(! c #2FDEDF", -"_! c #2CD1D4", -":! c #23B2B7", -"~ c #2BC3C6", -",~ c #34E0E0", -"'~ c #34E5E5", -")~ c #34E5E4", -"!~ c #34E6E5", -"~~ c #34E6E4", -"{~ c #35E6E5", -"]~ c #34E6E6", -"^~ c #33E2E2", -"/~ c #2FD4D6", -"(~ c #26B1B6", -"_~ c #24A9AE", -":~ c #2ED0D1", -"<~ c #34E2E2", -"[~ c #35E6E6", -"}~ c #35E5E4", -"|~ c #32DEDF", -"1~ c #2DC8CB", -"2~ c #31D8D9", -"3~ c #34E5E6", -"4~ c #35E5E5", -"5~ c #35E4E3", -"6~ c #31DADB", -"7~ c #2ABFC2", -"8~ c #26ACB0", -"9~ c #2ECFD2", -"0~ c #1F8F93", -"a~ c #34E3E3", -"b~ c #36E8E7", -"c~ c #37E8E7", -"d~ c #37E7E6", -"e~ c #36E7E6", -"f~ c #37E7E7", -"g~ c #36E6E6", -"h~ c #35E2E3", -"i~ c #2FD0D2", -"j~ c #25A9AD", -"k~ c #28B4B8", -"l~ c #31D7D9", -"m~ c #37E5E5", -"n~ c #36E8E6", -"o~ c #36E7E5", -"p~ c #36E7E7", -"q~ c #33DEDE", -"r~ c #2CC3C7", -"s~ c #209397", -"t~ c #2CC1C4", -"u~ c #32DDDD", -"v~ c #35E7E5", -"w~ c #35E7E6", -"x~ c #37E8E6", -"y~ c #36E6E5", -"z~ c #31D9DB", -"A~ c #29B7BB", -"B~ c #29B6BB", -"C~ c #32D7D9", -"D~ c #36E5E4", -"E~ c #21979C", -"F~ c #2FCDD0", -"G~ c #36E5E6", -"H~ c #38E9E8", -"I~ c #38E8E8", -"J~ c #38E8E7", -"K~ c #38E7E7", -"L~ c #35E1E2", -"M~ c #2ECBCD", -"N~ c #2BBFC2", -"O~ c #33DCDE", -"P~ c #37E6E6", -"Q~ c #37E8E8", -"R~ c #33DBDB", -"S~ c #2BBCC0", -"T~ c #239DA2", -"U~ c #2FC9CC", -"V~ c #31D4D6", -"W~ c #27AEB3", -"X~ c #34DDDE", -"Y~ c #186467", -"Z~ c #239EA2", -"`~ c #32D2D5", -" { c #39E9E8", -".{ c #39E8E8", -"+{ c #35E0E0", -"@{ c #2EC5C7", -"#{ c #239B9E", -"${ c #2EC7CA", -"%{ c #35E1E1", -"&{ c #32D7D8", -"*{ c #2AB5B8", -"={ c #25A8AC", -"-{ c #32D0D2", -";{ c #37E4E4", -">{ c #2FCFD0", -",{ c #239CA0", -"'{ c #2EC9CC", -"){ c #36E1E1", -"!{ c #3AEAE8", -"~{ c #39E9E7", -"{{ c #239EA1", -"]{ c #32D2D3", -"^{ c #39E7E7", -"/{ c #3AEAE9", -"({ c #3AE8E7", -"_{ c #35DDDD", -":{ c #2CBDC0", -"<{ c #26A6AA", -"[{ c #31D0D1", -"}{ c #37E4E3", -"|{ c #3AE9E8", -"1{ c #38E5E4", -"2{ c #31D3D4", -"3{ c #27ADB0", -"4{ c #2AB4B9", -"5{ c #33D8D9", -"6{ c #36E2E1", -"7{ c #2FC8CC", -"8{ c #27A8AC", -"9{ c #31D2D4", -"0{ c #37E5E4", -"a{ c #0A8084", -"b{ c #30C7CA", -"c{ c #38E3E3", -"d{ c #3BEBE9", -"e{ c #3BECEA", -"f{ c #3CECEA", -"g{ c #34D8D9", -"h{ c #2AB3B6", -"i{ c #2AB2B5", -"j{ c #33D8D8", -"k{ c #39E7E6", -"l{ c #37E3E3", -"m{ c #31CDCF", -"n{ c #2CBFC2", -"o{ c #37E0E0", -"p{ c #3BEAE9", -"q{ c #36DFDF", -"r{ c #2DC1C4", -"s{ c #2AB4B8", -"t{ c #35D9DA", -"u{ c #3BEAE8", -"v{ c #149BA0", -"w{ c #36D7D7", -"x{ c #3CE9E7", -"y{ c #3DEDEB", -"z{ c #3DECEB", -"A{ c #3DEDEC", -"B{ c #3EEEEB", -"C{ c #3EEDEB", -"D{ c #3BE9E8", -"E{ c #34D4D5", -"F{ c #28ACB0", -"G{ c #2DBDC0", -"H{ c #37DEDE", -"I{ c #3DEAE9", -"J{ c #3DEEEB", -"K{ c #3EEDEC", -"L{ c #39E5E3", -"M{ c #31C9CA", -"N{ c #249B9E", -"O{ c #31CBCD", -"P{ c #3AE5E4", -"Q{ c #3DEDEA", -"R{ c #3CEBE9", -"S{ c #37DCDC", -"T{ c #2CBBBD", -"U{ c #2FBFC2", -"V{ c #37DFDF", -"W{ c #14A7AA", -"X{ c #39DDDC", -"Y{ c #3DEBEA", -"Z{ c #3FEEEC", -"`{ c #3EEEED", -" ] c #3EEFED", -".] c #3FEDEC", -"+] c #3FEFED", -"@] c #3EEEEC", -"#] c #3EEDED", -"$] c #3CE7E6", -"%] c #33CFD0", -"&] c #249599", -"*] c #31C6C8", -"=] c #3AE4E2", -"-] c #3FEEED", -";] c #3FEDED", -">] c #38E1E0", -",] c #2FC2C3", -"'] c #28A6AA", -")] c #34D2D4", -"!] c #3DEAE8", -"~] c #36DADA", -"{] c #2CB3B6", -"]] c #23999D", -"^] c #30C9CA", -"/] c #3AE4E3", -"(] c #23B9BB", -"_] c #39E1E1", -":] c #3FEEEB", -"<] c #40EFED", -"[] c #40F0ED", -"}] c #40EEED", -"|] c #3FEFEC", -"1] c #3BE5E3", -"2] c #32C9CB", -"3] c #26A1A5", -"4] c #33D0D0", -"5] c #3DE8E7", -"6] c #40EFEE", -"7] c #3FF0ED", -"8] c #40F0EE", -"9] c #38DDDD", -"0] c #2CB7BB", -"a] c #2BB2B6", -"b] c #37DADA", -"c] c #3EEBE9", -"d] c #3DEAE7", -"e] c #35D5D6", -"f] c #28A4A7", -"g] c #35D1D3", -"h] c #3DE9E7", -"i] c #0C868C", -"j] c #33CACB", -"k] c #3DE7E4", -"l] c #40EFEC", -"m] c #41F1ED", -"n] c #41F0ED", -"o] c #3AE2E1", -"p] c #30C1C4", -"q] c #2BADB0", -"r] c #37D8D8", -"s] c #3FECEA", -"t] c #41F1EE", -"u] c #3EECEA", -"v] c #2BAEB3", -"w] c #2FBDC0", -"x] c #3AE0E0", -"y] c #40EDEA", -"z] c #40F1ED", -"A] c #3DE8E6", -"B] c #34CED0", -"C] c #2BB0B4", -"D] c #38D9D9", -"E] c #3FEBE9", -"F] c #40F0EC", -"G] c #1E9DA2", -"H] c #36D2D3", -"I] c #3FEAE8", -"J] c #42F0EE", -"K] c #42F1EE", -"L] c #43F2EF", -"M] c #43F1EE", -"N] c #41EEEC", -"O] c #3ADEDE", -"P] c #2FB9BC", -"Q] c #2FBABD", -"R] c #3AE0DF", -"S] c #42F1ED", -"T] c #3FEBE8", -"U] c #35D2D2", -"V] c #32C7C9", -"W] c #3DE5E4", -"X] c #41EFEC", -"Y] c #32C8CA", -"Z] c #2EBABE", -"`] c #3BE0DF", -" ^ c #40EEEC", -".^ c #25ACAF", -"+^ c #39DBDA", -"@^ c #41EEEA", -"#^ c #40EDEB", -"$^ c #39D9DA", -"%^ c #2BAEB1", -"&^ c #31C4C6", -"*^ c #3EE5E3", -"=^ c #42F0ED", -"-^ c #42F2EE", -";^ c #43F2EE", -">^ c #3EE8E6", -",^ c #28A1A6", -"'^ c #35CFD1", -")^ c #3FE9E7", -"!^ c #43F1EF", -"~^ c #42F2EF", -"{^ c #41EFED", -"]^ c #3CE3E0", -"^^ c #30BDC0", -"/^ c #32C6C8", -"(^ c #3EE7E4", -"_^ c #30BCBF", -":^ c #3DE3E1", -"<^ c #44F1EE", -"[^ c #45F4F0", -"}^ c #43F3EF", -"|^ c #44F4F0", -"1^ c #44F3F0", -"2^ c #43F2F0", -"3^ c #37D4D4", -"4^ c #279DA1", -"5^ c #35CECF", -"6^ c #40EBE7", -"7^ c #43F3F0", -"8^ c #3DE5E2", -"9^ c #32C3C5", -"0^ c #2BADB1", -"a^ c #3AD9D9", -"b^ c #42EFEC", -"c^ c #44F3EF", -"d^ c #3ADDDC", -"e^ c #2EB4B7", -"f^ c #27A0A4", -"g^ c #36D2D1", -"h^ c #41ECE9", -"i^ c #44F2EF", -"j^ c #45F3F0", -"k^ c #34C8CA", -"l^ c #40E8E6", -"m^ c #46F5F0", -"n^ c #47F6F1", -"o^ c #46F5F1", -"p^ c #47F5F1", -"q^ c #45F5F0", -"r^ c #45F5F1", -"s^ c #45F4F1", -"t^ c #46F4F1", -"u^ c #41EBE8", -"v^ c #36CCCD", -"w^ c #2BAAAD", -"x^ c #3BD9D8", -"y^ c #44EFEC", -"z^ c #3EE3E1", -"A^ c #30BBBD", -"B^ c #30BABD", -"C^ c #3EE3E2", -"D^ c #46F3F0", -"E^ c #47F5F0", -"F^ c #46F4F0", -"G^ c #39D8D8", -"H^ c #2CADB0", -"I^ c #3AD9DA", -"J^ c #43F0EC", -"K^ c #2AA1A4", -"L^ c #38D1D2", -"M^ c #42EDE9", -"N^ c #47F5F2", -"O^ c #47F6F2", -"P^ c #48F5F1", -"Q^ c #40E7E5", -"R^ c #34C4C6", -"S^ c #30B6B9", -"T^ c #3DDFDD", -"U^ c #44F1ED", -"V^ c #48F5F2", -"W^ c #45F2EE", -"X^ c #3CDEDC", -"Y^ c #2EB1B5", -"Z^ c #34C4C7", -"`^ c #40E8E5", -" / c #48F6F2", -"./ c #48F6F1", -"+/ c #43EDEA", -"@/ c #30B8BC", -"#/ c #3EE1E0", -"$/ c #44F2EE", -"%/ c #46F5F2", -"&/ c #3BDBDA", -"*/ c #45F1ED", -"=/ c #49F7F2", -"-/ c #4AF7F2", -";/ c #49F7F1", -">/ c #49F6F2", -",/ c #46F3EF", -"'/ c #3FE2E0", -")/ c #31BBBD", -"!/ c #33C1C3", -"~/ c #3FE5E2", -"{/ c #47F3EF", -"]/ c #45F2EC", -"^/ c #3AD6D7", -"// c #38CECF", -"(/ c #43EDE9", -"_/ c #49F6F1", -":/ c #49F7F3", -"( c #4DF6F2", -",( c #50F9F3", -"'( c #49F3EF", -")( c #3CDBDA", -"!( c #30B3B6", -"~( c #40E1E0", -"{( c #2DA9AC", -"]( c #3EDAD8", -"^( c #4BF3EE", -"/( c #54FBF5", -"(( c #54FAF5", -"_( c #55FAF5", -":( c #53FAF5", -"<( c #54F9F5", -"[( c #56FAF5", -"}( c #55F9F5", -"|( c #45ECE8", -"1( c #37C8C9", -"2( c #33BDC0", -"3( c #43E7E3", -"4( c #4EF6F2", -"5( c #4CF5F1", -"6( c #40E1DD", -"7( c #38CBCC", -"8( c #46EEE9", -"9( c #56FBF5", -"0( c #55FAF6", -"a( c #47F1EE", -"b( c #3BD5D5", -"c( c #35C0C2", -"d( c #44E8E6", -"e( c #4FF7F2", -"f( c #32B4B6", -"g( c #41E2DF", -"h( c #50F7F2", -"i( c #58FBF6", -"j( c #56FBF6", -"k( c #58FAF5", -"l( c #57FBF6", -"m( c #56F9F5", -"n( c #57FAF5", -"o( c #56FAF6", -"p( c #58FBF5", -"q( c #52F7F3", -"r( c #44E7E4", -"s( c #34BEBF", -"t( c #38C9CA", -"u( c #45EDE8", -"v( c #53F9F3", -"w( c #57FAF6", -"x( c #58FAF6", -"y( c #57FBF5", -"z( c #4CF3EE", -"A( c #3EDAD9", -"B( c #3CD6D4", -"C( c #53F9F4", -"D( c #48EFEA", -"E( c #39CECE", -"F( c #39CCCD", -"G( c #47EFEA", -"H( c #35C0C1", -"I( c #46E9E5", -"J( c #53F8F3", -"K( c #59FBF5", -"L( c #59FBF6", -"M( c #5AFBF6", -"N( c #5AFBF7", -"O( c #5BFCF7", -"P( c #5BFBF6", -"Q( c #58FBF7", -"R( c #52F8F2", -"S( c #40E1DF", -"T( c #3CD4D2", -"U( c #4DF1ED", -"V( c #5AFCF7", -"W( c #59FBF7", -"X( c #59FCF7", -"Y( c #59FAF5", -"Z( c #4DF2ED", -"`( c #3BD3D2", -" _ c #30AFB2", -"._ c #40DFDD", -"+_ c #51F6F1", -"@_ c #5BFBF7", -"#_ c #55F9F4", -"$_ c #46EBE7", -"%_ c #36C3C5", -"&_ c #3CD5D4", -"*_ c #4EF3EF", -"=_ c #39CDCC", -"-_ c #4AEFEB", -";_ c #5DFCF8", -">_ c #5CFCF7", -",_ c #5EFCF8", -"'_ c #5CFCF8", -")_ c #5FFCF8", -"!_ c #60FDF8", -"~_ c #4FF4F0", -"{_ c #3FDBD9", -"]_ c #2FAAAE", -"^_ c #3FDCDA", -"/_ c #4FF4EF", -"(_ c #5EFCF7", -"__ c #5EFDF8", -":_ c #4BEFEA", -"<_ c #39CBCC", -"[_ c #34BCBE", -"}_ c #45E8E4", -"|_ c #56F9F4", -"1_ c #5DFCF7", -"2_ c #5DFDF7", -"3_ c #54F9F3", -"4_ c #45E5E1", -"5_ c #34BABB", -"6_ c #30AEB0", -"7_ c #41DFDD", -"8_ c #51F5F1", -"9_ c #3ED7D6", -"0_ c #50F4EF", -"a_ c #5CFBF7", -"b_ c #61FDF8", -"c_ c #62FDF8", -"d_ c #5FFDF8", -"e_ c #60FCF8", -"f_ c #4CF1EC", -"g_ c #3BD2D1", -"h_ c #33B7B9", -"i_ c #56F8F4", -"j_ c #5BFAF5", -"k_ c #48EAE6", -"l_ c #35BFC1", -"m_ c #39C9C9", -"n_ c #49EDEA", -"o_ c #5CFAF5", -"p_ c #61FCF8", -"q_ c #5CFBF6", -"r_ c #54F7F2", -"s_ c #42DFDD", -"t_ c #32B9BA", -"u_ c #45E5E2", -"v_ c #58F9F4", -"w_ c #31AFB1", -"x_ c #43E1DF", -"y_ c #55F8F3", -"z_ c #64FDF8", -"A_ c #62FEF8", -"B_ c #63FEF9", -"C_ c #63FEF8", -"D_ c #63FDF9", -"E_ c #63FDF8", -"F_ c #64FEF9", -"G_ c #5CFBF5", -"H_ c #4CEFEA", -"I_ c #3ACAC9", -"J_ c #37C3C4", -"K_ c #48EBE7", -"L_ c #5BFAF6", -"M_ c #62FDF9", -"N_ c #62FEF9", -"O_ c #57F9F4", -"P_ c #44E3E1", -"Q_ c #4FF3EE", -"R_ c #5EFBF6", -"S_ c #64FEF8", -"T_ c #53F5F0", -"U_ c #3FD8D6", -"V_ c #34C3C3", -"W_ c #4AEEE9", -"X_ c #5FFCF6", -"Y_ c #35BCBD", -"Z_ c #47E8E5", -"`_ c #5DFAF4", -" : c #68FEF9", -".: c #66FEF9", -"+: c #65FEF9", -"@: c #67FEF9", -"#: c #65FDF9", -"$: c #65FEF8", -"%: c #66FEF8", -"&: c #63FCF8", -"*: c #69FEF9", -"=: c #64FDF9", -"-: c #5FFBF5", -";: c #48EAE5", -">: c #36C0C0", -",: c #3BD0CF", -"': c #51F2EE", -"): c #62FCF7", -"!: c #68FEF8", -"~: c #65FDF8", -"{: c #57F7F2", -"]: c #30A9AD", -"^: c #41DEDB", -"/: c #59F7F1", -"(: c #62FCF8", -"_: c #66FDF9", -":: c #66FDF8", -"<: c #62FBF6", -"[: c #4EF1ED", -"}: c #38CECE", -"|: c #53F3ED", -"1: c #64FCF7", -"2: c #3BC9C8", -"3: c #55EFEA", -"4: c #6BFCF7", -"5: c #76FFFA", -"6: c #72FFFA", -"7: c #6BFEF9", -"8: c #72FEF9", -"9: c #74FFFA", -"0: c #6EFEF9", -"a: c #6BFFFA", -"b: c #6DFEFA", -"c: c #70FFF9", -"d: c #70FFFA", -"e: c #6CFEF9", -"f: c #71FEFA", -"g: c #74FEFA", -"h: c #6EFFFA", -"i: c #75FEF9", -"j: c #73FFFA", -"k: c #74FFF9", -"l: c #63FAF5", -"m: c #48E5E2", -"n: c #46DCDA", -"o: c #5FF7F2", -"p: c #6AFEF9", -"q: c #71FFFA", -"r: c #6FFEF9", -"s: c #6CFFF9", -"t: c #6EFFF9", -"u: c #71FEF9", -"v: c #70FEF9", -"w: c #6DFFF9", -"x: c #70FEFA", -"y: c #6CFFFA", -"z: c #6AFEFA", -"A: c #6EFDF8", -"B: c #5DF5EF", -"C: c #42D6D3", -"D: c #35B7B9", -"E: c #4EE7E2", -"F: c #60F9F4", -"G: c #76FEFA", -"H: c #72FEFA", -"I: c #6FFEFA", -"J: c #6DFEF9", -"K: c #6FFFFA", -"L: c #68FDF6", -"M: c #53EEEA", -"N: c #39C6C6", -"O: c #1D9A9D", -"P: c #48DFDB", -"Q: c #64F9F3", -"R: c #41D4D1", -"S: c #66F3EE", -"T: c #77FEF8", -"U: c #79FFFA", -"V: c #78FFFA", -"W: c #77FFFA", -"X: c #77FFF9", -"Y: c #7AFFFA", -"Z: c #75FFFA", -"`: c #76FEF9", -" < c #78FEF9", -".< c #6AF8F2", -"+< c #4BDEDB", -"@< c #35B3B4", -"#< c #50E4E0", -"$< c #6CFAF4", -"%< c #75FEFA", -"&< c #77FEF9", -"*< c #76FEF8", -"=< c #5FF1EB", -"-< c #3DCDCB", -";< c #3CC5C4", -">< c #5AEDE8", -",< c #75FCF6", -"'< c #7BFFFA", -")< c #78FFF9", -"!< c #6FFCF6", -"~< c #56EAE5", -"{< c #20A6A7", -"]< c #57E9E4", -"^< c #33AAAB", -"/< c #4CDDD9", -"(< c #6BF7F1", -"_< c #73FEF9", -":< c #7CFFFA", -"<< c #7EFFFA", -"[< c #7DFFFA", -"}< c #7DFEF8", -"|< c #6BF5EF", -"1< c #47D6D3", -"2< c #3ABFBE", -"3< c #5EEBE5", -"4< c #78FCF5", -"5< c #7AFEF9", -"6< c #74FCF5", -"7< c #5BECE7", -"8< c #39C2C1", -"9< c #45CFCC", -"0< c #5EF1EC", -"a< c #7FFFFA", -"b< c #76FFF9", -"c< c #72FAF4", -"d< c #52E4DE", -"e< c #28B9B8", -"f< c #3AB6B4", -"g< c #5EE6E0", -"h< c #7CFAF4", -"i< c #82FEF9", -"j< c #84FFFA", -"k< c #81FFFA", -"l< c #85FFFA", -"m< c #82FFFA", -"n< c #83FFFA", -"o< c #80FFFA", -"p< c #83FEF9", -"q< c #6BF1EB", -"r< c #44CCCA", -"s< c #42CCC9", -"t< c #68EFEA", -"u< c #80FDF7", -"v< c #82FFF9", -"w< c #7AFAF4", -"x< c #61E7E2", -"y< c #50DAD6", -"z< c #78F7F1", -"A< c #81FEF9", -"B< c #81FFF9", -"C< c #76F7F2", -"D< c #53DCD8", -"E< c #45C4C2", -"F< c #6AEDE8", -"G< c #86FCF7", -"H< c #8DFFFA", -"I< c #87FFFA", -"J< c #8BFFFA", -"K< c #88FFFA", -"L< c #8AFFFA", -"M< c #89FFFA", -"N< c #8CFFFA", -"O< c #83FCF6", -"P< c #70ECE6", -"Q< c #44C2C0", -"R< c #55D6D2", -"S< c #7CF4EF", -"T< c #8AFDF9", -"U< c #8FFFFA", -"V< c #8CFEF9", -"W< c #80F9F4", -"X< c #59E0DC", -"Y< c #3BB1B1", -"Z< c #5FE3DE", -"`< c #84FAF5", -" [ c #86FFFA", -".[ c #8EFFFA", -"+[ c #8AFFFB", -"@[ c #87FEF8", -"#[ c #76F3ED", -"$[ c #4BD1CE", -"%[ c #4FD0CD", -"&[ c #75F3ED", -"*[ c #84FEF9", -"=[ c #86FAF4", -"-[ c #61E5DF", -";[ c #3AACAB", -">[ c #59E0DB", -",[ c #7FF8F2", -"'[ c #85FEF9", -")[ c #7CF6F0", -"![ c #56D8D4", -"~[ c #44BEBD", -"{[ c #69EBE5", -"][ c #85FCF6", -"^[ c #87FFFB", -"/[ c #7FFCF8", -"([ c #74EEE8", -"_[ c #44C6C5", -":[ c #57DAD6", -"<[ c #83F6F1", -"[[ c #88FEF9", -"}[ c #90FFFA", -"|[ c #94FFFA", -"1[ c #92FFFB", -"2[ c #91FFFA", -"3[ c #83F7F1", -"4[ c #59DED9", -"5[ c #41B9B8", -"6[ c #70E8E2", -"7[ c #88FBF5", -"8[ c #93FFFA", -"9[ c #92FFFA", -"0[ c #8EFEF8", -"a[ c #74F1EC", -"b[ c #4CCEC9", -"c[ c #47CCC8", -"d[ c #79F1EB", -"e[ c #8DFDF8", -"f[ c #90FFFB", -"g[ c #86FFF9", -"h[ c #87FBF5", -"i[ c #6BE9E4", -"j[ c #40B1AF", -"k[ c #71E4DE", -"l[ c #8EFAF4", -"m[ c #98FFFA", -"n[ c #96FFFA", -"o[ c #98FFFB", -"p[ c #95FFFA", -"q[ c #9AFFFA", -"r[ c #97FFFA", -"s[ c #99FFFB", -"t[ c #96FFFB", -"u[ c #95FFFB", -"v[ c #96FEF8", -"w[ c #8AF5EF", -"x[ c #5DD7D2", -"y[ c #4EC6C2", -"z[ c #80EFE8", -"A[ c #95FEF8", -"B[ c #97FFFB", -"C[ c #99FFFA", -"D[ c #9AFFFB", -"E[ c #92FDF8", -"F[ c #7EEDE7", -"G[ c #4BC2C0", -"H[ c #61D7D1", -"I[ c #83F6EF", -"J[ c #91FEF8", -"K[ c #94FFFB", -"L[ c #91FAF4", -"M[ c #72E5DF", -"N[ c #4CBEBC", -"O[ c #7BEAE3", -"P[ c #94FCF6", -"Q[ c #9CFFFA", -"R[ c #9CFFFB", -"S[ c #9BFFFB", -"T[ c #9EFFFB", -"U[ c #9EFFFA", -"V[ c #9DFFFB", -"W[ c #9BFFFA", -"X[ c #93FDF7", -"Y[ c #86F2EB", -"Z[ c #5BCFCB", -"`[ c #60D3CE", -" } c #86F4ED", -".} c #94FFF9", -"+} c #98FBF5", -"@} c #75E7E1", -"#} c #6BDFD9", -"$} c #90F7F2", -"%} c #9BFEFA", -"&} c #9FFFFB", -"*} c #90F7F1", -"=} c #68DDD7", -"-} c #57C9C4", -";} c #88F0E9", -">} c #9AFDF7", -",} c #9FFFFA", -"'} c #A0FFFB", -")} c #A1FFFB", -"!} c #9BFDF8", -"~} c #85EEE8", -"{} c #66DCD7", -"]} c #90F8F1", -"^} c #95F9F2", -"/} c #73E1DC", -"(} c #48B8B5", -"_} c #7EE6E0", -":} c #97FBF5", -"<} c #9FFEFA", -"[} c #A0FFFA", -"}} c #9DFFFA", -"|} c #9DFEF9", -"1} c #8FF5EF", -"2} c #63D4CE", -"3} c #61D3CE", -"4} c #91F3ED", -"5} c #9EFDF8", -"6} c #A1FFFA", -"7} c #A3FFFB", -"8} c #A4FFFB", -"9} c #A2FFFB", -"0} c #A3FFFA", -"a} c #A2FFFA", -"b} c #9BFBF6", -"c} c #80E8E2", -"d} c #46B2B0", -"e} c #79E5DE", -"f} c #99FAF4", -"g} c #A0FEFA", -"h} c #9FFEF9", -"i} c #93F6EF", -"j} c #69D9D3", -"k} c #55C5C0", -"l} c #85EDE6", -"m} c #9AFCF6", -"n} c #9CFEF8", -"o} c #57C9C5", -"p} c #76DDD7", -"q} c #9CF8F3", -"r} c #A8FFFB", -"s} c #A7FFFB", -"t} c #A6FFFB", -"u} c #A5FFFB", -"v} c #A9FFFB", -"w} c #A7FFFA", -"x} c #9BF9F3", -"y} c #77DFD9", -"z} c #55C0BB", -"A} c #8AEBE4", -"B} c #A1FCF6", -"C} c #A6FFFA", -"D} c #A4FFFA", -"E} c #A2FDF8", -"F} c #91F2EB", -"G} c #67D0C9", -"H} c #63CFC9", -"I} c #94F2EB", -"J} c #A4FEF9", -"K} c #97FCF6", -"L} c #88EAE2", -"M} c #4AB6B2", -"N} c #87E7E1", -"O} c #A1FCF5", -"P} c #ABFFFC", -"Q} c #ABFFFB", -"R} c #AAFFFB", -"S} c #ACFFFC", -"T} c #AAFFFC", -"U} c #A9FFFC", -"V} c #A4FFF9", -"W} c #94F5EF", -"X} c #6FD6D0", -"Y} c #64CDC7", -"Z} c #93F1EA", -"`} c #A2FEF8", -" | c #ADFFFC", -".| c #ACFFFB", -"+| c #A7FDF7", -"@| c #8EEDE7", -"#| c #5FC5BF", -"$| c #74DAD4", -"%| c #9EF8F1", -"&| c #A8FFFC", -"*| c #9FFAF4", -"=| c #84E2DC", -"-| c #5EC3BF", -";| c #94EEE8", -">| c #A9FEF7", -",| c #ADFFFB", -"'| c #AEFFFB", -")| c #AEFFFC", -"!| c #A9FDF9", -"~| c #9AF1EA", -"{| c #67CEC8", -"]| c #73D6D0", -"^| c #9DF5EF", -"/| c #A9FFFA", -"(| c #A6FCF6", -"_| c #89E8E1", -":| c #80E4DD", -"<| c #A0FAF3", -"[| c #AAFFFA", -"}| c #9DF7F1", -"|| c #7FDCD5", -"1| c #6DCFCA", -"2| c #9DF3EC", -"3| c #ABFDF8", -"4| c #B0FFFC", -"5| c #AFFFFB", -"6| c #B1FFFB", -"7| c #AFFFFC", -"8| c #B2FFFC", -"9| c #B1FFFC", -"0| c #AAFCF7", -"a| c #95ECE6", -"b| c #88DFD8", -"c| c #A4F9F2", -"d| c #AEFFFA", -"e| c #B0FFFB", -"f| c #B2FFFB", -"g| c #A6F9F3", -"h| c #80E1DA", -"i| c #58BEB8", -"j| c #91EBE3", -"k| c #ACFFFA", -"l| c #9CF4ED", -"m| c #75D3CD", -"n| c #77D9D3", -"o| c #A1F6EF", -"p| c #ACFEF9", -"q| c #B3FFFC", -"r| c #B4FFFC", -"s| c #A8FBF5", -"t| c #8EE7E1", -"u| c #59B7B3", -"v| c #90E6E0", -"w| c #A9FCF6", -"x| c #ABFFFA", -"y| c #A7F7F0", -"z| c #78D8D1", -"A| c #6FC9C3", -"B| c #97F1EA", -"C| c #A9FDF7", -"D| c #B3FEFC", -"E| c #B3FFFB", -"F| c #A9FEF8", -"G| c #98F0E9", -"H| c #66CAC5", -"I| c #8BE1DB", -"J| c #A8FAF3", -"K| c #B6FEFA", -"L| c #B4FFFB", -"M| c #B5FFFC", -"N| c #B5FFFB", -"O| c #B6FFFC", -"P| c #B9FFFC", -"Q| c #B7FFFC", -"R| c #B2FEFA", -"S| c #AAF9F3", -"T| c #8AE0DA", -"U| c #65C5BF", -"V| c #9CEFE6", -"W| c #B0FDF7", -"X| c #B3FEFA", -"Y| c #A2F2EB", -"Z| c #74CEC7", -"`| c #79D4CD", -" 1 c #A0F4ED", -".1 c #B2FDF9", -"+1 c #B8FFFC", -"@1 c #AFFCF6", -"#1 c #96EBE4", -"$1 c #60BAB6", -"%1 c #93E8E1", -"&1 c #AEFBF5", -"*1 c #B5FEFA", -"=1 c #A3F6EF", -"-1 c #7AD7D1", -";1 c #73CFC9", -">1 c #A2F3EC", -",1 c #B4FEF8", -"'1 c #AFFCF7", -")1 c #9BECE5", -"!1 c #88DED5", -"~1 c #A3F7F0", -"{1 c #B2FEF9", -"]1 c #A9FAF4", -"^1 c #8FE4DD", -"/1 c #6DC6C0", -"(1 c #9FEEE7", -"_1 c #B2FDF7", -":1 c #BAFFFC", -"<1 c #B9FFFB", -"[1 c #B6FEF9", -"}1 c #A6F1E9", -"|1 c #74CDC7", -"11 c #85DAD3", -"21 c #ACF7F0", -"31 c #B7FEFA", -"41 c #B6FFFB", -"51 c #B1FAF4", -"61 c #95E6DF", -"71 c #61B6B2", -"81 c #94E5DE", -"91 c #AFFBF4", -"01 c #B4FEFA", -"a1 c #A8F8F1", -"b1 c #86DCD4", -"c1 c #7FD3CC", -"d1 c #A9F2EC", -"e1 c #BCFFFC", -"f1 c #BBFFFC", -"g1 c #B8FFFB", -"h1 c #B6FCF6", -"i1 c #9FEBE4", -"j1 c #8FE3DB", -"k1 c #B1FAF3", -"l1 c #BAFEFA", -"m1 c #BDFFFC", -"n1 c #AFF8F2", -"o1 c #91E0D8", -"p1 c #6FC3BB", -"q1 c #A0ECE5", -"r1 c #B7FDF7", -"s1 c #BAFFFB", -"t1 c #B8FFF9", -"u1 c #AAF4EC", -"v1 c #80D2CB", -"w1 c #89D6CF", -"x1 c #ACF4ED", -"y1 c #BCFEFA", -"z1 c #BEFFFC", -"A1 c #BFFFFC", -"B1 c #BEFFFB", -"C1 c #B8FBF6", -"D1 c #9EE7E0", -"E1 c #64B7B1", -"F1 c #9AE5DE", -"G1 c #B5FAF3", -"H1 c #BBFFFA", -"I1 c #B9FEFA", -"J1 c #AFF7F0", -"K1 c #8DDAD3", -"L1 c #77C8C1", -"M1 c #A6EFE8", -"N1 c #B6FCF7", -"O1 c #BBFDF9", -"P1 c #A8F0E9", -"Q1 c #7CCDC5", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" . ", -" + @ ", -" # $ % ", -" & * = ", -" - ; > , ", -" ' ) ! ~ { * ", -" ] ^ / ( _ : < ", -" [ } > | | ~ 1 2 ", -" @ 3 _ | | | 4 ; ", -" 5 , 4 | | | 6 7 8 ", -" 9 ; 0 a a a a a ( , ", -" b c 6 a a a a a 6 d * ", -" e { a f f f f f g h { i j [ k 5 5 @ l ", -" m n o a g g g f f f f 6 : 5 < p q r s t u % v w k x [ ", -" y z ( A B C A A A A A D 6 / E d | | F ~ G d : c H , p z I t % J K L x ", -" @ = | C A A A A A A A A D 6 1 1 M N C D g D f f h 6 O 4 _ o G / 1 P = * Q < $ R w k 5 @ ", -" 5 8 S A A T A A T T A A A A ( U e : S C A A T A A T V T V A g g B a 6 | W ( ~ d X ! 1 Y Z * t ", -" ` 1 B .T T ..T T T .T T ..C ~ I o D ..T ....+.V +.T T T .....@...T T A A #.A D B f h $.d p ", -" % > %.&.@. .*. . .@.=. . .*.-.;.>. ,.0 +.*.*.*.*...*.@. . .*.*.@.*.*. .*. .*.&.&.@.*. .@...#.( '. ", -" ).>.+.*.*.*.*.*.*.*.*.*.*.*.*.-.!.~. {.6 +.*.*.*.*.&.].*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.C ^. ", -" < O @././././.(.(._./.(./.(.(./.].:./ { D ].(./.(./.(./.(.(./.(./.(.(.(.(./.(._.(.(.(.(.(./.].C <. ", -" Q 6 [./././.(./.(././.(.(./.(./.(.[.h 1 z ~ T ]././.(.(.(.(.(.(.(.(.(.(./.(././.(.(.(.(.(.(.(.(.].B : }. ", -" |.Z f (._.1.1._.2._.2.1._.1.1._.1._._.@.6 U 6 @.1.1.1.1.2._.1._._.1.1.1.1.1._.1._._._.2.1.1.1.1.1.&.f 3. y - I z ^ $ $ J w ", -" 4.5.C 2.1.2.6._.1.2._.1.1._.6.2.2.2._.1.7.~ ; f (.6.2._.2._.1.1.8.2.6.1.2.2.1.6.1.6.6.2.1.6._.2.2.1.].9.P e / $.h ( o G 3.8 P p Q I t % 9 & ", -" ` : @.0.a.a.0.2.a.a.2.b.6.b.0.0.b.a.2.a.a.+.4 { T a.a.2.0.c.a.d.6.0.0.b.a.6.d.a.6.a.0.d.a.0.b.6.0.6.b.].| ; g (.(.[.e.@.+.T D f.h W g.{ ! P 8 = Q i e h.w i. ", -" - j.].k.l.a.0.k.k.k.0.k.a.a.a.k.a.0.k.k.m.b...d 4 ].a.m.k.0.m.k.a.a.m.0.a.0.k.k.0.a.a.k.a.a.k.m.m.0.k.k.&.( d T 6.m.a.k.a.6.0.6.6././.e. .7.T n.a O ^.d X : 1 ,.3 n $ R ", -" $ ( _.m.k.k.a.m.k.k.m.k.m.k.k.k.m.k.m.0.m.k.6.A ! = a 1.k.k.k.m.m.k.k.m.m.k.m.0.k.m.k.a.m.k.0.k.k.m.k.m.m.0.o.j. _ ].k.0.m.k.0.m.k.p.k.m.m.k.k.k.a.6.6._.(.].*...A D h O _ 3. ", -" I h q.r.s.r.t.k.r.r.m.m.u.m.u.u.r.m.m.m.u.s.u.b.D ; D 1.r.m.u.t.m.r.u.u.v.k.k.r.r.r.r.m.u.u.m.k.u.m.k.r.r.k. .> U h (.k.r.m.u.m.m.u.m.k.r.m.r.u.r.s.u.t.u.k.m.m.m.0.0.2.8...d ", -" Q B q.t.t.r.u.u.u.u.t.u.u.t.r.r.t.r.u.u.u.u.t.u.2.f. { .m.u.u.t.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.r.r.u.u.u.r.w.#. 1 C 0.u.t.r.u.r.u.t.r.u.u.u.u.r.u.u.u.u.t.u.u.u.u.u.u.u.q. .{ ", -" P C s.u.v.t.r.t.t.t.u.u.u.u.u.u.t.r.u.u.u.u.r.u.r.x.( ^.x.m.t.u.t.u.u.u.t.u.r.t.u.t.u.r.t.u.t.u.u.u.t.r.u.u.s.c.f > .m.t.t.u.r.u.u.u.u.u.u.u.r.t.u.r.u.u.u.u.t.t.u.u.u.t.0.#. ", -" k ! ..y.t.t.z.t.A.t.A.z.B.t.t.t.t.t.t.t.t.z.t.C.t.B.t.].~ f.b.D.B.t.t.t.t.B.t.t.z.t.A.t.t.E.B.A.B.z.t.z.t.t.t.B.t.8.0 ~ (.v.z.u.B.z.B.z.z.t.z.t.t.t.t.t.t.t.t.t.A.A.B.u.z.z.F.0.n. ", -" ` d 8.z.G.G.H.G.A.z.G.E.A.H.z.z.H.H.G.z.z.H.G.G.G.H.G.v...{ H V 0.I.H.z.H.H.H.z.z.E.G.G.z.G.G.H.A.z.H.G.A.H.G.z.H.H.A._.~ f.0.z.B.H.H.H.z.E.G.z.H.H.z.H.G.H.z.z.G.G.H.A.G.H.H.G.B.0.J. ", -" - >.c.K.K.K.K.K.G.H.K.K.G.K.z.H.K.K.K.H.H.K.K.K.K.K.K.H.r.L. > *.A.G.H.K.K.K.H.H.K.K.K.H.K.K.K.K.H.K.K.G.K.G.H.K.K.K.t.&.<. ; +.s.G.K.K.K.H.K.K.H.K.H.G.K.K.K.H.H.K.K.K.G.K.K.K.K.I.M.b.O ", -" d 2.N.O.P.Q.O.P.Q.R.N.O.O.K.O.Q.S.N.P.O.O.O.O.P.P.O.O.O.r.#. W a.G.S.P.O.K.O.P.P.O.O.P.O.O.P.O.P.O.K.O.P.N.S.O.O.K.O.A.[. : /.z.P.T.N.P.O.N.O.O.S.N.P.O.K.O.Q.O.O.P.O.P.O.O.P.P.S.G.1.^. ", -" , V t.O.O.O.O.O.Q.P.Q.P.O.P.O.P.O.Q.O.O.P.O.P.O.P.O.O.O.N.m.f. g y.N.O.O.O.O.O.P.O.P.O.O.O.P.P.O.O.P.P.P.O.O.P.O.P.O.N.v.V U.6.H.O.P.P.O.O.P.O.Q.P.Q.O.O.P.O.P.O.P.O.O.O.P.Q.O.O.N.z.]. ", -" G V.H.O.P.W.P.W.P.Q.P.O.P.O.O.P.W.W.W.X.W.W.P.Q.X.W.O.W.R.b.O T B.O.W.X.W.X.W.X.W.Q.P.X.X.Q.X.P.X.P.Q.O.O.Q.P.X.W.W.Q.v.B S r.O.Q.Q.X.X.O.O.P.O.O.X.X.W.X.X.W.X.W.Q.X.Q.Q.P.P.X.Y.B... ", -" ( d.H.X.W.X.X.X.X.X.W.Q.Z.Q.W.X.X.X.X.O.W.X.P.X.X.X.W.Q.`.1. : /.H.X.W.X.X.X.P.Q.X.P.Q.W.X.X.W.X.X.W.W.W.Q.W.X.W.X.X.N.0.6 A B.P.X.X.X.W.W.W.W.W.W.X.X.X.X.Q. +X.P.T.W.X.X.X.X.X.P.B.N ", -" g t.P..+Z.W.Z.W.W.W..+++@+X.Z.W.Z.W..+W.Z..+W.W.W.W.W.W.H.*. U.b.N.Z.Z.W.W..+X.W..+#+W.Z.Z.W.W.Z.W.W.++#+X.Z.Z.W.Z.Z.N.a.U. : [.K.W..+W.Z.Z.W.Z.++X.W.W.W.W.#+X.W..+.+W.W.W.W.Z.W..+O.v.f. ", -" +.A..+++.+++++++Z.++++.+Z..+++.+++++$+++++W.++++++$+++Z.M.+. a r. +++++++++Z.++++.+Z.++.+.+++++$+++++++Z.++++++++++Z.S._. _ b.Q.$+++++.+Z.++++Z.++++++++++W.$+++++Z.++++++++++++.+T.q.W ", -" / /.Y.%+&+*+&+*+&+&+%+&+*+$+*+=+++%+-+*+$+*+*+*+*+&+*+&+%+G.D #.A..+-+%+++&+&+*+%+&+&+;+=+*+*+&+*+%+*+&+.+%+&+%+++&+=+H.[. f.v..+&+*+=+*+>+%+&+%+++&+*+$+*+*+*+%+&+&+&+&+&+&+*+*+%+O.d. ", -" ~ l.W.;+-+&+-+&+-+&+&+-+&+-+-+&+-+-+&+&+-+&+-+-+&+&+-+-+.+r.h : e.O.&+-+-+-+-+&+-+-+&+-+&+-+-+&+-+&+&+-+&+-+&+-+&+&+-+%+N.V +.`.;+-+-+&+-+-+&+&+&+-+-+&+-+&+&+-+&+-+&+-+&+-+-+&+-+&+O.e. ", -" f B.#+-+,+'+&+)+)+,+!+!+,+)+&+~+)+)+)+)+)+)+&+&+,+!+&+)+++q. o a.;+!+,+)+)+)+)+)+)+~+-+!+{+&+,+)+)+!+{+!+]+!+-+)+)+)+^+G.B ].O.,+!+~+)+)+)+!+-+)+,+!+)+)+)+)+)+)+{+-+&+)+&+!+)+]+*+S.T ", -" +.K.~+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+{+#+2. h B.^+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+>+m. >.0.%+/+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+^+G.B ", -" /. +/+)+)+)+)+)+)+)+)+]+)+)+]+)+)+)+)+)+)+)+)+)+)+)+)+)+ +&. T K./+(+)+)+)+)+)+)+)+)+)+)+)+)+]+)+)+)+)+)+)+)+)+)+)+_+.+b. h t.>+)+)+)+)+)+)+]+)+)+]+)+)+)+)+]+]+)+)+)+)+)+)+)+)+)+*+v.6 ", -" d w.>+(+(+(+(+(+(+(+(+(+(+(+:+(+(+:+(+(+(+(+(+(+(+(+(+(+)+O.T (.W.)+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+:+(+(+:+(+W.x. A K.{+<+(+(+(+(+(+(+(+(+(+(+(+(+:+(+(+(+(+(+(+(+(+(+:+(+*+k. ", -" 6 G.)+[+(+[+[+[+[+[+[+}+[+<+<+<+|+1+[+}+}+[+}+[+:+[+[+|+)+N.g o 0.>+(+<+<+<+<+[+[+[+[+[+<+<+[+}+[+<+[+[+[+[+<+<+<+<+<+:+2+*. (. +)+3+[+[+[+}+4+}+[+<+<+<+<+1+[+[+[+[+[+<+<+[+<+[+[+}+;+6. ", -" T T.(+5+5+5+5+[+[+5+5+5+3+5+5+5+3+[+5+5+5+3+3+4+[+5+5+[+)+B. h A.^+5+5+3+5+3+5+3+3+5+3+5+[+3+5+5+3+[+5+5+5+5+[+[+5+5+1+T.T o b.*+3+5+[+3+[+3+3+5+<+[+5+3+5+5+5+5+[+5+5+5+5+5+[+5+5+5+++(. ", -" (.6+5+7+8+7+8+7+8+7+7+7+8+7+8+8+8+8+8+8+7+8+8+8+8+7+7+9+,+m. A O.<+7+7+8+7+7+7+8+7+7+8+8+7+8+8+8+7+8+8+8+7+8+7+8+7+7+<+H. 6 B.)+8+8+8+7+8+8+8+8+8+8+8+7+8+7+7+8+8+8+7+7+8+7+7+7+8+[+ +%. ", -" o k.{+9+0+8+8+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+8+7+7+8+8+7+9+*+6. &.++5+a+7+7+7+7+7+7+8+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+0+)+b+ C +}+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+8+7+7+7+7+7+7+7+:+K. ", -" f.A.[+c+a+a+c+c+c+c+c+c+c+c+c+c+c+c+c+c+c+a+c+c+a+a+c+c+a+>+&. s.d+c+c+c+c+c+c+c+a+a+c+c+a+c+c+c+c+c+c+c+c+c+c+c+c+c+e+)+b. (.^+f+c+c+c+c+c+c+c+c+c+c+c+c+c+c+c+a+a+c+c+7+c+c+c+c+c+[+z. ", -" #.Q.8+c+g+c+c+h+c+c+c+c+c+c+c+c+c+g+g+c+g+c+c+g+g+c+c+g+7+.+#. W E.3+c+c+c+c+h+c+g+g+c+c+g+c+c+c+c+c+c+c+c+c+c+c+c+c+g+i+~+(. 0.(+c+h+c+c+c+c+c+c+g+g+c+c+c+g+c+g+g+h+c+g+c+c+c+c+g+a+d+y. ", -" (.^+e+g+j+k+g+g+g+g+g+l+g+c+g+g+c+g+g+g+g+g+l+g+g+g+g+g+m+N. A X.5+n+g+j+g+l+g+j+j+g+g+g+k+g+g+g+g+g+g+g+c+l+l+g+g+j+a+.+.. W H.5+g+g+g+g+j+k+g+l+c+g+l+g+c+g+g+j+j+l+l+g+g+c+g+g+g+a+{+b. ", -" 0.(+c+l+o+l+l+p+l+o+o+p+p+g+o+l+l+p+j+o+p+o+j+l+p+p+l+l+5+A. (.~+c+o+p+l+p+g+j+p+p+j+j+o+l+g+o+p+o+o+p+p+g+l+l+l+p+n+0+ + D +8+l+n+j+l+o+l+l+l+j+l+o+j+l+l+g+l+p+g+g+p+p+g+l+o+q+c+~+]. ", -" W G.[+p+p+p+p+p+l+p+o+o+p+p+p+p+p+o+o+p+p+p+p+p+p+p+o+p+j+(+k. 0.(+h+p+p+o+j+l+o+o+p+l+p+p+o+o+o+p+p+l+l+l+p+o+p+o+o+g+3+H. @.*+a+l+p+l+l+p+p+o+p+o+l+p+p+l+j+o+l+p+l+l+o+p+p+l+o+p+a+Z. ", -" B +a+p+l+p+o+o+p+p+o+l+l+o+p+p+p+l+r+s+o+o+p+p+o+p+p+p+g+t+(. 4 A.3+j+o+l+p+o+p+o+l+o+l+l+p+p+p+o+q+o+p+l+o+p+o+p+l+p+r+<+b+ b./+l+p+o+l+p+o+l+p+l+p+l+p+l+q+o+p+l+o+l+l+o+p+l+p+o+l+9+K. ", -" ].~+l+u+u+u+u+u+u+u+p+u+u+v+r+u+u+u+u+u+u+u+u+u+u+u+u+u+g+*++. D w+a+p+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+p+u+u+r+v+u+u+u+u+p+(+b. z.7+s+u+u+u+u+r+r+u+u+p+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+p+9+G. ", -" l.3+r+u+u+u+x+x+u+y+u+x+z+u+u+x+x+x+u+u+u+u+x+x+u+u+u+u+k+W. @.~+p+y+x+u+u+u+u+u+x+u+u+u+u+u+x+u+y+u+u+u+z+u+u+u+u+y+o+/+(. f.W.j+y+u+x+u+u+x+u+x+y+u+x+u+x+x+x+u+u+u+u+x+x+x+u+x+y+r+[+w. ", -" H.f+u+x+y+A+x+y+y+y+y+y+A+y+A+y+A+y+y+y+y+y+y+x+y+y+u+x+e+S. 8.B+u+A+y+y+y+y+y+y+y+y+u+y+y+x+x+y+y+y+y+y+y+y+y+A+y+y+l+%+ @.*+l+A+y+u+y+A+y+y+y+y+y+y+A+A+A+y+y+y+y+x+y+A+y+x+A+y+r+d+&. ", -" f W.o+C+D+D+C+C+E+C+E+F+C+C+C+F+y+E+E+E+C+E+E+C+G+E+C+D+A+a+C. z.c+F+C+E+C+E+C+E+D+D+E+E+E+E+C+C+C+C+F+F+E+C+C+A+C+E+C+j+Q. c.}+y+E+C+E+C+C+E+C+C+E+C+C+E+D+C+C+G+D+C+C+D+D+C+C+G+E+r+*+ ", -" T &+x+E+A+E+D+H+D+D+D+D+H+H+H+D+D+D+D+H+C+I+D+F+A+D+D+H+A+3+0. f.#+q+G+D+H+E+H+H+J+A+D+H+F+E+D+H+D+D+D+D+D+D+H+D+D+D+H+E+e+t. z.e+y+D+D+D+H+D+D+H+D+H+H+H+A+D+D+C+F+E+H+F+F+H+H+H+D+C+p+w+ ", -" 2.K+y+D+H+D+D+D+H+D+H+D+D+D+H+D+D+D+D+D+D+D+H+D+H+D+D+H+x+d+ T t+r+D+D+D+D+H+D+D+H+D+D+H+D+D+D+D+D+H+D+D+H+D+D+D+D+H+F+9+k. h X.g+C+H+H+D+H+D+H+D+D+D+H+D+D+H+H+D+D+D+D+D+H+D+D+H+D+C+c+S. ", -" z.c+E+L+M+M+M+M+L+L+L+M+M+M+L+M+M+M+L+M+M+L+M+M+M+M+M+H+s+*+ 2.[+A+M+M+M+M+M+M+M+M+M+M+L+M+M+M+L+M+M+L+L+M+M+M+M+M+L+A+}+1. 7.!+s+L+L+L+L+M+M+M+M+L+M+M+L+M+M+M+M+M+M+L+M+M+M+L+M+M+C+0+r. ", -" +o+L+M+N+M+L+M+M+M+L+M+M+M+M+L+M+M+L+L+M+L+L+M+L+M+M+O+o+ + t.0+C+M+M+L+M+L+M+M+M+M+M+P+M+L+M+L+L+M+M+L+L+L+M+M+M+H+s+!+ _.B+C+M+M+M+M+M+L+M+L+M+M+M+M+L+M+L+L+M+L+L+M+M+M+M+Q+L+C+K+_. ", -" A t+x+Q+R+S+N+T+T+S+N+S+S+M+S+S+S+M+N+S+Q+N+S+Q+S+S+N+T+O+g+G. O.l+M+S+Q+S+S+S+S+Q+S+N+R+S+N+T+R+M+S+S+Q+S+N+S+Q+M+N+O+r+Z. s.c+H+S+S+S+S+N+S+Q+Q+Q+S+S+N+Q+N+Q+S+N+N+T+R+S+S+R+M+S+A+,+ ", -" 2.3+U+T+R+R+T+T+R+T+R+T+T+T+T+R+T+T+T+T+R+T+T+T+R+T+R+R+H+V+q. D ^+y+W+R+R+R+R+R+T+R+T+R+R+R+T+R+T+T+T+T+T+T+R+T+T+T+R+S+o+X+ O.Y+Q+R+T+T+R+T+T+T+T+R+R+R+T+R+T+T+R+R+R+R+R+T+R+T+T+R+z+>+ ", -" t.c+N+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+L+3+ (.<+O+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+`+N+n+B. N ~+y+ @Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+ @.@P. ", -" T.p++@`+`+`+`+`+`+`+`+`+`+`+`+`+Z+ @`+`+ @`+`+`+`+`+`+`+G+)+ b+e+@@`+`+`+ @`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+ @`+#@9+ e.}+L+`+`+`+`+`+`+`+`+`+`+`+`+$@Z+`+`+`+`+`+`+`+`+`+`+`+@@g+B. ", -" ^+A+$@`+`+`+`+`+`+`+`+`+%@`+%@`+`+`+`+`+`+`+`+%@%@`+%@&@x+w+ N.v+@@`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+%@`+`+`+`+`+`+Z+E+)+ 0.c+#@`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+%@%@`+`+`+`+M+0+w. ", -" (.[+N+*@*@*@=@*@*@-@*@*@-@*@;@-@*@*@*@;@*@;@-@;@;@*@=@=@%@r+X+ *+J+>@*@;@*@*@*@*@*@=@*@*@*@*@*@-@*@-@;@=@,@*@*@*@*@*@>@J+^+ S.Y+&@*@-@,@=@,@*@=@-@=@-@;@,@*@-@;@-@-@*@;@-@*@*@-@-@%@N+3+ ", -" 0.k+W+;@'@,@;@'@,@-@,@;@'@;@,@,@;@'@;@;@,@,@;@;@'@,@,@,@&@g+r. *.[+N+*@;@,@;@;@-@;@,@;@;@-@,@,@,@'@;@;@,@,@'@;@'@-@'@)@!@u+ + >+F+~@-@,@,@,@;@=@,@-@{@,@,@;@,@-@)@,@;@;@;@-@'@,@;@;@;@D+{+ ", -" K.r+*@)@)@)@)@,@'@)@)@)@)@)@)@'@)@)@)@)@)@)@)@)@)@)@)@]@ @7+ q.h+&@)@)@,@{@)@)@)@)@)@)@'@)@,@)@,@)@)@)@)@)@)@,@)@)@,@^@q+A. .<+N+,@/@)@)@)@)@)@)@'@)@)@)@)@)@)@)@'@)@)@'@)@)@)@'@)@-@(@w. ", -" ;+C+;@_@)@/@/@)@)@'@/@,@'@/@:@/@'@)@/@/@'@'@/@/@)@/@/@=@S+1+ G.r+^@/@:@)@)@)@/@/@'@/@:@)@/@/@)@)@)@/@)@,@)@:@/@:@)@:@%@e+ b.a+&@:@/@/@'@)@<@:@)@:@/@/@:@,@)@/@:@)@)@/@:@/@/@/@)@)@~@A+3 ", -" ..1+S+;@)@_@/@)@_@/@_@)@_@_@_@_@/@_@_@_@_@)@_@:@_@_@/@,@[@H+&+ .+C+]@_@_@_@,@_@_@/@<@:@)@_@_@)@:@_@_@)@/@_@_@_@_@_@_@_@Z+[+ z.n+}@|@:@)@_@_@:@/@_@_@_@_@/@:@/@_@_@)@_@)@/@_@:@)@_@1@%@8+ ", -" 6.e+S+:@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@:@/@_@{@A+2@ 3@N+]@_@_@_@_@_@_@_@:@/@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@]@#@'+ W.C+{@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@/@)@_@_@_@_@_@_@4@$@w+ ", -" B.v+)@5@_@6@5@_@7@_@_@_@_@_@_@_@6@8@8@6@_@_@7@6@_@6@5@_@,@p+t. 1.7+9@4@_@5@_@5@8@6@_@7@7@_@6@7@8@6@_@_@_@_@_@_@_@5@_@5@:@D+W. ]+N+_@8@5@8@6@_@_@_@_@_@_@6@8@5@_@5@_@8@7@6@_@5@0@8@5@:@@@Q. ", -" %+D+<@7@5@5@7@5@5@5@7@5@5@7@5@7@7@6@6@7@5@_@5@5@5@5@5@8@=@c+ t.r+,@6@5@5@0@8@5@7@7@5@5@7@5@7@5@5@5@5@5@7@5@5@5@7@5@6@)@u+E. a@f+>@5@5@5@7@5@5@7@5@7@6@6@7@5@_@7@5@7@5@5@5@5@5@7@5@7@b@M+(. ", -" z )+c@6@d@e@7@7@7@f@d@7@d@7@e@7@f@5@f@f@5@f@7@5@7@d@d@f@7@%@5+ T.E+8@d@f@5@e@f@7@7@7@d@5@e@e@7@7@d@e@7@5@f@7@7@f@5@d@e@;@q+ B.q+{@7@e@7@f@7@7@5@e@f@e@7@7@f@7@f@5@f@7@5@f@7@7@e@f@7@{@a+g@ ", -" G &. (.f+>@d@h@h@h@h@e@i@h@7@i@h@h@7@d@h@7@d@h@h@7@h@i@7@h@h@6@ @{+ )+&@d@d@d@i@j@d@h@h@7@d@i@i@h@h@e@h@h@0@d@h@h@7@d@h@h@e@~@a+ Q.D+|@h@h@j@h@i@d@d@i@i@d@7@h@h@7@d@i@d@7@i@h@h@h@j@h@d@:@k@ ", -" f %+&+ s.p+:@h@i@h@h@d@h@h@e@h@h@h@e@h@h@e@h@i@i@d@h@h@e@h@h@l@7@D+Q. [.8+*@6@h@h@h@h@h@h@e@h@h@h@h@i@d@h@h@e@e@h@h@d@i@h@h@h@m@$@d+ &+@@7@i@h@h@i@h@l@h@i@d@i@h@h@d@h@h@d@i@h@h@h@i@h@h@i@h@,@;+", -" .c+E+!+ W.D+7@n@i@n@o@p@h@o@o@n@n@n@o@n@n@o@n@n@o@n@n@n@h@o@n@i@:@A+K. r.q@:@p@n@n@n@n@n@n@o@o@o@i@o@n@o@h@p@n@o@n@o@n@n@o@n@n@7@@@&+ 8+>@e@o@n@h@h@n@o@n@o@n@n@n@o@n@o@o@n@o@o@o@i@o@n@h@h@o@&@", -" 2.u+[@D+T. {+$@l@o@n@n@n@n@n@n@o@n@o@n@n@o@n@n@n@n@o@n@o@o@n@n@n@o@)@l+ S.E+f@n@o@n@o@o@n@n@n@n@o@n@o@n@n@n@o@n@o@o@n@n@o@n@o@n@6@E+S. 0.q+4@n@n@n@n@n@o@o@n@o@o@n@o@o@n@o@n@n@n@o@n@n@n@o@n@n@7@", -" P r.E+r@8@r+ 9+-@s@o@n@n@o@n@n@n@o@n@n@o@n@n@o@n@o@n@n@n@n@t@n@o@n@p@;@m+ ~+T+i@u@n@o@n@v@n@n@n@n@o@n@o@o@n@n@n@n@n@n@o@o@n@o@n@n@_@Y+ H.E+7@n@o@n@n@o@o@v@n@o@n@n@n@o@o@o@n@n@n@n@n@o@n@n@n@p@", -" ! I.M+p@v@)@w@ a.l+_@n@x@o@n@n@o@n@y@v@n@x@x@n@n@u@v@o@o@n@x@v@n@v@v@n@l@^@d+ [+-@n@x@o@n@z@v@v@v@x@x@n@n@o@n@n@n@x@n@v@v@z@n@o@n@z@o@,@a+ %+R+d@n@n@o@n@z@z@n@n@x@x@o@n@x@n@x@v@n@x@n@v@n@v@n@n@", -" { Z.&@o@n@p@-@[+ H.(@7@x@v@x@x@n@x@x@z@v@x@x@x@v@x@x@n@v@v@n@n@x@n@x@x@u@i@@@#+ 8.k+4@u@n@x@x@n@v@x@v@n@x@v@n@x@v@x@x@x@z@x@y@x@n@v@z@n@o@*@1+ (+>@o@x@v@n@x@x@x@x@x@z@n@x@z@n@n@z@x@v@x@z@v@x@v@n@", -" ~ ]+)@A@B@C@x@Z+~+ Z.@@n@C@C@C@C@D@B@E@B@z@x@D@D@z@D@B@B@D@B@z@C@C@C@C@C@D@l@E+ A.z+f@C@C@F@B@B@C@D@x@D@C@C@C@A@C@x@B@z@B@n@B@D@C@F@G@C@v@Z+*+ _.g+8@B@C@B@z@v@x@D@v@B@C@C@B@B@B@C@B@x@z@D@D@C@C@D@", -" 6 9+7@H@I@A@A@i@S+Z. (+)@D@I@A@B@A@A@I@I@I@C@I@A@I@B@C@A@I@A@A@A@A@I@I@B@A@I@d@u+ $+S+n@I@A@A@I@A@I@C@A@I@A@I@C@C@I@I@I@I@C@A@A@I@C@B@I@J@o@L+Q. u.y+i@B@B@I@C@A@I@D@C@C@I@A@I@A@A@I@C@I@I@I@I@C@D@", -" D g+l@H@A@I@B@A@l@y+ e+:@A@I@x@I@I@A@A@A@I@I@A@A@I@A@I@A@A@A@B@G@I@A@x@A@I@C@8@e+ (+-@z@A@I@A@I@A@I@A@B@I@A@B@D@I@I@A@I@A@A@A@A@A@I@I@A@K@h@.@ +N+i@z@I@I@I@A@I@A@I@I@I@A@A@A@I@I@I@B@A@A@D@B@", -" [.p+i@L@I@I@I@A@D@0@l+ u.y+d@I@I@I@A@I@I@A@I@A@I@A@A@A@I@I@A@A@I@A@I@A@I@A@I@J@E@*@1+ e+/@z@A@A@I@I@I@A@A@A@I@A@A@A@I@I@A@A@I@A@I@I@A@A@I@A@z@8@n+ )+*@z@L@A@I@I@I@I@A@I@I@I@I@A@I@A@I@A@A@I@A@A@", -" b.F+x@M@I@H@H@H@L@B@<@m+ X.R+x@L@H@H@H@L@H@H@H@H@L@L@H@H@L@H@I@H@H@L@L@L@H@H@H@L@B@Z+w+ m.y+l@I@N@H@L@A@H@H@L@H@H@H@H@H@H@H@L@H@H@H@L@H@H@H@L@I@C@/@3+ e+8@A@H@L@H@H@H@H@H@L@L@H@H@L@J@H@L@H@L@H@L@", -" t.M+B@H@H@H@L@H@H@J@z@>@{+ {+*@v@H@H@L@H@H@H@I@L@H@I@L@L@H@L@H@H@H@I@H@A@L@H@I@H@L@n@H+ O.H+n@H@H@H@H@L@H@L@I@I@H@H@L@H@L@H@I@L@H@I@I@H@H@H@H@H@z@`+^+ b.q+d@L@H@H@H@H@I@H@I@I@H@H@H@H@H@J@L@I@L@I@", -" ! X+^@L@N@O@N@M@N@H@N@H@v@ @#+ 7+|@C@M@P@M@L@N@H@M@N@H@N@M@H@M@M@N@H@H@N@M@H@H@M@M@L@M@Q@R@ ~+*@C@M@N@M@N@I@L@S@M@M@L@N@M@H@N@M@M@N@N@M@N@H@S@H@N@H@v@@@ G.E+n@M@L@H@S@M@T@T@H@T@N@O@N@N@L@L@H@N@H@", -" { *+U@P@V@M@H@H@V@L@N@M@N@v@A+ 0.p+f@M@V@M@H@T@N@M@V@V@M@N@N@T@H@M@N@N@T@M@H@T@M@L@H@T@O@W@j+ K+:@A@T@M@M@H@P@V@P@H@M@V@N@L@M@T@M@T@T@T@M@T@V@H@M@M@N@t@F+ *+~@K@H@N@T@M@P@V@T@M@M@M@N@H@H@N@T@T@H@", -" 4 )+|@X@T@V@T@T@V@T@T@T@T@M@d@p+ G.L+v@T@T@T@V@V@T@V@M@N@V@T@T@T@T@V@V@T@T@V@T@T@T@T@T@V@Y@Z@B+ l+d@M@T@T@T@T@V@T@T@V@V@T@T@V@T@T@V@T@H@V@V@T@V@T@T@T@M@d@l+ K+4@L@V@M@M@T@T@L@N@T@T@T@T@T@T@V@T@T@", -" | `@d@V@V@T@T@T@V@T@T@T@T@T@O@|@`@ .+9@K@V@T@V@T@T@T@T@V@T@T@T@V@V@T@T@T@V@T@T@T@V@T@T@T@T@E@^@%+ z.D+o@T@T@V@T@T@T@T@V@V@T@T@V@V@V@V@T@T@V@T@T@T@V@V@T@T@A@]@ # n+e@O@V@V@T@T@T@T@T@T@V@V@T@T@V@T@V@", -" A j+x@.#+#+#+#X@T@V@V@T@V@T@T@Y@:@,+ 3+_@L@@#T@T@.#.#+#@#.#T@.#+#+#T@V@T@T@T@V@+#+#+#T@##.#.#z@S+ k@%@K@T@V@T@T@T@V@.#T@@#+#X@V@.#.###+#.#+#+#T@##T@V@T@T@D@%@-+ A.I+x@P@##.#+#V@##+#+#+#T@T@T@T@T@T@", -" &.y+B@.#.#.#.#.#.#.#.#####.#.#+#L@Z+ q+d@X@.#.#+#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#+#+#.#.#+#$###v@A+ :+)@M@.#.#.#.#.#.#.#@#+#.#.#+#.#.###.###.#.#.#.#.#.#.#.#G@R+ #+Z+L@%#.#####.###.#.#.#####.#.#.#", -" b.H+A@.#.###.#.#.#.#.###.#.#.#.#.#B@U+ r.F+x@##.#.###.#.#.#.#.#####.#.#.###.#.#.###.#.#.#.#.#.#N@7@g+ &#e@T@.###.#.#.#.#.#####.#.#.#.#.###.#.#.#.###.###.#.#+#x@E+ )+{@P@.#.#.###.#.#.#.#.#.###.#.#", -" v.c@M@$#.#%#.#.#$#.#X@.#$#@#.#%#$###v@s+ T.&@A@.#$#%#.#$#$#.#$#.#.#$#$#+###$#$#.#$#$#.#.#$#$#.#$#T@_@3+ x+x@%###+#$#$#.#.#%#.###$#$###.#$#.#$#.#.#.#$#+#+#$#$#+#s@r+ 7+e@##.###$#.#*#%###.#$#.#+#$#", -" 1 T.;@+#$#$#$#$#$#$#$#.#$#$#*#$#.#$#$###f@a+ {+-@M@.#.#$#$#$#$#$#$#$#$#$#.#$#$#$#$#.#$#.#$#$#$#$#$#$#H@;@~+ S.@@Y@*#.#$#$#$#$#.#.#%#$#.#%#$#$#$#$#$#$#$#$#.#.#$#$#$#V@6@7+ u+n@+#$#$#$#$#$#$#$#$#$#.#$#", -" : *+6@.#$#$#$#$#$#.#.#$#$###%#$#$#$#$#$#T@{@]+ 7+f@X@$#$#$#$#$#$#$#$#.#.#$#$#.#.#$#$#$#$#$#$#$#$#$#$#$#I@&@ *+~@M@$#.#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#%###$#$#.#.#$#$#N@,@~+ H.#@A@$#$#$#$#$#$#$#.#.#$#%#", -" j.(+d@$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#Y@&@ r+o@.#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$###v@x+ 3+8@+#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#L@@@ &+*@M@$#$#$#$#$#$#$#$#$#$#", -" 6 8+p@$#$#$#=#$#$#=#=#$#$#$#$#$#$#$#$#$#$#$#D@-# A.D+G@%#$#$#$#=#=#$#$#=###$#$#;#$#$#=#$#$#$#$#$#$#$#$#=#X@f@># o+p@%#=#$#$#$#$#$#$#$#=#$#$#$#=#=#$#$#=#$#$#$#=#$#$#;#$#x@C+ }+_@X@$#$#=#$#$#$#$#.#$#", -" D p+z@=#=#=#,#,#=#'#)#=#=#=#=#=#=#,#=#=#=#!#%#v@u+ W.;@+#=#=#=#,#,#=#,#,#=#=#'#'#=#=#,#=#=#=#,#=#=#=#=#'#!#+#|@K+ D.H+C@,#=#=#'#=#=#=#=#!#=#=#=#,#)#=#=#)#,#=#=#,#=#=#'#!#.#s@Y+ j+x@.#=#,#,#=#=#=#=#=#", -" &.A+T@~#)#{#,#)#{#,#)#]#]#{#)#)#~#]#)#)#~#,#)#;#n@k+ 3+7@=#)#)#=#)#{#]#)#{#~#~#{#)#)#)#)#)#{#)#{#~#~#{#'#~#]#+#{@ ++*@##,#)#!#)#)#)#)#,#)#~#)#)#)#)#]#)#,#)#)#{#~#)#,#)#]#^#Q@8+ L+I@=#,#]#~#)#{#)#]#", -" k.@@$#/#(#_#]#]#(#]#)#/#/#(#(#]#(#]#)#/#/#{#(#(#:#7@1+ q+D@~#_#)#(#(#/#/#(#(#/#]#]#/#]#]#]#(#<#]#[#/#(#/#]#_#]#N@>@ [+|@.#~#]#]#/#_#_#)#/#/#(#]#)#/#/#(#(#_#_#~#(#]#]#]#~#(#.#8@(+ W.}#@#)#/#/#]#(#(#/#", -" G.,@'#/#_#/#_#_#_#_#/#_#_#_#_#_#_#_#/#_#_#_#_#_#_#%#;@ |#N@~#/#_#/#/#_#_#_#_#/#_#/#_#_#_#/#/#_#/#/#/#_#_#/#_#)#N@O+ g+x@!#_#_#/#_#_#_#/#_#/#_#/#_#_#_#/#_#_#_#_#_#_#_#/#_#/#.#;@ ]+5@'#/#/#_#_#_#_#", -" W.6@~#1#2#_#_#3#4#/#_#3#1#3#_#_#2#_#_#3#3#/#/#_#2#(#5#R+ +;@##(#1#3#_#_#2#_#2#_#_#3#1#_#_#_#/#/#_#2#/#_#1#3#_#/#/#D@.@ J+O@/#_#/#_#_#_#_#3#3#_#_#2#/#_#3#1#2#/#_#1#3#/#_#_#_#_#N@ @ c+n@]#4#_#_#3#1#", -" { )+x@6#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#6#1#O@C+ (+0@{#2#6#2#2#2#2#2#2#2#7#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#/#t@7+ T.!@;#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#1#M@F+ D+T@1#2#2#2#2#", -" <.[+G@8#9#9#9#8#9#0#9#9#8#8#9#9#8#9#0#9#9#9#9#8#9#9#9#a#b#A@p+ n+A@/#c#0#8#8#8#9#9#9#8#9#9#8#9#9#d#9#9#9#9#8#9#9#0#9#9#(#r@ (+l@/#8#9#9#8#8#9#9#9#e#9#9#9#8#8#9#9#9#9#9#9#8#9#9#9#f#3#K@n+ P.*@'#8#8#9#9#", -" %+l@_#g#h#i#i#h#j#c#j#i#9#j#h#0#k#j#i#h#i#j#0#h#h#i#i#j#1#E@7+ L+.#9#j#0#c#8#h#j#i#c#j#j#9#k#i#9#h#k#j#j#j#h#h#j#h#9#c#~#_@ j+Y@2#h#h#9#0#k#j#h#j#h#j#h#h#9#h#j#h#l#k#j#9#h#j#9#i#k#1#t@ ]+e@1#9#i#9#", -" y+T@m#k#j#j#k#j#k#g#g#h#k#k#k#k#g#j#k#h#g#k#k#k#j#j#k#h#1#e@ -@)#j#k#k#j#k#j#k#k#k#g#k#k#i#k#k#h#i#i#g#k#h#g#k#j#k#i#,#`+ E+@#l#k#h#k#k#g#k#j#h#g#k#k#h#k#g#k#k#h#i#h#k#g#h#j#n#j#]#8@ o#Y@2#k#h#", -" %@!#k#p#p#p#p#p#p#p#p#p#p#p#p#p#p#q#n#p#p#p#p#p#p#p#p#q#(#)@ /+l@2#p#p#p#p#p#p#q#n#p#p#p#p#p#p#r#p#p#p#p#p#p#p#p#p#p#c#%#D+ -@!#k#p#p#p#p#p#p#r#p#p#r#p#p#p#p#q#q#p#p#p#p#p#p#n#p#q#]#;@ h+%#c#p#", -" %+8@_#n#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#q#,#R+ e+I@a#p#p#p#p#p#p#p#p#p#p#p#q#n#p#p#p#p#p#p#p#p#p#p#p#r#a#N@l+ {+d@3#q#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#n#q#p#p#p#h#;#S+ W+!#s#", -" a+K@0#t#t#t#u#t#u#t#v#u#t#u#w#v#v#w#t#t#t#t#t#t#t#t#u#w#r#*#C+ M+=#x#t#t#w#v#v#w#u#t#u#t#t#t#t#t#t#t#t#v#w#u#t#w#u#w#w#a#A@ c+K@i#t#t#t#u#t#t#w#v#v#w#t#t#u#w#v#v#w#u#t#t#t#t#t#t#t#s#.#x+ T.y#e#", -" F+;#z#A#B#B#B#B#v#C#B#B#u#B#B#u#u#B#B#B#B#B#B#B#B#B#B#B#q#X@ ,@2#w#D#B#B#u#u#B#B#u#B#B#B#B#B#B#B#B#B#B#B#B#v#B#B#u#u#9#l@ E+$#E#B#B#B#B#B#B#B#B#B#v#B#B#u#u#B#B#u#B#B#B#B#B#B#B#B#n#H@ Q.##", -" *@7#F#G#G#H#G#G#H#I#G#A#J#K#H#J#G#I#G#G#I#I#H#K#G#I#K#I#k#E@ {+o@j#H#I#K#F#J#G#G#F#K#I#H#K#J#G#H#G#G#I#J#K#I#I#G#F#G#L#e#:@ U@M#L#G#J#H#J#G#H#I#G#G#H#K#J#F#G#G#A#G#H#I#J#K#G#I#G#H#h#y@ N#", -" l@h#O#P#Q#R#S#S#R#R#S#S#R#S#S#S#K#S#R#Q#G#S#R#R#O#R#R#G#j#l@ e+T@E#G#P#R#R#R#O#S#R#Q#O#S#S#Q#S#S#R#O#S#S#S#T#R#S#R#U#A#1#Z+ l@q#O#S#Q#S#S#S#T#R#S#Q#R#O#S#R#O#S#S#Q#O#S#R#Q#O#S#R#J#i#5@ ", -" 8+J@z#V#W#W#U#X#Y#W#W#X#U#W#Z#W#R#Z#X#Y#`#W#W#X#W#W#W#Y#G#6#,@ E+{#L#R#X#X#U#S#Z#X#W#X#X#W#W#U#W#X#Y#W#W#Y#`#W#W#X#W#S#J#)#A+ 7+T@t#Y#W#W#W#W#W#W#U#Z#W#R#Z#Y#S#Z#X#W#W#Z#Y#Y#W#W#X#Y#I#6#*@ ", -" x+=#L#Y#Z#X#Z#Z#Z#Z#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z# $I#/#c@ >@e#O# $Z#X#Z#Z#Z#Z#Z#Z#Z#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z# $.$@# F+)#H# $Z#Z#Z#Z#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#+$I#@$-# ", -" %@6#R##$$$%$%$&$%$%$&$#$$$#$%$&$%$%$%$%$%$%$%$#$$$%$%$#$G#{# p@v#*$&$&$&$&$%$%$&$%$%$%$%$%$%$%$%$&$%$%$$$#$%$&$&$#$*$w#=$ -@9#Y#*$%$%$%$$$#$%$&$$$#$&$&$&$%$%$#$$$%$%$%$%$%$%$%$#$G#$# ", -" d@x#*$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$$$J#@# a+@#G##$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$-$;$i@ o@x#*$>$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$#$A#M@ ", -" T@F#,$,$'$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$>$,$,$>$,$,$&$L#D@ E+/#X#>$,$,$,$,$,$,$,$,$,$,$,$,$>$,$,$,$>$,$,$,$,$,$,$,$*$h#{@ 8+@#O#,$)$,$'$,$,$>$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$'$!$$$v#B@ ", -" s+]#~${$]$^$]$^$^$]$^$^$^$)$]$)$)$)$]$)$)$]$)$)$]$^$]$/$>$w#f@ ;@($>$]$]$^$]$)$^$]$)$)$]$)$)$]$^$/$/$]$]$]$]$]$^$]$]$)$~$9#S+ z+_#X#_$^$]$]$]$]$]$^$]$]$]$]$^$)$)$]$)$)$^$/$)$]$]$]$)$>$w#:$ ", -" ^@g#>$<$[$<$[$<$[$[$}$[$^$[$<$<$]$<$<$^$|$<$]$1$[$}$}$}$'$p#;@ v@F#)$<$[$[$}$[$}$}$}$<$<$]$|$1$}$<$|$<$|$}$|$<$[$|$]$]$*$]# >@j#&$]$[$<$<$[$|$<$}$[$<$|$<$2$}$<$<$<$<$<$}$<$[$<$]$|$,$q#%@ ", -" l@B#]$|$3$|$4$3$5$3$3$5$5$|$4$3$|$3$5$3$3$3$3$3$|$|$|$3$!$e# ##Y#<$3$5$6$5$|$3$3$|$4$3$3$3$6$|$3$6$|$|$3$|$3$3$3$5$<$7$^# l@J#8$5$6$|$5$3$|$[$3$3$3$|$5$9$6$4$3$|$5$3$|$5$|$3$0$|$$$2# ", -" N@X#5$a$a$a$a$a$b$b$a$a$a$b$a$3$b$a$a$a$a$a$a$a$a$a$a$0$>$/# y+2#>$c$a$a$a$a$a$a$9$a$a$a$a$a$a$b$a$a$a$b$b$a$d$a$a$d$5$Y#H@ .#X#3$d$a$b$a$a$a$a$a$a$a$a$b$b$a$a$b$3$b$a$a$b$b$a$a$9$&$@$ ", -" v+4#>$a$a$d$a$a$a$d$a$a$a$e$b$a$a$b$a$f$b$a$a$d$a$e$d$a$5$~$%# g$p#]$a$e$b$a$a$d$a$e$a$a$9$a$a$e$d$a$a$a$a$a$a$e$a$a$e$h$F#7@ .@4#>$9$b$e$a$d$a$a$a$a$a$a$a$a$a$a$a$a$a$a$9$a$b$e$d$a$c$ $T@ ", -" Z+x#}$d$i$j$j$k$l$l$j$l$i$j$k$l$j$l$l$j$l$l$m$j$i$j$m$n$a$S#A@ p@T#e$i$l$m$l$o$j$i$j$l$l$o$k$i$j$m$l$l$j$j$l$i$l$m$i$l$5$w# !@u#|$d$i$l$m$m$l$j$k$j$i$i$k$l$l$j$l$j$k$l$l$m$i$o$n$o$b$O#x@ ", -" d@S#d$p$p$q$p$i$p$p$r$r$p$s$p$p$p$p$p$p$p$q$q$p$p$q$p$l$b$O#7@ $#t$j$q$p$p$p$s$p$s$p$p$p$p$i$q$s$u$p$r$r$p$p$q$p$p$p$p$|$j# i@W#d$v$p$s$s$p$p$s$p$i$r$p$p$p$s$p$r$p$p$p$p$p$p$s$s$l$e$w$/@ ", -" +#%$j$x$y$p$p$x$s$p$s$z$s$z$s$r$s$s$x$p$u$q$s$x$z$s$p$s$b$z# 1#}$s$p$q$s$s$s$s$x$p$x$r$p$s$x$x$q$y$s$p$x$z$q$q$s$A$p${$B$ @#$$k$r$z$s$p$x$s$q$p$u$s$q$q$x$q$x$s$p$x$p$r$p$z$s$q$u$4$q# ", -" (#}$z$C$C$C$D$C$C$C$D$E$F$C$C$C$C$F$C$F$C$C$F$F$C$C$F$C$0$c# ^@u#m$z$C$C$C$C$E$D$C$F$C$C$C$E$E$C$G$E$C$G$D$E$C$C$C$C$s$_$$# 2#[$z$C$E$E$D$E$E$C$H$C$E$C$C$C$C$G$C$C$C$C$C$C$E$C$C$x$4$i# ", -" S+t#j$F$I$I$I$I$J$I$J$I$I$I$J$I$J$J$J$I$J$I$I$J$I$I$J$I$F$c$/# o@Z#q$K$L$I$J$J$J$J$J$I$J$I$J$I$J$I$J$J$J$J$J$I$J$I$I$K$x$$$Y@ @w#k$L$J$J$J$I$I$I$J$I$I$F$I$I$I$I$J$J$J$I$I$I$J$I$I$I$F$5$B$ ", -" 6@W#x$J$J$M$M$N$I$O$O$O$O$O$O$O$M$O$O$O$M$M$O$O$J$O$O$O$H$P$.# $#)$Q$O$O$M$M$O$O$O$O$M$O$O$M$M$O$O$J$O$M$O$I$O$O$O$O$I$x$W# i@X#A$O$J$O$M$O$I$O$M$O$O$M$O$O$O$O$O$O$O$O$O$O$O$O$M$O$E${$T@ ", -" +#)$D$O$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$O$R$R$R$M$z$$$z@ e#0$J$R$R$R$R$O$R$R$R$R$R$R$R$R$R$M$S$R$R$R$R$R$R$R$R$S$q$F# .#}$K$R$R$R$R$M$R$R$R$R$R$R$R$R$O$R$R$R$R$R$R$R$R$R$R$M$z$~$ ", -" T$U$R$V$W$V$V$W$X$V$W$V$W$V$W$V$R$V$V$Y$W$V$Z$W$V$V$Z$W$Q$P# @L#u$Y$V$W$V$W$Y$V$W$X$V$V$V$W$V$Y$W$V$W$V$V$W$V$V$V$W$M$i$n# 8#j$X$Y$V$V$Y$V$Y$V$V$V$Y$W$W$V$R$W$V$Y$X$V$V$W$W$V$W$Y$A$K# ", -" w#`$Y$ % %Z$Z$Z$ %V$ %.% % % %Z$ % %V$+% %V$+% % %V$ %V$x$u# d@@%#% %Z$ %V$ % %V$Z$V$ %$%V$ %V$Z$.%V$ % %.% % % % %%%Y$d$&% u#`$X$ % %V$V$ % % % %.%V$ % % %V$ %Z$Z$ % %Z$V$ %V$$%W$q$*% ", -" |@U#K$=%-%=%$%;%>%-%>%>%>%>%>%>%-%;%;%-%>%.%;%-%$%=%-%>% %v$k# V@3$+%,%;%;%-%>%;%>% %>%,%;%;%$%$%-%;%$%-%;%>%$%;%>%-%>%+%5$+# f@%$J$=%=%=%$%;%$%$%$%>%;%>%>%;%;%;%>%-%;%-%>%-%-%$%;%'%Z$k$a# ", -" I@5$W$>%)%!%!%~%!%{%!%]%{%!%!%^%{%^%^%!%!%~%^%!%^%^%!%^%Z$m$/# /%q$ %(%!%{%^%!%!%^%!%(%]%^%!%^%^%!%^%!%!%^%!%!%!%{%!%;%R$)$ +#9$Z$>%_%]%^%^%(%(%^%^%!%!%(%~%!%!%^%{%!%:%^%!%!%^%{%^% %d$<% ", -" _#k$-%:%:%:%[%:%[%~%[%[%[%:%[%:%[%~%:%~%~%:%:%~%:%:%[%~%}%a$ J#K${%[%:%[%[%:%[%~%[%~%~%:%~%:%~%[%:%[%[%[%:%[%~%[%:%!%R$~$ |%k$-%~%~%[%[%[%1%[%[%:%[%~%[%:%1%[%~%[%:%~%~%:%~%:%[%^% %5$ ", -" x#F$^%[%[%[%[%[%2%[%[%2%[%[%2%1%[%2%[%2%[%1%[%[%[%[%[%[%Z$,$ 5@$$W$:%1%[%2%[%[%2%2%[%[%1%2%[%[%[%[%[%[%[%[%2%[%[%2%[%!%I$F# u#F${%1%[%[%[%[%[%[%[%2%[%[%[%2%[%2%2%1%[%[%2%3%[%[%[%~%Y$>$ ", -" *$4%5%6%6%6%6%6%2%6%6%6%6%6%2%6%6%2%6%6%2%6%6%6%6%6%6%7%R$U# V@8%9%5%2%6%6%6%6%2%6%6%2%6%6%6%6%6%6%6%6%6%6%6%2%6%6%5%0%u$k# a%V$5%6%6%6%6%6%6%6%6%6%2%6%6%6%6%2%6%6%6%2%6%6%6%6%6%7%b%T# ", -" A@c%d%5%e%f%6%g%h%6%g%g%i%f%i%g%6%6%f%i%6%g%f%6%g%g%6%j%k%l%m% _#n%o%6%p%g%e%6%g%g%f%6%i%g%6%e%f%6%j%f%6%g%g%g%6%i%q%6%r%s%)# O@t%u%6%i%g%f%6%v%g%f%i%q%6%f%h%f%f%g%g%6%6%i%6%e%g%6%6%w%x%y% ", -" z%A%B%v%C%C%e%D%C%C%e%v%E%F%e%e%G%e%e%e%v%F%e%v%C%F%q%i%H%I%J% K%L%M%g%v%F%F%C%g%f%v%e%v%v%C%v%g%v%v%F%C%i%C%C%f%F%q%N%O%c% P%s%o%i%C%F%e%F%C%v%e%F%C%F%v%Q%F%f%e%e%e%R%g%C%C%e%e%v%S%T%U% ", -" V%W%X%Y%Z%`%`%Z%`%Z%`% &Z%`%Z%`%`%Z%`%Z%`%Z%`%`%`%`%C%Y%.&+& @&#&$&%&Z%Z%`%Z%`%Z%Z%%&`%C%Y%Z%Y%`%`%Y%&&*&`%Y%`%Z%Z%v%=&-& K%;&>&Y%,&Z%Z%Z%C%`%C%Z%`%`%Z%Z%Y%`%Z%Z%Y%Y%Y%`%Z%Z%Z%Y%B%'& ", -" )&!&~&{&]&{&^&]&]&^&^&]&^&^&]&/&]&^&]&/&]&^&^&^&/&]&^&(&_&:& <&[&}&|&^&^&^&]&^&/&/&]&^&]&^&]&^&^&^&/&]&^&/&]&^&^&^&]&1&2&3& 4&5&6&(&/&^&^&]&]&]&^&^&/&^&^&]&^&^&]&]&^&/&^&]&]&^&^&(&_&7& ", -" 8&9&_&0&]&/&]&]&]&a&a&/&a&a&]&]&]&a&a&]&]&a&a&]&]&/&]&]&(&b&c& d&e&f&]&a&]&]&a&/&/&]&]&a&a&/&a&a&/&/&]&]&]&]&a&a&]&/&a&g&h&i& j&k&l&m&]&a&]&]&]&]&]&]&a&a&]&]&a&a&]&]&]&a&a&]&]&a&]&]&n&o&p& ", -" q&r&f&]&a&a&a&s&a&a&t&a&a&a&a&a&a&a&a&a&]&a&a&a&a&a&a&a&(&u&v& i&w&n&]&a&a&a&a&]&a&a&a&a&a&]&a&a&a&a&a&a&t&a&a&a&t&a&x&y&z& A&B&f&]&/&a&a&a&a&a&a&t&a&C&a&a&a&a&/&a&a&C&a&a&D&a&a&]&n&E&F& ", -" G&H&I&t&J&K&t&t&K&K&t&t&J&L&M&K&J&s&L&J&t&M&L&L&t&t&t&N&O&P&Q& R&S&O&J&K&K&K&K&J&L&M&t&s&K&N&L&L&t&T&K&t&t&t&K&N&K&K&U&V&W& X&Y&Z&N&K&J&M&t&L&L&t&t&K&t&J&N&K&K&K&L&K&t&N&K&L&J&t&t&Z&`& * ", -" .*+*@*#*K&#*K&#*J&$*%*J&#*$*#*J&#*$*#*%*$*$*$*J&K&#*J&$*&*** =*-*J&#*#*#*#*#*$*;*%*J&#*#*#*$*>*J&#*$*J&$*J&#*#*J&J&,*'*)* !*~*{*J&#*#*%*J&J&#*$*K&J&#*J&J&#*#*$*L&#*J&J&J&J&#*$*]*^*/* ", -" (*_*:*$*<*[*[*}*[*$*$*}*<*$*$*<*$*}*$*$*$*[*}*#*<*#*[*:*|*1* 2*/*3*:*[*$*#*<*$*$*[*:*[*[*}*#*<*[*$*}*:*[*$*<*[*:*}*4*%*5*6* 7*8*:*$*<*$*}*$*<*[*[*}*[*#*:*<*$*$*[*<*$*[*}*#*}*$*9*%*|*0* ", -" a*b*c*:*d*<*e*f*<*<*<*f*d*e*<*f*e*g*<*<*<*d*f*<*f*<*<*f*:*h*i* j*k*l*e*<*<*d*<*<*d*g*<*<*d*<*f*d*<*<*g*<*<*d*<*g*f*d*<*:*+*m* n*o*c*p*d*<*d*<*<*<*<*f*<*<*g*f*<*<*g*f*e*<*f*<*g*<*<*<*q*_*r* ", -" s*t*u*f*v*v*w*x*x*x*w*x*v*w*w*v*x*f*y*y*x*v*w*y*v*v*y*w*z*A*B* C*D*E*x*w*x*v*x*f*x*x*y*x*w*w*x*y*y*v*F*w*w*x*v*w*x*v*w*G*t* H*I*J*f*x*x*w*w*x*w*w*F*v*v*w*x*v*d*w*v*w*K*w*w*x*x*w*L*M*D*N* ", -" ). O*P*z*v*Q*R*v*F*w*x*S*v*x*Q*S*S*v*T*Q*v*x*v*Q*x*T*U*V*W*X*Y*Z* `* =g*x*U*x*x*.=Q*S*v*Q*x*S*F*F*S*v*S*v*Q*x*y*x*U*v*F*W*G*+= @=#=$=F*Q*v*S*U*x*Q*S*v*w*Q*.=x*x*U*S*v*Q*v*S*x*v*v*U*%=&=*=== ", -" [.-= ;=>=,=S*'=S*Q*S*'=)=U*S*)=S*)=U*'=)=S*'=U*!=S*)='=S*S*v*~={= ]=^=/='=Q*S*U*S*'=S*'=S*)=Q*Q*)=U*)=S*'=Q*S*'=!=S*Q*)=v*(=_= :=<=[='=}=)='=S*!=S*Q*Q*)=Q*S*S*!=S*!=!=Q*!=U*!=S*Q*'=|=1=2= ", -" '+3= 4=5=}=!=6=7=6=6=6=7=7=6='=7=!=6='=8=7='='=7=7=9='=6=6=0=a=b= c=d=e=6=f=7=!=!=6=!=7='=g=6=h=!='=!=6='=6=6=h=7=7=7=6=!=i=j=k= l=m=!=6='=6=7='=7=h=!=7=7=7='=6=!=n=6=o=n=6=6='=!=6=p=.=q=r= ", -" C+s=l= t=u=v=w=x=y=6=7=x=z=7=x=x=A=p=z=B=w=A=x=z=C=D=x=x=A=x=7=E=F=G= H=I=J=w=x=6=x=A=7=A=z=K=w=w=x=p=A=x=7=x=x=6=x=w=L=7=x=M=N=O=P= Q=R=S=z=T=B=x=6=C=x=6=x=z=x=6=w=w=T=x=z=K=x=A=z=x=x=A=w=/=U=V= ", -" ]@W=X=Y= Z=`= -M=.-A=A=+-A=A=+-@-.-M=+-#-$-.-.-+-$-$-@-+-.-A=+-M=%-&-*- =---E=A=A=.-.-A=.-.-+-$-.-.-M=.-+-;-+-y=A=+-+-A=M=.-.-w=>-,- '-)-!-M=+-+-+-~-y=M=+-+-A=A=+-@-+-+-.-+-+-@-.-+-+-{-.-]-^-&-/- ", -" s@(-_-:-<- [-}-|-.-.-1-1-.-1-1-.-1-.-.-.-.-.-@-.-1-.-.-1-.-.-1-1-.-2-3- 4-5-6-.-7-1-.-@-.-.-.-.-.-7-.-1-.-1-.-1-1-.-.-8-9-1-.-+-0-a- b-c-d-.-1-1-1-.-@-1-.-1-.-7-.-7-.-@-.-.-.-.-1-.-7-.-1-@-2-e- ", -" f-g-h-6-i-j-k- l-m-n-1-1-8-o-8-8-p-p-p-p-p-p-p-p-q-p-p-8-1-1-p-1-8-o-@-r-s- t-u-v-$-8-p-p-p-p-p-p-p-1-p-q-o-.-1-1-1-1-p-1-1-o-p-p-w-q-x-y- z-A-9-o-1-1-1-1-1-p-p-q-1-p-p-p-p-p-p-p-o-o-8-p-.-1-1-@-r-B- ", -" 6.C-D-E-F-G-H- I-J-K-F-F-F-F-F-F-F-F-F-L-F-F-M-F-F-M-F-F-M-F-F-F-F-F-N-O-P- Q-R-S-w-F-F-F-M-F-F-M-F-F-M-M-F-M-F-F-F-F-F-F-F-F-F-F-M-N-T-U- V-W-w-F-F-F-F-F-F-F-F-F-F-F-F-M-F-F-F-M-F-M-M-F-F-M-F-K-X-Y- ", -" Y.Z-`- ; ;.;+;@; #;$;%;&;*;M-=; ; ; ;=;=; ;-;=; ;=; ;M- ; ; ;M- ; ;M- ; ;E-;;>; ,;';); ; ; ; ; ;M- ; ;=; ;M- ; ;M- ;!; ;L- ; ; ; ;=; ;~;{;];C- ^;/;(;&;_; ;M-!;=;-; ; ; ; ; ; ; ;M-M- ; ; ;M- ; ; ;M-!;:;<;[; ", -" B+};|;1;1;2;_;3;4; 5;6;7;!; ;1;!;!;!;!;=;!;8;=;!;1;!; ;!;1;!;!;1;!; ;!;1;_;9;0;a; };b;c;1; ;!;d;1; ;1;1;!;!;!;1;!;1;8; ;!;1;!;1;!; ;!;8; ;e;f; g;h;i;j;k;1;8;1;1;!;!;1;d; ;!;1;l;M-!;!;1;1;1;1;!;!;l;_;i;m;n; ", -" q@o;p;8;q;r;s;t;u;v; w;x;y;z;A;z;s;8;r;r;8;8;s;r;l;s;r;l;r;s;B;l;8;r;8;A;r;C;D;E; F;G;_;s;B;8;l;s;l;r;s;s;8;H;B;A;8;r;s;l;s;l;s;s;B;8;I;J;K;L; M;N;O;P;P;8;s;l;z;r;s;8;s;B;8;l;s;8;s;r;r;8;A;s;s;l;s;l;Q;R; ", -" N+S;T;U;V;W;W;W;X;Y;Z; `; >.>+>@>W;W;+>+>W;r;U;+>W;W;#>+>V;W;W;+>W;W;W;+>W;W;W;$>%> &>*>=>->W;W;q;U;W;W;#>#>W;W;W;@>W;W;+>@>W;W;W;U;W;W;q;W;J;;>>> ,>'>)>!>W;W;+>U;+>W;U;W;W;W;s;W;W;W;V;V;W;+>W;W;+>W;W;->~>*> ", -" |@{>]>^>/>/>(>^>_>:><> [>}>|>1>/>_>/>(>^>2>#>^>1>/>/>2>(>/>/>^>/>/>3>^>/>/>/>4>5>6> 7>8>9>/>1>_>V;1>/>_>/>1>_>/>^>^>_>^>^>(>(>/>/>^>^>_>(>^>0>a>b> c>d>e>|>^>/>^>/>/>2>/>_>3>^>1>#>^>f>/>(>^>/>/>(>^>/>1>^>4>g>h> ", -" i>j>k>1>1>^>^>1>^>l>m>n> o>p>q>r>^>^>^>^>1>1>1>1>^>1>^>^>1>1>^>1>^>^>1>1>^>1>^>3>s>t>u> v>w>x>1>^>1>^>1>1>^>^>^>1>^>1>^>^>1>^>^>1>^>1>^>^>^>^>(>y>z>A> B>C>:>r>^>1>^>^>(>^>2>^>^>2>1>^>1>^>^>1>^>1>^>1>^>^>1>^>D>E>*$ ", -" F>G>H>I>J>J>I>J>K>J>/>L>M> N>O>P>^>3>^>K>^>I>I>1>I>K>I>J>J>I>K>^>I>J>^>K>K>^>3>I>3>Q>G>R> S>T>U>J>^>J>J>J>J>I>J>I>1>K>J>1>V>J>2>1>K>I>^>J>^>J>K>^>W>X> R>Y>D>J>^>^>I>^>(>I>^>^>K>I>^>I>J>K>J>K>I>^>Z>J>^>^>J>3>`> ,., ", -" O.+,@,#,$,%,%,&,*,=,-,;,>,,,', ),!,>,%,%,*,*,*,$,~,*,%,$,$,%,;,*,*,&,%,%,$,*,*,%,%,-,J>{,], ^,/,(,-,*,;,%,;,*,%,~,-,$,=,;,%,%,;,%,-,*,$,*,~,~,%,*,J>_,:, <,,,[,-,%,~,*,%,*,~,*,%,~,%,*,%,%,*,%,%,},-,I>*,%,$,~,|,{,1, ", -" 2,3,4,5,6,5,7,5,8,5,5,6,9,0,a,b, c,d,#,5,e,8,e,6,7,e,5,e,e,5,5,8,e,8,9,5,6,e,8,5,e,8,e,f,g,h, i,j,k,l,8,7,7,7,e,5,7,m,e,5,e,5,e,7,7,e,e,6,8,9,6,7,8,5,n,4,o, p,q,r,5,e,e,7,8,5,e,8,s,l,e,5,5,e,7,5,5,8,5,8,7,6,6,7,f,t,u, ", -" v,w,x,y,z,y,z,z,A,z,9,z,z,B,C,D, E,F,G,H,I,z,J,z,7,z,y,K,L,z,z,A,z,z,B,L,z,y,z,A,L,z,y,I,f,M,N, O,P,Q,y,y,z,z,z,z,y,L,z,z,J,z,J,z,z,z,y,z,z,9,y,y,A,y,L,R,S,T, U,V,G,B,A,y,z,z,9,z,y,L,y,y,z,z,z,z,L,y,z,z,J,z,z,y,z,I,W,X,Y, ", -" -#Z,`,A, 'z, ' ' ' '.' ' '+'z,@'#' $'%'&'*' 'z, 'z, 'A,='+' ' ' ' ' 'z, ' 'A, ' '+' 'A, 'z,-';'>' ,''')'z, ' ' ' ' ' ' ' 'z, 'z, ' ' 'A, ' 'z,A,A, 'A, '.'!'~' {']'^'A,A, ' '*' 'A, 'A,A, ' ' ' ' ' ' ' 'z, ' 'A, ' 'z,/'('_' ", -" [@:'<'['}'|'|'}'}'|'1'}'}'|'2'3'4'5' 6'7'8'|'|'}'|'}'|'}'}'}'}'}'}'|'1'}'|'|'}'9'}'}'|'|'|'|'8'0'a' b'c'd'}'}'|'}'|'}'|'}'1'|'}'|'9'}'|'|'|'|'}'}'|'}'}'}'e'f'g' h'i'j'|'}'}'}'}'}'|'|'|'}'}'}'|'|'}'|'}'1'}'|'}'9'}'|'2'k'l' ", -" m'n'8'1'1'1'1'}'1'}'|'1'1'1'1'1'o'p'q' r's't'|'1'|'1'1'1'1'1'1'}'1'1'|'1'1'1'1'1'1'u'v'w'}'1'x'y'z' A'B'9'1'1'w'}'1'w'}'}'u'u'1'1'u'1'1'C'}'1'1'1'1'1'1'}'D'E'F' G'H'I'w'1'}'1'|'1'}'w'1'1'1'1'1'['u'}'|'1'1'1'1'1'1'1'e'J'K'", -" L'M'N'O'P'1'P'Q'O'P'1'R'O'u'Q'S'T'U'V'W' X'Y'Z'Q'P'Q'`'O'Q'R'O'P'Q'Q'u'P'Q'u'P'Q'P'1'P'P'P'Q'Q'x' ).) +)@)k'P'Q'O'`'P'Q'Q'P'O'`'P'Q'Q'1'P'#)u'Q'1'Q'P'Q'R'P'$)%)H'&) *)B'x'$)u'P'Q'O'P'=)u'Q'P'P'P'`'-)Q'u'O'Q'u'P'Q'w'P'P';)>)", -" ,)')))!)~)~){)])^)/)(){)_)_)])/)~){):)<) [)})|){)1)~)/)1)2)~)_){)/)/)1){)3)/)/)~){)4){)3)1)~){)1)5)6)7) 8)9)N'{)_)1){)/)0){)1)~)/)a)/)$){)1)/)~){)!){)$)1)/)/)1)b)c)d) e)f):){)]){)3)1){){)1)g)~)1)3)1)1)0)1)1)/)]){){)a)1)/)!)h)", -" i)j)k)l)m)0)n)_)o)p)q)1)r)p)g)m)m)n){)s)t) u)v)w)^)q)p)r)^)x)r)q)!)p)m)1)m)l)p)1)m)q)n)l)q)q)p)p)_)5)y)z) A)y)B)p)m)1)p)l)1)/)^)p)/)^)q)p)r)m)^)p)p)m)^)r)m)m)p)n)C)D) E)F)G)m)l)l)H)1)l)p)p)q)p)m)1)H)l)/){)!)o)^)^)q)p)p)p)/)", -" I)J)K)n)L)M)p)M)p)M)N)!)O)N)N)p)M)M)N)M)P)Q)R) S)T)U)M)M)M)N)V)N)p)M)M)o)O)M)M)N)O)M)M)N)M)N)M)N)N)M)p)W)X)Y) Z)`)P)p)p)N)M)p)V)M)M)p)N)N)N)M)M)M)M)M)M)M) !O)N)N)M)^).!+! @!#!$!p)M)M)M)M)M)M)M)M)O)m)N)M)p)p)M)M)p)N)M)N)N)M)M)", -" %!&!*!=!-!;!;!=!=!=!=!=!=!=!=!=!=!M)=!=!=!k)>!,! '!)!!!=!=!=!=!=!;!=!=!=!=!=!=!=!=!L)M)=!=!=!N)=!=!=!=!N)~!{! ]!^!/!=!=!;!=!=!N);!=!=!=!M);!;!M)=!=!=!=!=!=!=!=!=!=!(!_!:! ~,~'~'~)~!~~~'~'~O!'~)~)~)~{~%~{~'~'~Q!'~]~%~^~/~(~ _~:~<~{~%~{~)~)~R!~~)~'~[~'~)~{~{~O!'~}~O!)~'~'~O!{~~~'~|~1~ T!2~P!'~3~)~[~!~R!{~~~)~)~~~4~R!{~)~{~{~}~{~)~'~O!'~)~5~6~7~ 8~9~^~}~)~'~O!)~O!R!!~)~!~{~)~'~{~%~)~)~!~#~4~", -" 0~1~a~b~c~d~c~e~f~e~e~g~e~e~c~c~f~c~e~e~c~e~[~b~e~h~i~j~ k~l~m~g~c~e~e~e~e~e~c~c~f~c~n~g~c~c~o~e~b~e~p~e~c~d~e~o~q~r~ s~t~u~{~p~n~c~f~c~c~e~b~c~v~f~e~f~d~c~c~d~w~d~e~e~b~f~x~y~z~A~ B~C~D~n~c~e~e~e~e~e~d~e~c~e~c~c~f~f~o~e~c~f~", -" E~F~G~H~I~I~J~I~I~J~I~I~I~I~I~I~I~I~c~c~I~I~f~I~I~K~L~M~ N~O~P~I~I~I~J~I~J~J~I~J~I~c~f~I~I~Q~c~I~I~I~I~J~I~J~I~K~R~S~ T~U~,~J~J~I~I~I~I~c~Q~I~I~I~I~I~J~I~I~I~I~J~I~I~I~I~I~I~D~V~W~ t~X~K~I~I~I~I~I~J~I~I~I~J~I~I~I~I~Q~f~J~J~", -" Y~Z~`~J~ { { { { { { {I~ { { { { { { { { {I~ { {I~ { {.{+{@{ #{${%{J~ { {I~ { { { { { { { {c~ { { {I~ { { { { { {H~ {d~&{*{ ={-{m~ { { {J~ { {J~H~ { {I~ { { { { { {I~ { { { { { { {;{>{ ,{'{){.{ { { { {!{~{ { { { { {I~ { { {c~ {", -" {{]{^{/{!{/{/{!{/{!{/{/{!{!{!{!{!{/{!{!{/{/{!{!{!{!{/{({_{:{ <{[{}{/{/{!{!{/{/{/{!{!{/{/{/{!{!{!{!{!{!{!{!{!{/{/{!{|{1{2{3{ 4{5{^{/{!{!{/{!{/{!{/{!{/{!{/{/{!{!{/{!{/{!{!{!{!{/{!{|{6{7{ 8{9{0{|{!{!{!{!{!{/{/{!{!{/{!{!{/{/{!{!{", -" a{b{c{d{e{f{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{({g{h{ i{j{k{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{f{d{d{d{d{d{d{d{d{d{l{m{ n{o{|{d{d{d{d{d{d{d{d{d{d{f{d{d{d{d{d{d{d{d{d{d{d{d{d{p{q{r{ s{t{({u{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{", -" v{w{x{y{y{y{y{y{y{z{y{y{y{y{A{y{y{A{y{y{B{z{y{y{y{y{y{C{D{E{F{ G{H{I{y{y{y{y{y{J{y{J{A{y{K{y{y{y{y{y{y{y{y{y{z{y{y{y{z{L{M{ N{O{P{Q{y{y{y{z{C{y{y{y{y{y{y{y{y{y{z{y{y{y{y{A{y{y{y{z{R{S{T{ U{V{R{J{J{y{y{A{y{y{y{A{y{y{J{z{y{C{", -" W{X{Y{Z{K{K{`{ ]Z{K{`{K{`{.]`{+]Z{`{Z{@].]K{Z{#]K{ ] ]@]$]%] &]*]=]C{`{K{-];]`{-]-]K{`{K{@]K{-]`{K{`{K{@]`{K{#]K{`{Z{C{>],] '])]x{@]-]`{;]K{.]K{#]@]K{ ]C{`{`{.]+]K{;]-]K{@].]`{`{K{!]~]{] ]]^]/]C{-]`{+]Z{`{K{-]@]K{-]`{-].]K{", -" (]_]:]<]<][]<]<]+]<]<]}]|][]-]-]<]-]@]<]<]+]<]<]<][]<]Z{1]2] 3]4]5]6]<]Z{+]<]7]+]<][]K{<]<]-]}]<][]<]<][]-]<]<][]Z{8]C{9]0] a]b]c]@][]<]@]+]<]<]<]<][]<]<]<]<]+]<]+]-]<]<]|][]<]@]|]d]e] f]g]h]-][][]Z{[]<]-]}]<]@]<]<]+]K{", -" i]j]k]l]m]m]m]m]m]n]m]n]m]n]n]n]n]n]n]m]m]m]m]m]n]m]m]m]l]o]p] q]r]s]n]n]m]m]m]m]n]m][]m]m]n]n]n]n]m]m]m]n]m]m]m]n]n]t]u]r]v] w]x]y]m]m]n]m]n]n]m]m]m]m]n]m]m]z]m]m]n]n]m]m]m]m]n]m]n]A]B] C]D]E]n]n][]n]m]n]n]n]F]n]m]m]n]", -" G]H]I]J]K]K]K]L]K]K]K]m]K]K]K]K]K]K]K]K]K]K]K]K]K]K]K]M]N]O]P] Q]R]N]S]K]m]K]K]K]K]K]K]K]K]K]K]K]K]K]K]L]K]K]K]K]n]K]J]T]U] V]W]X]K]K]K]K]K]K]K]K]K]K]K]K]L]K]K]K]n]K]K]K]K]K]K]K]n]W]Y] Z]`] ^K]L]K]K]K]m]K]K]K]K]K]K]", -" .^+^@^K]L]K]m]L]L]L]L]L]L]L]L]L]K]K]L]K]L]L]L]L]L]L]n]M]#^$^%^ &^*^=^L]L]L]L]K]L]m]L]L]K]L]L]L]K]L]L]m]-^L]L]L]L]L];^K]>^j] ,^'^)^!^-^-^L]L]L]L]L]K]L]L]K]K]L]L]L]L]L]L]L]L]K]~^L]L]{^]^^^ /^(^S]K]L]L]L]L]L]L]L]K]K]K]", -" _^:^<^[^[^}^[^|^1^|^1^L]|^1^1^}^|^|^L]1^2^|^1^1^|^}^[^1^y]3^ 4^5^6^L]1^2^1^1^|^L]1^L][^1^2^|^1^[^|^7^[^|^1^|^1^L]1^1^M]8^9^ 0^a^b^c^1^2^|^2^1^c^1^[^|^[^}^[^1^|^1^1^;^|^1^1^7^2^|^c^b^d^e^ f^g^h^i^j^[^2^|^[^L]1^1^1^c^", -" k^l^m^n^o^o^p^p^q^r^r^o^q^p^r^o^o^o^s^o^o^r^o^p^o^o^p^t^u^v^ w^x^y^[^r^p^r^o^o^r^o^o^[^o^o^o^o^p^o^o^p^p^p^q^r^p^r^p^i^z^A^ B^C^D^t^o^o^r^s^E^o^o^p^p^o^o^p^p^r^q^r^o^F^o^q^o^o^r^t^y^G^ H^I^J^t^o^o^r^o^o^t^p^p^o^", -" K^L^M^p^F^o^p^p^p^p^n^N^o^N^p^p^p^o^O^p^P^o^p^p^o^o^p^p^F^Q^R^ S^T^U^p^N^o^N^o^p^p^N^O^p^N^p^o^p^t^o^p^p^p^p^p^V^o^O^t^W^X^Y^ Z^`^F^p^p^o^O^ /p^o^p^p^o^o^./p^o^p^O^N^./o^p^p^p^o^ /n^+/L^ @/#/$/p^./%/o^o^ /p^N^o^", -" H^&/*/n^O^n^n^ /././=/ /=/ / /=/n^-/ /;/>/ /n^n^O^n^O^n^,/'/)/ !/~/{/-/ /=/ / / /;/=/./=/ /=/O^N^O^O^ /O^./ /=/./=/./ /]/^/ //(/p^-/ /-/_/./O^O^n^n^n^ /=/ / /_/=/=/./././=/ /:///=/ /", -" 4/5/6/7/8/9/8/8/-/-/9/0/a/>/0/7/9/7/9/7/7/7/8/7/8/b/c/9/d/e/f/ g/h/_/8/0/-/./i/0/b/7/9/7/0/7/9/8/7/9/8/9/8/9/-/0/-/_/-/j/k/ l/m/n/>/7/9/8/7/7/7/8/9/0/-/7/9/8/-/-/7/7/ /b/0/7/o/c/9/p/q/r/ s/h/t/7/8/9/-/9/7/-/", -" u/v/t/w/x/y/0/0/y/y/y/z/y/y/y/0/0/x/A/7/y/0/0/y/x/z/0/9/B/C/ D/E/F/z/x/0/z/x/y/G/7/y/x/0/y/z/0/y/y/y/0/0/H/y/y/0/H/I/J/K/L/ M/N/O/0/-/y/y/0/y/x/0/0/0/y/z/0/0/y/x/z/0/x/y/z/9/y/x/z/P/Q/R/ S/E/n/T/0/0/y/y/H/0/", -" U/V/W/x/x/x/X/x/x/Y/X/x/X/Z/x/`/ (x/x/`/w/`/x/x/x/x/X/.(V/+( @(#($(%(Z/x/`/X/X/`/X/y/x/x/w/x/`/x/y/x/X/`/x/x/X/x/&(Z/*(5/=( -(;(>(`/X/x/x/x/y/w/`/x/`/`/`/X/x/X/Z/`/`/X/X/`/X/x/x/,('()( !(~(P/.(Z/x/x/Z/X/", -" {(](^(Z//(((((_(((:(((_(((:(((_(:(<([(((Z/_(_(((<(((((}(I/|(1( 2(3(4(((((_(Z/((_(((X/_(_(Z/((_(((Z/((((_(((:(((((((:(((5(6( 7(8(%(_(X/_(9(((Z/[(((_(((((((((:(:(((_(((Z/[(_(X/_(0(%(a(b( c(d(e(((((((X/((", -" f(g(h(i(j([(k([(_([(l(m(_(_(n(_(9(n([(_(n(o([(i([(n(p(o(q(r(s( t(u(v(l(n(_(w(w(_([(n([(_([([([(p([([(x(n(_([([(y((([(w(z(A( D/B(z(_(9([(i(_(_(k([(k(n([([([(_(_(_(k(_([(k([([(n(w([(C(D(E( F(G((([(l(<([(", -" H(I(J(K(L(L(L(M(N(n(p(O(p(M(P(L(Q(L(i(N(i(i(L(L(L(L(L(N(R(S( T(U(n(L(O(K(V(N(O(W(i(i(W(p(L(L(L(L(L(L(L(V(p(w(X(K(L(Y(Z(`( _._+_@_P(k(i(i(L(i(L(L(L(L(L(L(V(L(L(L(V(K(M(O(N(p(p(M(#_$_%_ &_*_n(k(M(X(", -" =_-_Y(;_;_>_,_,_P('_)_;_;_,_>_,_;_O(!_,_;_;_;_;_;_,_,_>_~_{_ ]_^_/_P((_;_,_,_O(;_,_O(__,_;_;_,_;_,_O('_;_'_@_,_;_,_,_k(:_<_ [_}_|_(_,_;_>_,_,_;_;_,_,_;_>_,_;_O(,_>_;_)_1_,_,_;_2_,_3_4_5_ 6_7_8_L(,_;_", -" 9_0_a_b_!_1_)_c_1_,_b_)_,_!_c_1_,_b_d_(_!_,_)_b_,_1_e_(_f_g_ h_4_i_a_b_e_,_,_c_d_>_!_b_1_!_)_,_!_b_1_,_c_d_1_!_)_)_)_j_k_l_ m_n_o_p_1_e_b_e_!_)_1_e_c_1_1_p_b_>_)_p_,_)_b_e_1_e_c_q_r_s_ t_u_v_N(!_", -" w_x_y_z_z_A_!_B_b_c_c_C_p_b_b_b_b_b_b_D_B_c_b_E_F_C_!_z_G_H_I_ J_K_L_M_B_b_b_b_b_p_b_p_b_E_C_c_b_F_B_b_c_A_N_c_B_b_p_p_O_P_ T(Q_R_S_b_b_b_N_C_C_c_F_B_C_c_C_b_E_B_B_p_b_b_b_b_b_p_p_T_U_ V_W_X_E_", -" Y_Z_`_c_ :.:b_+:@:S_@:#:.:@:$:%:&:@:F_z_+:S_F_E_*:+:!_=:-:;:>: ,:':):!:~:.:$:%:.:E_.:+:+:z_F_#:c_@:@:c_E_ :S_@:.:.:%:#:{:{_ ]:^:/:(:_:_:+:+:#:F_z_c_F_@:=:+:@:.:$:::.:S_@:+:~:z_+:#:<:[:,: }:|:1:", -" 2:3:4:5:6:7:8:9:0:a:b:c:d:e:8:c:f:0:g:0:h:d:e:i:6:7:j:k:l:m: n:o:e:p:q:r:s:t:u:j:0:6:v:w:x:r:9:9:e:r:5:v:y:z:q:r:b:A:B:C: D:E:F:G:g:v:d:f:b:v:H:v:5:I:7:g:d:J:p:K:r:r:7:8:u:v:x:u:L:M:N: O:P:Q:", -" R:S:T:U:U:V:W:V:8:X:5:V:W:W:Y:5:5:V:V:Z:`:V:V:V:U:U:V: <.<+< @<#<$<,[,[L},},},}&}s[&}'}V[T['})}'}&},}'},}'},})}&}&}'}&}&}C[!}~} {}]},}&}&}'})})}&}'}R[)}&},}'}U[,},}'}&}D[Q['}T[V['})},}^}/} (}_}:}<}[}R['}U['}&}'}'}}}&}&}Q[s[,},}&}&}[})},}'}W[,}&}|}1}2} ", -" 3}4}5}6})}7}[}8}7})})}7}V[7}[}9}T[U[7}[}Q['}6})}7}0}[}a}b}c} d}e}f}g}9}9},}V['}0}&}}}9}8}}})}[}9})}8})}7}7})}9}9}&}&}h}i}j} k}l}m}6})}R[,}8}9}6})}9}7}8}9}[}7})}9})}9}}}'}6})}R['}8}n};}o} ", -" p}q},}9}r}9}8}s}t}8}7}8}t}8}t}u}t}s}8},}8}v}U[&}s}9}9}w}x}y} z}A}B}C}8}D}t}t}s}u}t}s}r},}'}s}8},}v}u}7}t}s}u}7}7}t}0}E}F}G} H}I}J}t}7}s}r}8}T[t}s})}s}u})}u}s}s}7}8}u}s}s}t}t}s}r}a}K}L} ", -" M}N}O}s}r}9}8}r}s}u}s}P}Q}t}R}R}s}Q}S}s}s}T}U}v}T}8}r}r}V}W}X} Y}Z}`}u}P} |t}P}S}r}v}S}.|t}Q}r}r}v}8}7}r}r}8}t}R}S}t}r}+|@|#| $|%|Q}v}r}P}R}U}v}s}s}r}u}U[s}r}r}u}v} |r}&| |v}r}.|S}s}*|=| ", -" -|;|>|S}v} |S}.|S}Q}R} |Q}T}P},|v}P}S},|P}'|)|P}S}'|)|P}!|~|{| ]|^|/|T}.|S}&|P}S}P}T}P},|P}P}'| |v}S})|Q} |Q}P} |P}T}R}(|_| :|<|R}S}v}P} |.|R},|,|Q}R}'|Q}.|S}P}S}S}T}U}P}S}T}T} |[|}||| ", -" 1|2|3| |4|5|4|6|)|7|8|4|,|7|8| |)|S}9|4|4|7|'| |9|9| |7|0|a| b|c|d|8|9|,|7|4|6|)|.|9|)|'|7|5|)|e|e|)|9|'|7|f|e|,|7|5|g|h| i|j|+|e|S}7|7|e|)|)|9|)|7|9|7|8|4|5|4|8|'|'|5|f|'|,|)|4|k|l|m| ", -" n|o|p|6|4|6|9|4|6|e|'|q|4|R}4|r|5|9|r|4|5|9|9|9|5|4|4|7|s|t| u|v|w|4|'|6|q| |7|q|7|4|q|q|)|4|e|9|4|4|e|4|9|9|)|8|8|P}x|y|z| A|B|C|D|8|4|r|f|)|4|7|'|9|9|6|6|9|9|5|5|r| | |q|9|'|8|E|F|G|H| ", -" I|J|K|L|M|M|M|M|M|r|N|O|9|r|O|M|M|M|r|M|M|E|P|M|q|O|Q|R|S|T| U|V|W|E|r|M|8|8|M|M|M|O|r|M|O|q|Q|O|O|M|M|O|M|r|M|M|8|9|X|Y|Z| `| 1.1q|O|Q|q|Q|O|q|r|+1O|M|M|M|M|M|r|O|r|8|O|M|M|M|L|N|@1#1 ", -" $1%1&1L|O|O|r|r|+1q|8|O|+1e|q|O|M|q|M|Q|r|q|Q|+1E|Q|M|r|*1=1-1 ;1>1,1'|r|+1q|5|O|O|q|r|O|M|8|O|Q|M|O|r|r|O|M|6|r|Q|8|e|'1)1 !1~1{1O|M|q|Q|Q|r|M|Q|M|O|r|r|M|+19|9|O|O|7|M|Q|M|q|Q|*1]1^1 ", -" /1(1_1+1:1+1+1P|P|:1+1+1:1:1Q|P|+1Q|M|Q|O|O|M|Q|P|+1Q|<1[1}1|1 112131P|Q|P|P|Q|P|+1:1Q|+1Q|Q|O|Q|:1P|Q|P|:1:1P|+1:1:1415161 71819141P|Q|Q|Q|+1O|Q|Q|P|:1:1+1P|:1:1Q|P|+1P|+1P|P|Q|Q|01a1b1 ", -" c1d1[1P|:1:1+1P|e1P|M|P|f1:1:1f1e1f1:1f1f1f1f1f1f1:1+1g1h1i1 j1k1l1P|P|f1:1:1m1:1:1f1f1f1f1:1P|:1:1P|Q|f1:1O|+1f1<1<1n1o1 p1q1r1e1f1e1f1f1f1e1f1P|f1:1P|Q|:1e1:1Q|f1:1:1e1e1:1e1s1t1u1v1 ", -" w1x1y1m1m1m1m1z1z1f1m1A1m1f1e1m1z1e1A1A1z1m1A1A1m1z1z1B1C1D1 E1F1G1H1m1z1m1m1e1m1m1m1z1A1A1m1A1m1m1m1e1m1A1e1e1A1z1e1I1J1K1 L1M1N1e1A1A1e1A1A1e1m1m1m1m1m1m1A1m1m1z1m1m1e1e1m1m1m1z1O1P1Q1 "}; +/* XPM */ +static char * C:\Users\Christian\Documents\Informatik_Studium\ico_256t_xpm[] = { +"256 256 2750 2", +" c None", +". c #000000", +"+ c #00100E", +"@ c #001312", +"# c #001413", +"$ c #001C1B", +"% c #001A19", +"& c #001515", +"* c #002120", +"= c #002221", +"- c #001918", +"; c #002525", +"> c #002927", +", c #002323", +"' c #000F0E", +") c #001C1A", +"! c #002726", +"~ c #002C2B", +"{ c #002928", +"] c #001110", +"^ c #001E1C", +"/ c #002727", +"( c #002D2C", +"_ c #002B2B", +": c #002827", +"< c #001E1D", +"[ c #001211", +"} c #001F1C", +"| c #002E2E", +"1 c #002625", +"2 c #001D1D", +"3 c #002121", +"4 c #002C2C", +"5 c #001514", +"6 c #002F2E", +"7 c #002B2C", +"8 c #002424", +"9 c #001816", +"0 c #002F2D", +"a c #00302F", +"b c #001A18", +"c c #002725", +"d c #002A29", +"e c #001B1A", +"f c #003130", +"g c #003131", +"h c #002F2F", +"i c #001F1D", +"j c #000D0B", +"k c #001615", +"l c #00110F", +"m c #001010", +"n c #001F1E", +"o c #002B2A", +"p c #002220", +"q c #002321", +"r c #002021", +"s c #00201E", +"t c #001D1C", +"u c #001D1B", +"v c #001917", +"w c #001716", +"x c #001313", +"y c #001111", +"z c #001F1F", +"A c #003333", +"B c #003231", +"C c #003332", +"D c #003232", +"E c #002020", +"F c #002E2C", +"G c #002929", +"H c #002524", +"I c #001E1E", +"J c #001818", +"K c #001717", +"L c #001414", +"M c #002E2F", +"N c #003233", +"O c #002E2D", +"P c #002423", +"Q c #00201F", +"R c #001A1A", +"S c #002F30", +"T c #003434", +"U c #002322", +"V c #003334", +"W c #002D2D", +"X c #002828", +"Y c #002324", +"Z c #002222", +"` c #001817", +" . c #003635", +".. c #003535", +"+. c #003534", +"@. c #003636", +"#. c #003433", +"$. c #002D2E", +"%. c #003533", +"&. c #003837", +"*. c #003736", +"=. c #003836", +"-. c #003735", +";. c #003432", +">. c #002C2A", +",. c #002422", +"'. c #002320", +"). c #001C1C", +"!. c #003331", +"~. c #002A28", +"{. c #002624", +"]. c #003737", +"^. c #002D2B", +"/. c #003839", +"(. c #003838", +"_. c #003939", +":. c #003230", +"<. c #002B29", +"[. c #003637", +"}. c #000C0B", +"|. c #001412", +"1. c #00393A", +"2. c #003A3A", +"3. c #002626", +"4. c #001715", +"5. c #002523", +"6. c #003A3B", +"7. c #003536", +"8. c #003A39", +"9. c #00302E", +"0. c #003C3C", +"a. c #003B3C", +"b. c #003B3B", +"c. c #003B3A", +"d. c #003A3C", +"e. c #003738", +"f. c #003030", +"g. c #00292A", +"h. c #001919", +"i. c #001614", +"j. c #002A2A", +"k. c #003C3D", +"l. c #003B3D", +"m. c #003D3D", +"n. c #003132", +"o. c #003537", +"p. c #003C3E", +"q. c #003D3C", +"r. c #003E3E", +"s. c #003E3D", +"t. c #003F3F", +"u. c #003F3E", +"v. c #003E3F", +"w. c #003C3B", +"x. c #003938", +"y. c #003D3F", +"z. c #004041", +"A. c #004040", +"B. c #003F40", +"C. c #003F41", +"D. c #003E40", +"E. c #004042", +"F. c #00403F", +"G. c #004141", +"H. c #004142", +"I. c #004241", +"J. c #003031", +"K. c #004242", +"L. c #003634", +"M. c #004140", +"N. c #004243", +"O. c #004344", +"P. c #004345", +"Q. c #004445", +"R. c #004244", +"S. c #004343", +"T. c #004444", +"U. c #002C2D", +"V. c #00383A", +"W. c #004546", +"X. c #004446", +"Y. c #004245", +"Z. c #004646", +"`. c #004143", +" + c #004545", +".+ c #004647", +"++ c #004747", +"@+ c #004447", +"#+ c #004547", +"$+ c #004746", +"%+ c #004748", +"&+ c #00484A", +"*+ c #004849", +"=+ c #00474A", +"-+ c #00484B", +";+ c #004749", +">+ c #004848", +",+ c #004A4C", +"'+ c #00494C", +")+ c #004B4C", +"!+ c #00494B", +"~+ c #00494A", +"{+ c #004A4B", +"]+ c #004C4C", +"^+ c #004949", +"/+ c #004B4B", +"(+ c #004C4D", +"_+ c #004C4B", +":+ c #004D4D", +"<+ c #004D4E", +"[+ c #004E4F", +"}+ c #004D4F", +"|+ c #004E4E", +"1+ c #004C4E", +"2+ c #004645", +"3+ c #004E50", +"4+ c #004F4F", +"5+ c #004F50", +"6+ c #004649", +"7+ c #005052", +"8+ c #005051", +"9+ c #004F51", +"0+ c #005053", +"a+ c #005153", +"b+ c #003D3E", +"c+ c #005254", +"d+ c #004B4D", +"e+ c #005253", +"f+ c #005152", +"g+ c #005355", +"h+ c #005255", +"i+ c #005154", +"j+ c #005356", +"k+ c #005354", +"l+ c #005456", +"m+ c #005050", +"n+ c #005455", +"o+ c #005457", +"p+ c #005557", +"q+ c #005556", +"r+ c #005658", +"s+ c #005659", +"t+ c #004A4A", +"u+ c #005759", +"v+ c #005558", +"w+ c #004648", +"x+ c #00575A", +"y+ c #00585A", +"z+ c #005859", +"A+ c #00585B", +"B+ c #004C4F", +"C+ c #00595C", +"D+ c #005A5D", +"E+ c #005A5C", +"F+ c #00595B", +"G+ c #00595D", +"H+ c #005B5D", +"I+ c #00585C", +"J+ c #005A5B", +"K+ c #004D50", +"L+ c #005B5E", +"M+ c #005C5E", +"N+ c #005C5F", +"O+ c #005C5D", +"P+ c #005B5F", +"Q+ c #005D5E", +"R+ c #005E60", +"S+ c #005D5F", +"T+ c #005E5F", +"U+ c #005B5C", +"V+ c #005151", +"W+ c #005F60", +"X+ c #004342", +"Y+ c #005657", +"Z+ c #005F62", +"`+ c #005F63", +" @ c #005E61", +".@ c #005758", +"+@ c #005D62", +"@@ c #005D60", +"#@ c #005C60", +"$@ c #005E62", +"%@ c #006063", +"&@ c #005F61", +"*@ c #006164", +"=@ c #006364", +"-@ c #006264", +";@ c #006265", +">@ c #006163", +",@ c #006365", +"'@ c #006465", +")@ c #006466", +"!@ c #006162", +"~@ c #006064", +"{@ c #006366", +"]@ c #006367", +"^@ c #006062", +"/@ c #006567", +"(@ c #00595A", +"_@ c #006568", +":@ c #006467", +"<@ c #006566", +"[@ c #006267", +"}@ c #006165", +"|@ c #006569", +"1@ c #006469", +"2@ c #004346", +"3@ c #004A4D", +"4@ c #006468", +"5@ c #006769", +"6@ c #006669", +"7@ c #00676A", +"8@ c #006668", +"9@ c #005E63", +"0@ c #00666A", +"a@ c #003A38", +"b@ c #006667", +"c@ c #005D61", +"d@ c #00686B", +"e@ c #00676B", +"f@ c #00686A", +"g@ c #2A5B5C", +"h@ c #00686C", +"i@ c #00696C", +"j@ c #00676C", +"k@ c #004548", +"l@ c #00696B", +"m@ c #00666B", +"n@ c #006B6D", +"o@ c #006A6D", +"p@ c #006A6C", +"q@ c #005458", +"r@ c #00696A", +"s@ c #00696D", +"t@ c #006A6E", +"u@ c #006C6D", +"v@ c #006B6E", +"w@ c #005252", +"x@ c #006C6E", +"y@ c #006B6F", +"z@ c #006C6F", +"A@ c #006E71", +"B@ c #006D6F", +"C@ c #006E70", +"D@ c #006D70", +"E@ c #006C70", +"F@ c #006D6E", +"G@ c #006E6F", +"H@ c #007072", +"I@ c #006F71", +"J@ c #007071", +"K@ c #006D71", +"L@ c #006F72", +"M@ c #007073", +"N@ c #007173", +"O@ c #006F73", +"P@ c #007074", +"Q@ c #006A6B", +"R@ c #00575B", +"S@ c #007172", +"T@ c #007174", +"U@ c #006266", +"V@ c #007175", +"W@ c #00656A", +"X@ c #007274", +"Y@ c #006E72", +"Z@ c #006368", +"`@ c #004F52", +" # c #004E51", +".# c #007376", +"+# c #007275", +"@# c #007276", +"## c #007375", +"$# c #007477", +"%# c #007476", +"&# c #005353", +"*# c #007377", +"=# c #007578", +"-# c #005A5E", +";# c #007577", +"># c #005155", +",# c #007679", +"'# c #007678", +")# c #00777A", +"!# c #007779", +"~# c #00787A", +"{# c #00767A", +"]# c #00787B", +"^# c #007478", +"/# c #00797C", +"(# c #00797B", +"_# c #007A7C", +":# c #007576", +"<# c #007879", +"[# c #007A7B", +"}# c #006263", +"|# c #005C5C", +"1# c #007A7D", +"2# c #007B7E", +"3# c #007B7D", +"4# c #00797D", +"5# c #007273", +"6# c #007C7E", +"7# c #007A7E", +"8# c #007D7F", +"9# c #007D80", +"0# c #007D81", +"a# c #007E80", +"b# c #007B7C", +"c# c #007F81", +"d# c #007D7E", +"e# c #007C7F", +"f# c #007E7F", +"g# c #007E83", +"h# c #007F82", +"i# c #007E81", +"j# c #007E82", +"k# c #007F83", +"l# c #007D82", +"m# c #007C80", +"n# c #008084", +"o# c #004C50", +"p# c #008184", +"q# c #008083", +"r# c #008183", +"s# c #008082", +"t# c #008286", +"u# c #008487", +"v# c #008387", +"w# c #008386", +"x# c #008185", +"y# c #006B6C", +"z# c #008284", +"A# c #008588", +"B# c #008488", +"C# c #008388", +"D# c #008287", +"E# c #008285", +"F# c #008589", +"G# c #00868B", +"H# c #00858A", +"I# c #00858B", +"J# c #00868A", +"K# c #00868C", +"L# c #008489", +"M# c #00797E", +"N# c #004A4E", +"O# c #00878B", +"P# c #00878D", +"Q# c #00878C", +"R# c #00888D", +"S# c #00888C", +"T# c #00888B", +"U# c #00898C", +"V# c #00878E", +"W# c #00898D", +"X# c #008A8E", +"Y# c #00898E", +"Z# c #008A8F", +"`# c #008A8D", +" $ c #00898F", +".$ c #008389", +"+$ c #008990", +"@$ c #00777B", +"#$ c #008C91", +"$$ c #008D91", +"%$ c #008C90", +"&$ c #008D92", +"*$ c #008B90", +"=$ c #006D72", +"-$ c #008B91", +";$ c #008186", +">$ c #008E92", +",$ c #008F93", +"'$ c #008E93", +")$ c #009094", +"!$ c #008F92", +"~$ c #008B8F", +"{$ c #008F94", +"]$ c #009195", +"^$ c #009095", +"/$ c #009194", +"($ c #007F84", +"_$ c #009093", +":$ c #006869", +"<$ c #009296", +"[$ c #009297", +"}$ c #009196", +"|$ c #009397", +"1$ c #009197", +"2$ c #009096", +"3$ c #009498", +"4$ c #009598", +"5$ c #009398", +"6$ c #009497", +"7$ c #008C8F", +"8$ c #009295", +"9$ c #009499", +"0$ c #009599", +"a$ c #00959A", +"b$ c #00969A", +"c$ c #009399", +"d$ c #00969B", +"e$ c #00959B", +"f$ c #00949A", +"g$ c #006061", +"h$ c #009298", +"i$ c #00989F", +"j$ c #00979D", +"k$ c #00989D", +"l$ c #00989E", +"m$ c #00979C", +"n$ c #00979B", +"o$ c #00979E", +"p$ c #00999F", +"q$ c #009A9F", +"r$ c #0099A0", +"s$ c #009AA0", +"t$ c #008C92", +"u$ c #009AA1", +"v$ c #00999E", +"w$ c #008689", +"x$ c #009BA0", +"y$ c #009CA0", +"z$ c #009CA1", +"A$ c #009BA1", +"B$ c #00787C", +"C$ c #009DA2", +"D$ c #009EA3", +"E$ c #009CA2", +"F$ c #009DA3", +"G$ c #009EA2", +"H$ c #009CA3", +"I$ c #009EA5", +"J$ c #009FA5", +"K$ c #009EA4", +"L$ c #009DA4", +"M$ c #00A0A6", +"N$ c #009EA6", +"O$ c #009FA6", +"P$ c #008F95", +"Q$ c #009BA2", +"R$ c #00A1A7", +"S$ c #00A0A7", +"T$ c #007A7F", +"U$ c #00959C", +"V$ c #00A3A9", +"W$ c #00A2A9", +"X$ c #00A1A8", +"Y$ c #00A2A8", +"Z$ c #00A3AA", +"`$ c #009B9F", +" % c #00A4AA", +".% c #00A5AA", +"+% c #00A3A8", +"@% c #008D90", +"#% c #009FA4", +"$% c #00A5AB", +"%% c #00A4A9", +"&% c #00787D", +"*% c #008385", +"=% c #00A4AB", +"-% c #00A5AC", +";% c #00A6AC", +">% c #00A6AD", +",% c #00A6AB", +"'% c #00A7AC", +")% c #00A8AE", +"!% c #00A7AE", +"~% c #00A8B0", +"{% c #00A7AF", +"]% c #00A9AF", +"^% c #00A8AF", +"/% c #007B80", +"(% c #00A7AD", +"_% c #00A6AE", +":% c #00A9B0", +"<% c #00777C", +"[% c #00A9B1", +"}% c #00A4AC", +"|% c #007B7F", +"1% c #00AAB1", +"2% c #00AAB2", +"3% c #00A9B2", +"4% c #01A3AA", +"5% c #01AAB2", +"6% c #01ABB3", +"7% c #01AAB1", +"8% c #01949A", +"9% c #01A5AC", +"0% c #01A8B0", +"a% c #018D91", +"b% c #01A1A6", +"c% c #019498", +"d% c #01A6AC", +"e% c #01ADB4", +"f% c #01ACB3", +"g% c #01ACB4", +"h% c #02ACB5", +"i% c #02ACB4", +"j% c #01ACB5", +"k% c #02A9B2", +"l% c #019DA2", +"m% c #018286", +"n% c #019AA0", +"o% c #02A8B0", +"p% c #00ABB3", +"q% c #01ADB5", +"r% c #01A7AF", +"s% c #02999F", +"t% c #019399", +"u% c #01A6AD", +"v% c #02ADB4", +"w% c #01A9B1", +"x% c #019CA2", +"y% c #018183", +"z% c #02787A", +"A% c #01989D", +"B% c #02A8AF", +"C% c #02AEB5", +"D% c #02ADB5", +"E% c #01AEB4", +"F% c #02AEB4", +"G% c #01ADB3", +"H% c #02A9B1", +"I% c #029BA1", +"J% c #017B7F", +"K% c #018387", +"L% c #019FA5", +"M% c #02AAB2", +"N% c #03AEB6", +"O% c #02A6AD", +"P% c #01787B", +"Q% c #03AEB4", +"R% c #02ACB3", +"S% c #02A8B1", +"T% c #029A9F", +"U% c #017A7C", +"V% c #028084", +"W% c #039EA4", +"X% c #03AAB3", +"Y% c #03AEB5", +"Z% c #03AFB6", +"`% c #03AFB5", +" & c #03B0B6", +".& c #03A8AF", +"+& c #02989D", +"@& c #028B8F", +"#& c #03A3AB", +"$& c #03ACB5", +"%& c #02AFB6", +"&& c #02AEB6", +"*& c #03ADB4", +"=& c #03A5AC", +"-& c #028F93", +";& c #039FA6", +">& c #03ABB3", +",& c #02AFB5", +"'& c #02969A", +")& c #048B8F", +"!& c #03A3AA", +"~& c #04ADB5", +"{& c #04B1B7", +"]& c #05B1B8", +"^& c #04B0B7", +"/& c #04B1B8", +"(& c #05B0B7", +"_& c #05A8AF", +":& c #049399", +"<& c #026C70", +"[& c #039399", +"}& c #03A7AF", +"|& c #05AFB7", +"1& c #04ADB6", +"2& c #04A3AA", +"3& c #048A8D", +"4& c #038C90", +"5& c #03A4AA", +"6& c #04AEB5", +"7& c #049297", +"8& c #036B6D", +"9& c #049296", +"0& c #05B0B6", +"a& c #05B2B9", +"b& c #05A7AD", +"c& c #048D92", +"d& c #03787B", +"e& c #039AA0", +"f& c #05ABB3", +"g& c #05AEB5", +"h& c #049FA5", +"i& c #048185", +"j& c #036C6F", +"k& c #049397", +"l& c #05A9B0", +"m& c #04AFB7", +"n& c #05AFB6", +"o& c #04A5AD", +"p& c #038B8F", +"q& c #037477", +"r& c #04979E", +"s& c #06B3B9", +"t& c #06B3BA", +"u& c #05A3AA", +"v& c #04878B", +"w& c #05A1A6", +"x& c #05B2B8", +"y& c #05ADB4", +"z& c #049CA1", +"A& c #03767A", +"B& c #059BA0", +"C& c #06B2B9", +"D& c #04B2B9", +"E& c #04A2A8", +"F& c #048589", +"G& c #047E82", +"H& c #05A0A6", +"I& c #06AFB7", +"J& c #08B4BB", +"K& c #07B4BB", +"L& c #06B4BB", +"M& c #06B4BA", +"N& c #07B3BA", +"O& c #06B0B7", +"P& c #069FA5", +"Q& c #047F81", +"R& c #058B90", +"S& c #05A6AD", +"T& c #07B4BA", +"U& c #07B2B9", +"V& c #06ABB3", +"W& c #05989C", +"X& c #058084", +"Y& c #059FA6", +"Z& c #07AFB6", +"`& c #059EA4", +" * c #047D81", +".* c #05878C", +"+* c #08A6AC", +"@* c #09B3B9", +"#* c #08B5BC", +"$* c #09B5BC", +"%* c #09B4BB", +"&* c #09AFB6", +"** c #069CA1", +"=* c #069399", +"-* c #07ABB2", +";* c #09B5BB", +">* c #08B6BD", +",* c #09B4BA", +"'* c #07AAB1", +")* c #049298", +"!* c #058A8E", +"~* c #07A5AC", +"{* c #08B2B9", +"]* c #08B4BC", +"^* c #07AEB5", +"/* c #079AA0", +"(* c #079195", +"_* c #09AAB2", +":* c #0AB5BC", +"<* c #0AB7BE", +"[* c #09B6BD", +"}* c #0AB6BD", +"|* c #09ADB5", +"1* c #07979C", +"2* c #057578", +"3* c #08AEB5", +"4* c #0AB7BD", +"5* c #08A9AF", +"6* c #078D91", +"7* c #069296", +"8* c #09ACB3", +"9* c #0AB6BC", +"0* c #06969A", +"a* c #057174", +"b* c #08999F", +"c* c #0AB0B6", +"d* c #0AB8BF", +"e* c #09B7BE", +"f* c #0BB8BF", +"g* c #0BB7BE", +"h* c #09AAB1", +"i* c #089196", +"j* c #067F83", +"k* c #09A1A8", +"l* c #0AB2BA", +"m* c #06868A", +"n* c #067276", +"o* c #099BA0", +"p* c #0AB6BE", +"q* c #0AB5BD", +"r* c #078F93", +"s* c #077C80", +"t* c #0AA1A8", +"u* c #0BB3BA", +"v* c #0DBAC1", +"w* c #0CB9C0", +"x* c #0CBAC1", +"y* c #0BB9C0", +"z* c #0CB6BD", +"A* c #0AA9AF", +"B* c #098B90", +"C* c #07888C", +"D* c #0AA7AF", +"E* c #0DB7BE", +"F* c #0CBAC0", +"G* c #0CB2BA", +"H* c #077E82", +"I* c #0BA2A8", +"J* c #0AB4BB", +"K* c #0BBAC1", +"L* c #0CB9C1", +"M* c #0BB6BE", +"N* c #07888E", +"O* c #08868B", +"P* c #0BA6AE", +"Q* c #0DBBC2", +"R* c #0CBBC2", +"S* c #0EBBC2", +"T* c #0CBBC1", +"U* c #0DBBC1", +"V* c #0DBAC2", +"W* c #0DB9C0", +"X* c #0BB5BB", +"Y* c #0BA4AB", +"Z* c #088488", +"`* c #0A9297", +" = c #0BACB3", +".= c #0EBAC1", +"+= c #0A9CA2", +"@= c #08888D", +"#= c #0BA7AE", +"$= c #0EB7BD", +"%= c #0EBAC2", +"&= c #0CB4BB", +"*= c #0AA3AA", +"== c #088085", +"-= c #05585C", +";= c #098F94", +">= c #0DABB3", +",= c #0CB8BF", +"'= c #0EBCC2", +")= c #0EBCC3", +"!= c #0FBCC3", +"~= c #0EB5BC", +"{= c #0AA0A6", +"]= c #0A999F", +"^= c #0CB1B8", +"/= c #0FBBC1", +"(= c #0DB0B7", +"_= c #0A959B", +":= c #0A9196", +"<= c #0DADB4", +"[= c #0EB9C0", +"}= c #0FBBC2", +"|= c #0EBAC0", +"1= c #0EB3BB", +"2= c #0B9FA4", +"3= c #097B80", +"4= c #0A969C", +"5= c #0DB1B7", +"6= c #0FBDC3", +"7= c #10BDC4", +"8= c #0EBDC3", +"9= c #0FBCC4", +"0= c #10BCC2", +"a= c #0EB4BA", +"b= c #0B9BA0", +"c= c #087C80", +"d= c #0CA3A9", +"e= c #0FB7BD", +"f= c #0FBEC3", +"g= c #0FBDC2", +"h= c #0FBDC4", +"i= c #10BAC1", +"j= c #0DACB3", +"k= c #0A9095", +"l= c #0B999F", +"m= c #0EB2BA", +"n= c #0EBDC2", +"o= c #0FBCC2", +"p= c #10BDC3", +"q= c #0EB2B9", +"r= c #0B989F", +"s= c #0C959A", +"t= c #09787B", +"u= c #0C9FA5", +"v= c #10B6BE", +"w= c #11BEC4", +"x= c #10BEC4", +"y= c #12BFC6", +"z= c #11BEC5", +"A= c #11BFC5", +"B= c #10BFC4", +"C= c #12BEC5", +"D= c #11BFC6", +"E= c #11BDC3", +"F= c #0DB0B8", +"G= c #0B9498", +"H= c #0A868A", +"I= c #0CA7AE", +"J= c #10BBC0", +"K= c #10BFC5", +"L= c #11BDC5", +"M= c #12BFC5", +"N= c #10B9C0", +"O= c #0DAAB0", +"P= c #0A898E", +"Q= c #0A7B7F", +"R= c #0CA2A8", +"S= c #10B7BE", +"T= c #10BEC5", +"U= c #0EB0B7", +"V= c #0A9197", +"W= c #0DA2A9", +"X= c #11B0B8", +"Y= c #0D9DA3", +"Z= c #0B8487", +"`= c #0EA7AF", +" - c #11BBC1", +".- c #13C1C7", +"+- c #12C0C6", +"@- c #14C1C7", +"#- c #12C1C7", +"$- c #13C0C6", +"%- c #11BCC2", +"&- c #0EACB3", +"*- c #0B8D91", +"=- c #0A8E94", +"-- c #10AFB6", +";- c #12C1C6", +">- c #11B9C0", +",- c #0EA7AD", +"'- c #0A8689", +")- c #10A9B0", +"!- c #12BCC2", +"~- c #13C0C5", +"{- c #11C0C6", +"]- c #12C0C5", +"^- c #12BDC4", +"/- c #0B8C90", +"(- c #0FA8B0", +"_- c #12BBC2", +":- c #11B3BB", +"<- c #0D969B", +"[- c #0C8D91", +"}- c #10AEB5", +"|- c #13BEC4", +"1- c #14C2C8", +"2- c #13BCC3", +"3- c #10A9B1", +"4- c #0E999F", +"5- c #10B3BA", +"6- c #13BFC5", +"7- c #13C2C8", +"8- c #15C2C8", +"9- c #15C1C7", +"0- c #12B8BE", +"a- c #0EA0A6", +"b- c #0D8E93", +"c- c #11AEB5", +"d- c #13BDC4", +"e- c #10A9AF", +"f- c #104547", +"g- c #0A8085", +"h- c #11AFB5", +"i- c #14BEC5", +"j- c #11AFB6", +"k- c #0D8F94", +"l- c #0D959B", +"m- c #11B3BA", +"n- c #14BFC6", +"o- c #15C3C9", +"p- c #16C3C9", +"q- c #16C2C8", +"r- c #13B9C0", +"s- c #10A5AB", +"t- c #0A787C", +"u- c #10A2A8", +"v- c #13B9BF", +"w- c #17C3C9", +"x- c #13B6BD", +"y- c #0F9BA1", +"z- c #0D989E", +"A- c #13B4BC", +"B- c #10A3A9", +"C- c #0E8B90", +"D- c #14B4BB", +"E- c #18C3C9", +"F- c #17C4CA", +"G- c #16BFC6", +"H- c #11ABB2", +"I- c #10A0A6", +"J- c #16BAC1", +"K- c #17C2C8", +"L- c #18C5CA", +"M- c #18C5CB", +"N- c #16C1C7", +"O- c #16B9BF", +"P- c #109FA5", +"Q- c #0C8286", +"R- c #12A9AF", +"S- c #15BDC3", +"T- c #13B3B9", +"U- c #0F949A", +"V- c #10A1A7", +"W- c #15BAC2", +"X- c #15B8BF", +"Y- c #0F9DA3", +"Z- c #0F9297", +"`- c #15B7BD", +" ; c #19C6CC", +".; c #19C5CA", +"+; c #17BCC3", +"@; c #12A6AD", +"#; c #0C8185", +"$; c #12A8AF", +"%; c #17BDC4", +"&; c #19C5CB", +"*; c #19C6CD", +"=; c #19C6CB", +"-; c #18C5CC", +";; c #17B6BD", +">; c #10999F", +",; c #0F8D92", +"'; c #15B0B8", +"); c #18C1C8", +"!; c #1AC7CC", +"~; c #18C6CB", +"{; c #17C0C6", +"]; c #14AFB6", +"^; c #0D8388", +"/; c #14AAAF", +"(; c #17BFC5", +"_; c #1AC6CC", +":; c #19C2C9", +"<; c #15B4BA", +"[; c #11979C", +"}; c #11989D", +"|; c #17BAC0", +"1; c #1AC7CD", +"2; c #19C7CC", +"3; c #18BBC2", +"4; c #139FA6", +"5; c #0E8A90", +"6; c #16AFB5", +"7; c #19C1C8", +"8; c #1BC8CD", +"9; c #1AC2C9", +"0; c #15B2B8", +"a; c #109196", +"b; c #16B6BD", +"c; c #1AC5CB", +"d; c #1AC7CE", +"e; c #18BFC5", +"f; c #14AAB1", +"g; c #0F8C92", +"h; c #15B0B7", +"i; c #19C2C8", +"j; c #1BC7CD", +"k; c #1AC7CB", +"l; c #1BC8CE", +"m; c #16B1B9", +"n; c #108F94", +"o; c #139FA4", +"p; c #1ABFC5", +"q; c #1CCACF", +"r; c #1CC9CF", +"s; c #1CC9CE", +"t; c #1BC6CB", +"u; c #19B8BF", +"v; c #1299A0", +"w; c #12949A", +"x; c #18B5BC", +"y; c #1AC4C9", +"z; c #1CC8CE", +"A; c #1BC8CF", +"B; c #1CC9CD", +"C; c #1BC7CE", +"D; c #1AC2C8", +"E; c #17B0B6", +"F; c #13A1A7", +"G; c #19BCC2", +"H; c #1CC8CD", +"I; c #1BC9CE", +"J; c #1CC7CD", +"K; c #1ABEC4", +"L; c #14A5AB", +"M; c #11979D", +"N; c #18B7BD", +"O; c #1AC4CA", +"P; c #1CC8CF", +"Q; c #1AC1C8", +"R; c #16AEB4", +"S; c #15A5AB", +"T; c #1DC3C9", +"U; c #1DCBCF", +"V; c #1ECBD0", +"W; c #1DCACF", +"X; c #1CC6CC", +"Y; c #19B5BB", +"Z; c #129398", +"`; c #159EA4", +" > c #1ABBC1", +".> c #1DC8CD", +"+> c #1DCAD0", +"@> c #1DCBD0", +"#> c #1ECCD0", +"$> c #1CC2C7", +"%> c #17AAB0", +"&> c #0F8084", +"*> c #16A9AF", +"=> c #1CC2C6", +"-> c #1DC9CE", +";> c #1ABCC2", +">> c #14A0A5", +",> c #14A1A7", +"'> c #1ABDC3", +")> c #1DC7CE", +"!> c #1DCBD1", +"~> c #1BC1C7", +"{> c #17ABB1", +"]> c #1DC6CC", +"^> c #20CED2", +"/> c #1FCCD1", +"(> c #1FCDD1", +"_> c #1ECCD1", +":> c #1EC6CB", +"<> c #1AB2B8", +"[> c #17A7AD", +"}> c #1DC1C7", +"|> c #20CCD1", +"1> c #1FCDD2", +"2> c #20CDD2", +"3> c #1FCED2", +"4> c #1FCBD0", +"5> c #1DC0C7", +"6> c #18A5AB", +"7> c #128B90", +"8> c #19B1B8", +"9> c #1DC5CA", +"0> c #1EC8CD", +"a> c #1BBAC0", +"b> c #15999D", +"c> c #107F83", +"d> c #18A9AF", +"e> c #1CC0C7", +"f> c #1FCCD2", +"g> c #1CBEC5", +"h> c #12A0A5", +"i> c #016E73", +"j> c #1AB1B8", +"k> c #1FCACF", +"l> c #20CDD0", +"m> c #1EC3C9", +"n> c #19ABB2", +"o> c #12888B", +"p> c #1AB0B6", +"q> c #1EC5CB", +"r> c #20CDD1", +"s> c #20CBCF", +"t> c #1CBBC1", +"u> c #159CA1", +"v> c #15959B", +"w> c #1CB8BE", +"x> c #1FC7CC", +"y> c #1FC8CD", +"z> c #1BB5BC", +"A> c #138F94", +"B> c #12898F", +"C> c #19B0B7", +"D> c #20CACF", +"E> c #1DBCC2", +"F> c #12888C", +"G> c #1CB8BD", +"H> c #20CCD0", +"I> c #20CFD3", +"J> c #21CFD3", +"K> c #20CED3", +"L> c #1EC1C6", +"M> c #18A4A9", +"N> c #149197", +"O> c #1BB7BD", +"P> c #20C9CF", +"Q> c #1FC9CE", +"R> c #149499", +"S> c #17A0A5", +"T> c #1CBDC3", +"U> c #20CAD0", +"V> c #21CFD2", +"W> c #1FC6CB", +"X> c #1BAFB6", +"Y> c #1CB7BD", +"Z> c #1FCED3", +"`> c #1FC7CD", +" , c #1CB6BD", +"., c #0F8D93", +"+, c #158F94", +"@, c #1EBCC3", +"#, c #22CFD3", +"$, c #21D1D4", +"%, c #21D0D4", +"&, c #21D0D5", +"*, c #21D1D5", +"=, c #20CFD4", +"-, c #22D1D5", +";, c #22D0D4", +">, c #21CDD1", +",, c #1EBFC4", +"', c #179DA2", +"), c #189EA2", +"!, c #1FBEC4", +"~, c #22D1D4", +"{, c #20C8CD", +"], c #1CB4B9", +"^, c #1AA8AE", +"/, c #1FC4C9", +"(, c #21CED2", +"_, c #1FC5CA", +":, c #19A9AF", +"<, c #189FA4", +"[, c #21CDD2", +"}, c #22D0D5", +"|, c #21CFD4", +"1, c #1BB1B7", +"2, c #004B4E", +"3, c #17979D", +"4, c #20C1C7", +"5, c #23D2D6", +"6, c #24D3D5", +"7, c #23D2D5", +"8, c #24D3D7", +"9, c #24D2D6", +"0, c #23CED2", +"a, c #1FBAC1", +"b, c #17969A", +"c, c #1BA8AD", +"d, c #21C4C9", +"e, c #24D3D6", +"f, c #23D0D4", +"g, c #21C8CC", +"h, c #1DAEB5", +"i, c #15888C", +"j, c #1DB1B7", +"k, c #22C9CF", +"l, c #23D1D5", +"m, c #23D3D6", +"n, c #23D0D3", +"o, c #19A3A8", +"p, c #1BA9AF", +"q, c #22C6CB", +"r, c #23D0D5", +"s, c #23D3D5", +"t, c #22C7CC", +"u, c #13A7AD", +"v, c #005256", +"w, c #189EA3", +"x, c #22C5CA", +"y, c #25D3D7", +"z, c #26D4D7", +"A, c #26D4D8", +"B, c #25D2D6", +"C, c #23CCD0", +"D, c #1EB6BC", +"E, c #148588", +"F, c #1DAFB4", +"G, c #22C8CD", +"H, c #25D2D5", +"I, c #26D3D7", +"J, c #25D3D6", +"K, c #26D4D6", +"L, c #25D4D7", +"M, c #21C6CA", +"N, c #1BA8AE", +"O, c #179297", +"P, c #20B9BE", +"Q, c #23CDD0", +"R, c #24CFD3", +"S, c #20BEC3", +"T, c #189AA0", +"U, c #14868B", +"V, c #1DB2B7", +"W, c #24D1D5", +"X, c #1FC2C8", +"Y, c #21A7AD", +"Z, c #1CA6AB", +"`, c #23C9CD", +" ' c #27D5D8", +".' c #27D4D8", +"+' c #26D5D8", +"@' c #23CBCF", +"#' c #1EAFB4", +"$' c #178E93", +"%' c #1FB7BC", +"&' c #24CCD0", +"*' c #27D4D7", +"=' c #27D5D7", +"-' c #25D1D5", +";' c #21C2C7", +">' c #1BA2A6", +",' c #1A9DA2", +"'' c #21BFC4", +")' c #25D0D5", +"!' c #25CED1", +"~' c #20B9BF", +"{' c #179196", +"]' c #20B8BD", +"^' c #24CDD1", +"/' c #25D0D4", +"(' c #19BCC1", +"_' c #10979C", +":' c #1EACB2", +"<' c #27CED2", +"[' c #29D8DA", +"}' c #29D7DA", +"|' c #28D7DA", +"1' c #29D8DB", +"2' c #29D6D9", +"3' c #28D4D7", +"4' c #24C6CB", +"5' c #1DA9AE", +"6' c #1A999E", +"7' c #22BEC3", +"8' c #27D2D5", +"9' c #28D6D9", +"0' c #23BEC4", +"a' c #1A999D", +"b' c #1DA7AC", +"c' c #25C7CA", +"d' c #28D4D8", +"e' c #29D7D9", +"f' c #26CDD0", +"g' c #1FB5B9", +"h' c #1B9DA2", +"i' c #21BFC5", +"j' c #27D2D6", +"k' c #28D1D4", +"l' c #1AB9BE", +"m' c #026D72", +"n' c #20B4B9", +"o' c #28D4D6", +"p' c #23C3C8", +"q' c #1CA1A6", +"r' c #1DA4A8", +"s' c #25C5CA", +"t' c #29D4D8", +"u' c #2AD9DB", +"v' c #28D8DA", +"w' c #2AD8DB", +"x' c #2AD8DA", +"y' c #26CFD3", +"z' c #21B7BD", +"A' c #1FB0B5", +"B' c #27CCD0", +"C' c #28D8DB", +"D' c #28D6D8", +"E' c #26CACF", +"F' c #1EADB3", +"G' c #1EA6AA", +"H' c #26C6CB", +"I' c #29D5D8", +"J' c #27CFD3", +"K' c #1CAFB4", +"L' c #168488", +"M' c #23BABF", +"N' c #2AD5D8", +"O' c #2ADADD", +"P' c #2AD9DC", +"Q' c #2ADADC", +"R' c #2ADADB", +"S' c #2ADBDC", +"T' c #29D9DA", +"U' c #29D2D6", +"V' c #23BFC4", +"W' c #1B999E", +"X' c #1FAEB2", +"Y' c #26CBCF", +"Z' c #2AD7DB", +"`' c #29D9DB", +" ) c #28CDD1", +".) c #20B1B6", +"+) c #198F95", +"@) c #22B9BF", +"#) c #2AD9DD", +"$) c #2BDADC", +"%) c #2AD6D9", +"&) c #1EA5AB", +"*) c #20AFB5", +"=) c #29D8DC", +"-) c #2ADBDD", +";) c #2BD8DA", +">) c #26C8CD", +",) c #178A8F", +"') c #25C0C5", +")) c #2CD9DC", +"!) c #2CDDDF", +"~) c #2BDBDD", +"{) c #2CDBDD", +"]) c #2BDCDD", +"^) c #2DDCDE", +"/) c #2CDCDD", +"() c #2CDBDE", +"_) c #2CDDDE", +":) c #29D2D5", +"<) c #24BAC0", +"[) c #188B90", +"}) c #23B7BD", +"|) c #2AD0D4", +"1) c #2CDCDE", +"2) c #2BDBDC", +"3) c #2DDCDD", +"4) c #2CDBDC", +"5) c #2BD8DB", +"6) c #28CACF", +"7) c #21ADB1", +"8) c #1C9AA0", +"9) c #26C1C6", +"0) c #2DDDDD", +"a) c #2BDADD", +"b) c #2BD7D9", +"c) c #26C3C8", +"d) c #1D9FA4", +"e) c #198D92", +"f) c #23B9BD", +"g) c #2CDDDD", +"h) c #2BD7D8", +"i) c #1A9397", +"j) c #27C6CA", +"k) c #2EDBDD", +"l) c #2DDEDF", +"m) c #2DDDDF", +"n) c #2EDDDF", +"o) c #2DDEDE", +"p) c #2EDEDF", +"q) c #2DDDDE", +"r) c #2EDEDE", +"s) c #2BD1D4", +"t) c #22B5BA", +"u) c #1C969B", +"v) c #27C0C5", +"w) c #2CD6D8", +"x) c #2DDBDD", +"y) c #28C8CC", +"z) c #1FA4AA", +"A) c #1FA5AA", +"B) c #2CD9DB", +"C) c #2AD4D7", +"D) c #26C0C4", +"E) c #1D999D", +"F) c #26C0C5", +"G) c #2BD6D9", +"H) c #2EDDDE", +"I) c #07575A", +"J) c #1E9DA0", +"K) c #29CACE", +"L) c #2EE0E1", +"M) c #2EDFE0", +"N) c #2FDFE0", +"O) c #2EDEE0", +"P) c #2EDCDE", +"Q) c #2ACED2", +"R) c #22AEB2", +"S) c #1FA2A6", +"T) c #29C6CA", +"U) c #2DD9DC", +"V) c #2EDFDF", +"W) c #2CD8DA", +"X) c #27C3C8", +"Y) c #1D9CA1", +"Z) c #23AFB3", +"`) c #2ACED1", +" ! c #2FDFDF", +".! c #2CD4D7", +"+! c #25B9BD", +"@! c #1FA3A8", +"#! c #29C9CC", +"$! c #2DDADC", +"%! c #085E62", +"&! c #21A3A9", +"*! c #2CCFD2", +"=! c #2FE0E1", +"-! c #30E1E1", +";! c #30E0E1", +">! c #2AC9CC", +",! c #22A5AA", +"'! c #22ABB1", +")! c #2BCCD0", +"!! c #2DDBDC", +"~! c #2DD6D9", +"{! c #27BEC4", +"]! c #24B8BD", +"^! c #2CD3D7", +"/! c #2FDEE0", +"(! c #2FDEDF", +"_! c #2CD1D4", +":! c #23B2B7", +"~ c #2BC3C6", +",~ c #34E0E0", +"'~ c #34E5E5", +")~ c #34E5E4", +"!~ c #34E6E5", +"~~ c #34E6E4", +"{~ c #35E6E5", +"]~ c #34E6E6", +"^~ c #33E2E2", +"/~ c #2FD4D6", +"(~ c #26B1B6", +"_~ c #24A9AE", +":~ c #2ED0D1", +"<~ c #34E2E2", +"[~ c #35E6E6", +"}~ c #35E5E4", +"|~ c #32DEDF", +"1~ c #2DC8CB", +"2~ c #31D8D9", +"3~ c #34E5E6", +"4~ c #35E5E5", +"5~ c #35E4E3", +"6~ c #31DADB", +"7~ c #2ABFC2", +"8~ c #26ACB0", +"9~ c #2ECFD2", +"0~ c #1F8F93", +"a~ c #34E3E3", +"b~ c #36E8E7", +"c~ c #37E8E7", +"d~ c #37E7E6", +"e~ c #36E7E6", +"f~ c #37E7E7", +"g~ c #36E6E6", +"h~ c #35E2E3", +"i~ c #2FD0D2", +"j~ c #25A9AD", +"k~ c #28B4B8", +"l~ c #31D7D9", +"m~ c #37E5E5", +"n~ c #36E8E6", +"o~ c #36E7E5", +"p~ c #36E7E7", +"q~ c #33DEDE", +"r~ c #2CC3C7", +"s~ c #209397", +"t~ c #2CC1C4", +"u~ c #32DDDD", +"v~ c #35E7E5", +"w~ c #35E7E6", +"x~ c #37E8E6", +"y~ c #36E6E5", +"z~ c #31D9DB", +"A~ c #29B7BB", +"B~ c #29B6BB", +"C~ c #32D7D9", +"D~ c #36E5E4", +"E~ c #21979C", +"F~ c #2FCDD0", +"G~ c #36E5E6", +"H~ c #38E9E8", +"I~ c #38E8E8", +"J~ c #38E8E7", +"K~ c #38E7E7", +"L~ c #35E1E2", +"M~ c #2ECBCD", +"N~ c #2BBFC2", +"O~ c #33DCDE", +"P~ c #37E6E6", +"Q~ c #37E8E8", +"R~ c #33DBDB", +"S~ c #2BBCC0", +"T~ c #239DA2", +"U~ c #2FC9CC", +"V~ c #31D4D6", +"W~ c #27AEB3", +"X~ c #34DDDE", +"Y~ c #186467", +"Z~ c #239EA2", +"`~ c #32D2D5", +" { c #39E9E8", +".{ c #39E8E8", +"+{ c #35E0E0", +"@{ c #2EC5C7", +"#{ c #239B9E", +"${ c #2EC7CA", +"%{ c #35E1E1", +"&{ c #32D7D8", +"*{ c #2AB5B8", +"={ c #25A8AC", +"-{ c #32D0D2", +";{ c #37E4E4", +">{ c #2FCFD0", +",{ c #239CA0", +"'{ c #2EC9CC", +"){ c #36E1E1", +"!{ c #3AEAE8", +"~{ c #39E9E7", +"{{ c #239EA1", +"]{ c #32D2D3", +"^{ c #39E7E7", +"/{ c #3AEAE9", +"({ c #3AE8E7", +"_{ c #35DDDD", +":{ c #2CBDC0", +"<{ c #26A6AA", +"[{ c #31D0D1", +"}{ c #37E4E3", +"|{ c #3AE9E8", +"1{ c #38E5E4", +"2{ c #31D3D4", +"3{ c #27ADB0", +"4{ c #2AB4B9", +"5{ c #33D8D9", +"6{ c #36E2E1", +"7{ c #2FC8CC", +"8{ c #27A8AC", +"9{ c #31D2D4", +"0{ c #37E5E4", +"a{ c #0A8084", +"b{ c #30C7CA", +"c{ c #38E3E3", +"d{ c #3BEBE9", +"e{ c #3BECEA", +"f{ c #3CECEA", +"g{ c #34D8D9", +"h{ c #2AB3B6", +"i{ c #2AB2B5", +"j{ c #33D8D8", +"k{ c #39E7E6", +"l{ c #37E3E3", +"m{ c #31CDCF", +"n{ c #2CBFC2", +"o{ c #37E0E0", +"p{ c #3BEAE9", +"q{ c #36DFDF", +"r{ c #2DC1C4", +"s{ c #2AB4B8", +"t{ c #35D9DA", +"u{ c #3BEAE8", +"v{ c #149BA0", +"w{ c #36D7D7", +"x{ c #3CE9E7", +"y{ c #3DEDEB", +"z{ c #3DECEB", +"A{ c #3DEDEC", +"B{ c #3EEEEB", +"C{ c #3EEDEB", +"D{ c #3BE9E8", +"E{ c #34D4D5", +"F{ c #28ACB0", +"G{ c #2DBDC0", +"H{ c #37DEDE", +"I{ c #3DEAE9", +"J{ c #3DEEEB", +"K{ c #3EEDEC", +"L{ c #39E5E3", +"M{ c #31C9CA", +"N{ c #249B9E", +"O{ c #31CBCD", +"P{ c #3AE5E4", +"Q{ c #3DEDEA", +"R{ c #3CEBE9", +"S{ c #37DCDC", +"T{ c #2CBBBD", +"U{ c #2FBFC2", +"V{ c #37DFDF", +"W{ c #14A7AA", +"X{ c #39DDDC", +"Y{ c #3DEBEA", +"Z{ c #3FEEEC", +"`{ c #3EEEED", +" ] c #3EEFED", +".] c #3FEDEC", +"+] c #3FEFED", +"@] c #3EEEEC", +"#] c #3EEDED", +"$] c #3CE7E6", +"%] c #33CFD0", +"&] c #249599", +"*] c #31C6C8", +"=] c #3AE4E2", +"-] c #3FEEED", +";] c #3FEDED", +">] c #38E1E0", +",] c #2FC2C3", +"'] c #28A6AA", +")] c #34D2D4", +"!] c #3DEAE8", +"~] c #36DADA", +"{] c #2CB3B6", +"]] c #23999D", +"^] c #30C9CA", +"/] c #3AE4E3", +"(] c #23B9BB", +"_] c #39E1E1", +":] c #3FEEEB", +"<] c #40EFED", +"[] c #40F0ED", +"}] c #40EEED", +"|] c #3FEFEC", +"1] c #3BE5E3", +"2] c #32C9CB", +"3] c #26A1A5", +"4] c #33D0D0", +"5] c #3DE8E7", +"6] c #40EFEE", +"7] c #3FF0ED", +"8] c #40F0EE", +"9] c #38DDDD", +"0] c #2CB7BB", +"a] c #2BB2B6", +"b] c #37DADA", +"c] c #3EEBE9", +"d] c #3DEAE7", +"e] c #35D5D6", +"f] c #28A4A7", +"g] c #35D1D3", +"h] c #3DE9E7", +"i] c #0C868C", +"j] c #33CACB", +"k] c #3DE7E4", +"l] c #40EFEC", +"m] c #41F1ED", +"n] c #41F0ED", +"o] c #3AE2E1", +"p] c #30C1C4", +"q] c #2BADB0", +"r] c #37D8D8", +"s] c #3FECEA", +"t] c #41F1EE", +"u] c #3EECEA", +"v] c #2BAEB3", +"w] c #2FBDC0", +"x] c #3AE0E0", +"y] c #40EDEA", +"z] c #40F1ED", +"A] c #3DE8E6", +"B] c #34CED0", +"C] c #2BB0B4", +"D] c #38D9D9", +"E] c #3FEBE9", +"F] c #40F0EC", +"G] c #1E9DA2", +"H] c #36D2D3", +"I] c #3FEAE8", +"J] c #42F0EE", +"K] c #42F1EE", +"L] c #43F2EF", +"M] c #43F1EE", +"N] c #41EEEC", +"O] c #3ADEDE", +"P] c #2FB9BC", +"Q] c #2FBABD", +"R] c #3AE0DF", +"S] c #42F1ED", +"T] c #3FEBE8", +"U] c #35D2D2", +"V] c #32C7C9", +"W] c #3DE5E4", +"X] c #41EFEC", +"Y] c #32C8CA", +"Z] c #2EBABE", +"`] c #3BE0DF", +" ^ c #40EEEC", +".^ c #25ACAF", +"+^ c #39DBDA", +"@^ c #41EEEA", +"#^ c #40EDEB", +"$^ c #39D9DA", +"%^ c #2BAEB1", +"&^ c #31C4C6", +"*^ c #3EE5E3", +"=^ c #42F0ED", +"-^ c #42F2EE", +";^ c #43F2EE", +">^ c #3EE8E6", +",^ c #28A1A6", +"'^ c #35CFD1", +")^ c #3FE9E7", +"!^ c #43F1EF", +"~^ c #42F2EF", +"{^ c #41EFED", +"]^ c #3CE3E0", +"^^ c #30BDC0", +"/^ c #32C6C8", +"(^ c #3EE7E4", +"_^ c #30BCBF", +":^ c #3DE3E1", +"<^ c #44F1EE", +"[^ c #45F4F0", +"}^ c #43F3EF", +"|^ c #44F4F0", +"1^ c #44F3F0", +"2^ c #43F2F0", +"3^ c #37D4D4", +"4^ c #279DA1", +"5^ c #35CECF", +"6^ c #40EBE7", +"7^ c #43F3F0", +"8^ c #3DE5E2", +"9^ c #32C3C5", +"0^ c #2BADB1", +"a^ c #3AD9D9", +"b^ c #42EFEC", +"c^ c #44F3EF", +"d^ c #3ADDDC", +"e^ c #2EB4B7", +"f^ c #27A0A4", +"g^ c #36D2D1", +"h^ c #41ECE9", +"i^ c #44F2EF", +"j^ c #45F3F0", +"k^ c #34C8CA", +"l^ c #40E8E6", +"m^ c #46F5F0", +"n^ c #47F6F1", +"o^ c #46F5F1", +"p^ c #47F5F1", +"q^ c #45F5F0", +"r^ c #45F5F1", +"s^ c #45F4F1", +"t^ c #46F4F1", +"u^ c #41EBE8", +"v^ c #36CCCD", +"w^ c #2BAAAD", +"x^ c #3BD9D8", +"y^ c #44EFEC", +"z^ c #3EE3E1", +"A^ c #30BBBD", +"B^ c #30BABD", +"C^ c #3EE3E2", +"D^ c #46F3F0", +"E^ c #47F5F0", +"F^ c #46F4F0", +"G^ c #39D8D8", +"H^ c #2CADB0", +"I^ c #3AD9DA", +"J^ c #43F0EC", +"K^ c #2AA1A4", +"L^ c #38D1D2", +"M^ c #42EDE9", +"N^ c #47F5F2", +"O^ c #47F6F2", +"P^ c #48F5F1", +"Q^ c #40E7E5", +"R^ c #34C4C6", +"S^ c #30B6B9", +"T^ c #3DDFDD", +"U^ c #44F1ED", +"V^ c #48F5F2", +"W^ c #45F2EE", +"X^ c #3CDEDC", +"Y^ c #2EB1B5", +"Z^ c #34C4C7", +"`^ c #40E8E5", +" / c #48F6F2", +"./ c #48F6F1", +"+/ c #43EDEA", +"@/ c #30B8BC", +"#/ c #3EE1E0", +"$/ c #44F2EE", +"%/ c #46F5F2", +"&/ c #3BDBDA", +"*/ c #45F1ED", +"=/ c #49F7F2", +"-/ c #4AF7F2", +";/ c #49F7F1", +">/ c #49F6F2", +",/ c #46F3EF", +"'/ c #3FE2E0", +")/ c #31BBBD", +"!/ c #33C1C3", +"~/ c #3FE5E2", +"{/ c #47F3EF", +"]/ c #45F2EC", +"^/ c #3AD6D7", +"// c #38CECF", +"(/ c #43EDE9", +"_/ c #49F6F1", +":/ c #49F7F3", +"( c #4DF6F2", +",( c #50F9F3", +"'( c #49F3EF", +")( c #3CDBDA", +"!( c #30B3B6", +"~( c #40E1E0", +"{( c #2DA9AC", +"]( c #3EDAD8", +"^( c #4BF3EE", +"/( c #54FBF5", +"(( c #54FAF5", +"_( c #55FAF5", +":( c #53FAF5", +"<( c #54F9F5", +"[( c #56FAF5", +"}( c #55F9F5", +"|( c #45ECE8", +"1( c #37C8C9", +"2( c #33BDC0", +"3( c #43E7E3", +"4( c #4EF6F2", +"5( c #4CF5F1", +"6( c #40E1DD", +"7( c #38CBCC", +"8( c #46EEE9", +"9( c #56FBF5", +"0( c #55FAF6", +"a( c #47F1EE", +"b( c #3BD5D5", +"c( c #35C0C2", +"d( c #44E8E6", +"e( c #4FF7F2", +"f( c #32B4B6", +"g( c #41E2DF", +"h( c #50F7F2", +"i( c #58FBF6", +"j( c #56FBF6", +"k( c #58FAF5", +"l( c #57FBF6", +"m( c #56F9F5", +"n( c #57FAF5", +"o( c #56FAF6", +"p( c #58FBF5", +"q( c #52F7F3", +"r( c #44E7E4", +"s( c #34BEBF", +"t( c #38C9CA", +"u( c #45EDE8", +"v( c #53F9F3", +"w( c #57FAF6", +"x( c #58FAF6", +"y( c #57FBF5", +"z( c #4CF3EE", +"A( c #3EDAD9", +"B( c #3CD6D4", +"C( c #53F9F4", +"D( c #48EFEA", +"E( c #39CECE", +"F( c #39CCCD", +"G( c #47EFEA", +"H( c #35C0C1", +"I( c #46E9E5", +"J( c #53F8F3", +"K( c #59FBF5", +"L( c #59FBF6", +"M( c #5AFBF6", +"N( c #5AFBF7", +"O( c #5BFCF7", +"P( c #5BFBF6", +"Q( c #58FBF7", +"R( c #52F8F2", +"S( c #40E1DF", +"T( c #3CD4D2", +"U( c #4DF1ED", +"V( c #5AFCF7", +"W( c #59FBF7", +"X( c #59FCF7", +"Y( c #59FAF5", +"Z( c #4DF2ED", +"`( c #3BD3D2", +" _ c #30AFB2", +"._ c #40DFDD", +"+_ c #51F6F1", +"@_ c #5BFBF7", +"#_ c #55F9F4", +"$_ c #46EBE7", +"%_ c #36C3C5", +"&_ c #3CD5D4", +"*_ c #4EF3EF", +"=_ c #39CDCC", +"-_ c #4AEFEB", +";_ c #5DFCF8", +">_ c #5CFCF7", +",_ c #5EFCF8", +"'_ c #5CFCF8", +")_ c #5FFCF8", +"!_ c #60FDF8", +"~_ c #4FF4F0", +"{_ c #3FDBD9", +"]_ c #2FAAAE", +"^_ c #3FDCDA", +"/_ c #4FF4EF", +"(_ c #5EFCF7", +"__ c #5EFDF8", +":_ c #4BEFEA", +"<_ c #39CBCC", +"[_ c #34BCBE", +"}_ c #45E8E4", +"|_ c #56F9F4", +"1_ c #5DFCF7", +"2_ c #5DFDF7", +"3_ c #54F9F3", +"4_ c #45E5E1", +"5_ c #34BABB", +"6_ c #30AEB0", +"7_ c #41DFDD", +"8_ c #51F5F1", +"9_ c #3ED7D6", +"0_ c #50F4EF", +"a_ c #5CFBF7", +"b_ c #61FDF8", +"c_ c #62FDF8", +"d_ c #5FFDF8", +"e_ c #60FCF8", +"f_ c #4CF1EC", +"g_ c #3BD2D1", +"h_ c #33B7B9", +"i_ c #56F8F4", +"j_ c #5BFAF5", +"k_ c #48EAE6", +"l_ c #35BFC1", +"m_ c #39C9C9", +"n_ c #49EDEA", +"o_ c #5CFAF5", +"p_ c #61FCF8", +"q_ c #5CFBF6", +"r_ c #54F7F2", +"s_ c #42DFDD", +"t_ c #32B9BA", +"u_ c #45E5E2", +"v_ c #58F9F4", +"w_ c #31AFB1", +"x_ c #43E1DF", +"y_ c #55F8F3", +"z_ c #64FDF8", +"A_ c #62FEF8", +"B_ c #63FEF9", +"C_ c #63FEF8", +"D_ c #63FDF9", +"E_ c #63FDF8", +"F_ c #64FEF9", +"G_ c #5CFBF5", +"H_ c #4CEFEA", +"I_ c #3ACAC9", +"J_ c #37C3C4", +"K_ c #48EBE7", +"L_ c #5BFAF6", +"M_ c #62FDF9", +"N_ c #62FEF9", +"O_ c #57F9F4", +"P_ c #44E3E1", +"Q_ c #4FF3EE", +"R_ c #5EFBF6", +"S_ c #64FEF8", +"T_ c #53F5F0", +"U_ c #3FD8D6", +"V_ c #34C3C3", +"W_ c #4AEEE9", +"X_ c #5FFCF6", +"Y_ c #35BCBD", +"Z_ c #47E8E5", +"`_ c #5DFAF4", +" : c #68FEF9", +".: c #66FEF9", +"+: c #65FEF9", +"@: c #67FEF9", +"#: c #65FDF9", +"$: c #65FEF8", +"%: c #66FEF8", +"&: c #63FCF8", +"*: c #69FEF9", +"=: c #64FDF9", +"-: c #5FFBF5", +";: c #48EAE5", +">: c #36C0C0", +",: c #3BD0CF", +"': c #51F2EE", +"): c #62FCF7", +"!: c #68FEF8", +"~: c #65FDF8", +"{: c #57F7F2", +"]: c #30A9AD", +"^: c #41DEDB", +"/: c #59F7F1", +"(: c #62FCF8", +"_: c #66FDF9", +":: c #66FDF8", +"<: c #62FBF6", +"[: c #4EF1ED", +"}: c #38CECE", +"|: c #53F3ED", +"1: c #64FCF7", +"2: c #3BC9C8", +"3: c #55EFEA", +"4: c #6BFCF7", +"5: c #76FFFA", +"6: c #72FFFA", +"7: c #6BFEF9", +"8: c #72FEF9", +"9: c #74FFFA", +"0: c #6EFEF9", +"a: c #6BFFFA", +"b: c #6DFEFA", +"c: c #70FFF9", +"d: c #70FFFA", +"e: c #6CFEF9", +"f: c #71FEFA", +"g: c #74FEFA", +"h: c #6EFFFA", +"i: c #75FEF9", +"j: c #73FFFA", +"k: c #74FFF9", +"l: c #63FAF5", +"m: c #48E5E2", +"n: c #46DCDA", +"o: c #5FF7F2", +"p: c #6AFEF9", +"q: c #71FFFA", +"r: c #6FFEF9", +"s: c #6CFFF9", +"t: c #6EFFF9", +"u: c #71FEF9", +"v: c #70FEF9", +"w: c #6DFFF9", +"x: c #70FEFA", +"y: c #6CFFFA", +"z: c #6AFEFA", +"A: c #6EFDF8", +"B: c #5DF5EF", +"C: c #42D6D3", +"D: c #35B7B9", +"E: c #4EE7E2", +"F: c #60F9F4", +"G: c #76FEFA", +"H: c #72FEFA", +"I: c #6FFEFA", +"J: c #6DFEF9", +"K: c #6FFFFA", +"L: c #68FDF6", +"M: c #53EEEA", +"N: c #39C6C6", +"O: c #1D9A9D", +"P: c #48DFDB", +"Q: c #64F9F3", +"R: c #41D4D1", +"S: c #66F3EE", +"T: c #77FEF8", +"U: c #79FFFA", +"V: c #78FFFA", +"W: c #77FFFA", +"X: c #77FFF9", +"Y: c #7AFFFA", +"Z: c #75FFFA", +"`: c #76FEF9", +" < c #78FEF9", +".< c #6AF8F2", +"+< c #4BDEDB", +"@< c #35B3B4", +"#< c #50E4E0", +"$< c #6CFAF4", +"%< c #75FEFA", +"&< c #77FEF9", +"*< c #76FEF8", +"=< c #5FF1EB", +"-< c #3DCDCB", +";< c #3CC5C4", +">< c #5AEDE8", +",< c #75FCF6", +"'< c #7BFFFA", +")< c #78FFF9", +"!< c #6FFCF6", +"~< c #56EAE5", +"{< c #20A6A7", +"]< c #57E9E4", +"^< c #33AAAB", +"/< c #4CDDD9", +"(< c #6BF7F1", +"_< c #73FEF9", +":< c #7CFFFA", +"<< c #7EFFFA", +"[< c #7DFFFA", +"}< c #7DFEF8", +"|< c #6BF5EF", +"1< c #47D6D3", +"2< c #3ABFBE", +"3< c #5EEBE5", +"4< c #78FCF5", +"5< c #7AFEF9", +"6< c #74FCF5", +"7< c #5BECE7", +"8< c #39C2C1", +"9< c #45CFCC", +"0< c #5EF1EC", +"a< c #7FFFFA", +"b< c #76FFF9", +"c< c #72FAF4", +"d< c #52E4DE", +"e< c #28B9B8", +"f< c #3AB6B4", +"g< c #5EE6E0", +"h< c #7CFAF4", +"i< c #82FEF9", +"j< c #84FFFA", +"k< c #81FFFA", +"l< c #85FFFA", +"m< c #82FFFA", +"n< c #83FFFA", +"o< c #80FFFA", +"p< c #83FEF9", +"q< c #6BF1EB", +"r< c #44CCCA", +"s< c #42CCC9", +"t< c #68EFEA", +"u< c #80FDF7", +"v< c #82FFF9", +"w< c #7AFAF4", +"x< c #61E7E2", +"y< c #50DAD6", +"z< c #78F7F1", +"A< c #81FEF9", +"B< c #81FFF9", +"C< c #76F7F2", +"D< c #53DCD8", +"E< c #45C4C2", +"F< c #6AEDE8", +"G< c #86FCF7", +"H< c #8DFFFA", +"I< c #87FFFA", +"J< c #8BFFFA", +"K< c #88FFFA", +"L< c #8AFFFA", +"M< c #89FFFA", +"N< c #8CFFFA", +"O< c #83FCF6", +"P< c #70ECE6", +"Q< c #44C2C0", +"R< c #55D6D2", +"S< c #7CF4EF", +"T< c #8AFDF9", +"U< c #8FFFFA", +"V< c #8CFEF9", +"W< c #80F9F4", +"X< c #59E0DC", +"Y< c #3BB1B1", +"Z< c #5FE3DE", +"`< c #84FAF5", +" [ c #86FFFA", +".[ c #8EFFFA", +"+[ c #8AFFFB", +"@[ c #87FEF8", +"#[ c #76F3ED", +"$[ c #4BD1CE", +"%[ c #4FD0CD", +"&[ c #75F3ED", +"*[ c #84FEF9", +"=[ c #86FAF4", +"-[ c #61E5DF", +";[ c #3AACAB", +">[ c #59E0DB", +",[ c #7FF8F2", +"'[ c #85FEF9", +")[ c #7CF6F0", +"![ c #56D8D4", +"~[ c #44BEBD", +"{[ c #69EBE5", +"][ c #85FCF6", +"^[ c #87FFFB", +"/[ c #7FFCF8", +"([ c #74EEE8", +"_[ c #44C6C5", +":[ c #57DAD6", +"<[ c #83F6F1", +"[[ c #88FEF9", +"}[ c #90FFFA", +"|[ c #94FFFA", +"1[ c #92FFFB", +"2[ c #91FFFA", +"3[ c #83F7F1", +"4[ c #59DED9", +"5[ c #41B9B8", +"6[ c #70E8E2", +"7[ c #88FBF5", +"8[ c #93FFFA", +"9[ c #92FFFA", +"0[ c #8EFEF8", +"a[ c #74F1EC", +"b[ c #4CCEC9", +"c[ c #47CCC8", +"d[ c #79F1EB", +"e[ c #8DFDF8", +"f[ c #90FFFB", +"g[ c #86FFF9", +"h[ c #87FBF5", +"i[ c #6BE9E4", +"j[ c #40B1AF", +"k[ c #71E4DE", +"l[ c #8EFAF4", +"m[ c #98FFFA", +"n[ c #96FFFA", +"o[ c #98FFFB", +"p[ c #95FFFA", +"q[ c #9AFFFA", +"r[ c #97FFFA", +"s[ c #99FFFB", +"t[ c #96FFFB", +"u[ c #95FFFB", +"v[ c #96FEF8", +"w[ c #8AF5EF", +"x[ c #5DD7D2", +"y[ c #4EC6C2", +"z[ c #80EFE8", +"A[ c #95FEF8", +"B[ c #97FFFB", +"C[ c #99FFFA", +"D[ c #9AFFFB", +"E[ c #92FDF8", +"F[ c #7EEDE7", +"G[ c #4BC2C0", +"H[ c #61D7D1", +"I[ c #83F6EF", +"J[ c #91FEF8", +"K[ c #94FFFB", +"L[ c #91FAF4", +"M[ c #72E5DF", +"N[ c #4CBEBC", +"O[ c #7BEAE3", +"P[ c #94FCF6", +"Q[ c #9CFFFA", +"R[ c #9CFFFB", +"S[ c #9BFFFB", +"T[ c #9EFFFB", +"U[ c #9EFFFA", +"V[ c #9DFFFB", +"W[ c #9BFFFA", +"X[ c #93FDF7", +"Y[ c #86F2EB", +"Z[ c #5BCFCB", +"`[ c #60D3CE", +" } c #86F4ED", +".} c #94FFF9", +"+} c #98FBF5", +"@} c #75E7E1", +"#} c #6BDFD9", +"$} c #90F7F2", +"%} c #9BFEFA", +"&} c #9FFFFB", +"*} c #90F7F1", +"=} c #68DDD7", +"-} c #57C9C4", +";} c #88F0E9", +">} c #9AFDF7", +",} c #9FFFFA", +"'} c #A0FFFB", +")} c #A1FFFB", +"!} c #9BFDF8", +"~} c #85EEE8", +"{} c #66DCD7", +"]} c #90F8F1", +"^} c #95F9F2", +"/} c #73E1DC", +"(} c #48B8B5", +"_} c #7EE6E0", +":} c #97FBF5", +"<} c #9FFEFA", +"[} c #A0FFFA", +"}} c #9DFFFA", +"|} c #9DFEF9", +"1} c #8FF5EF", +"2} c #63D4CE", +"3} c #61D3CE", +"4} c #91F3ED", +"5} c #9EFDF8", +"6} c #A1FFFA", +"7} c #A3FFFB", +"8} c #A4FFFB", +"9} c #A2FFFB", +"0} c #A3FFFA", +"a} c #A2FFFA", +"b} c #9BFBF6", +"c} c #80E8E2", +"d} c #46B2B0", +"e} c #79E5DE", +"f} c #99FAF4", +"g} c #A0FEFA", +"h} c #9FFEF9", +"i} c #93F6EF", +"j} c #69D9D3", +"k} c #55C5C0", +"l} c #85EDE6", +"m} c #9AFCF6", +"n} c #9CFEF8", +"o} c #57C9C5", +"p} c #76DDD7", +"q} c #9CF8F3", +"r} c #A8FFFB", +"s} c #A7FFFB", +"t} c #A6FFFB", +"u} c #A5FFFB", +"v} c #A9FFFB", +"w} c #A7FFFA", +"x} c #9BF9F3", +"y} c #77DFD9", +"z} c #55C0BB", +"A} c #8AEBE4", +"B} c #A1FCF6", +"C} c #A6FFFA", +"D} c #A4FFFA", +"E} c #A2FDF8", +"F} c #91F2EB", +"G} c #67D0C9", +"H} c #63CFC9", +"I} c #94F2EB", +"J} c #A4FEF9", +"K} c #97FCF6", +"L} c #88EAE2", +"M} c #4AB6B2", +"N} c #87E7E1", +"O} c #A1FCF5", +"P} c #ABFFFC", +"Q} c #ABFFFB", +"R} c #AAFFFB", +"S} c #ACFFFC", +"T} c #AAFFFC", +"U} c #A9FFFC", +"V} c #A4FFF9", +"W} c #94F5EF", +"X} c #6FD6D0", +"Y} c #64CDC7", +"Z} c #93F1EA", +"`} c #A2FEF8", +" | c #ADFFFC", +".| c #ACFFFB", +"+| c #A7FDF7", +"@| c #8EEDE7", +"#| c #5FC5BF", +"$| c #74DAD4", +"%| c #9EF8F1", +"&| c #A8FFFC", +"*| c #9FFAF4", +"=| c #84E2DC", +"-| c #5EC3BF", +";| c #94EEE8", +">| c #A9FEF7", +",| c #ADFFFB", +"'| c #AEFFFB", +")| c #AEFFFC", +"!| c #A9FDF9", +"~| c #9AF1EA", +"{| c #67CEC8", +"]| c #73D6D0", +"^| c #9DF5EF", +"/| c #A9FFFA", +"(| c #A6FCF6", +"_| c #89E8E1", +":| c #80E4DD", +"<| c #A0FAF3", +"[| c #AAFFFA", +"}| c #9DF7F1", +"|| c #7FDCD5", +"1| c #6DCFCA", +"2| c #9DF3EC", +"3| c #ABFDF8", +"4| c #B0FFFC", +"5| c #AFFFFB", +"6| c #B1FFFB", +"7| c #AFFFFC", +"8| c #B2FFFC", +"9| c #B1FFFC", +"0| c #AAFCF7", +"a| c #95ECE6", +"b| c #88DFD8", +"c| c #A4F9F2", +"d| c #AEFFFA", +"e| c #B0FFFB", +"f| c #B2FFFB", +"g| c #A6F9F3", +"h| c #80E1DA", +"i| c #58BEB8", +"j| c #91EBE3", +"k| c #ACFFFA", +"l| c #9CF4ED", +"m| c #75D3CD", +"n| c #77D9D3", +"o| c #A1F6EF", +"p| c #ACFEF9", +"q| c #B3FFFC", +"r| c #B4FFFC", +"s| c #A8FBF5", +"t| c #8EE7E1", +"u| c #59B7B3", +"v| c #90E6E0", +"w| c #A9FCF6", +"x| c #ABFFFA", +"y| c #A7F7F0", +"z| c #78D8D1", +"A| c #6FC9C3", +"B| c #97F1EA", +"C| c #A9FDF7", +"D| c #B3FEFC", +"E| c #B3FFFB", +"F| c #A9FEF8", +"G| c #98F0E9", +"H| c #66CAC5", +"I| c #8BE1DB", +"J| c #A8FAF3", +"K| c #B6FEFA", +"L| c #B4FFFB", +"M| c #B5FFFC", +"N| c #B5FFFB", +"O| c #B6FFFC", +"P| c #B9FFFC", +"Q| c #B7FFFC", +"R| c #B2FEFA", +"S| c #AAF9F3", +"T| c #8AE0DA", +"U| c #65C5BF", +"V| c #9CEFE6", +"W| c #B0FDF7", +"X| c #B3FEFA", +"Y| c #A2F2EB", +"Z| c #74CEC7", +"`| c #79D4CD", +" 1 c #A0F4ED", +".1 c #B2FDF9", +"+1 c #B8FFFC", +"@1 c #AFFCF6", +"#1 c #96EBE4", +"$1 c #60BAB6", +"%1 c #93E8E1", +"&1 c #AEFBF5", +"*1 c #B5FEFA", +"=1 c #A3F6EF", +"-1 c #7AD7D1", +";1 c #73CFC9", +">1 c #A2F3EC", +",1 c #B4FEF8", +"'1 c #AFFCF7", +")1 c #9BECE5", +"!1 c #88DED5", +"~1 c #A3F7F0", +"{1 c #B2FEF9", +"]1 c #A9FAF4", +"^1 c #8FE4DD", +"/1 c #6DC6C0", +"(1 c #9FEEE7", +"_1 c #B2FDF7", +":1 c #BAFFFC", +"<1 c #B9FFFB", +"[1 c #B6FEF9", +"}1 c #A6F1E9", +"|1 c #74CDC7", +"11 c #85DAD3", +"21 c #ACF7F0", +"31 c #B7FEFA", +"41 c #B6FFFB", +"51 c #B1FAF4", +"61 c #95E6DF", +"71 c #61B6B2", +"81 c #94E5DE", +"91 c #AFFBF4", +"01 c #B4FEFA", +"a1 c #A8F8F1", +"b1 c #86DCD4", +"c1 c #7FD3CC", +"d1 c #A9F2EC", +"e1 c #BCFFFC", +"f1 c #BBFFFC", +"g1 c #B8FFFB", +"h1 c #B6FCF6", +"i1 c #9FEBE4", +"j1 c #8FE3DB", +"k1 c #B1FAF3", +"l1 c #BAFEFA", +"m1 c #BDFFFC", +"n1 c #AFF8F2", +"o1 c #91E0D8", +"p1 c #6FC3BB", +"q1 c #A0ECE5", +"r1 c #B7FDF7", +"s1 c #BAFFFB", +"t1 c #B8FFF9", +"u1 c #AAF4EC", +"v1 c #80D2CB", +"w1 c #89D6CF", +"x1 c #ACF4ED", +"y1 c #BCFEFA", +"z1 c #BEFFFC", +"A1 c #BFFFFC", +"B1 c #BEFFFB", +"C1 c #B8FBF6", +"D1 c #9EE7E0", +"E1 c #64B7B1", +"F1 c #9AE5DE", +"G1 c #B5FAF3", +"H1 c #BBFFFA", +"I1 c #B9FEFA", +"J1 c #AFF7F0", +"K1 c #8DDAD3", +"L1 c #77C8C1", +"M1 c #A6EFE8", +"N1 c #B6FCF7", +"O1 c #BBFDF9", +"P1 c #A8F0E9", +"Q1 c #7CCDC5", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . ", +" + @ ", +" # $ % ", +" & * = ", +" - ; > , ", +" ' ) ! ~ { * ", +" ] ^ / ( _ : < ", +" [ } > | | ~ 1 2 ", +" @ 3 _ | | | 4 ; ", +" 5 , 4 | | | 6 7 8 ", +" 9 ; 0 a a a a a ( , ", +" b c 6 a a a a a 6 d * ", +" e { a f f f f f g h { i j [ k 5 5 @ l ", +" m n o a g g g f f f f 6 : 5 < p q r s t u % v w k x [ ", +" y z ( A B C A A A A A D 6 / E d | | F ~ G d : c H , p z I t % J K L x ", +" @ = | C A A A A A A A A D 6 1 1 M N C D g D f f h 6 O 4 _ o G / 1 P = * Q < $ R w k 5 @ ", +" 5 8 S A A T A A T T A A A A ( U e : S C A A T A A T V T V A g g B a 6 | W ( ~ d X ! 1 Y Z * t ", +" ` 1 B .T T ..T T T .T T ..C ~ I o D ..T ....+.V +.T T T .....@...T T A A #.A D B f h $.d p ", +" % > %.&.@. .*. . .@.=. . .*.-.;.>. ,.0 +.*.*.*.*...*.@. . .*.*.@.*.*. .*. .*.&.&.@.*. .@...#.( '. ", +" ).>.+.*.*.*.*.*.*.*.*.*.*.*.*.-.!.~. {.6 +.*.*.*.*.&.].*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.C ^. ", +" < O @././././.(.(._./.(./.(.(./.].:./ { D ].(./.(./.(./.(.(./.(./.(.(.(.(./.(._.(.(.(.(.(./.].C <. ", +" Q 6 [./././.(./.(././.(.(./.(./.(.[.h 1 z ~ T ]././.(.(.(.(.(.(.(.(.(.(./.(././.(.(.(.(.(.(.(.(.].B : }. ", +" |.Z f (._.1.1._.2._.2.1._.1.1._.1._._.@.6 U 6 @.1.1.1.1.2._.1._._.1.1.1.1.1._.1._._._.2.1.1.1.1.1.&.f 3. y - I z ^ $ $ J w ", +" 4.5.C 2.1.2.6._.1.2._.1.1._.6.2.2.2._.1.7.~ ; f (.6.2._.2._.1.1.8.2.6.1.2.2.1.6.1.6.6.2.1.6._.2.2.1.].9.P e / $.h ( o G 3.8 P p Q I t % 9 & ", +" ` : @.0.a.a.0.2.a.a.2.b.6.b.0.0.b.a.2.a.a.+.4 { T a.a.2.0.c.a.d.6.0.0.b.a.6.d.a.6.a.0.d.a.0.b.6.0.6.b.].| ; g (.(.[.e.@.+.T D f.h W g.{ ! P 8 = Q i e h.w i. ", +" - j.].k.l.a.0.k.k.k.0.k.a.a.a.k.a.0.k.k.m.b...d 4 ].a.m.k.0.m.k.a.a.m.0.a.0.k.k.0.a.a.k.a.a.k.m.m.0.k.k.&.( d T 6.m.a.k.a.6.0.6.6././.e. .7.T n.a O ^.d X : 1 ,.3 n $ R ", +" $ ( _.m.k.k.a.m.k.k.m.k.m.k.k.k.m.k.m.0.m.k.6.A ! = a 1.k.k.k.m.m.k.k.m.m.k.m.0.k.m.k.a.m.k.0.k.k.m.k.m.m.0.o.j. _ ].k.0.m.k.0.m.k.p.k.m.m.k.k.k.a.6.6._.(.].*...A D h O _ 3. ", +" I h q.r.s.r.t.k.r.r.m.m.u.m.u.u.r.m.m.m.u.s.u.b.D ; D 1.r.m.u.t.m.r.u.u.v.k.k.r.r.r.r.m.u.u.m.k.u.m.k.r.r.k. .> U h (.k.r.m.u.m.m.u.m.k.r.m.r.u.r.s.u.t.u.k.m.m.m.0.0.2.8...d ", +" Q B q.t.t.r.u.u.u.u.t.u.u.t.r.r.t.r.u.u.u.u.t.u.2.f. { .m.u.u.t.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.r.r.u.u.u.r.w.#. 1 C 0.u.t.r.u.r.u.t.r.u.u.u.u.r.u.u.u.u.t.u.u.u.u.u.u.u.q. .{ ", +" P C s.u.v.t.r.t.t.t.u.u.u.u.u.u.t.r.u.u.u.u.r.u.r.x.( ^.x.m.t.u.t.u.u.u.t.u.r.t.u.t.u.r.t.u.t.u.u.u.t.r.u.u.s.c.f > .m.t.t.u.r.u.u.u.u.u.u.u.r.t.u.r.u.u.u.u.t.t.u.u.u.t.0.#. ", +" k ! ..y.t.t.z.t.A.t.A.z.B.t.t.t.t.t.t.t.t.z.t.C.t.B.t.].~ f.b.D.B.t.t.t.t.B.t.t.z.t.A.t.t.E.B.A.B.z.t.z.t.t.t.B.t.8.0 ~ (.v.z.u.B.z.B.z.z.t.z.t.t.t.t.t.t.t.t.t.A.A.B.u.z.z.F.0.n. ", +" ` d 8.z.G.G.H.G.A.z.G.E.A.H.z.z.H.H.G.z.z.H.G.G.G.H.G.v...{ H V 0.I.H.z.H.H.H.z.z.E.G.G.z.G.G.H.A.z.H.G.A.H.G.z.H.H.A._.~ f.0.z.B.H.H.H.z.E.G.z.H.H.z.H.G.H.z.z.G.G.H.A.G.H.H.G.B.0.J. ", +" - >.c.K.K.K.K.K.G.H.K.K.G.K.z.H.K.K.K.H.H.K.K.K.K.K.K.H.r.L. > *.A.G.H.K.K.K.H.H.K.K.K.H.K.K.K.K.H.K.K.G.K.G.H.K.K.K.t.&.<. ; +.s.G.K.K.K.H.K.K.H.K.H.G.K.K.K.H.H.K.K.K.G.K.K.K.K.I.M.b.O ", +" d 2.N.O.P.Q.O.P.Q.R.N.O.O.K.O.Q.S.N.P.O.O.O.O.P.P.O.O.O.r.#. W a.G.S.P.O.K.O.P.P.O.O.P.O.O.P.O.P.O.K.O.P.N.S.O.O.K.O.A.[. : /.z.P.T.N.P.O.N.O.O.S.N.P.O.K.O.Q.O.O.P.O.P.O.O.P.P.S.G.1.^. ", +" , V t.O.O.O.O.O.Q.P.Q.P.O.P.O.P.O.Q.O.O.P.O.P.O.P.O.O.O.N.m.f. g y.N.O.O.O.O.O.P.O.P.O.O.O.P.P.O.O.P.P.P.O.O.P.O.P.O.N.v.V U.6.H.O.P.P.O.O.P.O.Q.P.Q.O.O.P.O.P.O.P.O.O.O.P.Q.O.O.N.z.]. ", +" G V.H.O.P.W.P.W.P.Q.P.O.P.O.O.P.W.W.W.X.W.W.P.Q.X.W.O.W.R.b.O T B.O.W.X.W.X.W.X.W.Q.P.X.X.Q.X.P.X.P.Q.O.O.Q.P.X.W.W.Q.v.B S r.O.Q.Q.X.X.O.O.P.O.O.X.X.W.X.X.W.X.W.Q.X.Q.Q.P.P.X.Y.B... ", +" ( d.H.X.W.X.X.X.X.X.W.Q.Z.Q.W.X.X.X.X.O.W.X.P.X.X.X.W.Q.`.1. : /.H.X.W.X.X.X.P.Q.X.P.Q.W.X.X.W.X.X.W.W.W.Q.W.X.W.X.X.N.0.6 A B.P.X.X.X.W.W.W.W.W.W.X.X.X.X.Q. +X.P.T.W.X.X.X.X.X.P.B.N ", +" g t.P..+Z.W.Z.W.W.W..+++@+X.Z.W.Z.W..+W.Z..+W.W.W.W.W.W.H.*. U.b.N.Z.Z.W.W..+X.W..+#+W.Z.Z.W.W.Z.W.W.++#+X.Z.Z.W.Z.Z.N.a.U. : [.K.W..+W.Z.Z.W.Z.++X.W.W.W.W.#+X.W..+.+W.W.W.W.Z.W..+O.v.f. ", +" +.A..+++.+++++++Z.++++.+Z..+++.+++++$+++++W.++++++$+++Z.M.+. a r. +++++++++Z.++++.+Z.++.+.+++++$+++++++Z.++++++++++Z.S._. _ b.Q.$+++++.+Z.++++Z.++++++++++W.$+++++Z.++++++++++++.+T.q.W ", +" / /.Y.%+&+*+&+*+&+&+%+&+*+$+*+=+++%+-+*+$+*+*+*+*+&+*+&+%+G.D #.A..+-+%+++&+&+*+%+&+&+;+=+*+*+&+*+%+*+&+.+%+&+%+++&+=+H.[. f.v..+&+*+=+*+>+%+&+%+++&+*+$+*+*+*+%+&+&+&+&+&+&+*+*+%+O.d. ", +" ~ l.W.;+-+&+-+&+-+&+&+-+&+-+-+&+-+-+&+&+-+&+-+-+&+&+-+-+.+r.h : e.O.&+-+-+-+-+&+-+-+&+-+&+-+-+&+-+&+&+-+&+-+&+-+&+&+-+%+N.V +.`.;+-+-+&+-+-+&+&+&+-+-+&+-+&+&+-+&+-+&+-+&+-+-+&+-+&+O.e. ", +" f B.#+-+,+'+&+)+)+,+!+!+,+)+&+~+)+)+)+)+)+)+&+&+,+!+&+)+++q. o a.;+!+,+)+)+)+)+)+)+~+-+!+{+&+,+)+)+!+{+!+]+!+-+)+)+)+^+G.B ].O.,+!+~+)+)+)+!+-+)+,+!+)+)+)+)+)+)+{+-+&+)+&+!+)+]+*+S.T ", +" +.K.~+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+{+#+2. h B.^+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+>+m. >.0.%+/+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+^+G.B ", +" /. +/+)+)+)+)+)+)+)+)+]+)+)+]+)+)+)+)+)+)+)+)+)+)+)+)+)+ +&. T K./+(+)+)+)+)+)+)+)+)+)+)+)+)+]+)+)+)+)+)+)+)+)+)+)+_+.+b. h t.>+)+)+)+)+)+)+]+)+)+]+)+)+)+)+]+]+)+)+)+)+)+)+)+)+)+*+v.6 ", +" d w.>+(+(+(+(+(+(+(+(+(+(+(+:+(+(+:+(+(+(+(+(+(+(+(+(+(+)+O.T (.W.)+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+(+:+(+(+:+(+W.x. A K.{+<+(+(+(+(+(+(+(+(+(+(+(+(+:+(+(+(+(+(+(+(+(+(+:+(+*+k. ", +" 6 G.)+[+(+[+[+[+[+[+[+}+[+<+<+<+|+1+[+}+}+[+}+[+:+[+[+|+)+N.g o 0.>+(+<+<+<+<+[+[+[+[+[+<+<+[+}+[+<+[+[+[+[+<+<+<+<+<+:+2+*. (. +)+3+[+[+[+}+4+}+[+<+<+<+<+1+[+[+[+[+[+<+<+[+<+[+[+}+;+6. ", +" T T.(+5+5+5+5+[+[+5+5+5+3+5+5+5+3+[+5+5+5+3+3+4+[+5+5+[+)+B. h A.^+5+5+3+5+3+5+3+3+5+3+5+[+3+5+5+3+[+5+5+5+5+[+[+5+5+1+T.T o b.*+3+5+[+3+[+3+3+5+<+[+5+3+5+5+5+5+[+5+5+5+5+5+[+5+5+5+++(. ", +" (.6+5+7+8+7+8+7+8+7+7+7+8+7+8+8+8+8+8+8+7+8+8+8+8+7+7+9+,+m. A O.<+7+7+8+7+7+7+8+7+7+8+8+7+8+8+8+7+8+8+8+7+8+7+8+7+7+<+H. 6 B.)+8+8+8+7+8+8+8+8+8+8+8+7+8+7+7+8+8+8+7+7+8+7+7+7+8+[+ +%. ", +" o k.{+9+0+8+8+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+8+7+7+8+8+7+9+*+6. &.++5+a+7+7+7+7+7+7+8+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+0+)+b+ C +}+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+7+8+7+7+7+7+7+7+7+:+K. ", +" f.A.[+c+a+a+c+c+c+c+c+c+c+c+c+c+c+c+c+c+c+a+c+c+a+a+c+c+a+>+&. s.d+c+c+c+c+c+c+c+a+a+c+c+a+c+c+c+c+c+c+c+c+c+c+c+c+c+e+)+b. (.^+f+c+c+c+c+c+c+c+c+c+c+c+c+c+c+c+a+a+c+c+7+c+c+c+c+c+[+z. ", +" #.Q.8+c+g+c+c+h+c+c+c+c+c+c+c+c+c+g+g+c+g+c+c+g+g+c+c+g+7+.+#. W E.3+c+c+c+c+h+c+g+g+c+c+g+c+c+c+c+c+c+c+c+c+c+c+c+c+g+i+~+(. 0.(+c+h+c+c+c+c+c+c+g+g+c+c+c+g+c+g+g+h+c+g+c+c+c+c+g+a+d+y. ", +" (.^+e+g+j+k+g+g+g+g+g+l+g+c+g+g+c+g+g+g+g+g+l+g+g+g+g+g+m+N. A X.5+n+g+j+g+l+g+j+j+g+g+g+k+g+g+g+g+g+g+g+c+l+l+g+g+j+a+.+.. W H.5+g+g+g+g+j+k+g+l+c+g+l+g+c+g+g+j+j+l+l+g+g+c+g+g+g+a+{+b. ", +" 0.(+c+l+o+l+l+p+l+o+o+p+p+g+o+l+l+p+j+o+p+o+j+l+p+p+l+l+5+A. (.~+c+o+p+l+p+g+j+p+p+j+j+o+l+g+o+p+o+o+p+p+g+l+l+l+p+n+0+ + D +8+l+n+j+l+o+l+l+l+j+l+o+j+l+l+g+l+p+g+g+p+p+g+l+o+q+c+~+]. ", +" W G.[+p+p+p+p+p+l+p+o+o+p+p+p+p+p+o+o+p+p+p+p+p+p+p+o+p+j+(+k. 0.(+h+p+p+o+j+l+o+o+p+l+p+p+o+o+o+p+p+l+l+l+p+o+p+o+o+g+3+H. @.*+a+l+p+l+l+p+p+o+p+o+l+p+p+l+j+o+l+p+l+l+o+p+p+l+o+p+a+Z. ", +" B +a+p+l+p+o+o+p+p+o+l+l+o+p+p+p+l+r+s+o+o+p+p+o+p+p+p+g+t+(. 4 A.3+j+o+l+p+o+p+o+l+o+l+l+p+p+p+o+q+o+p+l+o+p+o+p+l+p+r+<+b+ b./+l+p+o+l+p+o+l+p+l+p+l+p+l+q+o+p+l+o+l+l+o+p+l+p+o+l+9+K. ", +" ].~+l+u+u+u+u+u+u+u+p+u+u+v+r+u+u+u+u+u+u+u+u+u+u+u+u+u+g+*++. D w+a+p+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+p+u+u+r+v+u+u+u+u+p+(+b. z.7+s+u+u+u+u+r+r+u+u+p+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+p+9+G. ", +" l.3+r+u+u+u+x+x+u+y+u+x+z+u+u+x+x+x+u+u+u+u+x+x+u+u+u+u+k+W. @.~+p+y+x+u+u+u+u+u+x+u+u+u+u+u+x+u+y+u+u+u+z+u+u+u+u+y+o+/+(. f.W.j+y+u+x+u+u+x+u+x+y+u+x+u+x+x+x+u+u+u+u+x+x+x+u+x+y+r+[+w. ", +" H.f+u+x+y+A+x+y+y+y+y+y+A+y+A+y+A+y+y+y+y+y+y+x+y+y+u+x+e+S. 8.B+u+A+y+y+y+y+y+y+y+y+u+y+y+x+x+y+y+y+y+y+y+y+y+A+y+y+l+%+ @.*+l+A+y+u+y+A+y+y+y+y+y+y+A+A+A+y+y+y+y+x+y+A+y+x+A+y+r+d+&. ", +" f W.o+C+D+D+C+C+E+C+E+F+C+C+C+F+y+E+E+E+C+E+E+C+G+E+C+D+A+a+C. z.c+F+C+E+C+E+C+E+D+D+E+E+E+E+C+C+C+C+F+F+E+C+C+A+C+E+C+j+Q. c.}+y+E+C+E+C+C+E+C+C+E+C+C+E+D+C+C+G+D+C+C+D+D+C+C+G+E+r+*+ ", +" T &+x+E+A+E+D+H+D+D+D+D+H+H+H+D+D+D+D+H+C+I+D+F+A+D+D+H+A+3+0. f.#+q+G+D+H+E+H+H+J+A+D+H+F+E+D+H+D+D+D+D+D+D+H+D+D+D+H+E+e+t. z.e+y+D+D+D+H+D+D+H+D+H+H+H+A+D+D+C+F+E+H+F+F+H+H+H+D+C+p+w+ ", +" 2.K+y+D+H+D+D+D+H+D+H+D+D+D+H+D+D+D+D+D+D+D+H+D+H+D+D+H+x+d+ T t+r+D+D+D+D+H+D+D+H+D+D+H+D+D+D+D+D+H+D+D+H+D+D+D+D+H+F+9+k. h X.g+C+H+H+D+H+D+H+D+D+D+H+D+D+H+H+D+D+D+D+D+H+D+D+H+D+C+c+S. ", +" z.c+E+L+M+M+M+M+L+L+L+M+M+M+L+M+M+M+L+M+M+L+M+M+M+M+M+H+s+*+ 2.[+A+M+M+M+M+M+M+M+M+M+M+L+M+M+M+L+M+M+L+L+M+M+M+M+M+L+A+}+1. 7.!+s+L+L+L+L+M+M+M+M+L+M+M+L+M+M+M+M+M+M+L+M+M+M+L+M+M+C+0+r. ", +" +o+L+M+N+M+L+M+M+M+L+M+M+M+M+L+M+M+L+L+M+L+L+M+L+M+M+O+o+ + t.0+C+M+M+L+M+L+M+M+M+M+M+P+M+L+M+L+L+M+M+L+L+L+M+M+M+H+s+!+ _.B+C+M+M+M+M+M+L+M+L+M+M+M+M+L+M+L+L+M+L+L+M+M+M+M+Q+L+C+K+_. ", +" A t+x+Q+R+S+N+T+T+S+N+S+S+M+S+S+S+M+N+S+Q+N+S+Q+S+S+N+T+O+g+G. O.l+M+S+Q+S+S+S+S+Q+S+N+R+S+N+T+R+M+S+S+Q+S+N+S+Q+M+N+O+r+Z. s.c+H+S+S+S+S+N+S+Q+Q+Q+S+S+N+Q+N+Q+S+N+N+T+R+S+S+R+M+S+A+,+ ", +" 2.3+U+T+R+R+T+T+R+T+R+T+T+T+T+R+T+T+T+T+R+T+T+T+R+T+R+R+H+V+q. D ^+y+W+R+R+R+R+R+T+R+T+R+R+R+T+R+T+T+T+T+T+T+R+T+T+T+R+S+o+X+ O.Y+Q+R+T+T+R+T+T+T+T+R+R+R+T+R+T+T+R+R+R+R+R+T+R+T+T+R+z+>+ ", +" t.c+N+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+L+3+ (.<+O+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+`+N+n+B. N ~+y+ @Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+ @.@P. ", +" T.p++@`+`+`+`+`+`+`+`+`+`+`+`+`+Z+ @`+`+ @`+`+`+`+`+`+`+G+)+ b+e+@@`+`+`+ @`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+ @`+#@9+ e.}+L+`+`+`+`+`+`+`+`+`+`+`+`+$@Z+`+`+`+`+`+`+`+`+`+`+`+@@g+B. ", +" ^+A+$@`+`+`+`+`+`+`+`+`+%@`+%@`+`+`+`+`+`+`+`+%@%@`+%@&@x+w+ N.v+@@`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+%@`+`+`+`+`+`+Z+E+)+ 0.c+#@`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+%@%@`+`+`+`+M+0+w. ", +" (.[+N+*@*@*@=@*@*@-@*@*@-@*@;@-@*@*@*@;@*@;@-@;@;@*@=@=@%@r+X+ *+J+>@*@;@*@*@*@*@*@=@*@*@*@*@*@-@*@-@;@=@,@*@*@*@*@*@>@J+^+ S.Y+&@*@-@,@=@,@*@=@-@=@-@;@,@*@-@;@-@-@*@;@-@*@*@-@-@%@N+3+ ", +" 0.k+W+;@'@,@;@'@,@-@,@;@'@;@,@,@;@'@;@;@,@,@;@;@'@,@,@,@&@g+r. *.[+N+*@;@,@;@;@-@;@,@;@;@-@,@,@,@'@;@;@,@,@'@;@'@-@'@)@!@u+ + >+F+~@-@,@,@,@;@=@,@-@{@,@,@;@,@-@)@,@;@;@;@-@'@,@;@;@;@D+{+ ", +" K.r+*@)@)@)@)@,@'@)@)@)@)@)@)@'@)@)@)@)@)@)@)@)@)@)@)@]@ @7+ q.h+&@)@)@,@{@)@)@)@)@)@)@'@)@,@)@,@)@)@)@)@)@)@,@)@)@,@^@q+A. .<+N+,@/@)@)@)@)@)@)@'@)@)@)@)@)@)@)@'@)@)@'@)@)@)@'@)@-@(@w. ", +" ;+C+;@_@)@/@/@)@)@'@/@,@'@/@:@/@'@)@/@/@'@'@/@/@)@/@/@=@S+1+ G.r+^@/@:@)@)@)@/@/@'@/@:@)@/@/@)@)@)@/@)@,@)@:@/@:@)@:@%@e+ b.a+&@:@/@/@'@)@<@:@)@:@/@/@:@,@)@/@:@)@)@/@:@/@/@/@)@)@~@A+3 ", +" ..1+S+;@)@_@/@)@_@/@_@)@_@_@_@_@/@_@_@_@_@)@_@:@_@_@/@,@[@H+&+ .+C+]@_@_@_@,@_@_@/@<@:@)@_@_@)@:@_@_@)@/@_@_@_@_@_@_@_@Z+[+ z.n+}@|@:@)@_@_@:@/@_@_@_@_@/@:@/@_@_@)@_@)@/@_@:@)@_@1@%@8+ ", +" 6.e+S+:@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@:@/@_@{@A+2@ 3@N+]@_@_@_@_@_@_@_@:@/@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@]@#@'+ W.C+{@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@_@/@)@_@_@_@_@_@_@4@$@w+ ", +" B.v+)@5@_@6@5@_@7@_@_@_@_@_@_@_@6@8@8@6@_@_@7@6@_@6@5@_@,@p+t. 1.7+9@4@_@5@_@5@8@6@_@7@7@_@6@7@8@6@_@_@_@_@_@_@_@5@_@5@:@D+W. ]+N+_@8@5@8@6@_@_@_@_@_@_@6@8@5@_@5@_@8@7@6@_@5@0@8@5@:@@@Q. ", +" %+D+<@7@5@5@7@5@5@5@7@5@5@7@5@7@7@6@6@7@5@_@5@5@5@5@5@8@=@c+ t.r+,@6@5@5@0@8@5@7@7@5@5@7@5@7@5@5@5@5@5@7@5@5@5@7@5@6@)@u+E. a@f+>@5@5@5@7@5@5@7@5@7@6@6@7@5@_@7@5@7@5@5@5@5@5@7@5@7@b@M+(. ", +" z )+c@6@d@e@7@7@7@f@d@7@d@7@e@7@f@5@f@f@5@f@7@5@7@d@d@f@7@%@5+ T.E+8@d@f@5@e@f@7@7@7@d@5@e@e@7@7@d@e@7@5@f@7@7@f@5@d@e@;@q+ B.q+{@7@e@7@f@7@7@5@e@f@e@7@7@f@7@f@5@f@7@5@f@7@7@e@f@7@{@a+g@ ", +" G &. (.f+>@d@h@h@h@h@e@i@h@7@i@h@h@7@d@h@7@d@h@h@7@h@i@7@h@h@6@ @{+ )+&@d@d@d@i@j@d@h@h@7@d@i@i@h@h@e@h@h@0@d@h@h@7@d@h@h@e@~@a+ Q.D+|@h@h@j@h@i@d@d@i@i@d@7@h@h@7@d@i@d@7@i@h@h@h@j@h@d@:@k@ ", +" f %+&+ s.p+:@h@i@h@h@d@h@h@e@h@h@h@e@h@h@e@h@i@i@d@h@h@e@h@h@l@7@D+Q. [.8+*@6@h@h@h@h@h@h@e@h@h@h@h@i@d@h@h@e@e@h@h@d@i@h@h@h@m@$@d+ &+@@7@i@h@h@i@h@l@h@i@d@i@h@h@d@h@h@d@i@h@h@h@i@h@h@i@h@,@;+", +" .c+E+!+ W.D+7@n@i@n@o@p@h@o@o@n@n@n@o@n@n@o@n@n@o@n@n@n@h@o@n@i@:@A+K. r.q@:@p@n@n@n@n@n@n@o@o@o@i@o@n@o@h@p@n@o@n@o@n@n@o@n@n@7@@@&+ 8+>@e@o@n@h@h@n@o@n@o@n@n@n@o@n@o@o@n@o@o@o@i@o@n@h@h@o@&@", +" 2.u+[@D+T. {+$@l@o@n@n@n@n@n@n@o@n@o@n@n@o@n@n@n@n@o@n@o@o@n@n@n@o@)@l+ S.E+f@n@o@n@o@o@n@n@n@n@o@n@o@n@n@n@o@n@o@o@n@n@o@n@o@n@6@E+S. 0.q+4@n@n@n@n@n@o@o@n@o@o@n@o@o@n@o@n@n@n@o@n@n@n@o@n@n@7@", +" P r.E+r@8@r+ 9+-@s@o@n@n@o@n@n@n@o@n@n@o@n@n@o@n@o@n@n@n@n@t@n@o@n@p@;@m+ ~+T+i@u@n@o@n@v@n@n@n@n@o@n@o@o@n@n@n@n@n@n@o@o@n@o@n@n@_@Y+ H.E+7@n@o@n@n@o@o@v@n@o@n@n@n@o@o@o@n@n@n@n@n@o@n@n@n@p@", +" ! I.M+p@v@)@w@ a.l+_@n@x@o@n@n@o@n@y@v@n@x@x@n@n@u@v@o@o@n@x@v@n@v@v@n@l@^@d+ [+-@n@x@o@n@z@v@v@v@x@x@n@n@o@n@n@n@x@n@v@v@z@n@o@n@z@o@,@a+ %+R+d@n@n@o@n@z@z@n@n@x@x@o@n@x@n@x@v@n@x@n@v@n@v@n@n@", +" { Z.&@o@n@p@-@[+ H.(@7@x@v@x@x@n@x@x@z@v@x@x@x@v@x@x@n@v@v@n@n@x@n@x@x@u@i@@@#+ 8.k+4@u@n@x@x@n@v@x@v@n@x@v@n@x@v@x@x@x@z@x@y@x@n@v@z@n@o@*@1+ (+>@o@x@v@n@x@x@x@x@x@z@n@x@z@n@n@z@x@v@x@z@v@x@v@n@", +" ~ ]+)@A@B@C@x@Z+~+ Z.@@n@C@C@C@C@D@B@E@B@z@x@D@D@z@D@B@B@D@B@z@C@C@C@C@C@D@l@E+ A.z+f@C@C@F@B@B@C@D@x@D@C@C@C@A@C@x@B@z@B@n@B@D@C@F@G@C@v@Z+*+ _.g+8@B@C@B@z@v@x@D@v@B@C@C@B@B@B@C@B@x@z@D@D@C@C@D@", +" 6 9+7@H@I@A@A@i@S+Z. (+)@D@I@A@B@A@A@I@I@I@C@I@A@I@B@C@A@I@A@A@A@A@I@I@B@A@I@d@u+ $+S+n@I@A@A@I@A@I@C@A@I@A@I@C@C@I@I@I@I@C@A@A@I@C@B@I@J@o@L+Q. u.y+i@B@B@I@C@A@I@D@C@C@I@A@I@A@A@I@C@I@I@I@I@C@D@", +" D g+l@H@A@I@B@A@l@y+ e+:@A@I@x@I@I@A@A@A@I@I@A@A@I@A@I@A@A@A@B@G@I@A@x@A@I@C@8@e+ (+-@z@A@I@A@I@A@I@A@B@I@A@B@D@I@I@A@I@A@A@A@A@A@I@I@A@K@h@.@ +N+i@z@I@I@I@A@I@A@I@I@I@A@A@A@I@I@I@B@A@A@D@B@", +" [.p+i@L@I@I@I@A@D@0@l+ u.y+d@I@I@I@A@I@I@A@I@A@I@A@A@A@I@I@A@A@I@A@I@A@I@A@I@J@E@*@1+ e+/@z@A@A@I@I@I@A@A@A@I@A@A@A@I@I@A@A@I@A@I@I@A@A@I@A@z@8@n+ )+*@z@L@A@I@I@I@I@A@I@I@I@I@A@I@A@I@A@A@I@A@A@", +" b.F+x@M@I@H@H@H@L@B@<@m+ X.R+x@L@H@H@H@L@H@H@H@H@L@L@H@H@L@H@I@H@H@L@L@L@H@H@H@L@B@Z+w+ m.y+l@I@N@H@L@A@H@H@L@H@H@H@H@H@H@H@L@H@H@H@L@H@H@H@L@I@C@/@3+ e+8@A@H@L@H@H@H@H@H@L@L@H@H@L@J@H@L@H@L@H@L@", +" t.M+B@H@H@H@L@H@H@J@z@>@{+ {+*@v@H@H@L@H@H@H@I@L@H@I@L@L@H@L@H@H@H@I@H@A@L@H@I@H@L@n@H+ O.H+n@H@H@H@H@L@H@L@I@I@H@H@L@H@L@H@I@L@H@I@I@H@H@H@H@H@z@`+^+ b.q+d@L@H@H@H@H@I@H@I@I@H@H@H@H@H@J@L@I@L@I@", +" ! X+^@L@N@O@N@M@N@H@N@H@v@ @#+ 7+|@C@M@P@M@L@N@H@M@N@H@N@M@H@M@M@N@H@H@N@M@H@H@M@M@L@M@Q@R@ ~+*@C@M@N@M@N@I@L@S@M@M@L@N@M@H@N@M@M@N@N@M@N@H@S@H@N@H@v@@@ G.E+n@M@L@H@S@M@T@T@H@T@N@O@N@N@L@L@H@N@H@", +" { *+U@P@V@M@H@H@V@L@N@M@N@v@A+ 0.p+f@M@V@M@H@T@N@M@V@V@M@N@N@T@H@M@N@N@T@M@H@T@M@L@H@T@O@W@j+ K+:@A@T@M@M@H@P@V@P@H@M@V@N@L@M@T@M@T@T@T@M@T@V@H@M@M@N@t@F+ *+~@K@H@N@T@M@P@V@T@M@M@M@N@H@H@N@T@T@H@", +" 4 )+|@X@T@V@T@T@V@T@T@T@T@M@d@p+ G.L+v@T@T@T@V@V@T@V@M@N@V@T@T@T@T@V@V@T@T@V@T@T@T@T@T@V@Y@Z@B+ l+d@M@T@T@T@T@V@T@T@V@V@T@T@V@T@T@V@T@H@V@V@T@V@T@T@T@M@d@l+ K+4@L@V@M@M@T@T@L@N@T@T@T@T@T@T@V@T@T@", +" | `@d@V@V@T@T@T@V@T@T@T@T@T@O@|@`@ .+9@K@V@T@V@T@T@T@T@V@T@T@T@V@V@T@T@T@V@T@T@T@V@T@T@T@T@E@^@%+ z.D+o@T@T@V@T@T@T@T@V@V@T@T@V@V@V@V@T@T@V@T@T@T@V@V@T@T@A@]@ # n+e@O@V@V@T@T@T@T@T@T@V@V@T@T@V@T@V@", +" A j+x@.#+#+#+#X@T@V@V@T@V@T@T@Y@:@,+ 3+_@L@@#T@T@.#.#+#@#.#T@.#+#+#T@V@T@T@T@V@+#+#+#T@##.#.#z@S+ k@%@K@T@V@T@T@T@V@.#T@@#+#X@V@.#.###+#.#+#+#T@##T@V@T@T@D@%@-+ A.I+x@P@##.#+#V@##+#+#+#T@T@T@T@T@T@", +" &.y+B@.#.#.#.#.#.#.#.#####.#.#+#L@Z+ q+d@X@.#.#+#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#+#+#.#.#+#$###v@A+ :+)@M@.#.#.#.#.#.#.#@#+#.#.#+#.#.###.###.#.#.#.#.#.#.#.#G@R+ #+Z+L@%#.#####.###.#.#.#####.#.#.#", +" b.H+A@.#.###.#.#.#.#.###.#.#.#.#.#B@U+ r.F+x@##.#.###.#.#.#.#.#####.#.#.###.#.#.###.#.#.#.#.#.#N@7@g+ &#e@T@.###.#.#.#.#.#####.#.#.#.#.###.#.#.#.###.###.#.#+#x@E+ )+{@P@.#.#.###.#.#.#.#.#.###.#.#", +" v.c@M@$#.#%#.#.#$#.#X@.#$#@#.#%#$###v@s+ T.&@A@.#$#%#.#$#$#.#$#.#.#$#$#+###$#$#.#$#$#.#.#$#$#.#$#T@_@3+ x+x@%###+#$#$#.#.#%#.###$#$###.#$#.#$#.#.#.#$#+#+#$#$#+#s@r+ 7+e@##.###$#.#*#%###.#$#.#+#$#", +" 1 T.;@+#$#$#$#$#$#$#$#.#$#$#*#$#.#$#$###f@a+ {+-@M@.#.#$#$#$#$#$#$#$#$#$#.#$#$#$#$#.#$#.#$#$#$#$#$#$#H@;@~+ S.@@Y@*#.#$#$#$#$#.#.#%#$#.#%#$#$#$#$#$#$#$#$#.#.#$#$#$#V@6@7+ u+n@+#$#$#$#$#$#$#$#$#$#.#$#", +" : *+6@.#$#$#$#$#$#.#.#$#$###%#$#$#$#$#$#T@{@]+ 7+f@X@$#$#$#$#$#$#$#$#.#.#$#$#.#.#$#$#$#$#$#$#$#$#$#$#$#I@&@ *+~@M@$#.#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#%###$#$#.#.#$#$#N@,@~+ H.#@A@$#$#$#$#$#$#$#.#.#$#%#", +" j.(+d@$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#Y@&@ r+o@.#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$###v@x+ 3+8@+#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#L@@@ &+*@M@$#$#$#$#$#$#$#$#$#$#", +" 6 8+p@$#$#$#=#$#$#=#=#$#$#$#$#$#$#$#$#$#$#$#D@-# A.D+G@%#$#$#$#=#=#$#$#=###$#$#;#$#$#=#$#$#$#$#$#$#$#$#=#X@f@># o+p@%#=#$#$#$#$#$#$#$#=#$#$#$#=#=#$#$#=#$#$#$#=#$#$#;#$#x@C+ }+_@X@$#$#=#$#$#$#$#.#$#", +" D p+z@=#=#=#,#,#=#'#)#=#=#=#=#=#=#,#=#=#=#!#%#v@u+ W.;@+#=#=#=#,#,#=#,#,#=#=#'#'#=#=#,#=#=#=#,#=#=#=#=#'#!#+#|@K+ D.H+C@,#=#=#'#=#=#=#=#!#=#=#=#,#)#=#=#)#,#=#=#,#=#=#'#!#.#s@Y+ j+x@.#=#,#,#=#=#=#=#=#", +" &.A+T@~#)#{#,#)#{#,#)#]#]#{#)#)#~#]#)#)#~#,#)#;#n@k+ 3+7@=#)#)#=#)#{#]#)#{#~#~#{#)#)#)#)#)#{#)#{#~#~#{#'#~#]#+#{@ ++*@##,#)#!#)#)#)#)#,#)#~#)#)#)#)#]#)#,#)#)#{#~#)#,#)#]#^#Q@8+ L+I@=#,#]#~#)#{#)#]#", +" k.@@$#/#(#_#]#]#(#]#)#/#/#(#(#]#(#]#)#/#/#{#(#(#:#7@1+ q+D@~#_#)#(#(#/#/#(#(#/#]#]#/#]#]#]#(#<#]#[#/#(#/#]#_#]#N@>@ [+|@.#~#]#]#/#_#_#)#/#/#(#]#)#/#/#(#(#_#_#~#(#]#]#]#~#(#.#8@(+ W.}#@#)#/#/#]#(#(#/#", +" G.,@'#/#_#/#_#_#_#_#/#_#_#_#_#_#_#_#/#_#_#_#_#_#_#%#;@ |#N@~#/#_#/#/#_#_#_#_#/#_#/#_#_#_#/#/#_#/#/#/#_#_#/#_#)#N@O+ g+x@!#_#_#/#_#_#_#/#_#/#_#/#_#_#_#/#_#_#_#_#_#_#_#/#_#/#.#;@ ]+5@'#/#/#_#_#_#_#", +" W.6@~#1#2#_#_#3#4#/#_#3#1#3#_#_#2#_#_#3#3#/#/#_#2#(#5#R+ +;@##(#1#3#_#_#2#_#2#_#_#3#1#_#_#_#/#/#_#2#/#_#1#3#_#/#/#D@.@ J+O@/#_#/#_#_#_#_#3#3#_#_#2#/#_#3#1#2#/#_#1#3#/#_#_#_#_#N@ @ c+n@]#4#_#_#3#1#", +" { )+x@6#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#6#1#O@C+ (+0@{#2#6#2#2#2#2#2#2#2#7#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#/#t@7+ T.!@;#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#1#M@F+ D+T@1#2#2#2#2#", +" <.[+G@8#9#9#9#8#9#0#9#9#8#8#9#9#8#9#0#9#9#9#9#8#9#9#9#a#b#A@p+ n+A@/#c#0#8#8#8#9#9#9#8#9#9#8#9#9#d#9#9#9#9#8#9#9#0#9#9#(#r@ (+l@/#8#9#9#8#8#9#9#9#e#9#9#9#8#8#9#9#9#9#9#9#8#9#9#9#f#3#K@n+ P.*@'#8#8#9#9#", +" %+l@_#g#h#i#i#h#j#c#j#i#9#j#h#0#k#j#i#h#i#j#0#h#h#i#i#j#1#E@7+ L+.#9#j#0#c#8#h#j#i#c#j#j#9#k#i#9#h#k#j#j#j#h#h#j#h#9#c#~#_@ j+Y@2#h#h#9#0#k#j#h#j#h#j#h#h#9#h#j#h#l#k#j#9#h#j#9#i#k#1#t@ ]+e@1#9#i#9#", +" y+T@m#k#j#j#k#j#k#g#g#h#k#k#k#k#g#j#k#h#g#k#k#k#j#j#k#h#1#e@ -@)#j#k#k#j#k#j#k#k#k#g#k#k#i#k#k#h#i#i#g#k#h#g#k#j#k#i#,#`+ E+@#l#k#h#k#k#g#k#j#h#g#k#k#h#k#g#k#k#h#i#h#k#g#h#j#n#j#]#8@ o#Y@2#k#h#", +" %@!#k#p#p#p#p#p#p#p#p#p#p#p#p#p#p#q#n#p#p#p#p#p#p#p#p#q#(#)@ /+l@2#p#p#p#p#p#p#q#n#p#p#p#p#p#p#r#p#p#p#p#p#p#p#p#p#p#c#%#D+ -@!#k#p#p#p#p#p#p#r#p#p#r#p#p#p#p#q#q#p#p#p#p#p#p#n#p#q#]#;@ h+%#c#p#", +" %+8@_#n#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#q#,#R+ e+I@a#p#p#p#p#p#p#p#p#p#p#p#q#n#p#p#p#p#p#p#p#p#p#p#p#r#a#N@l+ {+d@3#q#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#n#q#p#p#p#h#;#S+ W+!#s#", +" a+K@0#t#t#t#u#t#u#t#v#u#t#u#w#v#v#w#t#t#t#t#t#t#t#t#u#w#r#*#C+ M+=#x#t#t#w#v#v#w#u#t#u#t#t#t#t#t#t#t#t#v#w#u#t#w#u#w#w#a#A@ c+K@i#t#t#t#u#t#t#w#v#v#w#t#t#u#w#v#v#w#u#t#t#t#t#t#t#t#s#.#x+ T.y#e#", +" F+;#z#A#B#B#B#B#v#C#B#B#u#B#B#u#u#B#B#B#B#B#B#B#B#B#B#B#q#X@ ,@2#w#D#B#B#u#u#B#B#u#B#B#B#B#B#B#B#B#B#B#B#B#v#B#B#u#u#9#l@ E+$#E#B#B#B#B#B#B#B#B#B#v#B#B#u#u#B#B#u#B#B#B#B#B#B#B#B#n#H@ Q.##", +" *@7#F#G#G#H#G#G#H#I#G#A#J#K#H#J#G#I#G#G#I#I#H#K#G#I#K#I#k#E@ {+o@j#H#I#K#F#J#G#G#F#K#I#H#K#J#G#H#G#G#I#J#K#I#I#G#F#G#L#e#:@ U@M#L#G#J#H#J#G#H#I#G#G#H#K#J#F#G#G#A#G#H#I#J#K#G#I#G#H#h#y@ N#", +" l@h#O#P#Q#R#S#S#R#R#S#S#R#S#S#S#K#S#R#Q#G#S#R#R#O#R#R#G#j#l@ e+T@E#G#P#R#R#R#O#S#R#Q#O#S#S#Q#S#S#R#O#S#S#S#T#R#S#R#U#A#1#Z+ l@q#O#S#Q#S#S#S#T#R#S#Q#R#O#S#R#O#S#S#Q#O#S#R#Q#O#S#R#J#i#5@ ", +" 8+J@z#V#W#W#U#X#Y#W#W#X#U#W#Z#W#R#Z#X#Y#`#W#W#X#W#W#W#Y#G#6#,@ E+{#L#R#X#X#U#S#Z#X#W#X#X#W#W#U#W#X#Y#W#W#Y#`#W#W#X#W#S#J#)#A+ 7+T@t#Y#W#W#W#W#W#W#U#Z#W#R#Z#Y#S#Z#X#W#W#Z#Y#Y#W#W#X#Y#I#6#*@ ", +" x+=#L#Y#Z#X#Z#Z#Z#Z#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z# $I#/#c@ >@e#O# $Z#X#Z#Z#Z#Z#Z#Z#Z#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z# $.$@# F+)#H# $Z#Z#Z#Z#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#Z#+$I#@$-# ", +" %@6#R##$$$%$%$&$%$%$&$#$$$#$%$&$%$%$%$%$%$%$%$#$$$%$%$#$G#{# p@v#*$&$&$&$&$%$%$&$%$%$%$%$%$%$%$%$&$%$%$$$#$%$&$&$#$*$w#=$ -@9#Y#*$%$%$%$$$#$%$&$$$#$&$&$&$%$%$#$$$%$%$%$%$%$%$%$#$G#$# ", +" d@x#*$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$$$J#@# a+@#G##$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$-$;$i@ o@x#*$>$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$#$A#M@ ", +" T@F#,$,$'$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$>$,$,$>$,$,$&$L#D@ E+/#X#>$,$,$,$,$,$,$,$,$,$,$,$,$>$,$,$,$>$,$,$,$,$,$,$,$*$h#{@ 8+@#O#,$)$,$'$,$,$>$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$'$!$$$v#B@ ", +" s+]#~${$]$^$]$^$^$]$^$^$^$)$]$)$)$)$]$)$)$]$)$)$]$^$]$/$>$w#f@ ;@($>$]$]$^$]$)$^$]$)$)$]$)$)$]$^$/$/$]$]$]$]$]$^$]$]$)$~$9#S+ z+_#X#_$^$]$]$]$]$]$^$]$]$]$]$^$)$)$]$)$)$^$/$)$]$]$]$)$>$w#:$ ", +" ^@g#>$<$[$<$[$<$[$[$}$[$^$[$<$<$]$<$<$^$|$<$]$1$[$}$}$}$'$p#;@ v@F#)$<$[$[$}$[$}$}$}$<$<$]$|$1$}$<$|$<$|$}$|$<$[$|$]$]$*$]# >@j#&$]$[$<$<$[$|$<$}$[$<$|$<$2$}$<$<$<$<$<$}$<$[$<$]$|$,$q#%@ ", +" l@B#]$|$3$|$4$3$5$3$3$5$5$|$4$3$|$3$5$3$3$3$3$3$|$|$|$3$!$e# ##Y#<$3$5$6$5$|$3$3$|$4$3$3$3$6$|$3$6$|$|$3$|$3$3$3$5$<$7$^# l@J#8$5$6$|$5$3$|$[$3$3$3$|$5$9$6$4$3$|$5$3$|$5$|$3$0$|$$$2# ", +" N@X#5$a$a$a$a$a$b$b$a$a$a$b$a$3$b$a$a$a$a$a$a$a$a$a$a$0$>$/# y+2#>$c$a$a$a$a$a$a$9$a$a$a$a$a$a$b$a$a$a$b$b$a$d$a$a$d$5$Y#H@ .#X#3$d$a$b$a$a$a$a$a$a$a$a$b$b$a$a$b$3$b$a$a$b$b$a$a$9$&$@$ ", +" v+4#>$a$a$d$a$a$a$d$a$a$a$e$b$a$a$b$a$f$b$a$a$d$a$e$d$a$5$~$%# g$p#]$a$e$b$a$a$d$a$e$a$a$9$a$a$e$d$a$a$a$a$a$a$e$a$a$e$h$F#7@ .@4#>$9$b$e$a$d$a$a$a$a$a$a$a$a$a$a$a$a$a$a$9$a$b$e$d$a$c$ $T@ ", +" Z+x#}$d$i$j$j$k$l$l$j$l$i$j$k$l$j$l$l$j$l$l$m$j$i$j$m$n$a$S#A@ p@T#e$i$l$m$l$o$j$i$j$l$l$o$k$i$j$m$l$l$j$j$l$i$l$m$i$l$5$w# !@u#|$d$i$l$m$m$l$j$k$j$i$i$k$l$l$j$l$j$k$l$l$m$i$o$n$o$b$O#x@ ", +" d@S#d$p$p$q$p$i$p$p$r$r$p$s$p$p$p$p$p$p$p$q$q$p$p$q$p$l$b$O#7@ $#t$j$q$p$p$p$s$p$s$p$p$p$p$i$q$s$u$p$r$r$p$p$q$p$p$p$p$|$j# i@W#d$v$p$s$s$p$p$s$p$i$r$p$p$p$s$p$r$p$p$p$p$p$p$s$s$l$e$w$/@ ", +" +#%$j$x$y$p$p$x$s$p$s$z$s$z$s$r$s$s$x$p$u$q$s$x$z$s$p$s$b$z# 1#}$s$p$q$s$s$s$s$x$p$x$r$p$s$x$x$q$y$s$p$x$z$q$q$s$A$p${$B$ @#$$k$r$z$s$p$x$s$q$p$u$s$q$q$x$q$x$s$p$x$p$r$p$z$s$q$u$4$q# ", +" (#}$z$C$C$C$D$C$C$C$D$E$F$C$C$C$C$F$C$F$C$C$F$F$C$C$F$C$0$c# ^@u#m$z$C$C$C$C$E$D$C$F$C$C$C$E$E$C$G$E$C$G$D$E$C$C$C$C$s$_$$# 2#[$z$C$E$E$D$E$E$C$H$C$E$C$C$C$C$G$C$C$C$C$C$C$E$C$C$x$4$i# ", +" S+t#j$F$I$I$I$I$J$I$J$I$I$I$J$I$J$J$J$I$J$I$I$J$I$I$J$I$F$c$/# o@Z#q$K$L$I$J$J$J$J$J$I$J$I$J$I$J$I$J$J$J$J$J$I$J$I$I$K$x$$$Y@ @w#k$L$J$J$J$I$I$I$J$I$I$F$I$I$I$I$J$J$J$I$I$I$J$I$I$I$F$5$B$ ", +" 6@W#x$J$J$M$M$N$I$O$O$O$O$O$O$O$M$O$O$O$M$M$O$O$J$O$O$O$H$P$.# $#)$Q$O$O$M$M$O$O$O$O$M$O$O$M$M$O$O$J$O$M$O$I$O$O$O$O$I$x$W# i@X#A$O$J$O$M$O$I$O$M$O$O$M$O$O$O$O$O$O$O$O$O$O$O$O$M$O$E${$T@ ", +" +#)$D$O$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$R$O$R$R$R$M$z$$$z@ e#0$J$R$R$R$R$O$R$R$R$R$R$R$R$R$R$M$S$R$R$R$R$R$R$R$R$S$q$F# .#}$K$R$R$R$R$M$R$R$R$R$R$R$R$R$O$R$R$R$R$R$R$R$R$R$R$M$z$~$ ", +" T$U$R$V$W$V$V$W$X$V$W$V$W$V$W$V$R$V$V$Y$W$V$Z$W$V$V$Z$W$Q$P# @L#u$Y$V$W$V$W$Y$V$W$X$V$V$V$W$V$Y$W$V$W$V$V$W$V$V$V$W$M$i$n# 8#j$X$Y$V$V$Y$V$Y$V$V$V$Y$W$W$V$R$W$V$Y$X$V$V$W$W$V$W$Y$A$K# ", +" w#`$Y$ % %Z$Z$Z$ %V$ %.% % % %Z$ % %V$+% %V$+% % %V$ %V$x$u# d@@%#% %Z$ %V$ % %V$Z$V$ %$%V$ %V$Z$.%V$ % %.% % % % %%%Y$d$&% u#`$X$ % %V$V$ % % % %.%V$ % % %V$ %Z$Z$ % %Z$V$ %V$$%W$q$*% ", +" |@U#K$=%-%=%$%;%>%-%>%>%>%>%>%>%-%;%;%-%>%.%;%-%$%=%-%>% %v$k# V@3$+%,%;%;%-%>%;%>% %>%,%;%;%$%$%-%;%$%-%;%>%$%;%>%-%>%+%5$+# f@%$J$=%=%=%$%;%$%$%$%>%;%>%>%;%;%;%>%-%;%-%>%-%-%$%;%'%Z$k$a# ", +" I@5$W$>%)%!%!%~%!%{%!%]%{%!%!%^%{%^%^%!%!%~%^%!%^%^%!%^%Z$m$/# /%q$ %(%!%{%^%!%!%^%!%(%]%^%!%^%^%!%^%!%!%^%!%!%!%{%!%;%R$)$ +#9$Z$>%_%]%^%^%(%(%^%^%!%!%(%~%!%!%^%{%!%:%^%!%!%^%{%^% %d$<% ", +" _#k$-%:%:%:%[%:%[%~%[%[%[%:%[%:%[%~%:%~%~%:%:%~%:%:%[%~%}%a$ J#K${%[%:%[%[%:%[%~%[%~%~%:%~%:%~%[%:%[%[%[%:%[%~%[%:%!%R$~$ |%k$-%~%~%[%[%[%1%[%[%:%[%~%[%:%1%[%~%[%:%~%~%:%~%:%[%^% %5$ ", +" x#F$^%[%[%[%[%[%2%[%[%2%[%[%2%1%[%2%[%2%[%1%[%[%[%[%[%[%Z$,$ 5@$$W$:%1%[%2%[%[%2%2%[%[%1%2%[%[%[%[%[%[%[%[%2%[%[%2%[%!%I$F# u#F${%1%[%[%[%[%[%[%[%2%[%[%[%2%[%2%2%1%[%[%2%3%[%[%[%~%Y$>$ ", +" *$4%5%6%6%6%6%6%2%6%6%6%6%6%2%6%6%2%6%6%2%6%6%6%6%6%6%7%R$U# V@8%9%5%2%6%6%6%6%2%6%6%2%6%6%6%6%6%6%6%6%6%6%6%2%6%6%5%0%u$k# a%V$5%6%6%6%6%6%6%6%6%6%2%6%6%6%6%2%6%6%6%2%6%6%6%6%6%7%b%T# ", +" A@c%d%5%e%f%6%g%h%6%g%g%i%f%i%g%6%6%f%i%6%g%f%6%g%g%6%j%k%l%m% _#n%o%6%p%g%e%6%g%g%f%6%i%g%6%e%f%6%j%f%6%g%g%g%6%i%q%6%r%s%)# O@t%u%6%i%g%f%6%v%g%f%i%q%6%f%h%f%f%g%g%6%6%i%6%e%g%6%6%w%x%y% ", +" z%A%B%v%C%C%e%D%C%C%e%v%E%F%e%e%G%e%e%e%v%F%e%v%C%F%q%i%H%I%J% K%L%M%g%v%F%F%C%g%f%v%e%v%v%C%v%g%v%v%F%C%i%C%C%f%F%q%N%O%c% P%s%o%i%C%F%e%F%C%v%e%F%C%F%v%Q%F%f%e%e%e%R%g%C%C%e%e%v%S%T%U% ", +" V%W%X%Y%Z%`%`%Z%`%Z%`% &Z%`%Z%`%`%Z%`%Z%`%Z%`%`%`%`%C%Y%.&+& @&#&$&%&Z%Z%`%Z%`%Z%Z%%&`%C%Y%Z%Y%`%`%Y%&&*&`%Y%`%Z%Z%v%=&-& K%;&>&Y%,&Z%Z%Z%C%`%C%Z%`%`%Z%Z%Y%`%Z%Z%Y%Y%Y%`%Z%Z%Z%Y%B%'& ", +" )&!&~&{&]&{&^&]&]&^&^&]&^&^&]&/&]&^&]&/&]&^&^&^&/&]&^&(&_&:& <&[&}&|&^&^&^&]&^&/&/&]&^&]&^&]&^&^&^&/&]&^&/&]&^&^&^&]&1&2&3& 4&5&6&(&/&^&^&]&]&]&^&^&/&^&^&]&^&^&]&]&^&/&^&]&]&^&^&(&_&7& ", +" 8&9&_&0&]&/&]&]&]&a&a&/&a&a&]&]&]&a&a&]&]&a&a&]&]&/&]&]&(&b&c& d&e&f&]&a&]&]&a&/&/&]&]&a&a&/&a&a&/&/&]&]&]&]&a&a&]&/&a&g&h&i& j&k&l&m&]&a&]&]&]&]&]&]&a&a&]&]&a&a&]&]&]&a&a&]&]&a&]&]&n&o&p& ", +" q&r&f&]&a&a&a&s&a&a&t&a&a&a&a&a&a&a&a&a&]&a&a&a&a&a&a&a&(&u&v& i&w&n&]&a&a&a&a&]&a&a&a&a&a&]&a&a&a&a&a&a&t&a&a&a&t&a&x&y&z& A&B&f&]&/&a&a&a&a&a&a&t&a&C&a&a&a&a&/&a&a&C&a&a&D&a&a&]&n&E&F& ", +" G&H&I&t&J&K&t&t&K&K&t&t&J&L&M&K&J&s&L&J&t&M&L&L&t&t&t&N&O&P&Q& R&S&O&J&K&K&K&K&J&L&M&t&s&K&N&L&L&t&T&K&t&t&t&K&N&K&K&U&V&W& X&Y&Z&N&K&J&M&t&L&L&t&t&K&t&J&N&K&K&K&L&K&t&N&K&L&J&t&t&Z&`& * ", +" .*+*@*#*K&#*K&#*J&$*%*J&#*$*#*J&#*$*#*%*$*$*$*J&K&#*J&$*&*** =*-*J&#*#*#*#*#*$*;*%*J&#*#*#*$*>*J&#*$*J&$*J&#*#*J&J&,*'*)* !*~*{*J&#*#*%*J&J&#*$*K&J&#*J&J&#*#*$*L&#*J&J&J&J&#*$*]*^*/* ", +" (*_*:*$*<*[*[*}*[*$*$*}*<*$*$*<*$*}*$*$*$*[*}*#*<*#*[*:*|*1* 2*/*3*:*[*$*#*<*$*$*[*:*[*[*}*#*<*[*$*}*:*[*$*<*[*:*}*4*%*5*6* 7*8*:*$*<*$*}*$*<*[*[*}*[*#*:*<*$*$*[*<*$*[*}*#*}*$*9*%*|*0* ", +" a*b*c*:*d*<*e*f*<*<*<*f*d*e*<*f*e*g*<*<*<*d*f*<*f*<*<*f*:*h*i* j*k*l*e*<*<*d*<*<*d*g*<*<*d*<*f*d*<*<*g*<*<*d*<*g*f*d*<*:*+*m* n*o*c*p*d*<*d*<*<*<*<*f*<*<*g*f*<*<*g*f*e*<*f*<*g*<*<*<*q*_*r* ", +" s*t*u*f*v*v*w*x*x*x*w*x*v*w*w*v*x*f*y*y*x*v*w*y*v*v*y*w*z*A*B* C*D*E*x*w*x*v*x*f*x*x*y*x*w*w*x*y*y*v*F*w*w*x*v*w*x*v*w*G*t* H*I*J*f*x*x*w*w*x*w*w*F*v*v*w*x*v*d*w*v*w*K*w*w*x*x*w*L*M*D*N* ", +" ). O*P*z*v*Q*R*v*F*w*x*S*v*x*Q*S*S*v*T*Q*v*x*v*Q*x*T*U*V*W*X*Y*Z* `* =g*x*U*x*x*.=Q*S*v*Q*x*S*F*F*S*v*S*v*Q*x*y*x*U*v*F*W*G*+= @=#=$=F*Q*v*S*U*x*Q*S*v*w*Q*.=x*x*U*S*v*Q*v*S*x*v*v*U*%=&=*=== ", +" [.-= ;=>=,=S*'=S*Q*S*'=)=U*S*)=S*)=U*'=)=S*'=U*!=S*)='=S*S*v*~={= ]=^=/='=Q*S*U*S*'=S*'=S*)=Q*Q*)=U*)=S*'=Q*S*'=!=S*Q*)=v*(=_= :=<=[='=}=)='=S*!=S*Q*Q*)=Q*S*S*!=S*!=!=Q*!=U*!=S*Q*'=|=1=2= ", +" '+3= 4=5=}=!=6=7=6=6=6=7=7=6='=7=!=6='=8=7='='=7=7=9='=6=6=0=a=b= c=d=e=6=f=7=!=!=6=!=7='=g=6=h=!='=!=6='=6=6=h=7=7=7=6=!=i=j=k= l=m=!=6='=6=7='=7=h=!=7=7=7='=6=!=n=6=o=n=6=6='=!=6=p=.=q=r= ", +" C+s=l= t=u=v=w=x=y=6=7=x=z=7=x=x=A=p=z=B=w=A=x=z=C=D=x=x=A=x=7=E=F=G= H=I=J=w=x=6=x=A=7=A=z=K=w=w=x=p=A=x=7=x=x=6=x=w=L=7=x=M=N=O=P= Q=R=S=z=T=B=x=6=C=x=6=x=z=x=6=w=w=T=x=z=K=x=A=z=x=x=A=w=/=U=V= ", +" ]@W=X=Y= Z=`= -M=.-A=A=+-A=A=+-@-.-M=+-#-$-.-.-+-$-$-@-+-.-A=+-M=%-&-*- =---E=A=A=.-.-A=.-.-+-$-.-.-M=.-+-;-+-y=A=+-+-A=M=.-.-w=>-,- '-)-!-M=+-+-+-~-y=M=+-+-A=A=+-@-+-+-.-+-+-@-.-+-+-{-.-]-^-&-/- ", +" s@(-_-:-<- [-}-|-.-.-1-1-.-1-1-.-1-.-.-.-.-.-@-.-1-.-.-1-.-.-1-1-.-2-3- 4-5-6-.-7-1-.-@-.-.-.-.-.-7-.-1-.-1-.-1-1-.-.-8-9-1-.-+-0-a- b-c-d-.-1-1-1-.-@-1-.-1-.-7-.-7-.-@-.-.-.-.-1-.-7-.-1-@-2-e- ", +" f-g-h-6-i-j-k- l-m-n-1-1-8-o-8-8-p-p-p-p-p-p-p-p-q-p-p-8-1-1-p-1-8-o-@-r-s- t-u-v-$-8-p-p-p-p-p-p-p-1-p-q-o-.-1-1-1-1-p-1-1-o-p-p-w-q-x-y- z-A-9-o-1-1-1-1-1-p-p-q-1-p-p-p-p-p-p-p-o-o-8-p-.-1-1-@-r-B- ", +" 6.C-D-E-F-G-H- I-J-K-F-F-F-F-F-F-F-F-F-L-F-F-M-F-F-M-F-F-M-F-F-F-F-F-N-O-P- Q-R-S-w-F-F-F-M-F-F-M-F-F-M-M-F-M-F-F-F-F-F-F-F-F-F-F-M-N-T-U- V-W-w-F-F-F-F-F-F-F-F-F-F-F-F-M-F-F-F-M-F-M-M-F-F-M-F-K-X-Y- ", +" Y.Z-`- ; ;.;+;@; #;$;%;&;*;M-=; ; ; ;=;=; ;-;=; ;=; ;M- ; ; ;M- ; ;M- ; ;E-;;>; ,;';); ; ; ; ; ;M- ; ;=; ;M- ; ;M- ;!; ;L- ; ; ; ;=; ;~;{;];C- ^;/;(;&;_; ;M-!;=;-; ; ; ; ; ; ; ;M-M- ; ; ;M- ; ; ;M-!;:;<;[; ", +" B+};|;1;1;2;_;3;4; 5;6;7;!; ;1;!;!;!;!;=;!;8;=;!;1;!; ;!;1;!;!;1;!; ;!;1;_;9;0;a; };b;c;1; ;!;d;1; ;1;1;!;!;!;1;!;1;8; ;!;1;!;1;!; ;!;8; ;e;f; g;h;i;j;k;1;8;1;1;!;!;1;d; ;!;1;l;M-!;!;1;1;1;1;!;!;l;_;i;m;n; ", +" q@o;p;8;q;r;s;t;u;v; w;x;y;z;A;z;s;8;r;r;8;8;s;r;l;s;r;l;r;s;B;l;8;r;8;A;r;C;D;E; F;G;_;s;B;8;l;s;l;r;s;s;8;H;B;A;8;r;s;l;s;l;s;s;B;8;I;J;K;L; M;N;O;P;P;8;s;l;z;r;s;8;s;B;8;l;s;8;s;r;r;8;A;s;s;l;s;l;Q;R; ", +" N+S;T;U;V;W;W;W;X;Y;Z; `; >.>+>@>W;W;+>+>W;r;U;+>W;W;#>+>V;W;W;+>W;W;W;+>W;W;W;$>%> &>*>=>->W;W;q;U;W;W;#>#>W;W;W;@>W;W;+>@>W;W;W;U;W;W;q;W;J;;>>> ,>'>)>!>W;W;+>U;+>W;U;W;W;W;s;W;W;W;V;V;W;+>W;W;+>W;W;->~>*> ", +" |@{>]>^>/>/>(>^>_>:><> [>}>|>1>/>_>/>(>^>2>#>^>1>/>/>2>(>/>/>^>/>/>3>^>/>/>/>4>5>6> 7>8>9>/>1>_>V;1>/>_>/>1>_>/>^>^>_>^>^>(>(>/>/>^>^>_>(>^>0>a>b> c>d>e>|>^>/>^>/>/>2>/>_>3>^>1>#>^>f>/>(>^>/>/>(>^>/>1>^>4>g>h> ", +" i>j>k>1>1>^>^>1>^>l>m>n> o>p>q>r>^>^>^>^>1>1>1>1>^>1>^>^>1>1>^>1>^>^>1>1>^>1>^>3>s>t>u> v>w>x>1>^>1>^>1>1>^>^>^>1>^>1>^>^>1>^>^>1>^>1>^>^>^>^>(>y>z>A> B>C>:>r>^>1>^>^>(>^>2>^>^>2>1>^>1>^>^>1>^>1>^>1>^>^>1>^>D>E>*$ ", +" F>G>H>I>J>J>I>J>K>J>/>L>M> N>O>P>^>3>^>K>^>I>I>1>I>K>I>J>J>I>K>^>I>J>^>K>K>^>3>I>3>Q>G>R> S>T>U>J>^>J>J>J>J>I>J>I>1>K>J>1>V>J>2>1>K>I>^>J>^>J>K>^>W>X> R>Y>D>J>^>^>I>^>(>I>^>^>K>I>^>I>J>K>J>K>I>^>Z>J>^>^>J>3>`> ,., ", +" O.+,@,#,$,%,%,&,*,=,-,;,>,,,', ),!,>,%,%,*,*,*,$,~,*,%,$,$,%,;,*,*,&,%,%,$,*,*,%,%,-,J>{,], ^,/,(,-,*,;,%,;,*,%,~,-,$,=,;,%,%,;,%,-,*,$,*,~,~,%,*,J>_,:, <,,,[,-,%,~,*,%,*,~,*,%,~,%,*,%,%,*,%,%,},-,I>*,%,$,~,|,{,1, ", +" 2,3,4,5,6,5,7,5,8,5,5,6,9,0,a,b, c,d,#,5,e,8,e,6,7,e,5,e,e,5,5,8,e,8,9,5,6,e,8,5,e,8,e,f,g,h, i,j,k,l,8,7,7,7,e,5,7,m,e,5,e,5,e,7,7,e,e,6,8,9,6,7,8,5,n,4,o, p,q,r,5,e,e,7,8,5,e,8,s,l,e,5,5,e,7,5,5,8,5,8,7,6,6,7,f,t,u, ", +" v,w,x,y,z,y,z,z,A,z,9,z,z,B,C,D, E,F,G,H,I,z,J,z,7,z,y,K,L,z,z,A,z,z,B,L,z,y,z,A,L,z,y,I,f,M,N, O,P,Q,y,y,z,z,z,z,y,L,z,z,J,z,J,z,z,z,y,z,z,9,y,y,A,y,L,R,S,T, U,V,G,B,A,y,z,z,9,z,y,L,y,y,z,z,z,z,L,y,z,z,J,z,z,y,z,I,W,X,Y, ", +" -#Z,`,A, 'z, ' ' ' '.' ' '+'z,@'#' $'%'&'*' 'z, 'z, 'A,='+' ' ' ' ' 'z, ' 'A, ' '+' 'A, 'z,-';'>' ,''')'z, ' ' ' ' ' ' ' 'z, 'z, ' ' 'A, ' 'z,A,A, 'A, '.'!'~' {']'^'A,A, ' '*' 'A, 'A,A, ' ' ' ' ' ' ' 'z, ' 'A, ' 'z,/'('_' ", +" [@:'<'['}'|'|'}'}'|'1'}'}'|'2'3'4'5' 6'7'8'|'|'}'|'}'|'}'}'}'}'}'}'|'1'}'|'|'}'9'}'}'|'|'|'|'8'0'a' b'c'd'}'}'|'}'|'}'|'}'1'|'}'|'9'}'|'|'|'|'}'}'|'}'}'}'e'f'g' h'i'j'|'}'}'}'}'}'|'|'|'}'}'}'|'|'}'|'}'1'}'|'}'9'}'|'2'k'l' ", +" m'n'8'1'1'1'1'}'1'}'|'1'1'1'1'1'o'p'q' r's't'|'1'|'1'1'1'1'1'1'}'1'1'|'1'1'1'1'1'1'u'v'w'}'1'x'y'z' A'B'9'1'1'w'}'1'w'}'}'u'u'1'1'u'1'1'C'}'1'1'1'1'1'1'}'D'E'F' G'H'I'w'1'}'1'|'1'}'w'1'1'1'1'1'['u'}'|'1'1'1'1'1'1'1'e'J'K'", +" L'M'N'O'P'1'P'Q'O'P'1'R'O'u'Q'S'T'U'V'W' X'Y'Z'Q'P'Q'`'O'Q'R'O'P'Q'Q'u'P'Q'u'P'Q'P'1'P'P'P'Q'Q'x' ).) +)@)k'P'Q'O'`'P'Q'Q'P'O'`'P'Q'Q'1'P'#)u'Q'1'Q'P'Q'R'P'$)%)H'&) *)B'x'$)u'P'Q'O'P'=)u'Q'P'P'P'`'-)Q'u'O'Q'u'P'Q'w'P'P';)>)", +" ,)')))!)~)~){)])^)/)(){)_)_)])/)~){):)<) [)})|){)1)~)/)1)2)~)_){)/)/)1){)3)/)/)~){)4){)3)1)~){)1)5)6)7) 8)9)N'{)_)1){)/)0){)1)~)/)a)/)$){)1)/)~){)!){)$)1)/)/)1)b)c)d) e)f):){)]){)3)1){){)1)g)~)1)3)1)1)0)1)1)/)]){){)a)1)/)!)h)", +" i)j)k)l)m)0)n)_)o)p)q)1)r)p)g)m)m)n){)s)t) u)v)w)^)q)p)r)^)x)r)q)!)p)m)1)m)l)p)1)m)q)n)l)q)q)p)p)_)5)y)z) A)y)B)p)m)1)p)l)1)/)^)p)/)^)q)p)r)m)^)p)p)m)^)r)m)m)p)n)C)D) E)F)G)m)l)l)H)1)l)p)p)q)p)m)1)H)l)/){)!)o)^)^)q)p)p)p)/)", +" I)J)K)n)L)M)p)M)p)M)N)!)O)N)N)p)M)M)N)M)P)Q)R) S)T)U)M)M)M)N)V)N)p)M)M)o)O)M)M)N)O)M)M)N)M)N)M)N)N)M)p)W)X)Y) Z)`)P)p)p)N)M)p)V)M)M)p)N)N)N)M)M)M)M)M)M)M) !O)N)N)M)^).!+! @!#!$!p)M)M)M)M)M)M)M)M)O)m)N)M)p)p)M)M)p)N)M)N)N)M)M)", +" %!&!*!=!-!;!;!=!=!=!=!=!=!=!=!=!=!M)=!=!=!k)>!,! '!)!!!=!=!=!=!=!;!=!=!=!=!=!=!=!=!L)M)=!=!=!N)=!=!=!=!N)~!{! ]!^!/!=!=!;!=!=!N);!=!=!=!M);!;!M)=!=!=!=!=!=!=!=!=!=!(!_!:! ~,~'~'~)~!~~~'~'~O!'~)~)~)~{~%~{~'~'~Q!'~]~%~^~/~(~ _~:~<~{~%~{~)~)~R!~~)~'~[~'~)~{~{~O!'~}~O!)~'~'~O!{~~~'~|~1~ T!2~P!'~3~)~[~!~R!{~~~)~)~~~4~R!{~)~{~{~}~{~)~'~O!'~)~5~6~7~ 8~9~^~}~)~'~O!)~O!R!!~)~!~{~)~'~{~%~)~)~!~#~4~", +" 0~1~a~b~c~d~c~e~f~e~e~g~e~e~c~c~f~c~e~e~c~e~[~b~e~h~i~j~ k~l~m~g~c~e~e~e~e~e~c~c~f~c~n~g~c~c~o~e~b~e~p~e~c~d~e~o~q~r~ s~t~u~{~p~n~c~f~c~c~e~b~c~v~f~e~f~d~c~c~d~w~d~e~e~b~f~x~y~z~A~ B~C~D~n~c~e~e~e~e~e~d~e~c~e~c~c~f~f~o~e~c~f~", +" E~F~G~H~I~I~J~I~I~J~I~I~I~I~I~I~I~I~c~c~I~I~f~I~I~K~L~M~ N~O~P~I~I~I~J~I~J~J~I~J~I~c~f~I~I~Q~c~I~I~I~I~J~I~J~I~K~R~S~ T~U~,~J~J~I~I~I~I~c~Q~I~I~I~I~I~J~I~I~I~I~J~I~I~I~I~I~I~D~V~W~ t~X~K~I~I~I~I~I~J~I~I~I~J~I~I~I~I~Q~f~J~J~", +" Y~Z~`~J~ { { { { { { {I~ { { { { { { { { {I~ { {I~ { {.{+{@{ #{${%{J~ { {I~ { { { { { { { {c~ { { {I~ { { { { { {H~ {d~&{*{ ={-{m~ { { {J~ { {J~H~ { {I~ { { { { { {I~ { { { { { { {;{>{ ,{'{){.{ { { { {!{~{ { { { { {I~ { { {c~ {", +" {{]{^{/{!{/{/{!{/{!{/{/{!{!{!{!{!{/{!{!{/{/{!{!{!{!{/{({_{:{ <{[{}{/{/{!{!{/{/{/{!{!{/{/{/{!{!{!{!{!{!{!{!{!{/{/{!{|{1{2{3{ 4{5{^{/{!{!{/{!{/{!{/{!{/{!{/{/{!{!{/{!{/{!{!{!{!{/{!{|{6{7{ 8{9{0{|{!{!{!{!{!{/{/{!{!{/{!{!{/{/{!{!{", +" a{b{c{d{e{f{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{({g{h{ i{j{k{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{f{d{d{d{d{d{d{d{d{d{l{m{ n{o{|{d{d{d{d{d{d{d{d{d{d{f{d{d{d{d{d{d{d{d{d{d{d{d{d{p{q{r{ s{t{({u{d{d{d{d{d{d{d{d{d{d{d{d{d{d{d{", +" v{w{x{y{y{y{y{y{y{z{y{y{y{y{A{y{y{A{y{y{B{z{y{y{y{y{y{C{D{E{F{ G{H{I{y{y{y{y{y{J{y{J{A{y{K{y{y{y{y{y{y{y{y{y{z{y{y{y{z{L{M{ N{O{P{Q{y{y{y{z{C{y{y{y{y{y{y{y{y{y{z{y{y{y{y{A{y{y{y{z{R{S{T{ U{V{R{J{J{y{y{A{y{y{y{A{y{y{J{z{y{C{", +" W{X{Y{Z{K{K{`{ ]Z{K{`{K{`{.]`{+]Z{`{Z{@].]K{Z{#]K{ ] ]@]$]%] &]*]=]C{`{K{-];]`{-]-]K{`{K{@]K{-]`{K{`{K{@]`{K{#]K{`{Z{C{>],] '])]x{@]-]`{;]K{.]K{#]@]K{ ]C{`{`{.]+]K{;]-]K{@].]`{`{K{!]~]{] ]]^]/]C{-]`{+]Z{`{K{-]@]K{-]`{-].]K{", +" (]_]:]<]<][]<]<]+]<]<]}]|][]-]-]<]-]@]<]<]+]<]<]<][]<]Z{1]2] 3]4]5]6]<]Z{+]<]7]+]<][]K{<]<]-]}]<][]<]<][]-]<]<][]Z{8]C{9]0] a]b]c]@][]<]@]+]<]<]<]<][]<]<]<]<]+]<]+]-]<]<]|][]<]@]|]d]e] f]g]h]-][][]Z{[]<]-]}]<]@]<]<]+]K{", +" i]j]k]l]m]m]m]m]m]n]m]n]m]n]n]n]n]n]n]m]m]m]m]m]n]m]m]m]l]o]p] q]r]s]n]n]m]m]m]m]n]m][]m]m]n]n]n]n]m]m]m]n]m]m]m]n]n]t]u]r]v] w]x]y]m]m]n]m]n]n]m]m]m]m]n]m]m]z]m]m]n]n]m]m]m]m]n]m]n]A]B] C]D]E]n]n][]n]m]n]n]n]F]n]m]m]n]", +" G]H]I]J]K]K]K]L]K]K]K]m]K]K]K]K]K]K]K]K]K]K]K]K]K]K]K]M]N]O]P] Q]R]N]S]K]m]K]K]K]K]K]K]K]K]K]K]K]K]K]K]L]K]K]K]K]n]K]J]T]U] V]W]X]K]K]K]K]K]K]K]K]K]K]K]K]L]K]K]K]n]K]K]K]K]K]K]K]n]W]Y] Z]`] ^K]L]K]K]K]m]K]K]K]K]K]K]", +" .^+^@^K]L]K]m]L]L]L]L]L]L]L]L]L]K]K]L]K]L]L]L]L]L]L]n]M]#^$^%^ &^*^=^L]L]L]L]K]L]m]L]L]K]L]L]L]K]L]L]m]-^L]L]L]L]L];^K]>^j] ,^'^)^!^-^-^L]L]L]L]L]K]L]L]K]K]L]L]L]L]L]L]L]L]K]~^L]L]{^]^^^ /^(^S]K]L]L]L]L]L]L]L]K]K]K]", +" _^:^<^[^[^}^[^|^1^|^1^L]|^1^1^}^|^|^L]1^2^|^1^1^|^}^[^1^y]3^ 4^5^6^L]1^2^1^1^|^L]1^L][^1^2^|^1^[^|^7^[^|^1^|^1^L]1^1^M]8^9^ 0^a^b^c^1^2^|^2^1^c^1^[^|^[^}^[^1^|^1^1^;^|^1^1^7^2^|^c^b^d^e^ f^g^h^i^j^[^2^|^[^L]1^1^1^c^", +" k^l^m^n^o^o^p^p^q^r^r^o^q^p^r^o^o^o^s^o^o^r^o^p^o^o^p^t^u^v^ w^x^y^[^r^p^r^o^o^r^o^o^[^o^o^o^o^p^o^o^p^p^p^q^r^p^r^p^i^z^A^ B^C^D^t^o^o^r^s^E^o^o^p^p^o^o^p^p^r^q^r^o^F^o^q^o^o^r^t^y^G^ H^I^J^t^o^o^r^o^o^t^p^p^o^", +" K^L^M^p^F^o^p^p^p^p^n^N^o^N^p^p^p^o^O^p^P^o^p^p^o^o^p^p^F^Q^R^ S^T^U^p^N^o^N^o^p^p^N^O^p^N^p^o^p^t^o^p^p^p^p^p^V^o^O^t^W^X^Y^ Z^`^F^p^p^o^O^ /p^o^p^p^o^o^./p^o^p^O^N^./o^p^p^p^o^ /n^+/L^ @/#/$/p^./%/o^o^ /p^N^o^", +" H^&/*/n^O^n^n^ /././=/ /=/ / /=/n^-/ /;/>/ /n^n^O^n^O^n^,/'/)/ !/~/{/-/ /=/ / / /;/=/./=/ /=/O^N^O^O^ /O^./ /=/./=/./ /]/^/ //(/p^-/ /-/_/./O^O^n^n^n^ /=/ / /_/=/=/./././=/ /:///=/ /", +" 4/5/6/7/8/9/8/8/-/-/9/0/a/>/0/7/9/7/9/7/7/7/8/7/8/b/c/9/d/e/f/ g/h/_/8/0/-/./i/0/b/7/9/7/0/7/9/8/7/9/8/9/8/9/-/0/-/_/-/j/k/ l/m/n/>/7/9/8/7/7/7/8/9/0/-/7/9/8/-/-/7/7/ /b/0/7/o/c/9/p/q/r/ s/h/t/7/8/9/-/9/7/-/", +" u/v/t/w/x/y/0/0/y/y/y/z/y/y/y/0/0/x/A/7/y/0/0/y/x/z/0/9/B/C/ D/E/F/z/x/0/z/x/y/G/7/y/x/0/y/z/0/y/y/y/0/0/H/y/y/0/H/I/J/K/L/ M/N/O/0/-/y/y/0/y/x/0/0/0/y/z/0/0/y/x/z/0/x/y/z/9/y/x/z/P/Q/R/ S/E/n/T/0/0/y/y/H/0/", +" U/V/W/x/x/x/X/x/x/Y/X/x/X/Z/x/`/ (x/x/`/w/`/x/x/x/x/X/.(V/+( @(#($(%(Z/x/`/X/X/`/X/y/x/x/w/x/`/x/y/x/X/`/x/x/X/x/&(Z/*(5/=( -(;(>(`/X/x/x/x/y/w/`/x/`/`/`/X/x/X/Z/`/`/X/X/`/X/x/x/,('()( !(~(P/.(Z/x/x/Z/X/", +" {(](^(Z//(((((_(((:(((_(((:(((_(:(<([(((Z/_(_(((<(((((}(I/|(1( 2(3(4(((((_(Z/((_(((X/_(_(Z/((_(((Z/((((_(((:(((((((:(((5(6( 7(8(%(_(X/_(9(((Z/[(((_(((((((((:(:(((_(((Z/[(_(X/_(0(%(a(b( c(d(e(((((((X/((", +" f(g(h(i(j([(k([(_([(l(m(_(_(n(_(9(n([(_(n(o([(i([(n(p(o(q(r(s( t(u(v(l(n(_(w(w(_([(n([(_([([([(p([([(x(n(_([([(y((([(w(z(A( D/B(z(_(9([(i(_(_(k([(k(n([([([(_(_(_(k(_([(k([([(n(w([(C(D(E( F(G((([(l(<([(", +" H(I(J(K(L(L(L(M(N(n(p(O(p(M(P(L(Q(L(i(N(i(i(L(L(L(L(L(N(R(S( T(U(n(L(O(K(V(N(O(W(i(i(W(p(L(L(L(L(L(L(L(V(p(w(X(K(L(Y(Z(`( _._+_@_P(k(i(i(L(i(L(L(L(L(L(L(V(L(L(L(V(K(M(O(N(p(p(M(#_$_%_ &_*_n(k(M(X(", +" =_-_Y(;_;_>_,_,_P('_)_;_;_,_>_,_;_O(!_,_;_;_;_;_;_,_,_>_~_{_ ]_^_/_P((_;_,_,_O(;_,_O(__,_;_;_,_;_,_O('_;_'_@_,_;_,_,_k(:_<_ [_}_|_(_,_;_>_,_,_;_;_,_,_;_>_,_;_O(,_>_;_)_1_,_,_;_2_,_3_4_5_ 6_7_8_L(,_;_", +" 9_0_a_b_!_1_)_c_1_,_b_)_,_!_c_1_,_b_d_(_!_,_)_b_,_1_e_(_f_g_ h_4_i_a_b_e_,_,_c_d_>_!_b_1_!_)_,_!_b_1_,_c_d_1_!_)_)_)_j_k_l_ m_n_o_p_1_e_b_e_!_)_1_e_c_1_1_p_b_>_)_p_,_)_b_e_1_e_c_q_r_s_ t_u_v_N(!_", +" w_x_y_z_z_A_!_B_b_c_c_C_p_b_b_b_b_b_b_D_B_c_b_E_F_C_!_z_G_H_I_ J_K_L_M_B_b_b_b_b_p_b_p_b_E_C_c_b_F_B_b_c_A_N_c_B_b_p_p_O_P_ T(Q_R_S_b_b_b_N_C_C_c_F_B_C_c_C_b_E_B_B_p_b_b_b_b_b_p_p_T_U_ V_W_X_E_", +" Y_Z_`_c_ :.:b_+:@:S_@:#:.:@:$:%:&:@:F_z_+:S_F_E_*:+:!_=:-:;:>: ,:':):!:~:.:$:%:.:E_.:+:+:z_F_#:c_@:@:c_E_ :S_@:.:.:%:#:{:{_ ]:^:/:(:_:_:+:+:#:F_z_c_F_@:=:+:@:.:$:::.:S_@:+:~:z_+:#:<:[:,: }:|:1:", +" 2:3:4:5:6:7:8:9:0:a:b:c:d:e:8:c:f:0:g:0:h:d:e:i:6:7:j:k:l:m: n:o:e:p:q:r:s:t:u:j:0:6:v:w:x:r:9:9:e:r:5:v:y:z:q:r:b:A:B:C: D:E:F:G:g:v:d:f:b:v:H:v:5:I:7:g:d:J:p:K:r:r:7:8:u:v:x:u:L:M:N: O:P:Q:", +" R:S:T:U:U:V:W:V:8:X:5:V:W:W:Y:5:5:V:V:Z:`:V:V:V:U:U:V: <.<+< @<#<$<,[,[L},},},}&}s[&}'}V[T['})}'}&},}'},}'},})}&}&}'}&}&}C[!}~} {}]},}&}&}'})})}&}'}R[)}&},}'}U[,},}'}&}D[Q['}T[V['})},}^}/} (}_}:}<}[}R['}U['}&}'}'}}}&}&}Q[s[,},}&}&}[})},}'}W[,}&}|}1}2} ", +" 3}4}5}6})}7}[}8}7})})}7}V[7}[}9}T[U[7}[}Q['}6})}7}0}[}a}b}c} d}e}f}g}9}9},}V['}0}&}}}9}8}}})}[}9})}8})}7}7})}9}9}&}&}h}i}j} k}l}m}6})}R[,}8}9}6})}9}7}8}9}[}7})}9})}9}}}'}6})}R['}8}n};}o} ", +" p}q},}9}r}9}8}s}t}8}7}8}t}8}t}u}t}s}8},}8}v}U[&}s}9}9}w}x}y} z}A}B}C}8}D}t}t}s}u}t}s}r},}'}s}8},}v}u}7}t}s}u}7}7}t}0}E}F}G} H}I}J}t}7}s}r}8}T[t}s})}s}u})}u}s}s}7}8}u}s}s}t}t}s}r}a}K}L} ", +" M}N}O}s}r}9}8}r}s}u}s}P}Q}t}R}R}s}Q}S}s}s}T}U}v}T}8}r}r}V}W}X} Y}Z}`}u}P} |t}P}S}r}v}S}.|t}Q}r}r}v}8}7}r}r}8}t}R}S}t}r}+|@|#| $|%|Q}v}r}P}R}U}v}s}s}r}u}U[s}r}r}u}v} |r}&| |v}r}.|S}s}*|=| ", +" -|;|>|S}v} |S}.|S}Q}R} |Q}T}P},|v}P}S},|P}'|)|P}S}'|)|P}!|~|{| ]|^|/|T}.|S}&|P}S}P}T}P},|P}P}'| |v}S})|Q} |Q}P} |P}T}R}(|_| :|<|R}S}v}P} |.|R},|,|Q}R}'|Q}.|S}P}S}S}T}U}P}S}T}T} |[|}||| ", +" 1|2|3| |4|5|4|6|)|7|8|4|,|7|8| |)|S}9|4|4|7|'| |9|9| |7|0|a| b|c|d|8|9|,|7|4|6|)|.|9|)|'|7|5|)|e|e|)|9|'|7|f|e|,|7|5|g|h| i|j|+|e|S}7|7|e|)|)|9|)|7|9|7|8|4|5|4|8|'|'|5|f|'|,|)|4|k|l|m| ", +" n|o|p|6|4|6|9|4|6|e|'|q|4|R}4|r|5|9|r|4|5|9|9|9|5|4|4|7|s|t| u|v|w|4|'|6|q| |7|q|7|4|q|q|)|4|e|9|4|4|e|4|9|9|)|8|8|P}x|y|z| A|B|C|D|8|4|r|f|)|4|7|'|9|9|6|6|9|9|5|5|r| | |q|9|'|8|E|F|G|H| ", +" I|J|K|L|M|M|M|M|M|r|N|O|9|r|O|M|M|M|r|M|M|E|P|M|q|O|Q|R|S|T| U|V|W|E|r|M|8|8|M|M|M|O|r|M|O|q|Q|O|O|M|M|O|M|r|M|M|8|9|X|Y|Z| `| 1.1q|O|Q|q|Q|O|q|r|+1O|M|M|M|M|M|r|O|r|8|O|M|M|M|L|N|@1#1 ", +" $1%1&1L|O|O|r|r|+1q|8|O|+1e|q|O|M|q|M|Q|r|q|Q|+1E|Q|M|r|*1=1-1 ;1>1,1'|r|+1q|5|O|O|q|r|O|M|8|O|Q|M|O|r|r|O|M|6|r|Q|8|e|'1)1 !1~1{1O|M|q|Q|Q|r|M|Q|M|O|r|r|M|+19|9|O|O|7|M|Q|M|q|Q|*1]1^1 ", +" /1(1_1+1:1+1+1P|P|:1+1+1:1:1Q|P|+1Q|M|Q|O|O|M|Q|P|+1Q|<1[1}1|1 112131P|Q|P|P|Q|P|+1:1Q|+1Q|Q|O|Q|:1P|Q|P|:1:1P|+1:1:1415161 71819141P|Q|Q|Q|+1O|Q|Q|P|:1:1+1P|:1:1Q|P|+1P|+1P|P|Q|Q|01a1b1 ", +" c1d1[1P|:1:1+1P|e1P|M|P|f1:1:1f1e1f1:1f1f1f1f1f1f1:1+1g1h1i1 j1k1l1P|P|f1:1:1m1:1:1f1f1f1f1:1P|:1:1P|Q|f1:1O|+1f1<1<1n1o1 p1q1r1e1f1e1f1f1f1e1f1P|f1:1P|Q|:1e1:1Q|f1:1:1e1e1:1e1s1t1u1v1 ", +" w1x1y1m1m1m1m1z1z1f1m1A1m1f1e1m1z1e1A1A1z1m1A1A1m1z1z1B1C1D1 E1F1G1H1m1z1m1m1e1m1m1m1z1A1A1m1A1m1m1m1e1m1A1e1e1A1z1e1I1J1K1 L1M1N1e1A1A1e1A1A1e1m1m1m1m1m1m1A1m1m1z1m1m1e1e1m1m1m1z1O1P1Q1 "}; diff --git a/SampleERCP/icons/app/ico_32t.png b/net.mograsim.rcp/icons/app/ico_32t.png similarity index 100% rename from SampleERCP/icons/app/ico_32t.png rename to net.mograsim.rcp/icons/app/ico_32t.png diff --git a/SampleERCP/icons/app/ico_48t.png b/net.mograsim.rcp/icons/app/ico_48t.png similarity index 100% rename from SampleERCP/icons/app/ico_48t.png rename to net.mograsim.rcp/icons/app/ico_48t.png diff --git a/SampleERCP/icons/app/ico_64t.png b/net.mograsim.rcp/icons/app/ico_64t.png similarity index 100% rename from SampleERCP/icons/app/ico_64t.png rename to net.mograsim.rcp/icons/app/ico_64t.png diff --git a/SampleERCP/icons/app/ico_all.ico b/net.mograsim.rcp/icons/app/ico_all.ico similarity index 100% rename from SampleERCP/icons/app/ico_all.ico rename to net.mograsim.rcp/icons/app/ico_all.ico diff --git a/SampleERCP/icons/embedded.png b/net.mograsim.rcp/icons/embedded.png similarity index 100% rename from SampleERCP/icons/embedded.png rename to net.mograsim.rcp/icons/embedded.png diff --git a/SampleERCP/icons/enterprise.png b/net.mograsim.rcp/icons/enterprise.png similarity index 100% rename from SampleERCP/icons/enterprise.png rename to net.mograsim.rcp/icons/enterprise.png diff --git a/SampleERCP/icons/home.png b/net.mograsim.rcp/icons/home.png similarity index 100% rename from SampleERCP/icons/home.png rename to net.mograsim.rcp/icons/home.png diff --git a/SampleERCP/icons/languages.png b/net.mograsim.rcp/icons/languages.png similarity index 100% rename from SampleERCP/icons/languages.png rename to net.mograsim.rcp/icons/languages.png diff --git a/SampleERCP/icons/open_in_app.png b/net.mograsim.rcp/icons/open_in_app.png similarity index 100% rename from SampleERCP/icons/open_in_app.png rename to net.mograsim.rcp/icons/open_in_app.png diff --git a/SampleERCP/icons/rcp.png b/net.mograsim.rcp/icons/rcp.png similarity index 100% rename from SampleERCP/icons/rcp.png rename to net.mograsim.rcp/icons/rcp.png diff --git a/SampleERCP/icons/save_edit.png b/net.mograsim.rcp/icons/save_edit.png similarity index 100% rename from SampleERCP/icons/save_edit.png rename to net.mograsim.rcp/icons/save_edit.png diff --git a/SampleERCP/net.mograsim.rcp.product b/net.mograsim.rcp/net.mograsim.rcp.product similarity index 100% rename from SampleERCP/net.mograsim.rcp.product rename to net.mograsim.rcp/net.mograsim.rcp.product diff --git a/SampleERCP/plugin.xml b/net.mograsim.rcp/plugin.xml similarity index 97% rename from SampleERCP/plugin.xml rename to net.mograsim.rcp/plugin.xml index 2ad9229b..a22663bd 100644 --- a/SampleERCP/plugin.xml +++ b/net.mograsim.rcp/plugin.xml @@ -1,70 +1,70 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleERCP/schema/splashExtension.exsd b/net.mograsim.rcp/schema/splashExtension.exsd similarity index 100% rename from SampleERCP/schema/splashExtension.exsd rename to net.mograsim.rcp/schema/splashExtension.exsd diff --git a/SampleERCP/splash.bmp b/net.mograsim.rcp/splash.bmp similarity index 100% rename from SampleERCP/splash.bmp rename to net.mograsim.rcp/splash.bmp diff --git a/SampleERCP/src/net/mograsim/rcp/handlers/AboutHandler.java b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/AboutHandler.java similarity index 95% rename from SampleERCP/src/net/mograsim/rcp/handlers/AboutHandler.java rename to net.mograsim.rcp/src/net/mograsim/rcp/handlers/AboutHandler.java index c77b2db7..25a66638 100644 --- a/SampleERCP/src/net/mograsim/rcp/handlers/AboutHandler.java +++ b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/AboutHandler.java @@ -1,14 +1,14 @@ -package net.mograsim.rcp.handlers; - -import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.widgets.Shell; - -public class AboutHandler -{ - @Execute - public void execute(Shell shell) - { - MessageDialog.openInformation(shell, "About", "Sample RCP4"); - } -} +package net.mograsim.rcp.handlers; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.widgets.Shell; + +public class AboutHandler +{ + @Execute + public void execute(Shell shell) + { + MessageDialog.openInformation(shell, "About", "Sample RCP4"); + } +} diff --git a/SampleERCP/src/net/mograsim/rcp/handlers/OpenHandler.java b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/OpenHandler.java similarity index 95% rename from SampleERCP/src/net/mograsim/rcp/handlers/OpenHandler.java rename to net.mograsim.rcp/src/net/mograsim/rcp/handlers/OpenHandler.java index a5800c1b..7df311a4 100644 --- a/SampleERCP/src/net/mograsim/rcp/handlers/OpenHandler.java +++ b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/OpenHandler.java @@ -1,16 +1,16 @@ -package net.mograsim.rcp.handlers; - -import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Shell; - -public class OpenHandler -{ - - @Execute - public void execute(Shell shell) - { - FileDialog dialog = new FileDialog(shell); - dialog.open(); - } -} +package net.mograsim.rcp.handlers; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Shell; + +public class OpenHandler +{ + + @Execute + public void execute(Shell shell) + { + FileDialog dialog = new FileDialog(shell); + dialog.open(); + } +} diff --git a/SampleERCP/src/net/mograsim/rcp/handlers/QuitHandler.java b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/QuitHandler.java similarity index 96% rename from SampleERCP/src/net/mograsim/rcp/handlers/QuitHandler.java rename to net.mograsim.rcp/src/net/mograsim/rcp/handlers/QuitHandler.java index 000573f0..c953e5a6 100644 --- a/SampleERCP/src/net/mograsim/rcp/handlers/QuitHandler.java +++ b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/QuitHandler.java @@ -1,18 +1,18 @@ -package net.mograsim.rcp.handlers; - -import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.e4.ui.workbench.IWorkbench; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.widgets.Shell; - -public class QuitHandler -{ - @Execute - public void execute(IWorkbench workbench, Shell shell) - { - if (MessageDialog.openConfirm(shell, "Confirmation", "Do you want to exit?")) - { - workbench.close(); - } - } -} +package net.mograsim.rcp.handlers; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.ui.workbench.IWorkbench; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.widgets.Shell; + +public class QuitHandler +{ + @Execute + public void execute(IWorkbench workbench, Shell shell) + { + if (MessageDialog.openConfirm(shell, "Confirmation", "Do you want to exit?")) + { + workbench.close(); + } + } +} diff --git a/SampleERCP/src/net/mograsim/rcp/handlers/SaveHandler.java b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/SaveHandler.java similarity index 95% rename from SampleERCP/src/net/mograsim/rcp/handlers/SaveHandler.java rename to net.mograsim.rcp/src/net/mograsim/rcp/handlers/SaveHandler.java index a1a980ee..e662d6b8 100644 --- a/SampleERCP/src/net/mograsim/rcp/handlers/SaveHandler.java +++ b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/SaveHandler.java @@ -1,25 +1,25 @@ -package net.mograsim.rcp.handlers; - -import org.eclipse.e4.core.di.annotations.CanExecute; -import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.e4.ui.workbench.modeling.EPartService; - -public class SaveHandler -{ - - @CanExecute - public boolean canExecute(EPartService partService) - { - if (partService != null) - { - return !partService.getDirtyParts().isEmpty(); - } - return false; - } - - @Execute - public void execute(EPartService partService) - { - partService.saveAll(false); - } +package net.mograsim.rcp.handlers; + +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.ui.workbench.modeling.EPartService; + +public class SaveHandler +{ + + @CanExecute + public boolean canExecute(EPartService partService) + { + if (partService != null) + { + return !partService.getDirtyParts().isEmpty(); + } + return false; + } + + @Execute + public void execute(EPartService partService) + { + partService.saveAll(false); + } } \ No newline at end of file diff --git a/SampleERCP/src/net/mograsim/rcp/parts/LogicUIPart.java b/net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java similarity index 100% rename from SampleERCP/src/net/mograsim/rcp/parts/LogicUIPart.java rename to net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java diff --git a/SampleERCP/src/net/mograsim/rcp/parts/SamplePart.java b/net.mograsim.rcp/src/net/mograsim/rcp/parts/SamplePart.java similarity index 96% rename from SampleERCP/src/net/mograsim/rcp/parts/SamplePart.java rename to net.mograsim.rcp/src/net/mograsim/rcp/parts/SamplePart.java index 14b32ad0..0bbe8aac 100644 --- a/SampleERCP/src/net/mograsim/rcp/parts/SamplePart.java +++ b/net.mograsim.rcp/src/net/mograsim/rcp/parts/SamplePart.java @@ -1,61 +1,61 @@ -package net.mograsim.rcp.parts; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.PostConstruct; -import javax.inject.Inject; - -import org.eclipse.e4.ui.di.Focus; -import org.eclipse.e4.ui.di.Persist; -import org.eclipse.e4.ui.model.application.ui.basic.MPart; -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Text; - -public class SamplePart -{ - - private TableViewer tableViewer; - - @Inject - private MPart part; - - @PostConstruct - public void createComposite(Composite parent) - { - parent.setLayout(new GridLayout(1, false)); - - Text txtInput = new Text(parent, SWT.BORDER); - txtInput.setMessage("Enter text to mark part as dirty"); - txtInput.addModifyListener(e -> part.setDirty(true)); - txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - tableViewer = new TableViewer(parent); - - tableViewer.setContentProvider(ArrayContentProvider.getInstance()); - tableViewer.setInput(createInitialDataModel()); - tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); - } - - @Focus - public void setFocus() - { - tableViewer.getTable().setFocus(); - } - - @Persist - public void save() - { - part.setDirty(false); - } - - private static List createInitialDataModel() - { - return Arrays.asList("Sample item 1", "Sample item 2", "Sample item 3", "Sample item 4", "Sample item 5"); - } +package net.mograsim.rcp.parts; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import org.eclipse.e4.ui.di.Focus; +import org.eclipse.e4.ui.di.Persist; +import org.eclipse.e4.ui.model.application.ui.basic.MPart; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; + +public class SamplePart +{ + + private TableViewer tableViewer; + + @Inject + private MPart part; + + @PostConstruct + public void createComposite(Composite parent) + { + parent.setLayout(new GridLayout(1, false)); + + Text txtInput = new Text(parent, SWT.BORDER); + txtInput.setMessage("Enter text to mark part as dirty"); + txtInput.addModifyListener(e -> part.setDirty(true)); + txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + tableViewer = new TableViewer(parent); + + tableViewer.setContentProvider(ArrayContentProvider.getInstance()); + tableViewer.setInput(createInitialDataModel()); + tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); + } + + @Focus + public void setFocus() + { + tableViewer.getTable().setFocus(); + } + + @Persist + public void save() + { + part.setDirty(false); + } + + private static List createInitialDataModel() + { + return Arrays.asList("Sample item 1", "Sample item 2", "Sample item 3", "Sample item 4", "Sample item 5"); + } } \ No newline at end of file diff --git a/SampleERCP/src/net/mograsim/rcp/splashhandlers/ExtensibleSplashHandler.java b/net.mograsim.rcp/src/net/mograsim/rcp/splashhandlers/ExtensibleSplashHandler.java similarity index 96% rename from SampleERCP/src/net/mograsim/rcp/splashhandlers/ExtensibleSplashHandler.java rename to net.mograsim.rcp/src/net/mograsim/rcp/splashhandlers/ExtensibleSplashHandler.java index 8ed18d3e..17d4ea5e 100644 --- a/SampleERCP/src/net/mograsim/rcp/splashhandlers/ExtensibleSplashHandler.java +++ b/net.mograsim.rcp/src/net/mograsim/rcp/splashhandlers/ExtensibleSplashHandler.java @@ -1,328 +1,328 @@ -package net.mograsim.rcp.splashhandlers; - -import java.util.ArrayList; -import java.util.Iterator; - -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.eclipse.ui.splash.AbstractSplashHandler; - -/** - * @since 3.3 - * - */ -public class ExtensibleSplashHandler extends AbstractSplashHandler -{ - - private ArrayList fImageList; - - private ArrayList fTooltipList; - - private static final String F_SPLASH_EXTENSION_ID = "Sample.splashExtension"; // NON-NLS-1 - - private static final String F_ELEMENT_ICON = "icon"; // NON-NLS-1 - - private static final String F_ELEMENT_TOOLTIP = "tooltip"; // NON-NLS-1 - - private static final String F_DEFAULT_TOOLTIP = "Image"; // NON-NLS-1 - - private static final int F_IMAGE_WIDTH = 50; - - private static final int F_IMAGE_HEIGHT = 50; - - private static final int F_SPLASH_SCREEN_BEVEL = 5; - - private Composite fIconPanel; - - /** - * - */ - public ExtensibleSplashHandler() - { - fImageList = new ArrayList<>(); - fTooltipList = new ArrayList<>(); - fIconPanel = null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.splash.AbstractSplashHandler#init(org.eclipse.swt.widgets. Shell) - */ - @Override - public void init(Shell splash) - { - // Store the shell - super.init(splash); - // Configure the shell layout - configureUISplash(); - // Load all splash extensions - loadSplashExtensions(); - // If no splash extensions were loaded abort the splash handler - if (!hasSplashExtensions()) - { - return; - } - // Create UI - createUI(); - // Configure the image panel bounds - configureUICompositeIconPanelBounds(); - // Enter event loop and prevent the RCP application from - // loading until all work is done - doEventLoop(); - } - - /** - * @return - */ - private boolean hasSplashExtensions() - { - return !fImageList.isEmpty(); - } - - /** - * - */ - private void createUI() - { - // Create the icon panel - createUICompositeIconPanel(); - // Create the images - createUIImages(); - } - - /** - * - */ - private void createUIImages() - { - Iterator imageIterator = fImageList.iterator(); - Iterator tooltipIterator = fTooltipList.iterator(); - int i = 1; - int columnCount = ((GridLayout) fIconPanel.getLayout()).numColumns; - // Create all the images - // Abort if we run out of columns (left-over images will not fit within - // the usable splash screen width) - while (imageIterator.hasNext() && (i <= columnCount)) - { - Image image = imageIterator.next(); - String tooltip = tooltipIterator.next(); - // Create the image using a label widget - createUILabel(image, tooltip); - i++; - } - } - - /** - * @param image - * @param tooltip - */ - private void createUILabel(Image image, String tooltip) - { - // Create the label (no text) - Label label = new Label(fIconPanel, SWT.NONE); - label.setImage(image); - label.setToolTipText(tooltip); - } - - /** - * - */ - private void createUICompositeIconPanel() - { - Shell splash = getSplash(); - // Create the composite - fIconPanel = new Composite(splash, SWT.NONE); - // Determine the maximum number of columns that can fit on the splash - // screen. One 50x50 image per column. - int maxColumnCount = getUsableSplashScreenWidth() / F_IMAGE_WIDTH; - // Limit size to the maximum number of columns if the number of images - // exceed this amount; otherwise, use the exact number of columns - // required. - int actualColumnCount = Math.min(fImageList.size(), maxColumnCount); - // Configure the layout - GridLayout layout = new GridLayout(actualColumnCount, true); - layout.horizontalSpacing = 0; - layout.verticalSpacing = 0; - layout.marginHeight = 0; - layout.marginWidth = 0; - fIconPanel.setLayout(layout); - } - - /** - * - */ - private void configureUICompositeIconPanelBounds() - { - // Determine the size of the panel and position it at the bottom-right - // of the splash screen. - Point panelSize = fIconPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); - - int xCoord = getSplash().getSize().x - F_SPLASH_SCREEN_BEVEL - panelSize.x; - int yCoord = getSplash().getSize().y - F_SPLASH_SCREEN_BEVEL - panelSize.y; - int xWidth = panelSize.x; - int yWidth = panelSize.y; - - fIconPanel.setBounds(xCoord, yCoord, xWidth, yWidth); - } - - /** - * @return - */ - private int getUsableSplashScreenWidth() - { - // Splash screen width minus two graphic border bevel widths - return getSplash().getSize().x - (F_SPLASH_SCREEN_BEVEL * 2); - } - - /** - * - */ - private void loadSplashExtensions() - { - // Get all splash handler extensions - IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint(F_SPLASH_EXTENSION_ID).getExtensions(); - // Process all splash handler extensions - for (int i = 0; i < extensions.length; i++) - { - processSplashExtension(extensions[i]); - } - } - - /** - * @param extension - */ - private void processSplashExtension(IExtension extension) - { - // Get all splash handler configuration elements - IConfigurationElement[] elements = extension.getConfigurationElements(); - // Process all splash handler configuration elements - for (int j = 0; j < elements.length; j++) - { - processSplashElements(elements[j]); - } - } - - /** - * @param configurationElement - */ - private void processSplashElements(IConfigurationElement configurationElement) - { - // Attribute: icon - processSplashElementIcon(configurationElement); - // Attribute: tooltip - processSplashElementTooltip(configurationElement); - } - - /** - * @param configurationElement - */ - private void processSplashElementTooltip(IConfigurationElement configurationElement) - { - // Get attribute tooltip - String tooltip = configurationElement.getAttribute(F_ELEMENT_TOOLTIP); - // If a tooltip is not defined, give it a default - if ((tooltip == null) || (tooltip.length() == 0)) - { - fTooltipList.add(F_DEFAULT_TOOLTIP); - } else - { - fTooltipList.add(tooltip); - } - } - - /** - * @param configurationElement - */ - private void processSplashElementIcon(IConfigurationElement configurationElement) - { - // Get attribute icon - String iconImageFilePath = configurationElement.getAttribute(F_ELEMENT_ICON); - // Abort if an icon attribute was not specified - if ((iconImageFilePath == null) || (iconImageFilePath.length() == 0)) - { - return; - } - // Create a corresponding image descriptor - ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(configurationElement.getNamespaceIdentifier(), - iconImageFilePath); - // Abort if no corresponding image was found - if (descriptor == null) - { - return; - } - // Create the image - Image image = descriptor.createImage(); - // Abort if image creation failed - if (image == null) - { - return; - } - // Abort if the image does not have dimensions of 50x50 - if ((image.getBounds().width != F_IMAGE_WIDTH) || (image.getBounds().height != F_IMAGE_HEIGHT)) - { - // Dipose of the image - image.dispose(); - return; - } - // Store the image and tooltip - fImageList.add(image); - } - - /** - * - */ - private void configureUISplash() - { - // Configure layout - GridLayout layout = new GridLayout(1, true); - getSplash().setLayout(layout); - // Force shell to inherit the splash background - getSplash().setBackgroundMode(SWT.INHERIT_DEFAULT); - } - - /** - * - */ - private void doEventLoop() - { - Shell splash = getSplash(); - if (!splash.getDisplay().readAndDispatch()) - { - splash.getDisplay().sleep(); - } - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.splash.AbstractSplashHandler#dispose() - */ - @Override - public void dispose() - { - super.dispose(); - // Check to see if any images were defined - if ((fImageList == null) || fImageList.isEmpty()) - { - return; - } - // Dispose of all the images - Iterator iterator = fImageList.iterator(); - while (iterator.hasNext()) - { - Image image = iterator.next(); - image.dispose(); - } - } -} +package net.mograsim.rcp.splashhandlers; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.ui.splash.AbstractSplashHandler; + +/** + * @since 3.3 + * + */ +public class ExtensibleSplashHandler extends AbstractSplashHandler +{ + + private ArrayList fImageList; + + private ArrayList fTooltipList; + + private static final String F_SPLASH_EXTENSION_ID = "Sample.splashExtension"; // NON-NLS-1 + + private static final String F_ELEMENT_ICON = "icon"; // NON-NLS-1 + + private static final String F_ELEMENT_TOOLTIP = "tooltip"; // NON-NLS-1 + + private static final String F_DEFAULT_TOOLTIP = "Image"; // NON-NLS-1 + + private static final int F_IMAGE_WIDTH = 50; + + private static final int F_IMAGE_HEIGHT = 50; + + private static final int F_SPLASH_SCREEN_BEVEL = 5; + + private Composite fIconPanel; + + /** + * + */ + public ExtensibleSplashHandler() + { + fImageList = new ArrayList<>(); + fTooltipList = new ArrayList<>(); + fIconPanel = null; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.splash.AbstractSplashHandler#init(org.eclipse.swt.widgets. Shell) + */ + @Override + public void init(Shell splash) + { + // Store the shell + super.init(splash); + // Configure the shell layout + configureUISplash(); + // Load all splash extensions + loadSplashExtensions(); + // If no splash extensions were loaded abort the splash handler + if (!hasSplashExtensions()) + { + return; + } + // Create UI + createUI(); + // Configure the image panel bounds + configureUICompositeIconPanelBounds(); + // Enter event loop and prevent the RCP application from + // loading until all work is done + doEventLoop(); + } + + /** + * @return + */ + private boolean hasSplashExtensions() + { + return !fImageList.isEmpty(); + } + + /** + * + */ + private void createUI() + { + // Create the icon panel + createUICompositeIconPanel(); + // Create the images + createUIImages(); + } + + /** + * + */ + private void createUIImages() + { + Iterator imageIterator = fImageList.iterator(); + Iterator tooltipIterator = fTooltipList.iterator(); + int i = 1; + int columnCount = ((GridLayout) fIconPanel.getLayout()).numColumns; + // Create all the images + // Abort if we run out of columns (left-over images will not fit within + // the usable splash screen width) + while (imageIterator.hasNext() && (i <= columnCount)) + { + Image image = imageIterator.next(); + String tooltip = tooltipIterator.next(); + // Create the image using a label widget + createUILabel(image, tooltip); + i++; + } + } + + /** + * @param image + * @param tooltip + */ + private void createUILabel(Image image, String tooltip) + { + // Create the label (no text) + Label label = new Label(fIconPanel, SWT.NONE); + label.setImage(image); + label.setToolTipText(tooltip); + } + + /** + * + */ + private void createUICompositeIconPanel() + { + Shell splash = getSplash(); + // Create the composite + fIconPanel = new Composite(splash, SWT.NONE); + // Determine the maximum number of columns that can fit on the splash + // screen. One 50x50 image per column. + int maxColumnCount = getUsableSplashScreenWidth() / F_IMAGE_WIDTH; + // Limit size to the maximum number of columns if the number of images + // exceed this amount; otherwise, use the exact number of columns + // required. + int actualColumnCount = Math.min(fImageList.size(), maxColumnCount); + // Configure the layout + GridLayout layout = new GridLayout(actualColumnCount, true); + layout.horizontalSpacing = 0; + layout.verticalSpacing = 0; + layout.marginHeight = 0; + layout.marginWidth = 0; + fIconPanel.setLayout(layout); + } + + /** + * + */ + private void configureUICompositeIconPanelBounds() + { + // Determine the size of the panel and position it at the bottom-right + // of the splash screen. + Point panelSize = fIconPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); + + int xCoord = getSplash().getSize().x - F_SPLASH_SCREEN_BEVEL - panelSize.x; + int yCoord = getSplash().getSize().y - F_SPLASH_SCREEN_BEVEL - panelSize.y; + int xWidth = panelSize.x; + int yWidth = panelSize.y; + + fIconPanel.setBounds(xCoord, yCoord, xWidth, yWidth); + } + + /** + * @return + */ + private int getUsableSplashScreenWidth() + { + // Splash screen width minus two graphic border bevel widths + return getSplash().getSize().x - (F_SPLASH_SCREEN_BEVEL * 2); + } + + /** + * + */ + private void loadSplashExtensions() + { + // Get all splash handler extensions + IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint(F_SPLASH_EXTENSION_ID).getExtensions(); + // Process all splash handler extensions + for (int i = 0; i < extensions.length; i++) + { + processSplashExtension(extensions[i]); + } + } + + /** + * @param extension + */ + private void processSplashExtension(IExtension extension) + { + // Get all splash handler configuration elements + IConfigurationElement[] elements = extension.getConfigurationElements(); + // Process all splash handler configuration elements + for (int j = 0; j < elements.length; j++) + { + processSplashElements(elements[j]); + } + } + + /** + * @param configurationElement + */ + private void processSplashElements(IConfigurationElement configurationElement) + { + // Attribute: icon + processSplashElementIcon(configurationElement); + // Attribute: tooltip + processSplashElementTooltip(configurationElement); + } + + /** + * @param configurationElement + */ + private void processSplashElementTooltip(IConfigurationElement configurationElement) + { + // Get attribute tooltip + String tooltip = configurationElement.getAttribute(F_ELEMENT_TOOLTIP); + // If a tooltip is not defined, give it a default + if ((tooltip == null) || (tooltip.length() == 0)) + { + fTooltipList.add(F_DEFAULT_TOOLTIP); + } else + { + fTooltipList.add(tooltip); + } + } + + /** + * @param configurationElement + */ + private void processSplashElementIcon(IConfigurationElement configurationElement) + { + // Get attribute icon + String iconImageFilePath = configurationElement.getAttribute(F_ELEMENT_ICON); + // Abort if an icon attribute was not specified + if ((iconImageFilePath == null) || (iconImageFilePath.length() == 0)) + { + return; + } + // Create a corresponding image descriptor + ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(configurationElement.getNamespaceIdentifier(), + iconImageFilePath); + // Abort if no corresponding image was found + if (descriptor == null) + { + return; + } + // Create the image + Image image = descriptor.createImage(); + // Abort if image creation failed + if (image == null) + { + return; + } + // Abort if the image does not have dimensions of 50x50 + if ((image.getBounds().width != F_IMAGE_WIDTH) || (image.getBounds().height != F_IMAGE_HEIGHT)) + { + // Dipose of the image + image.dispose(); + return; + } + // Store the image and tooltip + fImageList.add(image); + } + + /** + * + */ + private void configureUISplash() + { + // Configure layout + GridLayout layout = new GridLayout(1, true); + getSplash().setLayout(layout); + // Force shell to inherit the splash background + getSplash().setBackgroundMode(SWT.INHERIT_DEFAULT); + } + + /** + * + */ + private void doEventLoop() + { + Shell splash = getSplash(); + if (!splash.getDisplay().readAndDispatch()) + { + splash.getDisplay().sleep(); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.splash.AbstractSplashHandler#dispose() + */ + @Override + public void dispose() + { + super.dispose(); + // Check to see if any images were defined + if ((fImageList == null) || fImageList.isEmpty()) + { + return; + } + // Dispose of all the images + Iterator iterator = fImageList.iterator(); + while (iterator.hasNext()) + { + Image image = iterator.next(); + image.dispose(); + } + } +} -- 2.17.1